拓端tecdat|R語言動量交易策略分析調(diào)整后的數(shù)據(jù)
原文鏈接:http://tecdat.cn/?p=18686
原文出處:拓端數(shù)據(jù)部落公眾號
用于動量策略中所謂的動量(Momentum),是指某一對象所具有的一種傾向于保持其原有屬性或特征的性質(zhì),也可以簡單理解成一種惰性(Inertia)。股票的動量,簡單地說就是漲的還會接著漲,跌的還會接著跌;過去漲得越猛,未來漲的也就越猛;過去跌得越狠,未來也會跌的越狠。
下面,本文將嘗試將動量策略應(yīng)用于調(diào)整后的數(shù)據(jù)(歷史價(jià)格,股息和拆分?jǐn)?shù)據(jù),以預(yù)測公司的未來或獲得市場見解):
#*****************************************************************
# 加載一天結(jié)束時(shí)的歷史數(shù)據(jù)
#*****************************************************************
# 股票代碼
tickers = '
AGG
DBC
EEM
EFA
'
getSymbols.extra(tickers, src = 'yahoo', from = '1970-01-01', env = data, set.symbolnames = T, auto.assign = T)
#*****************************************************************
# 構(gòu)建另一個(gè)不含股利的價(jià)格調(diào)整后的回測環(huán)境
#*****************************************************************
for(i in data$symbolnames) data.price[[i]] = adjustOHLC(data[[i]], symbol.name=i, adjust='split', use.Adjusted=F)
#*****************************************************************
# 調(diào)整價(jià)格
#*****************************************************************
for(i in data$symbolnames) data[[i]] = adjustOHLC(data[[i]], use.Adjusted=T)
prep(data, align='keep.all')
我們構(gòu)建了兩個(gè)環(huán)境:
包含拆分和股息調(diào)整后的價(jià)格
僅包含調(diào)整后的價(jià)格
#*****************************************************************
# 排名60天變化率
#******************************************************************
return = prices / mlag(prices,60) - 1
position.score = iif(return < 0, NA, return)
data$weight[period.ends0,] = ntop(position.score[period.ends1,], 1)
#*****************************************************************
# 60/120天的排名變化率
#******************************************************************
return = prices / mlag(prices,60) - 1 + prices / mlag(prices,120) - 1
position.score = iif(return < 0, NA, return)
data$weight[period.ends0,] = ntop(position.score[period.ends1, , 1)
#*****************************************************************
# 創(chuàng)建報(bào)表
#*****************************************************************
plot(models)

mom60 mom120
Period Jan2002 - Mar2015 Jan2002 - Mar2015
Cagr 18.05 15.47
Sharpe 0.89 0.76
DVR 0.85 0.7
R2 0.95 0.92
Volatility 21.26 22.21
MaxDD -33.49 -51.75
Exposure 94.36 94.36
Win.Percent 63.76 62.42
Avg.Trade 1.69 1.49
Profit.Factor 2.24 2
Num.Trades 149 149
models$mom60 weight entry.date exit.date nhold entry.price exit.price return
SPY 100 2013-06-28 2013-07-31 33 155.04 163.06 5.17
XLV 100 2013-07-31 2013-08-30 30 49.88 48.12 -3.53
XLV 100 2013-08-30 2013-09-30 31 48.12 49.66 3.20
FXI 100 2013-09-30 2013-10-31 31 35.92 36.40 1.34
EEM 100 2013-10-31 2013-11-29 29 41.16 41.05 -0.27
XLV 100 2013-11-29 2013-12-31 32 54.24 54.64 0.75
SPY 100 2013-12-31 2014-01-31 31 180.35 173.99 -3.53
XLV 100 2014-01-31 2014-02-28 28 55.16 58.59 6.22
IYR 100 2014-02-28 2014-03-31 31 65.72 65.81 0.14
IYR 100 2014-03-31 2014-04-30 30 65.81 67.81 3.04
EEM 100 2014-04-30 2014-05-30 30 40.42 41.62 2.97
EEM 100 2014-05-30 2014-06-30 31 41.62 42.62 2.40
IYR 100 2014-06-30 2014-07-31 31 70.41 70.33 -0.11
FXI 100 2014-07-31 2014-09-30 61 39.96 37.80 -5.41
UUP 100 2014-09-30 2014-10-31 31 22.87 23.09 0.96
XLV 100 2014-10-31 2014-11-28 28 67.02 69.35 3.48
XLV 100 2014-11-28 2014-12-31 33 69.35 68.38 -1.40
IYR 100 2014-12-31 2015-01-30 30 76.84 81.23 5.71
IYR 100 2015-01-30 2015-02-27 28 81.23 79.12 -2.60
FXI 100 2015-02-27 2015-03-30 31 43.76 44.74 2.24
接下來,我們考慮以下3種設(shè)置:
“已調(diào)整”-拆分和股息調(diào)整后的價(jià)格數(shù)據(jù)。信號和損益僅從調(diào)整后的數(shù)據(jù)時(shí)間序列中得出。
“實(shí)際”-僅使用拆分后的調(diào)整數(shù)據(jù),尚未對股息進(jìn)行調(diào)整。信號和損益僅從唯一的拆分調(diào)整后的數(shù)據(jù)時(shí)間序列中得出。
“混合”-使用“實(shí)際”時(shí)間序列生成信號,使用“調(diào)整”時(shí)間序列進(jìn)行損益計(jì)算。
#*****************************************************************
# 輔助函數(shù)
#******************************************************************
return = prices / mlag(prices,60) - 1
position.score = iif(return < 0, NA, return)
return = prices / mlag(prices,60) - 1 + prices / mlag(prices,120) - 1
position.score = iif(return < 0, NA, return)
models[[paste0('mom120',name)]] =run(data, clean.signal=F, commission = commission, trade.summary=T, silent=T)
models
#*****************************************************************
# 安裝
#******************************************************************
all.models = c(all.models, strategy(prices.adj, data, 'Adjusted'))
#*****************************************************************
# 創(chuàng)建報(bào)表
#*****************************************************************
plot(models

print(plotbt.strateg(models, make.plot=F,
mom60Adjusted mom60Actual mom60Hybrid
Period Jan2002 - Mar2015 Jan2002 - Mar2015 Jan2002 - Mar2015
Cagr 18.05 15.02 17.22
Sharpe 0.89 0.76 0.85
DVR 0.85 0.73 0.82
R2 0.95 0.96 0.96
Volatility 21.26 21.33 21.33
MaxDD -33.49 -35.99 -33.74
Exposure 94.36 92.44 92.44
Win.Percent 63.76 62.33 63.01
Avg.Trade 1.69 1.49 1.67
Profit.Factor 2.24 1.98 2.15
Num.Trades 149 146 146
plotbt(models, plotX = T, log = 'y'

print(plotstrategy)
mom120Adjusted mom120Actual mom120Hybrid
Period Jan2002 - Mar2015 Jan2002 - Mar2015 Jan2002 - Mar2015
Cagr 15.47 13.61 15.66
Sharpe 0.76 0.69 0.77
DVR 0.7 0.64 0.73
R2 0.92 0.92 0.94
Volatility 22.21 22.08 22.07
MaxDD -51.75 -49.93 -47.15
Exposure 94.36 92.47 92.47
Win.Percent 62.42 60.96 61.64
Avg.Trade 1.49 1.37 1.54
Profit.Factor 2 1.9 2.02
Num.Trades 149 146 146
經(jīng)調(diào)整后的數(shù)據(jù)表現(xiàn)優(yōu)于實(shí)際數(shù)據(jù)和混合數(shù)據(jù)。

最受歡迎的見解
1.用機(jī)器學(xué)習(xí)識別不斷變化的股市狀況—隱馬爾科夫模型(HMM)的應(yīng)用
2.R語言GARCH-DCC模型和DCC(MVT)建模估計(jì)
3.R語言實(shí)現(xiàn) Copula 算法建模依賴性案例分析報(bào)告
4.R語言COPULAS和金融時(shí)間序列數(shù)據(jù)VaR分析
5.R語言多元COPULA GARCH 模型時(shí)間序列預(yù)測
6.用R語言實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)預(yù)測股票實(shí)例
7.r語言預(yù)測波動率的實(shí)現(xiàn):ARCH模型與HAR-RV模型
8.R語言如何做馬爾科夫轉(zhuǎn)換模型markov switching model
9.matlab使用Copula仿真優(yōu)化市場風(fēng)險(xiǎn)
