Black-Scholes

蒙地卡羅模擬價格和布萊克斯科爾斯價格給我的 Matlab 程式碼帶來了巨大的差異

  • January 12, 2019

我已經編寫了一個腳本來顯示 N 增加的蒙地卡羅價格。但是與 BS 結果相比,這表明存在巨大差異。錯誤在哪裡?

功能 :

函式 [cpay,ppay] = callput(S0,K,T,r,sigma,N)
%CALLPUT 這個函式的總結在這裡
% 詳細解釋看這裡
phi=normrnd(0,sigma,[1,N]);
dT=T;
對於 i=1:N
S(i)=S0*exp((r-.5*sigma.^2)*dT + sigma*sqrt(dT)*phi(i));
C(i)= exp(-r*T)*max(S(i)-K, 0);
P(i)=exp(-r*T)*max(KS(i), 0);
結尾
價格1=總和(C)/N;
價格2=總和(P)/N;
cpay=價格1;
ppay=價格2;
結尾

主腳本:

clc
清除所有
% f=fopen('CPData.txt','w');
[BSCall, BSPut] = blsprice(5,5,.04,.5,.2)
fprintf('i\tMC-Call\tMC-Put\n');
對於 i=1:50

[cpayoff,ppayoff]=callput(5,5,.5,.04,.2,i*1000);
cp(i)=cpayoff;
pp(i)=ppayoff;
fprintf('%d\t%3.4f\t%3.4f\n',i*1000,cp(i),pp(i));

結尾

結果 :

呼叫 =

0.3314


BSPut =

0.2323

i MC-Call MC-Put
1000 0.0894 0.0333
2000 0.0838 0.0344
3000 0.0842 0.0331
4000 0.0847 0.0335
5000 0.0852 0.0349
6000 0.0842 0.0330
7000 0.0865 0.0326
8000 0.0844 0.0348
9000 0.0862 0.0329
10000 0.0863 0.0340
11000 0.0859 0.0323
12000 0.0849 0.0346
13000 0.0852 0.0346
14000 0.0861 0.0342
15000 0.0863 0.0325
16000 0.0854 0.0338
17000 0.0839 0.0342
18000 0.0844 0.0340
19000 0.0861 0.0343
20000 0.0845 0.0338
21000 0.0836 0.0341
22000 0.0842 0.0340
23000 0.0853 0.0338
24000 0.0842 0.0341
25000 0.0844 0.0344
26000 0.0863 0.0329
27000 0.0846 0.0332
28000 0.0845 0.0335
29000 0.0852 0.0339
30000 0.0854 0.0334
31000 0.0849 0.0339
32000 0.0851 0.0337
33000 0.0846 0.0340
34000 0.0849 0.0334
35000 0.0850 0.0335
36000 0.0846 0.0339
37000 0.0855 0.0337
38000 0.0851 0.0335
39000 0.0849 0.0335
40000 0.0855 0.0330
41000 0.0853 0.0330
42000 0.0847 0.0337
43000 0.0849 0.0330
44000 0.0850 0.0343
45000 0.0850 0.0338
46000 0.0856 0.0337
47000 0.0846 0.0335
48000 0.0854 0.0337
49000 0.0851 0.0334
50000 0.0853 0.0336

給定 S 的公式,變數 phi 應該是正常的標準變數,而不是 stdev sigma。

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