R语言资产配置策略量化模型:改进的移动平均线策略动态回测

定量战术资产配置策略(QATAA)模型是使用10个月的移动平均线作为过滤器。

由Kaizong Ye,Liao Bao撰写

如果在月末,资产的价格高于移动平均线,就留在市场中;否则就会离开市场。

10个月有什么特别之处;为什么10个月对所有资产和区制都是不变的。我提出了根据历史波动率来调整移动平均线回溯的想法。

也就是说,在高波动时期,较短的移动平均线会让我们更快地离开市场,而在低波动时期,较长的移动平均线会让我们留在市场中。但是,这导致了更差的结果。

我花了一些时间分析基础的10个月移动平均线策略,看到了相当大的损失,简单的解决方法是在10个月移动平均线周围使用+/-5%的区间,以减少损失,增加收益。

下面我将展示这个概念是如何运作的。

#*****************************************************************
# 加载历史数据
#*****************************************************************


# 加载保存的代理原始数据


tickers = '
SPY
CASH = SHY + TB3Y
'

#*****************************************************************
# 用来显示信号的辅助函数
#*****************************************************************

  
  signal = iif(model == 'base', prices > sma,
  
  

  #基于信号创建一个模型
 
share(data, clean.signal=T, silent=T)

  # 创建一个图来显示信号

  plot(p\[dates\] ,type='l', plotX=F, x.highlight = highlight)


课程

R语言数据分析挖掘必知必会

从数据获取和清理开始,有目的的进行探索性分析与可视化。让数据从生涩的资料,摇身成为有温度的故事。

立即参加

visuali('2000::2001')

延迟进场/退场的好处是交易量少,成交量小。

#*****************************************************************
# 设置
#*****************************************************************

models = list()

#*****************************************************************
# SPY
#******************************************************************

run(data)

#*****************************************************************
#  SPY + 10个月过滤器
#******************************************************************
apply(prices, SMA, 10*22)
 
iif(prices > sma, 1, 0)
CASH = 1 - ifna( ifna(SPY), 0)

#*****************************************************************
# SPY+10个月+5/-5%过滤器
#******************************************************************
(cross(prices, sma * 1.05), (prices, sma * 0.95), 0, NA)

我还包括了我对动态回测移动平均线的尝试,但在这种形式下,并不实用。


TMA三均线股票期货高频交易策略的R语言实现

阅读文章


#*****************************************************************
#  SPY + 基于波动率的动态过滤器
#******************************************************************
vol = matrix(ret, SD, n = 21)
if(vol.rank < 0.5, bt(prices, SMA, 10\*22),matrix(prices, SMA, 1\*22))

data$w

#*****************************************************************
# SPY+基于波动率的动态过滤器;多个级别
#******************************************************************
nbreaks = 5

sma.cash = sma * NA
for(i in 1:nbreaks) {
    temp = data(matrix(prices, SMA, (nbreaks - i + 1)* 2 *22)

}


#*****************************************************************
# 报告
#*****************************************************************
plot(models)


随时关注您喜欢的主题


SPYSPY.CASHSPY.CASH.BANDSPY.CASH.VOL.SIMPLESPY.CASH.VOL
PeriodJan1993 – Feb2015Jan1993 – Feb2015Jan1993 – Feb2015Jan1993 – Feb2015Jan1993 – Feb2015
Cagr9.49.912.19.28
DVR41.978.391.483.874
Sharpe56.783.697.190.877.1
R273.993.794.192.396
Win.Percent10041.110045.743.3
Avg.Trade623.71.927.60.70.7
MaxDD-55.2-20.1-19.1-15.9-22.3
Num.Trades114612302254
barplot(turnover, data)

接下来,让我们把相同的带状策略应用于TAA模型。

#加载保存的代理原始数据

data <- new.env()

getSymbols(tickers, src = 'yahoo')

#*****************************************************************
#  设置
#*****************************************************************
universe = prices > 0
    
models = list()

#*****************************************************************
# 基准
#*****************************************************************
weight\[\] = NA

#*****************************************************************
#The \[战术性资产配置策略的量化方法(QATAA) Mebane T. Faber\](http://mebfaber.com/timing-model/)
#\[SSRN \](http://papers.ssrn.com/sol3/papers.cfm?abstract_id=962461)
#*****************************************************************

weight = iif(prices > sma, 20/100, 0)
run(data)

#*****************************************************************
#  bands替代方案 移动平均
#*****************************************************************
signal = if(cross(prices, sma * 1.05), 1, iif(cross.dn(prices, sma * 0.95), 0, NA))

#*****************************************************************
# 报告
#*****************************************************************
#performance(models, T)

带状逻辑很容易实现,增加了收益。

SP500EWModelModel.B
PeriodJun1996 – Feb2015Jun1996 – Feb2015Jun1996 – Feb2015Jun1996 – Feb2015
Cagr8.28.69.810.6
DVR28.764117.4127.9
Sharpe49.269.3120.4132.7
R258.492.497.596.5
Win.Percent10059.964.464.6
Avg.Trade335.70.10.20.2
MaxDD-55.2-47.5-17.1-13.1
Num.Trades11113930887
layout(1)
barplot(sapply(models,turnover)
plot of chunk plot-5


可下载资源

关于作者

Kaizong Ye拓端研究室(TRL)的研究员。在此对他对本文所作的贡献表示诚挚感谢,他在上海财经大学完成了统计学专业的硕士学位,专注人工智能领域。擅长Python.Matlab仿真、视觉处理、神经网络、数据分析。

本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。

​非常感谢您阅读本文,如需帮助请联系我们!

 
QQ在线咨询
售前咨询热线
15121130882
售后咨询热线
0571-63341498

关注有关新文章的微信公众号


永远不要错过任何见解。当新文章发表时,我们会通过微信公众号向您推送。

技术干货

最新洞察

This will close in 0 seconds