R語言馬科維茨Markowitz均值-方差(風(fēng)險(xiǎn)投資模型)分析最優(yōu)投資組合數(shù)據(jù)預(yù)期收益率可視
全文鏈接:https://tecdat.cn/?p=33146
原文出處:拓端數(shù)據(jù)部落公眾號
證券及其它風(fēng)險(xiǎn)資產(chǎn)的投資首先需要解決的是兩個(gè)核心問題:即預(yù)期收益與風(fēng)險(xiǎn)。 那么如何測定組合投資的風(fēng)險(xiǎn)與收益和如何平衡這兩項(xiàng)指標(biāo)進(jìn)行資產(chǎn)分配是市場投資者迫切需要解決的問題。正是在這樣的背景下,在50年代和60年代初,馬科維茨理論應(yīng)運(yùn)而生。
該理論依據(jù)以下幾個(gè)假設(shè):
投資者在考慮每一次投資選擇時(shí),其依據(jù)是某一持倉時(shí)間內(nèi)的證券收益的概率分布。
投資者是根據(jù)證券的期望收益率估測證券組合的風(fēng)險(xiǎn)。
投資者的決定僅僅是依據(jù)證券的風(fēng)險(xiǎn)和收益。
在一定的風(fēng)險(xiǎn)水平上,投資者期望收益最大;相對應(yīng)的是在一定的收益水平上,投資者希望風(fēng)險(xiǎn)最小。
根據(jù)以上假設(shè),馬科維茨確立了證券組合預(yù)期收益、風(fēng)險(xiǎn)的計(jì)算方法和有效邊界理論,建立了資產(chǎn)優(yōu)化配置的均值-方差模型(允許放空):
若不允許放空,則為:
隨著計(jì)算機(jī)技術(shù)的發(fā)展,利用現(xiàn)代統(tǒng)計(jì)學(xué)和編程語言進(jìn)行數(shù)據(jù)分析和投資組合優(yōu)化變得越來越普遍和容易。R語言作為一種功能強(qiáng)大的數(shù)據(jù)分析工具,提供了豐富的包和函數(shù)來支持馬科維茨均值-方差模型的實(shí)施和可視化。
本論文旨在幫助客戶使用R語言實(shí)現(xiàn)馬科維茨均值-方差模型,并通過可視化方式展示最優(yōu)投資組合的預(yù)期收益率隨時(shí)間變化的趨勢。
4個(gè)類別的股票收益率數(shù)據(jù):
類別1和類別2
讀取數(shù)據(jù)、進(jìn)行投資組合分析,并繪制預(yù)期收益率隨時(shí)間變化的圖表。
X0 = read.csv("sample1.csv")
讀取名為"sample1.csv"的CSV文件,并將其存儲(chǔ)在X0變量中。該文件包含了用于投資組合分析的數(shù)據(jù)。
nrow(X0)
計(jì)算X0數(shù)據(jù)集的行數(shù),即樣本數(shù)量。
library(fPortfolio) library(tseries)
提供了進(jìn)行投資組合分析和時(shí)間序列分析所需的函數(shù)和工具。
col = sample(2:ncol(X0), 5)
從X0數(shù)據(jù)集中隨機(jī)選擇5個(gè)列,將其索引存儲(chǔ)在變量col中。這些列將用于構(gòu)建投資組合。
X = timeSeries(X0[, col])
創(chuàng)建一個(gè)時(shí)間序列對象X,其中包含X0數(shù)據(jù)集的選定列。X將用于進(jìn)行投資組合分析。
Spec
MV Efficient Portfolio模型是指均值-方差效率組合模型(Mean-Variance Efficient Portfolio Model)。
該模型是由美國經(jīng)濟(jì)學(xué)家馬科維茨(Harry Markowitz)于1952年提出的,在投資組合理論中被廣泛應(yīng)用。
該模型的核心思想是通過最大化預(yù)期回報(bào)與最小化投資風(fēng)險(xiǎn)之間的權(quán)衡,構(gòu)建出在給定風(fēng)險(xiǎn)水平下收益最高的投資組合。
具體而言,該模型通過計(jì)算不同資產(chǎn)在組合中的權(quán)重,以及資產(chǎn)之間的相關(guān)性,進(jìn)而確定最優(yōu)投資組合。其中,均值是表示收益的期望值,方差則是衡量投資組合的風(fēng)險(xiǎn)。
在MV Efficient Portfolio模型中,投資者可以根據(jù)自身的風(fēng)險(xiǎn)承受能力和預(yù)期收益,選擇最優(yōu)的投資組合。通過將不同資產(chǎn)在投資組合中的權(quán)重調(diào)整,可以實(shí)現(xiàn)在給定風(fēng)險(xiǎn)范圍內(nèi)最大化投資回報(bào)。
然而,MV Efficient Portfolio模型也存在一些局限性,例如,它基于歷史數(shù)據(jù)來計(jì)算預(yù)期回報(bào)和風(fēng)險(xiǎn),并假設(shè)投資者的決策行為是理性的。同時(shí),它也沒有考慮到市場非理性行為和不確定性的因素。
盡管如此,MV Efficient Portfolio模型仍然是投資組合構(gòu)建和管理中的重要工具,為投資者提供了一種系統(tǒng)化的方法來優(yōu)化投資組合,平衡風(fēng)險(xiǎn)和回報(bào)。
創(chuàng)建了一個(gè)對象Spec,并通過平均值設(shè)置了目標(biāo)收益率。Spec包含了投資組合分析的規(guī)格和參數(shù)。通過mean(colMeans(X))計(jì)算出選定列的平均收益率,并將其設(shè)為目標(biāo)收益率。
Constraints = "Long Only"Constraints
定義了一個(gè)約束條件"Long Only",表示投資組合只能持有多頭頭寸(不能賣空)。
X = na.omit(X)
刪除X中包含缺失值的行。
eo = efficientPortfolio(X, Spec, Constraints)eo
用X、Spec和Constraints作為參數(shù),來執(zhí)行投資組合優(yōu)化分析,并將結(jié)果存儲(chǔ)在eo變量中。
jo = getTrgtetrn(eo)fo = gergRsk(eo)qo = geeihts(eo)qo
分別將eo對象的目標(biāo)收益率、目標(biāo)風(fēng)險(xiǎn)和資產(chǎn)權(quán)重存儲(chǔ)在jo、fo和qo變量中。
ex = t(too) * qoex
計(jì)算投資組合預(yù)期收益率ex,通過矩陣乘法將too轉(zhuǎn)置后與權(quán)重qo相乘。
exr = apply(ex, 2, sum)exr
對ex的每一列求和,得到預(yù)期收益率的向量exr。
以上包含了讀取數(shù)據(jù)、投資組合分析的過程。
對第二個(gè)類數(shù)據(jù)集進(jìn)行分析:
讀取名為"sample2.csv"的CSV文件,并將其存儲(chǔ)在變量X0中。然后,計(jì)算X0數(shù)據(jù)集的行數(shù),并加載了兩個(gè)R包:fPortfolio和tseries。最后,根據(jù)隨機(jī)選擇的列索引,創(chuàng)建一個(gè)時(shí)間序列對象X,其中包含了X0數(shù)據(jù)集的選定列。
X0 = read.csv("sample2.csv")
讀取名為"sample2.csv"的CSV文件,并將其存儲(chǔ)在X0變量中。該文件包含了用于后續(xù)操作的數(shù)據(jù)。
nrow(X0)
計(jì)算X0數(shù)據(jù)集的行數(shù),即樣本數(shù)量。
library(fPofoio) library(tsrie)
加載了兩個(gè)R包。它們提供了進(jìn)行投資組合分析和時(shí)間序列分析所需的函數(shù)和工具。
col = sample(2:ncol(X0), 5)
從X0數(shù)據(jù)集中隨機(jī)選擇5個(gè)列,將這些列的索引存儲(chǔ)在變量col中。這些列將用于構(gòu)建時(shí)間序列對象X。
X = timeSeries(X0[, col])
創(chuàng)建一個(gè)時(shí)間序列對象X,其中包含了X0數(shù)據(jù)集的選定列。X將用于后續(xù)操作。
這段代碼包含了一個(gè)循環(huán),每次循環(huán)都會(huì)進(jìn)行投資組合分析并繪制預(yù)期收益率隨時(shí)間變化的折線圖。下面是對應(yīng)代碼的解釋:
Spec = potolSpec()
創(chuàng)建一個(gè)對象Spec,表示投資組合的規(guī)格和參數(shù)。
setTargetReturn(Spec) = mean(colMeans(X))
設(shè)置Spec對象的目標(biāo)收益率為選定列的平均收益率。
Spec
輸出Spec對象,顯示投資組合的規(guī)格和參數(shù)。
Constants = "Long Only"
定義一個(gè)約束條件"Long Only",表示投資組合只能持有多頭頭寸(不能賣空)。
Constraints
輸出約束條件,顯示約束條件的內(nèi)容。
X = na.omit(X)
刪除X中包含缺失值的行。
eo = efficientPortfolio(X, Spec, Constraints); eo
執(zhí)行投資組合優(yōu)化分析,并將結(jié)果存儲(chǔ)在eo變量中。
jo = getTargetReturn(eo)
獲取eo對象的目標(biāo)收益率,并將其存儲(chǔ)在jo變量中。
fo = gtTrgeRsk(eo)
獲取eo對象的目標(biāo)風(fēng)險(xiǎn),并將其存儲(chǔ)在fo變量中。
qo = geWigts(eo); qo
獲取eo對象的資產(chǎn)權(quán)重,并將其存儲(chǔ)在qo變量中。
選擇X的最后30行(即最近30個(gè)時(shí)間點(diǎn))作為變量too存儲(chǔ)。
ex = t(too) * qo; ex
將too轉(zhuǎn)置后與權(quán)重qo相乘,得到投資組合預(yù)期收益率ex。
對ex的每一列求和,得到預(yù)期收益率的向量exr。
pt = 1:30
?創(chuàng)建一個(gè)長度為30的向量pt,用于表示橫軸上的日期。
lines(exr, lty = 1, col = 2, lwd = 1)
使用lines函數(shù)繪制exr的折線圖,并指定線型、顏色和線寬。
整個(gè)代碼段是一個(gè)循環(huán),會(huì)重復(fù)執(zhí)行下面的代碼塊100次:
col = sample(1:ncol(X0), 5)X = timeSeries(X0[,col])# 中間省略部分相同的代碼...
在每次循環(huán)中,隨機(jī)選擇5個(gè)列,創(chuàng)建時(shí)間序列對象X,進(jìn)行投資組合分析,并繪制預(yù)期收益率隨時(shí)間變化的折線圖。
把兩個(gè)類別的投資組合預(yù)期收益率進(jìn)行對比
類別1和3
setTargetReturlMeans(X)) ?Spec
eo=efficientPo
X0=read.csv("sample3.csv")setTargetReturn(SSpec
eo=efficientPo
把兩個(gè)類別的投資組合預(yù)期收益率進(jìn)行對比
plot(pt,exr ,xlab="date",ylab="expected return of P2 and P3",pch=16,type="l" ) lines(exr,lty=1, lwd=1,col=2)
類別2和3
類別2:
setTargetReturn(Spec)=mean(colMeans(X)) ?Spec
MV Efficient Portfolio模型
類別3:
把兩個(gè)類別的投資組合預(yù)期收益率進(jìn)行對比
類別1和4
eo=efficientPortf
類別1:?
類別2:
把兩個(gè)類別的投資組合預(yù)期收益率進(jìn)行對比
?最受歡迎的見解
1.R語言對S&P500股票指數(shù)進(jìn)行ARIMA + GARCH交易策略
2.R語言改進(jìn)的股票配對交易策略分析SPY—TLT組合和中國股市投資組合
3.R語言時(shí)間序列:ARIMA GARCH模型的交易策略在外匯市場預(yù)測應(yīng)用
4.TMA三均線期指高頻交易策略的R語言實(shí)現(xiàn)
5.r語言多均線量化策略回測比較
6.用R語言實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)預(yù)測股票實(shí)例
7.r語言預(yù)測波動(dòng)率的實(shí)現(xiàn):ARCH模型與HAR-RV模型
8.R語言如何做馬爾科夫轉(zhuǎn)換模型markov switching model
9.matlab使用Copula仿真優(yōu)化市場風(fēng)險(xiǎn)
R語言馬科維茨Markowitz均值-方差(風(fēng)險(xiǎn)投資模型)分析最優(yōu)投資組合數(shù)據(jù)預(yù)期收益率可視的評論 (共 條)
