隨機過程

跳躍擴散過程問題

  • December 13, 2021

我有一個時間成熟的歐式看漲期權 $ T=3 $ 年, $ K=50 $ ,並且鑑於 $ S(t) $ 是指用幾何布朗運動描述的導數 $ S_{0}=100 $ 和 $ r = 0.04 $ . 標題的波動性是隨機的,在兩個階段之間偏離 $ \sigma_-=0.25 $ 和 $ \sigma_+ =0.75. $ 這兩個階段可以描述為一個跳躍的過程,其中之間的時間 $ 0.25 \to 0.75 $ 呈指數分佈 $ \lambda_+=1 $ 和跳躍 $ 0.75 \to 0.25 $ 也呈指數分佈 $ \lambda_-=3 $ .因此,在風險中性度量下,該過程描述為$$ dS(t) = (r-\sigma_{t}^2/2)S(t)dt+\sigma_{t}S(t)dW(t) $$

我的問題是如何用兩個不同的 sigma 和不同的指數分佈時間到達的 lambda 來模擬這個“兩個階段”?

注意:我修改了答案以利用 CTMC 的逗留時間分佈,見下文。

粗略的第一種方法

**初步評論:**在建議的設置下,波動率遵循(連續時間)馬爾可夫鏈,具有高波動率狀態的兩個波動率狀態( $ h $ )和低波動狀態( $ l $ ) 和跳躍強度 $ \lambda_{l\to h} $ , $ \lambda_{h\to l} $ . 讓我們稍微簡化一下,假設一個具有時間步長的離散跳躍過程 $ \Delta t = \tau / n $ 和轉移矩陣

$$ Q\equiv\begin{pmatrix} P(l_t\to l_{t+\Delta t}) & P(h_t\to l_{t+\Delta t})\P(l_t\to h_{t+\Delta t}) & P(h_t\to h_{t+\Delta t})\end{pmatrix}\approx \begin{pmatrix} 1-\Delta t\lambda_{l\to h} &\Delta t\lambda_{h\to l}\\Delta t\lambda_{l\to h} & 1-\Delta t\lambda_{h\to l}\end{pmatrix} $$ 讓我們將矩陣簡化為$$ \begin{pmatrix}P_{ll}&P_{hl}\P_{lh}&P_{hh}\end{pmatrix} $$

給定一些合理的離散化參數 $ n $ 和一些初始狀態 $ v_1=h $ 或者 $ v_1=l $ ,我們擁有計算“次數”分佈的所有要素 $ #h, #l=n-#h $ 鏈條處於高波動和低波動狀態。例如,與 $ n=5 $ 和 $ v_1=l $

$$ \begin{align} P_n(#l=5)=&P_{ll}^5\ P_n(#l=4)=&P_{ll}^4P_{lh}\ +&4P_{ll}^3P_{lh}P_{hl}\ P_n(#l=3)=&P_{ll}^3P_{lh}P_{hh}\ +&3P_{ll}^2P_{lh}^2P_{hl}\ +&2P_{ll}^2P_{lh}P_{hl}P_{hh}\ +&3P_{ll}P_{lh}^2P_{hl}^2\ +&P_{ll}^2P_{lh}P_{hl}P_{hh}\ \end{align} $$ …ETC。理論上,我們可以將這些機率預先計算到某個合理的水平 $ n $ 並提出一個(離散)分佈 $ \sigma $ 從中我們可以產生一個類似默頓的看漲期權公式。但老實說,我覺得這會很麻煩。

第二種方法

我們知道連續時間馬爾可夫過程的逗留時間呈指數分佈。例如,給定初始狀態 $ l $ ,第一次跳躍時間 $ t_1 $ 呈指數分佈

$$ t_1\sim exp(\lambda_{l\to h}) $$ 然後,如上所述,我們將看到至少一次跳躍的機率是 $ P(t_1<\tau) $ ,我們將不得不計算一些非常複雜的捲積,以得出每個狀態時間的前幾個合理分佈。

因此,我建議一個

純 MC 方法

修復通常的參數,尤其是到期時間tau、波動率水平vol_lovol_hi以及一些初始狀態指標state0=1(低)或state0=2(高)。然後我們利用逗留時間的指數分佈(根據您的應用程序調整)

set.seed(42)

nSim   &lt;- 1E5
tau    &lt;- 3
K      &lt;- 105
S0     &lt;- 100
rf     &lt;- 0.05
vol_lo &lt;- 0.25
vol_hi &lt;- 0.75
lambda &lt;- c(3,2) # away-from-lo, away-from-hi

sim_time_in_lo &lt;- function(state0){
 t &lt;- 0
 s &lt;- state0
 time_lo &lt;- 0
 while (t&lt;tau){
   dt &lt;- rexp(n=1,lambda[s])
   if ((t+dt)&gt;tau){ dt &lt;- tau - t}
   if (s==1){time_lo &lt;- time_lo + dt }
   if (s==1){s&lt;-2} else {s &lt;-1}
   t &lt;- t+ dt
 }
 time_lo
}
tau_lo     &lt;- sapply(1:nSim,function(i){sim_time_in_lo(1)})
tau_hi     &lt;- tau - tau_lo
total_var  &lt;- tau_lo * vol_lo^2 + tau_hi * vol_hi^2
drift      &lt;- rf * tau-0.5*total_var
randomness &lt;- sqrt(total_var)*rnorm(nSim,)

mean(exp(-rf*tau)*pmax(S0*exp(drift + randomness)-K,0))

輸出:

[1] 41.58493

我希望這有點幫助?在接下來的幾天裡,我會考慮更多;也許其他人有一個想法。

引用自:https://quant.stackexchange.com/questions/69038