R语言动量和马科维茨Markowitz投资组合模型实现

动量和马科维茨投资组合模型使 均值方差优化 组合成为可行的解决方案

由Kaizong Ye,Sherry Deng撰写

通过建议并测试:


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

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

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

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


#*****************************************************************
# 加载历史数据
#*****************************************************************
 
load.packages('quantmod')
 
# 加载保存的原始数据
#
load('raw.Rdata')
 
 
 
getSymbols.extra(N8.tickers, src = 'yahoo', from = '1970-01-01', env = data, raw.data = 
	for(i in data$symbolnames) data[[i]] = adjustOHLC(data[[i]]

接下来,让我们测试函数

 

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

视频

时间序列分析模型 ARIMA-ARCH GARCH模型分析股票价格数据

探索见解

去bilibili观看

探索更多视频

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

 

plot of chunk plot-3

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

 

#*****************************************************************
# 建立基准
#*****************************************************************
models = list()	
 
commission = list(cps = 0.01, fixed = 10.0, percentage = 0.0)
 
data$weight[] = NA
 
model = brun(data, clean.signal=T, 

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

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

我们可以复制相同的结果

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

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

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


R语言Markowitz马克维茨投资组合理论分析和可视化

阅读文章


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

#*****************************************************************
#进行回测
#*****************************************************************
 
plotb(models, plotX = T, log = 'y', Left
layout(1)
barplot(sapply(models, turnover, data)	


随时关注您喜欢的主题


plot of chunk plot-8

使用平均输入假设会产生更好的结果。我想应该注意的主要观点是:避免盲目使用优化。相反,您应该使解决方案更具有稳健性。


可下载资源

关于作者

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

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

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

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

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


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

技术干货

最新洞察

This will close in 0 seconds