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