幾何布朗運動的模擬
我為價格從 S(0) = 10 到 S(t) 的股票生成 10000 條隨機二項式路徑,其中 t = 1 年。假設股票價格的幾何布朗運動每年漂移 15%,波動率為 20%。我在每條路徑上使用 10000 個等距的時間步長,並且 $ \Delta S = \mu S \Delta t \pm \sigma S \sqrt{\Delta t} $ ,其中每個時間步的 + 或 - 移動是隨機生成的,機率相等。
S = 10 S1 = [] mean = 0.15 sd = 0.2 for i in range(10000): S = 10 for j in range(10000): roll = np.random.rand() if roll < 0.5: S = S + mean*S/10000 + sd*S/100 else: S = S + mean*S/10000 - sd*S/100 S1.append(S)
我使用上面的程式碼來模擬GBM,我的結果與理論值相同。平均值應該是 $ S(0)e^{\mu t} $ 變異數應該是 $ S^2(0)e^{2\mu t}(e^{\sigma^2 t} - 1) $ . 但是有一個問題要我計算倒數,即 $ G(t) = 1/S(t) $ . 我認為這意味著應該是 $ \frac{1}{S(0)}e^{\mu t} $ 和變異數應該是 $ \frac{1}{S^2(0)}e^{2\mu t}(e^{\sigma^2 t} - 1) $ . 我對麼?但我不確定如何更改我的程式碼。我試圖寫下以下程式碼。但結果與理論值的平均值 = 0.116 和變異數 = 0.00055 相差甚遠。有人可以解釋我在哪裡做錯了嗎?非常感謝。
S = 10 G1 = [1/10] mean = 0.15 sd = 0.2 for i in range(10000): S = 10 for j in range(10000): roll = np.random.rand() if roll < 0.5: G = 1/S S = S + mean*S/10000 + sd*S/100 G = G + mean*(1/S)/10000 + sd*(1/S)/100 else: G = 1/S S = S + mean*S/10000 - sd*S/100 G = G + mean*(1/S)/10000 - sd*(1/S)/100 G1.append(G)
只是為了解釋均值和變異數的公式!我們可以從 GBM SDE 的解決方案開始:
$ S_t=S_0,e^{\left(\mu-\frac{1}{2}\sigma^2\right)t+\sigma W_t} $
然後,
$ \frac{1}{S_t}=\frac{1}{S_0},e^{-\left(\mu-\frac{1}{2}\sigma^2\right)t-\sigma W_t} $
對於高斯隨機變數 Y,通過這個恆等式很容易獲得均值(和變異數):
$ E\left[e^Y\right]=e^{E\left[Y\right]+\frac{1}{2}V\left[Y\right]} $
將此應用於 S,並註意:
$ E\left[\left(\mu-\frac{1}{2}\sigma^2\right)t+\sigma W_t\right]=\left(\mu-\frac{1}{2}\sigma^2\right)t $
$ V\left[\left(\mu-\frac{1}{2}\sigma^2\right)t+\sigma W_t\right]=\sigma^2t $
我們得到了 S 均值的熟悉表達式:
$ E\left[S_t\right]=S_0,e^{\left(\mu-\frac{1}{2}\sigma^2\right)t+\frac{1}{2}\sigma^2 t}=S_0,e^{\mu t} $
並將恆等式應用於 1/S 的表達式,我們得到它的平均值如下:
$ E\left[\frac{1}{S_t}\right]=\frac{1}{S_0},e^{-\left(\mu-\frac{1}{2}\sigma^2\right)t+\frac{1}{2}\sigma^2 t}=\frac{1}{S_0},e^{-\mu t+\sigma^2t} $
可以使用相同的身份確定變異數。