关于算法:拓端tecdatR语言资产配置策略量化模型改进的移动平均线策略动态回测

30次阅读

共计 4359 个字符,预计需要花费 11 分钟才能阅读完成。

原文链接:http://tecdat.cn/?p=23141

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

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)

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)

我还包含了我对动静回测挪动平均线的尝试,但在这种模式下,并不实用。

#*****************************************************************
#  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)

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

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)

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

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

带状逻辑很容易实现,减少了收益。


最受欢迎的见解

1. 在 python 中应用 lstm 和 pytorch 进行工夫序列预测

2.python 中利用长短期记忆模型 lstm 进行工夫序列预测剖析

3. 应用 r 语言进行工夫序列(arima,指数平滑)剖析

4.r 语言多元 copula-garch- 模型工夫序列预测

5.r 语言 copulas 和金融工夫序列案例

6. 应用 r 语言随机稳定模型 sv 解决工夫序列中的随机稳定

7.r 语言工夫序列 tar 阈值自回归模型

8.r 语言 k -shape 工夫序列聚类办法对股票价格工夫序列聚类

9.python3 用 arima 模型进行工夫序列预测

正文完
 0