用于時間序列概率預測的蒙特卡洛模擬

大家好,蒙特卡洛模擬是一種廣泛應用于各個領域的計算技術,它通過從概率分布中隨機抽取大量樣本,并對結果進行統計分析,從而模擬復雜系統的行為。這種技術具有很強的適用性,在金融建模、工程設計、物理模擬、運籌優化以及風險管理等領域都有廣泛的應用。

蒙特卡洛模擬這個名稱源自于摩納哥王國的蒙特卡洛城市,這里曾經是世界著名的賭博天堂。在20世紀40年代,著名科學家烏拉姆和馮·諾依曼參與了曼哈頓計劃,他們需要解決與核反應堆中子行為相關的復雜數學問題。他們受到了賭場中擲骰子的啟發,設想用隨機數來模擬中子在反應堆中的擴散過程,并將這種基于隨機抽樣的計算方法命名為"蒙特卡洛模擬"(Monte Carlo simulation)。

蒙特卡洛模擬的核心思想是通過大量重復隨機試驗,從而近似求解分析解難以獲得的復雜問題。它克服了傳統數值計算方法的局限性,能夠處理非線性、高維、隨機等復雜情況。隨著計算機性能的飛速發展,蒙特卡洛模擬的應用范圍也在不斷擴展。

在金融領域,蒙特卡洛模擬被廣泛用于定價衍生品、管理投資組合風險、預測市場波動等。在工程設計中,它可以模擬材料力學性能、流體動力學等復雜物理過程。在物理學研究中,從粒子物理到天體物理,都可以借助蒙特卡洛模擬進行探索。此外,蒙特卡洛模擬還在機器學習、計算生物學、運籌優化等領域發揮著重要作用。

蒙特卡洛模擬的過程基本上是這樣的:首先需要定義要模擬的系統或過程,包括方程和參數;其次根據擬合的概率分布生成隨機樣本;進而針對每一組隨機樣本,運行模型模擬系統的行為;最后分析結果以了解系統行為。

本文將介紹使用它來模擬未來證券價格的兩種分布:高斯分布和學生 t 分布。這兩種分布通常被量化分析人員用于證券市場數據。

在此加載蘋果公司從2020年到2024年每日證券價格的數據:

import?yfinance?as?yf
orig?=?yf.download(["AAPL"],?start="2020-01-01",?end="2024-12-31")
orig?=?orig[('Adj?Close')]
orig.tail()
[*********************100%%**********************]  1 of 1 completed
Date
2024-03-08    170.729996
2024-03-11    172.750000
2024-03-12    173.229996
2024-03-13    171.130005
2024-03-14    173.000000
Name: Adj Close, dtype: float64

可以通過價格序列來計算簡單的日收益率,并將其呈現為柱狀圖。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
returns = orig.pct_change()
last_price = orig[-1]
returns.hist(bins=100)

?蘋果證券日收益柱狀圖

1.標準正態分布擬合收益率

證券的歷史波動率通常是通過計算每日收益率的標準差來進行,假設未來的波動率與歷史波動率相似。而直方圖則呈現了以0.0為中心的正態分布的形狀。為簡單起見,將該分布假定為均值為0,標準差為0的高斯分布。接下來計算出標準差(也稱為日波動率),預計明天的日收益率將會是高斯分布中的一個隨機值。

daily_volatility?=?returns.std()
rtn?=?np.random.normal(0,?daily_volatility)

第二天的價格是今天的價格乘以 (1+return %):

price?=?last_price?*?(1??+?rtn)

以上是證券價格和收益的基本財務公式。使用蒙特卡洛模擬預測明天的價格,可以隨機抽取另一個收益率,從而推算后天的價格,可以得出未來 200 天可能的價格走勢之一。當然,這只是一種可能的價格路徑。重復這個過程得出另一條價格路徑,重復過程 1,000 次,得出 1,000 條價格路徑。

