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


原文鏈接:http://tecdat.cn/?p=27099

金融資產/證券已使用多種技術進行建模。該項目的主要目標是使用幾何布朗運動模型和蒙特卡羅模擬來模擬股票價格。該模型基于受乘性噪聲影響的隨機(與確定性相反)變量點擊文末“閱讀原文”獲取完整代碼數據)。

相關視頻

該項目分兩部分完成:

  1. 第一部分涉及為幾何布朗運動編寫代碼,并檢查和驗證它是否工作。這是使用 Python 中的幾個函數完成的,并使用迭代設置將后續股票價格建模為馬爾可夫鏈,給定初始起始價格 S0。驗證過程包括運行多個模擬或隨機游走樣本,然后檢查結果分布,以查看股票價格、收益和波動性是否滿足某些屬性和假設。

  2. 第二階段涉及探索,將模型實際應用于實際股票價格,并使用耐克股票的真實股票數據進行回測。模擬是通過獲取收益率 μ 和波動率 σ 的樣本值并觀察股票價格演變的模擬數據和真實數據之間的相關程度來完成的。

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

假設

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

  1. S0 - 初始股票價格

  2. St - 時間的股票價格,t

  3. μ - 在特定時間段內平均的股票收益(漂移)率

  4. σ - 在特定時間段內平均的股票波動率(標準差)

  5. dt - 模擬的時間步長,對應于一天內股票價格采樣的頻率

  6. N - 模擬的總天數。

  7. r - 無風險利率,任何人都可以借/貸

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

  1. 股票價格遵循馬爾科夫過程,即是無記憶的,隨后的股票價格僅取決于當前價值,而不取決于任何先前的價值。

  2. 與 N 相比,考慮的時間步長 dt 較短,即 Ndt>>1

  3. 市場完整高效,不存在套利機會。

  4. 沒有股息、交易成本或稅收考慮。

維納過程和幾何布朗運動

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

  1. 所有的 Δz 都是統計獨立的。

  2. dz = εdt

其中 ? 來自正態分布

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

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

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

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

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

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

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

  1. 初始“開始”價格,St?1

  2. 百分比收益(漂移)率,μ

  3. 波動率或標準偏差率,σ

下面的代碼實現了上面描述的迭代過程。時間步長由 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\])

運行單個模擬/步行

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

  1. 股票價格的演變,St 作為 N 的函數

  2. 股票價格水平的分布,繪制為直方圖。

  3. 收益和對數收益的分布,也繪制為直方圖。

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

#運行單個模擬以檢查功能#使用 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 文件并對股票價格的收益率和標準差進行所需的計算來計算收益率和波動率。

  1. 截至 2013 年 1 月 2 日,起始價格 S0 為 52.4。兩年期末的預期價格 St 預計在 98.6 左右。

  2. 兩年年化收益率為 μ=0.13,這是使用雅虎財經歷史記錄生成的價格列表計算得出的。

  3. 兩年年化波動率也從價格中獲得,σ=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模型和金融時間序列案例

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/78037.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/78037.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/78037.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

頭歌之動手學人工智能-機器學習 --- PCA

目錄 第1關:維數災難與降維 第2關:PCA算法流程 任務描述 編程要求 測試說明 第3關:sklearn中的PCA 任務描述 編程要求 測試說明 第1關:維數災難與降維 第2關:PCA算法流程 任務描述 本關任務:補充…

IOMUXC_SetPinMux的0,1參數解釋

IOMUXC_SetPinMux(IOMUXC_ENET1_RX_DATA0_FLEXCAN1_TX, 0); 這里的第二個參數 0 實際上傳遞給了 inputOnfield,它控制的是 SION(Software Input On)位。 當 inputOnfield 為 0 時,SION 關閉,此時引腳的輸入/輸出方向由…

express響應設置 以及redirect,download,json.sendFdile

Express 中常用響應方法 的整理,包括設置響應頭、重定向、下載、發送 JSON、發送文件等👇 📤 一、設置響應頭與狀態碼 設置狀態碼 res.status(404).send(Not Found);設置響應頭 res.set(Content-Type, text/plain); // 設置內容類型 res.s…

深度學習-數值穩定性和模型初始化

到目前為止,我們實現的每個模型都是根據某個預先制定的分布來初始化模型的參數,有人會認為初始化方案時理所當然的,忽略了如何做出這些選擇的細節,甚至有人可能會覺得,初始化方案的選擇并不是特別重要,實際…

SFINAE(Substitution Failure Is Not An Error)

C 中的 SFINAE(替換失敗并非錯誤) SFINAE(Substitution Failure Is Not An Error)是 C 模板元編程的核心機制之一,允許在編譯時根據類型特性選擇不同的模板實現。以下通過代碼示例和底層原理,逐步解析 SFI…

【Python筆記 04】輸入函數、轉義字符

一、Input 輸入函數 prompt是提示,會在控制臺顯示,用作提示函數。 name input("請輸入您的姓名:") print (name)提示你輸入任意信息: 輸入input test后回車,他輸出input test 二、常用的轉義字符 只講…

