蒙地卡羅歐式期權定價
我在下面編寫了模擬 GBM 路徑的程式碼,用於確定給定歐式看漲期權和看跌期權的價格。股票定價為 150 美元,行使價為 155 美元,假設無風險利率為 0.02,預期收益為 0.05,波動率為 0.1,期限為一年。
功能
$$ call, put $$= monte_carlo_price(S_init, K, T, r, mu, sigma, n)
% 使用蒙特卡羅模擬計算歐式看漲和看跌期權
% ‘S_init’ 是目前標的股票價格
% ‘K’ 是執行價格
% ‘T’是到期年
% ‘r’ 是無風險利率
% ‘mu’ 是預期收益
% ‘sigma’ 是波動率
%——————– ————————————————–
路徑 = n;
步數 = T*365;
MC_scenes = zeros(Steps+1, Paths);
dT = T/步;
% 第一資產價格為初始價格
MC_scenes(1,:) = S_init;
%
為 iPath 生成路徑 = 1:
iStep 的路徑 = 1:Steps
MC_scenes(iStep+1, iPath) = MC_scenes(iStep, iPath) * exp((mu - 0.5*sigma^2)*dT + sigma * sqrt(dT )*normrnd(0,1));
結束
結束
% 計算看跌期權和看漲期權收益
putPayoff = max(K-MC_scenes(end,:),0);
callPayoff = max(MC_scenes(end,:)-K,0);
% 折扣價格回到當天
put = mean(putPayoff)* exp(-r*T) ;
呼叫 = 平均(呼叫支付)* exp(-r*T);
我的問題是我試圖想出一種有效的方法來讓我的模擬結果在 Black-Scholes 輸出的 10 美分以內(看漲期權為 5.10 美元,看跌期權為 7.04 美元)。我嘗試通過迭代增加我的“路徑”(場景數量),我得到了我需要的東西,但是執行時間太長了。有沒有辦法可以優化設置“路徑”甚至“步驟”到 Black-Scholes 輸出中?
謝謝。
幾點建議:
- 由於您的底層證券遵循幾何布朗運動並且您只對歐式期權定價感興趣,因此無需模擬中間步驟。由於您的解決方案是精確的,您可以直接採樣 $ S_T $ 作為
$$ \begin{equation} S_T = S_0 \exp \left{ \left( r - \frac{1}{2} \sigma^2 \right) T + \sigma \sqrt{T} Z \right}, \end{equation} $$ 在哪裡 $ Z \sim \mathcal{N}(0, 1) $ . 2.
for
嘗試用矩陣運算替換剩餘的循環。向量化程式碼在 MATLAB 中往往要快得多。 3. 關於停止標準。通常,您不知道通過蒙特卡羅模擬定價的期權的封閉形式解決方案。否則,您一開始就不會這樣做,除非作為練習。因此,使用到真實解析解的距離作為停止標準是不可能的。相反,我建議計算蒙地卡羅標準誤差$$ \begin{equation} s_n = \sqrt{\frac{1}{n - 1} \sum_{i = 1}^n \left( X_i - \bar{X}n \right)^2}, \end{equation} $$ 在哪裡 $ \left{ X_i \right}{i = 1}^n $ 是您的樣品價格序列 $ n $ 路徑。然後,您可以為某個機率的 Monte Carlo 估計建構一個信賴區間,並在它足夠小時停止您的模擬。 要了解您的基於距離的停止標準為何存在問題,請考慮極少數樣本路徑,這些路徑恰好使得相應的平均貼現收益非常接近分析價格。這純屬偶然,您估計的標準誤差將非常大。 4. 請注意,您應該在風險中性機率度量下模擬資產。這裡,資產的漂移是 $ r $ 並不是 $ \mu $ 就像你的程式碼一樣。後者無關緊要。 5. 為了進一步提高收斂性,您可以使用對偶。即對於一個樣本 $ S_T $ 使用隨機正態變數生成 $ Z $ ,您生成第二個樣本 $ S_T $ 使用 $ -Z $ .