import?warnings
warnings.simplefilter(action='ignore',?category=pd.errors.PerformanceWarning)num_simulations?=?1000
num_days?=?200
simulation_df?=?pd.DataFrame()
for?x?in?range(num_simulations):count?=?0????#?The?first?price?pointprice_series?=?[]rtn?=?np.random.normal(0,?daily_volatility)price?=?last_price?*?(1??+?rtn)price_series.append(price)#?Create?each?price?pathfor?g?in?range(num_days):rtn?=?np.random.normal(0,?daily_volatility)price?=?price_series[g]?*?(1??+?rtn)price_series.append(price)#?Save?all?the?possible?price?pathssimulation_df[x]?=?price_series
fig?=?plt.figure()
plt.plot(simulation_df)
plt.xlabel('Number?of?days')
plt.ylabel('Possible?prices')
plt.axhline(y?=?last_price,?color?=?'b',?linestyle?=?'-')
plt.show()

分析結果如下:價格起始于179.66美元,大部分價格路徑相互交疊,模擬價格范圍為100美元至500美元。

圖片

使用高斯分布的蒙特卡洛模擬

假設我們想知道90%情況下(5%到95%)出現的"正常"價格范圍,可以使用量化方法得到上限和下限,從而評估超出這些極端價格。

upper?=?simulation_df.quantile(.95,?axis=1)
lower?=?simulation_df.quantile(.05,?axis=1)
stock_range?=?pd.concat([upper,?lower],?axis=1)fig?=?plt.figure()
plt.plot(stock_range)
plt.xlabel('Number?of?days')
plt.ylabel('Possible?prices')
plt.axhline(y?=?last_price,?color?=?'b',?linestyle?=?'-')
plt.show()

圖片

使用高斯分布的 95 百分位數和 5 百分位數

2.學生t分布擬合收益率

證券價格回報偶爾會出現極端事件,位于分布兩端。標準正態分布預計 95% 的收益率發生在兩個標準差之內,5% 的收益率發生在兩個標準差之外。如果極端事件發生的頻率超過 5%,分布看起來就會 "變胖"。這就是統計學家所說的肥尾,定量分析人員通常使用學生 t 分布來模擬證券收益率。

學生 t 分布有三個參數:自由度參數、標度和位置。

  • 自由度:自由度參數表示用于估計群體參數的樣本中獨立觀測值的數量。自由度越大,t 分布的形狀越接近標準正態分布。在 t 分布中,自由度范圍是大于 0 的任何正實數。

  • 標度:標度參數代表分布的擴散性或變異性,通常是采樣群體的標準差。

  • 位置:位置參數表示分布的位置或中心,即采樣群體的平均值。當自由度較小時,t 分布的尾部較重,類似于胖尾分布。

用學生 t 分布來擬合實際證券收益率:

import?numpy?as?np
import?matplotlib.pyplot?as?plt
from?scipy.stats?import?treturns?=?orig.pct_change()#?Number?of?samples?per?simulation
num_samples?=?100#?distribution?fitting
returns?=?returns[1::]?#?Drop?the?first?element,?which?is?"NA"
params?=?t.fit(returns[1::])?#?fit?with?a?student-t#?Generate?random?numbers?from?Student's?t-distribution
results?=?t.rvs(df=params[0],?loc=params[1],?scale=params[2],?size=1000)
#?Generate?random?numbers?from?Student's?t-distribution
results?=?t.rvs(df=params[0],?loc=params[1],?scale=params[2],?size=1000)
print('degree?of?freedom?=?',?params[0])
print('loc?=?',?params[1])
print('scale?=?',?params[2])

參數如下:

  • 自由度 = 3.735

  • 位置 = 0.001

  • 標度 = 0.014

使用這些參數來預測 Student-t 分布,然后用 Student-t 分布繪制實際證券收益分布圖。

returns.hist(bins=100,density=True,?alpha=0.6,?color='b',?label='Actual?returns?distribution')#?Plot?histogram?of?results
plt.hist(results,?bins=100,?density=True,?alpha=0.6,?color='g',?label='Simulated?Student/t?distribution')plt.xlabel('Value')
plt.ylabel('Density')
plt.title('Actual?returns?vs.?Projections?with?a?Student\'s?t-distribution')
plt.legend(loc='center?left')
plt.grid(True)
plt.show()

實際回報與預測相當接近:

圖片

實際收益與學生 t 分布預測對比

與之前一樣,模擬未來 200 天的價格走勢。

