0
点赞
收藏
分享

微信扫一扫

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

定量战术资产配置策略(QATAA)模型是使用10个月的移动平均线作为过滤器。如果在月末,资产的价格高于移动平均线,就留在市场中;否则就会离开市场。

10个月有什么特别之处;为什么10个月对所有资产和区制都是不变的。我提出了根据历史波动率来调整移动平均线回溯的想法。也就是说,在高波动时期,较短的移动平均线会让我们更快地离开市场,而在低波动时期,较长的移动平均线会让我们留在市场中。但是,这导致了更差的结果。

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

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

1.  #*****************************************************************
2. # 加载历史数据
3. #*****************************************************************
4.
5.
6. # 加载保存的代理原始数据
7.
8.
9. tickers = '
10. SPY
11. CASH = SHY + TB3Y
12. '
13.
14. #*****************************************************************
15. # 用来显示信号的辅助函数
16. #*****************************************************************
17.
18.
19. signal = iif(model == 'base', prices > sma,
20.
21.
22.
23. #基于信号创建一个模型
24.
25. share(data, clean.signal=T, silent=T)
26.
27. # 创建一个图来显示信号
28.
29. plot(p[dates] ,type='l', plotX=F, x.highlight = highlight)

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

visuali('2000::2001')

拓端tecdat|R语言资产配置策略量化模型:改进的移动平均线策略动态回测_时间序列_02

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

1.  #*****************************************************************
2. # 设置
3. #*****************************************************************
4.
5. models = list()
6.
7. #*****************************************************************
8. # SPY
9. #******************************************************************
10.
11. run(data)
12.
13. #*****************************************************************
14. # SPY + 10个月过滤器
15. #******************************************************************
16. apply(prices, SMA, 10*22)
17.
18. iif(prices > sma, 1, 0)
19. CASH = 1 - ifna( ifna(SPY), 0)
20.
21. #*****************************************************************
22. # SPY+10个月+5/-5%过滤器
23. #******************************************************************
24. (cross(prices, sma * 1.05), (prices, sma * 0.95), 0, NA)
25.
我还包括了我对动态回测移动平均线的尝试,但在这种形式下,并不实用。
1. #*****************************************************************
2. # SPY + 基于波动率的动态过滤器
3. #******************************************************************
4. vol = matrix(ret, SD, n = 21)
5. if(vol.rank < 0.5, bt(prices, SMA, 10*22),matrix(prices, SMA, 1*22))
6.
7. data$w
8.
9. #*****************************************************************
10. # SPY+基于波动率的动态过滤器;多个级别
11. #******************************************************************
12. nbreaks = 5
13.
14. sma.cash = sma * NA
15. for(i in 1:nbreaks) {
16. temp = data(matrix(prices, SMA, (nbreaks - i + 1)* 2 *22)
17.
18. }
19.
20.
21. #*****************************************************************
22. # 报告
23. #*****************************************************************
24. plot(models)

拓端tecdat|R语言资产配置策略量化模型:改进的移动平均线策略动态回测_时间序列_03

 

SPY

SPY.CASH

SPY.CASH.BAND

SPY.CASH.VOL.SIMPLE

SPY.CASH.VOL

Period

Jan1993 - Feb2015

Jan1993 - Feb2015

Jan1993 - Feb2015

Jan1993 - Feb2015

Jan1993 - Feb2015

Cagr

9.4

9.9

12.1

9.2

8

DVR

41.9

78.3

91.4

83.8

74

Sharpe

56.7

83.6

97.1

90.8

77.1

R2

73.9

93.7

94.1

92.3

96

Win.Percent

100

41.1

100

45.7

43.3

Avg.Trade

623.7

1.9

27.6

0.7

0.7

MaxDD

-55.2

-20.1

-19.1

-15.9

-22.3

Num.Trades

1

146

12

302

254

  1.   
  2.  barplot(turnover, data)

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

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

1.  #加载保存的代理原始数据
2.
3. data <- new.env()
4.
5. getSymbols(tickers, src = 'yahoo')
6.
7. #*****************************************************************
8. # 设置
9. #*****************************************************************
10. universe = prices > 0
11.
12. models = list()
13.
14. #*****************************************************************
15. # 基准
16. #*****************************************************************
17. weight[] = NA
18.
19. #*****************************************************************
20. #The [战术性资产配置策略的量化方法(QATAA) Mebane T. Faber](http://mebfaber.com/timing-model/)
21. #[SSRN ](http://papers.ssrn.com/sol3/papers.cfm?abstract_id=962461)
22. #*****************************************************************
23.
24. weight = iif(prices > sma, 20/100, 0)
25. run(data)
26.
27. #*****************************************************************
28. # bands替代方案 移动平均
29. #*****************************************************************
30. signal = if(cross(prices, sma * 1.05), 1, iif(cross.dn(prices, sma * 0.95), 0, NA))
31.
32. #*****************************************************************
33. # 报告
34. #*****************************************************************
35. #performance(models, T)

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

 

SP500

EW

Model

Model.B

Period

Jun1996 - Feb2015

Jun1996 - Feb2015

Jun1996 - Feb2015

Jun1996 - Feb2015

Cagr

8.2

8.6

9.8

10.6

DVR

28.7

64

117.4

127.9

Sharpe

49.2

69.3

120.4

132.7

R2

58.4

92.4

97.5

96.5

Win.Percent

100

59.9

64.4

64.6

Avg.Trade

335.7

0.1

0.2

0.2

MaxDD

-55.2

-47.5

-17.1

-13.1

Num.Trades

1

1113

930

887

1.  layout(1)
2. barplot(sapply(models,turnover)

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

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

拓端tecdat|R语言资产配置策略量化模型:改进的移动平均线策略动态回测_时间序列_07

举报

相关推荐

0 条评论