通過蒙地卡羅(Python)模擬債券收益率的路徑
我有許多給定的債券收益率時間序列(在 Python 中 pandas 包的數據框中給出)。我需要在 Python 中執行以下任務:
“1. 為您選擇的任何收益率系列提前 30 步模擬 1000 條路徑:
一種。繪製您選擇的任何一個索引的路徑
灣。在第 30 步繪製每個索引的密度
使用產量差異數據從系列中隨機抽取 30 個不同的值。計算 30 個值的累積和。如果我們從零值開始,這將為您提供一條可能的收益率路徑,但由於最新的收益率不是零,我們必須將它添加到路徑的每個成員中。對每個系列重複 1000 次。這是一種蒙特卡羅模擬。如果你願意,你可以為你的 Monte Carlo 使用不同的引導方案。”
作為一個金融和程式方面的菜鳥,我很難理解我實際需要做什麼以及如何去做。這個問題是否需要我:隨機挑選給定時間序列的 30 個值,然後基本上使用這 30 個值來“預測”未來的值會是什麼?然後重新做這個程序1000次?或者是其他東西?
如果有人能解釋這個任務的含義以及我可以用 Python 做什麼,我將不勝感激。謝謝你。
我不知道 Python,但這是我在 Excel 中要做的(我假設您熟悉 Excel,然後可以將這些步驟翻譯成 Python:
- 選擇一個債券收益率的時間序列,其中 $ n $ 產量。
- 從該時間序列生成一系列債券收益率變化,導致 $ n-1 $ 產生列中的變化。
- 為這些產量變化中的每一個分配一個整數值 $ 1 $ 到 $ n-1 $ 在產量變化左側的列中。
- 使用 randbetween( $ 1,n-1 $ ) $ 30 $ 生成次數 $ 30 $ 1 到 1 之間的隨機整數 $ n-1 $ . 如果 $ n >> 30 $ ,那麼無論是否有更換樣品都無關緊要。
- 使用vlookup(您生成的隨機數,包括隨機數和產量變化的範圍,2)。這將生成產量變化的模擬路徑。
- 將您選擇的指數的 t=0 收益率添加到您從步驟 5 中選擇的第一個隨機收益率變化中。獲取結果並將其添加到您在步驟 5 中生成的第二個隨機收益率變化中。對每個 $ 30 $ 隨機產量變化。現在你有一個 $ 30 $ 收益率的階梯路徑。請注意,這假設每個步驟與收益率變化差異具有相同的期限。
- 重複步驟 4 - 6 $ 999 $ 次,所以你現在有 $ 1000 $ $ 30 $ 步驟路徑。
- 全部繪製 $ 1000 $ 路徑。
- 繪製所有的直方圖 $ 1000 $ 終步 $ 30 $ 價值觀。
蒙特卡羅模擬是一種基於假設分佈(在本例中為歷史值)生成路徑分佈的技術。你現在有 $ 1000 $ 可能的 $ 30 $ 此利率指數的階梯路徑,然後您可以使用它來推斷風險價值、衍生品價格等。
希望這可以幫助。
要模擬具有“x”個隨機路徑的時間序列,首先必須有一個描述該過程的模型。您使用的過程可能取決於您對隨機過程的舒適程度、對該數據的經驗觀察和/或對基礎過程的信念。
短期利率模型的 Wiki 條目總結了一些通常用於模擬利率的主要模型。為簡單起見,我們選擇 Kalotay-Williams-Fabozzi 模型,因為它只需要兩個參數。它也和常用來模擬股票價格的幾何布朗運動是一回事(為什麼每個人都堅持在模型上打上自己的名字?)。
給定過程:
$$ {\displaystyle d\ln(r_{t})=\theta {t},dt+\sigma ,dW{t}} $$ 顯式解決方案 $ r_t $ 可以通過伊藤引理找到:
$$ \mathbb{E}\left[r_{t+\Delta t } \right]=r_t , e^{ (\theta _{t} - \frac{ \sigma^2}{2})\Delta t+\sigma ,Z \sqrt{\Delta t} } $$ 其中 Z 是正態分佈的隨機變數,均值 = 0,變異數 = 1:
$ Z \sim{N\left[0,1 \right]} $
要繼續進行蒙特卡羅,需要對模型進行校準。最簡單的方法是估計參數 $ \theta $ 和 $ \sigma^2 $ 根據歷史數據。在這個模型的背景下, $ \theta $ 是產量的預期對數變化(即, $ \mathbb{E}\left[ Ln[\frac{r_{t+ \Delta t}}{r_{t}}] \right] $ ) 和 $ \sigma $ 是預期的標準偏差(即, $ \sqrt{ \mathbb{E}\left[ Ln[\frac{r_{t+ \Delta t}}{r_{t}}] -\theta\right]^2} $ ).
從那裡開始,只需為 1000 條路徑中的每條路徑模擬獨立增量即可。