PYTHON 用幾何布朗運動模型和蒙特卡羅MONTE CARLO隨機過程模擬|附代碼數據

2023-04-07     tecdat拓端

原標題:PYTHON 用幾何布朗運動模型和蒙特卡羅MONTE CARLO隨機過程模擬|附代碼數據

原文連結:http://tecdat.cn/?p=27099

最近我們被客戶要求撰寫關於蒙特卡羅的研究報告,包括一些圖形和統計輸出。

金融資產/證券已使用多種技術進行建模。該項目的主要目標是使用幾何布朗運動模型和蒙特卡羅模擬來模擬股票價格。該模型基於受乘性噪聲影響的隨機(與確定性相反)變量

該項目分兩部分完成:

模擬需要大約 10-15 分鐘才能完全運行。請注意,對模擬結果的所有解釋都是通過解釋價格水平和收益率的結果分布的均值和方差等參數來完成的。

假設

此項目中使用了以下變量和符號列表:

還對股票市場/價格做出了以下假設。雖然這些假設確實有助於大大簡化模型,但它們非常現實,有助於在理想情況下制定模型。

拓端

,贊9

拓端

,贊16

維納過程和幾何布朗運動

維納過程(也稱為布朗運動)是一個具有連續變量和連續時間的馬爾可夫過程。對於隨機變量 z,它有兩個重要的性質:

其中 ϵ 來自正態分布

通過將漂移項 a(x,t)dt 添加到隨機過程 dz 上,可以將維納過程進一步推廣到 Ito 過程。

對於股票價格,上述方程是 Ito 過程,也稱為幾何布朗運動,描述了隨時間的隨機變化。請注意,μ 和 σ 分別是瞬時漂移和標準偏差率。S 遵循一個受乘性噪聲影響的隨機過程。這裡還需要注意的是,幾何布朗運動模型避免了負股票價格的問題。

為股票價格的解決方案建模

上述隨機微分方程 (SDE) 具有以下形式的解析解:

請注意,在上述等式中,常數 μ 和 σ 分別對應於股票價格的百分比漂移(收益)和百分比波動(標準差)率。Wt 指的是由 dz=ϵdt 給出的維納過程,如上所述。該解方程用於以下列方式疊代計算每個時間步的 St:

這裡,t 是計算的時間步長,每個 St 僅取決於之前的起始價格 St−1,這是布朗運動模型所要求的,因為它是一個馬爾可夫過程。請注意,通過選擇一個小的時間步長,我們可以接近連續時間的極限。

因此,給定某個時間步長,隨後的每個股票價格 St 完全由三個參數描述:

下面的代碼實現了上面描述的疊代過程。時間步長由 dt 給出,對應於對股票價格進行採樣的頻率,N 是模擬運行的總天數。

#幾何布朗運動模型#使用mu=收益率#sigma=波動率#dt=時間步長#Si=每個時間段的初始(開始)價格值#價格和收益的時間演變#使用布朗運動模型來生成N天(時間段)的價格列表def gices(mu, sigma, dt, Si, N):

pirr = np.zeros(N) #初始化一個長度為N的向量來存儲價格值 pr_r[0] = Si #存儲第一個價格值

retrr = np.zeros(N) #初始化向量來存儲返回值

#還可以計算連續N之間的價格回報率 for i in range (1,N):

#注意price[i-1]是每次疊代的Si pr_arr[i] = geoeti_bown(mu, sigma, dt, price_arr[i-1])

運行單個模擬/步行

這部分代碼只是調用上面編寫的函數並繪製結果。給出了收益率和波動率、起始價格和時間步長的樣本值。以下數字按出現順序顯示:

在隨後的部分中進行了多次模擬,以實際驗證模型的正確性。

#運行單個模擬以檢查功能#使用 mu、sigma 和 Si 的樣本值進行測試#調用函數Slst, RitRlolist = gpes(mu, sigma, dt, Si, N)#繪製結果plt.figure(figsize=(15,5))

#用於獲取mu_multiple和sigma_multiple#將價格數組作為輸入並返回 mu 和 sigmadef v_tun(price_array):

mu_single = 0 sgm_sigle = 0

#計算模擬的平均收益率,mu和平均波動率,sigma musigle = np.mean(mu_temp)

sigmsile = np.std(mu_temp)

#Monte Carlo 模擬幾何布朗運動演化#運行幾個模擬來生成幾個可能的價格演變數組#用它來計算平均波動率和回報率def gmlie(mu, sigma, dt, Si, N, sim_count):

