R語言動量和馬科維茨Markowitz投資組合(Portfolio)模型實現(xiàn)
原文鏈接:http://tecdat.cn/?p=17931?
原文出處:拓端數(shù)據(jù)部落公眾號
?
動量和馬科維茨投資組合模型使?均值方差優(yōu)化?組合成為可行的解決方案。通過建議并測試:
增加最大權(quán)重限制
增加目標(biāo)波動率約束
來控制?均值方差最優(yōu)化的解。
下面,我將查看8個資產(chǎn)的結(jié)果:
首先,讓我們加載所有歷史數(shù)據(jù)
#*****************************************************************
# 加載歷史數(shù)據(jù)
#*****************************************************************
load.packages('quantmod')
# 加載保存的原始數(shù)據(jù)
#
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]]
接下來,讓我們測試函數(shù)
#*****************************************************************
# 運行測試,每月數(shù)據(jù)
#*****************************************************************
plot(scale.one(data$prices))

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

?

接下來,讓我們創(chuàng)建一個基準(zhǔn)并設(shè)置用于所有測試。
#*****************************************************************
# 建立基準(zhǔn)
#*****************************************************************
models = list()
commission = list(cps = 0.01, fixed = 10.0, percentage = 0.0)
data$weight[] = NA
model = brun(data, clean.signal=T,
接下來,讓我們獲取權(quán)重,并使用它們來進行回測
#*****************************************************************
# ?轉(zhuǎn)換為模型結(jié)果
#*****************************************************************
CLA = list(weight = res[[1]], ret = res[[2]], equity = cumprod(1 + res[[2]]), type = "weight")
obj = list(weights = list(CLA = res[[1]]), period.ends
我們可以復(fù)制相同的結(jié)果
#*****************************************************************
#進行復(fù)制
#*****************************************************************
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的平均輸入假設(shè)
#*****************************************************************
# 讓我們使用Pierre的平均輸入假設(shè)
#*****************************************************************
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
)
最后,我們準(zhǔn)備看一下結(jié)果
#*****************************************************************
#進行回測
#*****************************************************************
plotb(models, plotX = T, log = 'y', Left

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

使用平均輸入假設(shè)會產(chǎn)生更好的結(jié)果。
我想應(yīng)該注意的主要觀點是:避免盲目使用優(yōu)化。相反,您應(yīng)該使解決方案更具有穩(wěn)健性。

最受歡迎的見解
1.用機器學(xué)習(xí)識別不斷變化的股市狀況—隱馬爾科夫模型(HMM)的應(yīng)用
2.R語言GARCH-DCC模型和DCC(MVT)建模估計
3.R語言實現(xiàn) Copula 算法建模依賴性案例分析報告
4.R語言COPULAS和金融時間序列數(shù)據(jù)VaR分析
5.R語言多元COPULA GARCH 模型時間序列預(yù)測
6.用R語言實現(xiàn)神經(jīng)網(wǎng)絡(luò)預(yù)測股票實例
7.r語言預(yù)測波動率的實現(xiàn):ARCH模型與HAR-RV模型
8.R語言如何做馬爾科夫轉(zhuǎn)換模型markov switching model
9.matlab使用Copula仿真優(yōu)化市場風(fēng)險