如何使用Python通過蒙特卡洛模擬自動計算風險值(VaR)來管理投資組合或股票的金融風險。
VaR是 "風險價值 "的縮寫,是許多公司和銀行用來確定其公司內(nèi)部金融風險水平的工具。風險值是為公司的投資而計算的,也可能是為檢查銀行或公司所管理的投資組合的風險水平。
該計算可以被認為是一種統(tǒng)計方法。它也可以簡化為以下語句
風險值是在一定的概率水平(置信區(qū)間)下將產(chǎn)生的最小損失或在一定的概率水平下將實現(xiàn)的最大損失。
上圖顯示了一個公司在α%的置信水平下可能面臨的最大損失。在個人層面上,VaR可以幫助你預測或分析你的投資組合可能面臨的最大損失。
蒙特卡洛模型是Stanislaw Ulam和John Neumann的心血結(jié)晶,他們在第二次世界大戰(zhàn)后開發(fā)了這個模型。該模型是以摩納哥的一個賭博城市命名的,這是因為賭博中存在機會和隨機性。
蒙特卡洛模擬是一個概率模型,它使用產(chǎn)生的隨機變量與經(jīng)濟因素(期望收益率、波動率),來預測結(jié)果。該模型經(jīng)常被用來計算風險和不確定性。
我們現(xiàn)在使用蒙特卡洛模擬為資產(chǎn)組合生成一組預測收益,找出投資的風險值。
我們將首先通過導入所需的庫和函數(shù)
#導入所有需要的庫
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
為了我們項目的目的,我考慮了過去兩年的 股票。
for i in range(len): web.get_data(tickers\[i\]
stocks.tail()
下一步,我們將計算每個資產(chǎn)的組合權重??梢酝ㄟ^實現(xiàn)最大夏普比率來計算資產(chǎn)權重。
#年化收益率
historical_return(stocks)
#投資組合的樣本方差
sample_cov#夏普比率
EffFro(mu, Sigma, weight_bounds=(0,1)) #負數(shù)的權重界限允許做空股票
max_sharpe() #可以使用增加目標來確保單個股票的最小零權重
資產(chǎn)權重將被用于計算投資組合的期望收益。
#VaR計算
rx2 = \[\]#換為最大夏普比率的資產(chǎn)權重
list(sharpe.values())
現(xiàn)在,我們將把投資組合的股票價格轉(zhuǎn)換為累計收益,這也可以被視為本項目的持有期收益(HPR)。
tick = (tick +1).cumprod()
#畫出所有股票的累積/HPR的圖形
tick\[col\].plot()plt
現(xiàn)在,我們將挑選出每個資產(chǎn)的最新HPR,并使用.dot()函數(shù)將收益率與計算出的資產(chǎn)權重相乘。
sigma = pre.std()
price=price.dot(sh_wt) #計算加權值
在計算了投資組合的期望收益和波動率(期望收益的標準差)后,我們將設置并運行蒙特卡洛模擬。我使用的時間是1440(一天中的分鐘數(shù)),模擬運行20,000次。時間步長可以根據(jù)要求改變。我使用了一個95%的置信區(qū)間。
for j in range(20000): #20000次模擬運行(rtn/Time,sigma/ sqrt(Time),Time)
plt(np.percentile(daily_returns,5)
1440分鐘內(nèi)一天的收益范圍 | 紅色 - 最小損失 | 黑色 - 最小收益
將收益率的分布圖可視化,我們可以看到以下圖表
plt.hist(returns)
plt.show()
輸出上限和下限的準確值,并假設我們的投資組合價值為1000元,我們將計算出應該保留的資金數(shù)額彌補我們的最低損失。
print(percentile( returns,5),percentile( returns,95)) VaR - 在5%的概率下,最小損失為5.7%,同樣,在5%的概率下,收益可以高于15%
每天的最低損失是1.29%,概率為5%。
所得金額將標志著每天彌補你的損失所需的金額。這個結(jié)果也可以解釋為你的投資組合在5%的概率下將面臨的最低損失。
上面的方法顯示了我們?nèi)绾斡嬎阃顿Y組合的風險價值(VaR)。對于使用現(xiàn)代投資組合理論(MPT)計算一定數(shù)量的投資組合,有助于鞏固你對投資組合分析和優(yōu)化的理解。最后,VaR與蒙特卡洛模擬模型配合使用,也可用于通過股價預測損失和收益。這可以通過將產(chǎn)生的每日收益值與各自股票的最終價格相乘來實現(xiàn)。
聯(lián)系客服