cacies = np.zeros(shape=(N,sim_count)) #創建一個數組來存儲模擬值 #對於 alc_res 數組,我們只關心值 #創建數組來存儲每個的mu和sigma的值 m_mutple = np.zeros(sim_count)

sigmmiple = np.zeros(sim_count)

vl = np.linspace(0,N-1,N)

#運行模擬並繪製每個價格演變的結果 plt.figure(figsize=(20,20))

點擊標題查閱往期內容

R語言幾何布朗運動GBM模擬股票價格優化建立期權定價用機率加權收益曲線可視化

左右滑動查看更多

01

02

03

04

檢查和測試多個模擬的代碼

上面的代碼包含一個函數,可以為幾何布朗運動描述的隨機遊走運行多個模擬。還編寫了另一個計算給定輸入數組的平均收益和波動率水平的函數。這兩個函數都用於生成幾個模擬/隨機遊走,如上圖所示。

上圖顯示了在相同起始價格、S0=100 和收益率和波動率、μ=0.2 和 σ=0.07 下運行的 500 次模擬圖。使用的時間步長為 dt=0.01,表示每天對股票價格進行頻繁抽樣。每條線代表使用前面描述的幾何布朗運動模型建模的樣本隨機遊走。然後通過繪製股票價格、收益和標準差的分布來分析使用這些模擬生成的數據。然後分析這些價格水平、收益和波動率的分布,以檢查其正確性和一致性。

從下面的第一張圖中可以看出,價格水平遵循近似對數正態分布。這實際上是一個預期的結果。解,St 是一個對數正態分布的隨機變量,其期望值和方差由下式給出:

從下面的第一幅圖中可以看出,對於 sim_count = 500 次模擬,價格水平確實近似於對數正態分布,平均值約為 200。使用 tats.lmfit 函數測量的均值和方差也與以上定義的值在合理的誤差範圍內。對於使用上面給出的參數的模擬運行,它們被計算為:

下面的第二張圖顯示了上面運行的模擬的收益率分布。可以很容易地觀察到,收益呈正態分布,平均值約為 0.15,這是模擬中 μ 的輸入值。這種收益率的正態分布也是布朗運動模型的預期結果。下面的第三張圖顯示了標準偏差率的分布,也可以觀察到其呈正態分布,平均值約為 0.07,這是模擬的 σ 輸入值。

因此,上述討論驗證了幾何布朗運動編碼模型確實按預期工作,並生成與模型的屬性和假設相對應的結果。自相似性也被證明適用於模型,其中不同的時間步長 dt 與調整後的 μ 和 σ 一起使用,以產生相似的價格水平和收益分布。這是模型的另一個預期結果,因為布朗運動在不同尺度上表現出分形行為。

#繪製價格水平和收益的分布以檢查代碼的有效性#價格水平應根據幾何布朗運動模型呈對數正態分布#Retu ate 和 Vlatiiy 應該是正態分布的#Plot 價格水平plt.figure(figsize=(15,5))#與下面給出的均值和標準差的對數正態分布進行比較logorman = Si*np.exp(mu*N*dt)logmvar = (Si**2)*np.exp(2*mu*N*dt)*(np.exp((sigma**2)*N*dt)-1)plt.plot(bns,lonm_dst,"g",lw=5) #繪製預期的對數正態密度分布#繪製收益和波動率分布plt.figure(figsize=(15,5))

print(lono_ean)print(np.sqrt(loomvr))

探索:使用真實股票數據測試模型

一旦模型被檢查為正常工作,它就會用真實的庫存數據進行測試。耐克 (NKE) 2013-2015 年的股價被用來回測該模型。並且使用上述幾何布朗運動模型運行 Monte Carlo 模擬。

以下值用於在兩年期間使用 NKE 的真實數據測試代碼。假設一年大約有 250 個工作日,N = 500 表示大約兩年的時間框架。通過將數據導入單獨的 .csv 文件並對股票價格的收益率和標準差進行所需的計算來計算收益率和波動率。

以下代碼調用函數以通過幾何布朗運動模型生成隨機遊走。

#使用這些價格計算回報率和波動率。pprint(k.geical('2013-01-01', '2015-01-01'))

#使用輸入參數的樣本值運行多個模擬dt = 0.01sim_count = 500#調用函數並運行模擬prie, mu_arr, sigrr = geiple(mu, sgma, dt, Si, N, icont)

在 [29] 中:lorm_ean = Si*np.exp(mu*N*dt)

解釋模擬結果