import?warnings
warnings.simplefilter(action='ignore',?category=pd.errors.PerformanceWarning)num_simulations?=?1000
num_days?=?200
simulation_student_t?=?pd.DataFrame()
for?x?in?range(num_simulations):count?=?0#?The?first?price?pointprice_series?=?[]rtn?=?t.rvs(df=params[0],?loc=params[1],?scale=params[2],?size=1)[0]price?=?last_price?*?(1??+?rtn)price_series.append(price)#?Create?each?price?pathfor?g?in?range(num_days):rtn?=?t.rvs(df=params[0],?loc=params[1],?scale=params[2],?size=1)[0]price?=?price_series[g]?*?(1??+?rtn)price_series.append(price)#?Save?all?the?possible?price?pathssimulation_student_t[x]?=?price_series
fig?=?plt.figure()
plt.plot(simulation_student_t)
plt.xlabel('Number?of?days')
plt.ylabel('Possible?prices')
plt.axhline(y?=?last_price,?color?=?'b',?linestyle?=?'-')
plt.show()

圖片

學生 t 分布的蒙特卡洛模擬

可以繪制出學生 t 的蒙特卡洛模擬置信區間上下限(95%、5%):

upper?=?simulation_student_t.quantile(.95,?axis=1)
lower?=?simulation_student_t.quantile(.05,?axis=1)
stock_range?=?pd.concat([upper,?lower],?axis=1)fig?=?plt.figure()
plt.plot(stock_range)
plt.xlabel('Number?of?days')
plt.ylabel('Possible?prices')
plt.title('The?upper?95%?and?lower?5%')
plt.axhline(y?=?last_price,?color?=?'b',?linestyle?=?'-')
plt.show()

圖片

使用學生 t 分布的 95 百分位數和 5 百分位數

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

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

相關文章

【C語言】C語言-設備管理系統(源碼+數據文件)【獨一無二】

👉博__主👈:米碼收割機 👉技__能👈:C/Python語言 👉公眾號👈:測試開發自動化【獲取源碼商業合作】 👉榮__譽👈:阿里云博客專家博主、5…

AI大模型:大數據+大算力+強算法

前言:好久不見,甚是想念,我是辣條,我又回來啦,兄弟們,一別兩年,還有多少老哥們在呢? 目錄 一年半沒更文我干啥去了? AI大模型火了 人工智能 大模型的理解 為什么學習…

ComfyUI完全入門:圖生圖局部重繪

大家好,我是每天分享AI應用的螢火君! 這篇文章的主題和美女有關,不過并不是教大家生產美女視頻,而是講解 ComfyUI 的圖生圖局部重繪,其中將會以美女圖片為例,來展示局部重繪的強大威力。 先看看效果&…

2024年5月26日 十二生肖 今日運勢

小運播報:2024年5月26日,星期日,農歷四月十九 (甲辰年己巳月庚寅日),法定節假日。 紅榜生肖:馬、豬、狗 需要注意:牛、蛇、猴 喜神方位:西北方 財神方位:…

java hashmap在項目中的使用

java hashmap在項目中的使用 1,緩存機制: 在需要頻繁訪問數據但又不想每次都從數據庫或遠程服務獲取的場景中,可以使用 HashMap 作為緩存。例如,在一個 Web 應用程序中,用戶信息可能只需要在登錄時從數據庫檢索一次&a…

解釋器和編譯器(程序語言基礎)

一、解釋器 解釋器則是一種逐行或逐段地解釋執行源代碼的工具。解釋器會直接讀取源代碼,并在運行時逐行或逐段地解釋執行代碼,不生成獨立的目標代碼文件。解釋器適用于一些動態語言,允許用戶在代碼執行過程中進行交互,更容易調試…

【linux_常用的指令】

筆記 1連接遠程主機2 兩臺主機間復制2.1 查看當前目錄2.2 普通復制 3 創建能運行sudo命令的用戶3.1 更改用戶admin的密碼3.2 切換到admin用戶,并且啟動一個新的shell3.3 更改文件或目錄的權限 4 切換目錄5 解.tar.gz格式的壓縮包6 運行.sh文件7 查看當前目錄的所有文…

泛型中K T V E ? Object等分別代表的含義

E – Element (在集合中使用,因為集合中存放的是元素) T – Type(Java 類) K – Key(鍵) V – Value(值) N – Number(數值類型) ? – 表示不確定的java類型&…

一個月速刷leetcodeHOT100 day07 輪轉數組 除自身以外的乘積 找到字符串中所有字母異位詞