什么是量子計算?它能做什么?

拋一枚硬幣。要么正面朝上,要么反面朝上,對吧?當然,那是在我們看到硬幣落地的結果之后。但當硬幣還在空中旋轉時,它既不是正面也不是反面,而是正面和反面都有一定的可能性。 這個灰色地帶就是量子計算的簡…

入門 Go 語言

本專欄的 Go 語言學習參考了B站UP 軟件工藝師的視頻 本節需要: Go 語言環境VSCode 安裝環境 下載 Go 環境,并安裝下載 VSCode,安裝。在 VSCode 中安裝 Go 擴展: 接下來就可以編寫 Go 語言了 第一條 Go Go 語言是一種編譯型…

Oracle EBS R12.2 漢化

一、前言 在使用oracle ebs時,使用中文會更好的理解整個ebs流程,以下介紹oracle r12中文補丁的方式 如果你的系統除了支持英語外,還支持其他語言,比如中文,那你在下載補丁的時候除了下載Generic Platform版本外&#…

參考文獻新國標GB/T 7714-2025的 biblatex 實現

參考文獻新國標GB/T 7714-2025的biblatex實現 新版 GB/T 7714 目前正在修訂和征求意見(https://std.samr.gov.cn/gb/search/gbDetailed?id14CA9D282EB75AC8E06397BE0A0AEA2E)。 根據已經呈現的草案,初步實現了biblatex樣式(詳見biblatex-gb…

Discuz!與DeepSeek的深度融合:打造智能網址導航新標桿

引言 在數字化信息爆炸的時代,網址導航網站作為用戶獲取優質資源、高效瀏覽互聯網的重要入口,其信息篩選能力、用戶體驗和商業化潛力成為了決定其競爭力的核心要素。Discuz!作為國內應用廣泛的社區論壇系統,以其強大的功能擴展性和用戶管理能…

Linux424 chage密碼信息 gpasswd 附屬組

https://chat.deepseek.com/a/chat/s/e55a5e85-de97-450d-a19e-2c48f6669234

【低配置電腦預訓練minimind的實踐】

低配置電腦預訓練minimind的實踐 概要 minimind是一個輕量級的LLM大語言模型,項目的初衷是拉低LLM的學習門檻,讓每個人都能從理解每一行代碼開始, 從零開始親手訓練一個極小的語言模型。對于很多初學者而言,電腦配置僅能夠滿足日…

docker部署Ollama并簡單調用模型

Ollama簡介 Ollama 是一個開源的大型語言模型(LLM)平臺,旨在讓用戶能夠輕松地在本地運行、管理和與大型語言模型進行交互。 Ollama 提供了一個簡單的方式來加載和使用各種預訓練的語言模型,支持文本生成、翻譯、代碼編寫、問答等…

Redis安裝及入門應用

應用資料:https://download.csdn.net/download/ly1h1/90685065 1.獲取文件,并在該文件下執行cmd 2.輸入redis-server-lucifer.exe redis.windows.conf,即可運行redis 3.安裝redis客戶端軟件 4.安裝后運行客戶端軟件,輸入鏈接地址…

《重塑AI應用架構》系列: Serverless與MCP融合創新,構建AI應用全新智能中樞

在人工智能飛速發展的今天,數據孤島和工具碎片化問題一直是阻礙AI應用高效發展的兩大難題。由于缺乏統一的標準,AI應用難以無縫地獲取和充分利用數據價值。 為了解決這些問題,2024年AI領域提出了MCP(Model Context Protocol模型上…

從入門到精通【MySQL】視圖與用戶權限管理

文章目錄 📕1. 視圖??1.1 視圖的基本概念??1.2 試圖的基本操作🔖1.2.1 創建視圖🔖1.2.2 使用視圖🔖1.2.3 修改數據🔖1.2.4 刪除視圖 ??1.3 視圖的優點 📕2. 用戶與權限管理??2.1 用戶🔖…

輸入捕獲模式測頻率

前提工作: PA6、PA0通過跳線相連,PA6測試PA0的輸出頻率 本來只有下列函數,改變占空比 但是我們需要測試頻率,需要動態改變頻率。 void PWM_SetCompare1(uint16_t Compare) {TIM_SetCompare1(TIM2, Compare); //設置CCR1的值 }…

通付盾入選蘇州市網絡和數據安全免費體驗目錄,引領企業安全能力躍升

近日,蘇州市網絡安全主管部門正式發布《蘇州市網絡和數據安全免費體驗產品和服務目錄》,通付盾憑借其在數據安全、區塊鏈、AI領域的創新實踐和前沿技術實力,成功入選該目錄。 作為蘇州市網絡安全技術支撐單位,通付盾將通過 “免費…

AI日報 - 2025年04月25日

🌟 今日概覽(60秒速覽) ▎🤖 AGI突破 | OpenAI o3模型展現行動能力,英國發布RepliBench評估AI自主復制風險,DeepMind CEO擔憂AGI協調挑戰。 模型能力向行動和自主性演進,安全與協調成為焦點。 ▎💼 商業動向…