原文鏈接:http://tecdat.cn/?p=27099
金融資產/證券已使用多種技術進行建模。該項目的主要目標是使用幾何布朗運動模型和蒙特卡羅模擬來模擬股票價格。該模型基于受乘性噪聲影響的隨機(與確定性相反)變量(點擊文末“閱讀原文”獲取完整代碼數據)。
相關視頻
該項目分兩部分完成:
第一部分涉及為幾何布朗運動編寫代碼,并檢查和驗證它是否工作。這是使用 Python 中的幾個函數完成的,并使用迭代設置將后續股票價格建模為馬爾可夫鏈,給定初始起始價格 S0。驗證過程包括運行多個模擬或隨機游走樣本,然后檢查結果分布,以查看股票價格、收益和波動性是否滿足某些屬性和假設。
第二階段涉及探索,將模型實際應用于實際股票價格,并使用耐克股票的真實股票數據進行回測。模擬是通過獲取收益率 μ 和波動率 σ 的樣本值并觀察股票價格演變的模擬數據和真實數據之間的相關程度來完成的。
模擬需要大約 10-15 分鐘才能完全運行。請注意,對模擬結果的所有解釋都是通過解釋價格水平和收益率的結果分布的均值和方差等參數來完成的。
假設
此項目中使用了以下變量和符號列表:
S0 - 初始股票價格
St - 時間的股票價格,t
μ - 在特定時間段內平均的股票收益(漂移)率
σ - 在特定時間段內平均的股票波動率(標準差)
dt - 模擬的時間步長,對應于一天內股票價格采樣的頻率
N - 模擬的總天數。
r - 無風險利率,任何人都可以借/貸
還對股票市場/價格做出了以下假設。雖然這些假設確實有助于大大簡化模型,但它們非常現實,有助于在理想情況下制定模型。
股票價格遵循馬爾科夫過程,即是無記憶的,隨后的股票價格僅取決于當前價值,而不取決于任何先前的價值。
與 N 相比,考慮的時間步長 dt 較短,即 Ndt>>1
市場完整高效,不存在套利機會。
沒有股息、交易成本或稅收考慮。
維納過程和幾何布朗運動
維納過程(也稱為布朗運動)是一個具有連續變量和連續時間的馬爾可夫過程。對于隨機變量 z,它有兩個重要的性質:
所有的 Δz 都是統計獨立的。
dz = εdt
其中 ? 來自正態分布
通過將漂移項 a(x,t)dt 添加到隨機過程 dz 上,可以將維納過程進一步推廣到 Ito 過程。?
對于股票價格,上述方程是 Ito 過程,也稱為幾何布朗運動,描述了隨時間的隨機變化。請注意,μ 和 σ 分別是瞬時漂移和標準偏差率。S 遵循一個受乘性噪聲影響的隨機過程。這里還需要注意的是,幾何布朗運動模型避免了負股票價格的問題。
為股票價格的解決方案建模
上述隨機微分方程 (SDE) 具有以下形式的解析解:
請注意,在上述等式中,常數 μ 和 σ 分別對應于股票價格的百分比漂移(收益)和百分比波動(標準差)率。Wt 指的是由 dz=?dt 給出的維納過程,如上所述。該解方程用于以下列方式迭代計算每個時間步的 St:
這里,t 是計算的時間步長,每個 St 僅取決于之前的起始價格 St?1,這是布朗運動模型所要求的,因為它是一個馬爾可夫過程。請注意,通過選擇一個小的時間步長,我們可以接近連續時間的極限。
因此,給定某個時間步長,隨后的每個股票價格 St 完全由三個參數描述:
初始“開始”價格,St?1
百分比收益(漂移)率,μ
波動率或標準偏差率,σ
下面的代碼實現了上面描述的迭代過程。時間步長由 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\])
運行單個模擬/步行
這部分代碼只是調用上面編寫的函數并繪制結果。給出了收益率和波動率、起始價格和時間步長的樣本值。以下數字按出現順序顯示:
股票價格的演變,St 作為 N 的函數
股票價格水平的分布,繪制為直方圖。
收益和對數收益的分布,也繪制為直方圖。
在隨后的部分中進行了多次模擬,以實際驗證模型的正確性。
#運行單個模擬以檢查功能#使用 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 文件并對股票價格的收益率和標準差進行所需的計算來計算收益率和波動率。
截至 2013 年 1 月 2 日,起始價格 S0 為 52.4。兩年期末的預期價格 St 預計在 98.6 左右。
兩年年化收益率為 μ=0.13,這是使用雅虎財經歷史記錄生成的價格列表計算得出的。
兩年年化波動率也從價格中獲得,σ=0.05。
以下代碼調用函數以通過幾何布朗運動模型生成隨機游走。
#使用這些價格計算回報率和波動率。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模型和金融時間序列案例