0
点赞
收藏
分享

微信扫一扫

拓端tecdat|R语言动量和马科维茨Markowitz投资组合(Portfolio)模型实现

 

​​动量和马科维茨投资组合模型​​使 ​​均值方差优化​​ 组合成为可行的解决方案。通过建议并测试:

  • 增加最大权重限制
  • 增加目标波动率约束

来控制 ​​均值方差最优化的解​​。

下面,我将查看8个资产的结果:

首先,让我们加载所有历史数据

  1.  #*****************************************************************
  2.  # 加载历史数据
  3.   
  4.  #*****************************************************************
  5.   
  6.  load.packages('quantmod')
  7.   
  8.  # 加载保存的原始数据
  9.  #
  10.  load('raw.Rdata')
  11.   
  12.   
  13.   
  14.  getSymbols.extra(N8.tickers, src = 'yahoo', from = '1970-01-01', env = data, raw.data =
  15.  for(i in data$symbolnames) data[[i]] = adjustOHLC(data[[i]]
  16.   

接下来,让我们测试函数

  1.  #*****************************************************************
  2.  # 运行测试,每月数据
  3.  #*****************************************************************
  4.   
  5.  plot(scale.one(data$prices))

拓端tecdat|R语言动量和马科维茨Markowitz投资组合(Portfolio)模型实现_投资组合理论

 

  1.  prices = data$prices
  2.   
  3.  plotransition(res[[1]]['2013::'])

 

拓端tecdat|R语言动量和马科维茨Markowitz投资组合(Portfolio)模型实现_马科维茨_02

 

拓端tecdat|R语言动量和马科维茨Markowitz投资组合(Portfolio)模型实现_动量_03

接下来,让我们创建一个基准并设置用于所有测试。

  1.  #*****************************************************************
  2.  # 建立基准
  3.  #*****************************************************************
  4.  models = list()
  5.   
  6.  commission = list(cps = 0.01, fixed = 10.0, percentage = 0.0)
  7.   
  8.  data$weight[] = NA
  9.   
  10.  model = brun(data, clean.signal=T,

接下来,让我们获取权重,并使用它们来进行回测

  1.  #*****************************************************************
  2.  # 转换为模型结果
  3.  #*****************************************************************
  4.  CLA = list(weight = res[[1]], ret = res[[2]], equity = cumprod(1 + res[[2]]), type = "weight")
  5.   
  6.  obj = list(weights = list(CLA = res[[1]]), period.ends

我们可以复制相同的结果

  1.  #*****************************************************************
  2.  #进行复制
  3.  #*****************************************************************
  4.  weight.limit = data.frame(last(pric
  5.  obj = portfoli(data$prices,
  6.  periodicity = 'months', lookback.len = 12, silent=T,
  7.  const.ub = weight.limit,urns,1) + colSums(last(hist.returns,3)) +
  8.  colSums(last(hist.returns,6)) + colSums(last(hist.returns,12))) / 22
  9.  ia
  10.  },
  11.  min.risk.fns = list(
  12.  )
  13.   
  14.   

另一个想法是使用Pierre Chretien的平均输入假设

  1.  #*****************************************************************
  2.  # 让我们使用Pierre的平均输入假设
  3.  #*****************************************************************
  4.  obj = portfolio(data$prices,
  5.  periodicity = 'months', lookback.len = 12, si
  6.  create.ia.fn = create.(c(1,3,6,12), 0),
  7.  min.risk.fns = list(
  8.  TRISK.AVG = target.risk.portfolio(target.r
  9.  )
  10.   

最后,我们准备看一下结果

  1.  #*****************************************************************
  2.  #进行回测
  3.  #*****************************************************************
  4.   
  5.  plotb(models, plotX = T, log = 'y', Left

拓端tecdat|R语言动量和马科维茨Markowitz投资组合(Portfolio)模型实现_马科维茨_04

 

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

拓端tecdat|R语言动量和马科维茨Markowitz投资组合(Portfolio)模型实现_投资组合理论_05

使用平均输入假设会产生更好的结果。

我想应该注意的主要观点是:避免盲目使用优化。相反,您应该使解决方案更具有稳健性。

拓端tecdat|R语言动量和马科维茨Markowitz投资组合(Portfolio)模型实现_投资组合理论_06

举报

相关推荐

0 条评论