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

135 篇文章 7 订阅
6 篇文章 0 订阅

最近我们被要求撰写关于Markowitz的研究报告,包括一些图形和统计输出。

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

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

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

下面,我将查看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))

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
	)

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

#*****************************************************************
#进行回测
#*****************************************************************

plotb(models, plotX = T, log = 'y', Left

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

plot of chunk plot-8

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

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


最受欢迎的见解

1.用机器学习识别不断变化的股市状况—隐马尔科夫模型(HMM)的应用

2.R语言GARCH-DCC模型和DCC(MVT)建模估计

3.R语言实现 Copula 算法建模依赖性案例分析报告

4.R语言COPULAS和金融时间序列数据VaR分析

5.R语言多元COPULA GARCH 模型时间序列预测

6.用R语言实现神经网络预测股票实例

7.r语言预测波动率的实现:ARCH模型与HAR-RV模型

8.R语言如何做马尔科夫转换模型markov switching model

9.matlab使用Copula仿真优化市场风险

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值