從上圖中生成的隨機遊走可以看出,我們在這裡使用的模型乍一看似乎產生了正確方向和近似幅度的價格演變。由於它是一個隨機遊走模型,重要的是要注意,結果只能解釋為價格水平或整體收益分布,而不是單個模擬。下面的代碼和數字為價格水平和收益率和波動率生成所需的分布圖。

首先需要注意的是,使用等式 E[St]=S0e(μNt) 的對數正態分布價格水平的計算平均值為 100.374。這位於真實值 98.6 的 5% 誤差範圍內,是使用 500 次模擬生成的。

其次,可以看出幾何布朗運動的所有性質都得到滿足——價格水平服從對數正態分布,收益率和波動率正態分布,均值對應於輸入參數值。

請注意,模擬還針對其他時間範圍和不同的股票價格運行,平均而言,該模型顯示的值在聖路易斯真實價值的 10% 以內。

#繪製價格水平的分布並返回以檢查真實數據的代碼#價格水平應根據幾何布朗運動模型呈對數正態分布#Return Rate 和 Volatility 應該是正態分布的#Plot 價格水平plt.hist(prestiple,bins=100,normed=1,label="R")#與下面給出的均值和標準差的對數正態分布進行比較lognorm_mean = Si*np.exp(mu*N*dt)lognorm_var = (Si**2)*np.exp(2*mu*N*dt)*(np.exp((sigma**2)*N*dt)-1)#繪製預期的對數正態密度分布#繪製收益和波動率分布plt.hist(mu_arr,bins=100,normed=1,label="R")

評論和結論

從生成的模擬結果可以看出,幾何布朗運動模型可以很好地使用上面討論的隨機過程來模擬股票價格。該模型首先被檢查以滿足幾何布朗運動的特性,然後用真實的股票價格數據進行回測。NKE 2013-2015 年的股票價格用於計算 μ 和 σ 的值,然後用於運行該期間的模擬。股票價格的模擬結果和真實價值在 5% 的誤差範圍內相似。

點擊文末 「閱讀原文」

獲取全文完整資料。

本文選自《PYTHON 用幾何布朗運動模型和蒙特卡羅MONTE CARLO隨機過程模擬股票價格可視化分析耐克NKE股價時間序列數據》。

點擊標題查閱往期內容

R語言做複雜金融產品的幾何布朗運動的模擬

MATLAB用COPULA模型進行蒙特卡洛(MONTE CARLO)模擬和擬合股票收益數據分析

python中的copula:Frank、Clayton和Gumbel copula模型估計與可視化R語言中的copula GARCH模型擬合時間序列並模擬分析

matlab使用Copula仿真優化市場風險數據VaR分析

R語言多元Copula GARCH 模型時間序列預測

R語言Copula函數股市相關性建模:模擬Random Walk(隨機遊走)

R語言實現 Copula 算法建模依賴性案例分析報告

R語言ARMA-GARCH-COPULA模型和金融時間序列案例

R語言基於copula的貝葉斯分層混合模型的診斷準確性研究

R語言COPULA和金融時間序列案例

matlab使用Copula仿真優化市場風險數據VaR分析

matlab使用Copula仿真優化市場風險

R語言多元CopulaGARCH模型時間序列預測

R語言Copula的貝葉斯非參數MCMC估計

R語言COPULAS和金融時間序列R語言乘法GARCH模型對高頻交易數據進行波動性預測

R語言GARCH-DCC模型和DCC(MVT)建模估計

Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模擬進行股價預測

R語言時間序列GARCH模型分析股市波動率

R語言ARMA-EGARCH模型、集成預測算法對SPX實際波動率進行預測

matlab實現MCMC的馬爾可夫轉換ARMA - GARCH模型估計

Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模擬進行股價預測

使用R語言對S&P500股票指數進行ARIMA + GARCH交易策略

R語言用多元ARMA,GARCH ,EWMA, ETS,隨機波動率SV模型對金融時間序列數據建模

R語言股票市場指數:ARMA-GARCH模型和對數收益率數據探索性分析

R語言多元Copula GARCH 模型時間序列預測

R語言使用多元AR-GARCH模型衡量市場風險

R語言中的時間序列分析模型:ARIMA-ARCH / GARCH模型分析股票價格

R語言用Garch模型和回歸模型對股票價格分析

GARCH(1,1),MA以及歷史模擬法的VaR比較

matlab估計arma garch 條件均值和方差模型

R語言ARMA-GARCH-COPULA模型和金融時間序列案例

文章來源: https://twgreatdaily.com/zh-hk/cd98b6f6f1cff4695ae550bf011290bc.html