日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

R语言blotter包回测实例

發(fā)布時(shí)間:2023/12/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 R语言blotter包回测实例 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

下面使用Faber策略,對(duì)招商銀行歷史數(shù)據(jù)進(jìn)行回測(cè)。 Faber策略是個(gè)非常簡(jiǎn)單的戰(zhàn)術(shù)資產(chǎn)配置方法: 如果月收盤(pán)價(jià)高于10月均線,買(mǎi)入; 如果月收盤(pán)價(jià)低于10月均線,賣(mài)出。 (忽略交易成本和滑點(diǎn))
http://static.squarespace.com/static/510654e4e4b0c3c708391d25/t/51dad95ee4b084dcc6296bad/1373296990025/mebanefaber_2013_full.pdf

初始化: 初始化一個(gè)現(xiàn)金和一個(gè)股票工具
currency("RMB")

stock("ZSYH", currency = "RMB", multiplier = 1)

ls(envir = FinancialInstrument:::.instrument) #設(shè)置 .instrument環(huán)境

get("RMB",envir = FinancialInstrument:::.instrument)

Sys.setenv(TZ = "UTC") #設(shè)立時(shí)區(qū)

ZSYH <- getSymbols("600036.ss", from = "2008-01-01", to = Sys.Date(), src = "yahoo",

??? auto.assign = FALSE)

ZSYH <- to.monthly(ZSYH, indexAt = "endof")

ZSYH$SMA10m <- SMA(Cl(ZSYH), 10)

?

#繪制月k線及10月均線

myTheme <- chart_theme()

myTheme$col$dn.col <- "lightgreen"

myTheme$col$up.col <- "lightblue"

myTheme$col$dn.border <- "grey"

myTheme$col$up.border <- "grey"

chart_Series(x = ZSYH, theme = myTheme, name = "ZSYH", TA = "add_SMA(n=10,col=4)")



?

#初始化組合和賬戶(hù)

b.strategy <- "bFaber"

initPortf(b.strategy, "ZSYH", initDate = "2007-12-31")

initAcct(b.strategy, portfolios = b.strategy, initDate = "2007-12-31", initEq = 1e+06) #初始的資金是1e6,即1000000

ls()

ls(.blotter)

ls(envir = FinancialInstrument:::.instrument)

#Bar-by-bar 處理: 交易規(guī)則的實(shí)現(xiàn)。在這個(gè)過(guò)程中實(shí)現(xiàn)組合和賬戶(hù)的更新。

for( i in 1:nrow(ZSYH) )

{

#對(duì)日期更新

CurrentDate <- time(ZSYH)[i]

equity<-getEndEq(b.strategy, CurrentDate)

ClosePrice <- as.numeric(Cl(ZSYH[i,]))

Posn <- getPosQty(b.strategy, Symbol='ZSYH', Date=CurrentDate)

UnitSize <-as.numeric(trunc(equity/ClosePrice))#全倉(cāng)

MA <- as.numeric(ZSYH[i,'SMA10m'])

#如有必要改變頭寸

if(!is.na(MA)) #如果移動(dòng)均線開(kāi)始

{

if( Posn == 0 ) {#沒(méi)有頭寸,測(cè)試是否買(mǎi)入

if( ClosePrice > MA ) {

#進(jìn)入多頭頭寸(買(mǎi)入)

addTxn(b.strategy, Symbol='ZSYH', TxnDate=CurrentDate,

TxnPrice=ClosePrice, TxnQty = UnitSize , TxnFees=0) }

} else {#有頭寸,檢測(cè)是否退出

if( ClosePrice < MA ) {

#退出頭寸

addTxn(b.strategy, Symbol='ZSYH', TxnDate=CurrentDate,

TxnPrice=ClosePrice, TxnQty = -Posn , TxnFees=0) }

}

}

#計(jì)算盈虧并更新

updatePortf(b.strategy, Dates = CurrentDate)

updateAcct(b.strategy, Dates = CurrentDate)

updateEndEq(b.strategy, Dates = CurrentDate)

}

結(jié)果如下:




注:這個(gè)例子是基于quantstrat包的demofaber.R來(lái)寫(xiě)的。

#評(píng)價(jià)交易表現(xiàn) chart.Posn函數(shù)可以繪出交易、頭寸、累計(jì)盈虧和回撤。 getTxns函數(shù)是成交統(tǒng)計(jì),輸出值包括成交量(股),成交價(jià)格,成交額(元),平均成本,盈虧 tradeStats函數(shù)是一個(gè)交易過(guò)程的統(tǒng)計(jì)。

chart.Posn(b.strategy, Symbol = "ZSYH", Dates = "2008::", theme = myTheme)

?

?


getTxns(Portfolio = b.strategy, Symbol = "ZSYH")


(tstats <- tradeStats(Portfolio = b.strategy, Symbol = "ZSYH"))

使用PerformanceAnalytics包來(lái)評(píng)價(jià)交易表現(xiàn)

library(PerformanceAnalytics)
rets <- PortfReturns(Account = b.strategy)
rownames(rets) <- NULL
charts.PerformanceSummary(rets, colorset = redfocus)


tab.perf <- table.Arbitrary(rets, metrics = c("Return.annualized", "SharpeRatio.annualized"),
????metricsNames = c("Annualized Return", "Annualized Sharpe Ratio"))
tab.perf #
計(jì)算年化回報(bào)和年化的夏普比



總結(jié)

以上是生活随笔為你收集整理的R语言blotter包回测实例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。