輪轉數組 給定一個整數數組 nums,將數組中的元素向右輪轉 k 個位置,其中 k 是非負數。 示例 1: 輸入: nums [1,2,3,4,5,6,7], k 3 輸出: [5,6,7,1,2,3,4] 解釋: 向右輪轉 1 步: [7,1,2,3,4,5,6] 向右輪轉 2 步: [6,7,1,2,3,4,5] 向右輪轉 3 步: […

系統思考—跳出癥狀看全局

結束了《系統思考—跳出癥狀看全局》的迭代課程后,我感觸頗深。通過一個深入的案例研討、互動討論和實戰演練,學員們不僅更好地理解了如何跳出癥狀看全局,還掌握了制定更具前瞻性和可持續性策略的方法。我們還探討了如何在實際工作中應用這些…

《python編程從入門到實踐》day38

# 昨日知識點回顧 定義、遷移模型Entry # 今日知識點學習 18.2.7 Django shell 每次修改模型后,看到重啟后的效果需要重啟shell,退出shell會話Windows系統按ctrlZ或者輸入exit() 18.3 創建頁面:學習筆記主頁 創建頁面三階段&#xf…

介紹一下Hugging Face,這個公司的背景是什么

Hugging Face是一家成立于2016年的人工智能公司,專注于為AI研究人員和開發者提供開源模型庫和工具。以下是關于Hugging Face公司的詳細背景介紹: 公司歷史與創始人: Hugging Face由Clment Delangue、Julien Chaumond和Thomas Wolf三位法國籍…

E0144 “const char *“ 類型的值不能用于初始化 “char *“ 類型的實體

解決方案: 在Visual Studio中,在項目上右鍵,屬性 >> C/C >> 語言 >> 符合模式,改為“否”。

AI大模型探索之路-基礎篇5:GLM-4解鎖國產大模型的全能智慧與創新應用

目錄 前言一、GLM4大模型總體概述二、GLM4和GPT4功能對比三、GLM4和GPT4性能對比1、基礎能力(英文)2、指令跟隨能力3、對齊能力4、長文本能力5、多模態-文生圖 四、GLM-4 ALL Tools1、文生圖2、代碼解釋器3、網頁瀏覽4、Function Call5、多工具自動調用 …

【學習筆記】關于建模時需要調整的變量

在進行回歸分析時,選擇調整變量(也就是模型中的協變量)需要謹慎考慮。調整的變量并不一定必須是混雜因素,但通常情況下,目的是為了控制那些可能扭曲主要自變量和因變量關系的混雜因素。除了混雜因素,還有幾…

C語言之指針進階(3),函數指針

目錄 前言: 一、函數指針變量的概念 二、函數指針變量的創建 三、函數指針變量的使用 四、兩段特殊代碼的理解 五、typedef 六、函數指針數組 總結: 前言: 本文主要講述C語言指針中的函數指針,包括函數指針變量的概念、創建…

【面試干貨】事務的并發問題(臟讀、不可重復讀、幻讀)與解決策略

【面試干貨】事務的并發問題(臟讀、不可重復讀、幻讀)與解決策略 一、臟讀(Dirty Read)二、不可重復讀(Non-repeatable Read)三、幻讀(Phantom Read)四、總結 💖The Begi…

Stable Diffusion——U-ViT用于擴散建模的 ViT 主干網

1.概述 擴散模型是最近出現的強大的深度生成模型,可用于生成高質量圖像。擴散模型發展迅速,可應用于文本到圖像生成、圖像到圖像生成、視頻生成、語音合成和 3D 合成。 除了算法的改進,骨干網的改進在擴散建模中也發揮著重要作用。一個典型…

nginx代理前端html

正常配置,通過www.example.com或192.168.20.12:80訪問server {listen 80;server_name example.com www.example.com;root /var/www/html;index index.html index.htm;location / {try_files $uri $uri/ 404;} }解釋: listen 80;:監聽 HTTP 端…

汽車R155法規中,汽車獲取到的VTA證書,E后面的數字表示什么意思?

標簽: 汽車R155法規中,汽車獲取到的VTA證書,E后面的數字表示什么意思?; 汽車;VTA認證; 有些廠商汽車拿到的VTA證書上面寫著E9, 有些廠商汽車拿到的VTA證書上面寫著E5,E9與E5有什么差…