北太天元软件对看涨期权问题的数值模拟

%北太天元软件用Euler-Maruyama方法求解Black-Schoes方程 (Heston model)
%计算亚洲式看涨期权
%
% d S = \mu S dt + S \sqrt{v} d W_1
% d v= \kappa (\theta-v) dt + \beta \sqrt{v} d W_2
% S(t) 是t时刻的股票价格
% v(t) 是t时刻的股票的波动率
% W_1 W_2 是两个布朗运动
%参数的值
mu = 0.05; SK = 1.05; kappa = 2; beta = 0.1; theta = 0.09;
%假设初始的价格始1,然后你以0.05的价格买了在时间T=1的时候以1.05
%的价格买入此股票,那么
%如果在T=1 的时候,股票的价格是1.05则不赔不赚;
%如果在T=1 的时候,股票的价格高于1.05则赚;
%如果在T=1 的时候,股票的价格远远低于1.05,例如0.5,那么你最赔0.05;
%也就是期权能够把你风险控制在一定范围之内,在上面这个例子就是0.05
%初值
x_1 = 1; % S(0) 初值
x_2 = 0.09; % v(0) 初值
%假设股票在T =1 的时候的价格 S(1)
true_result = 1.0512;
error_em = zeros(1,5);
fin_value = zeros(1,5);
T = 1; % 最终时刻
n = 500; % [0,1]时间分成份数
dt = 1/n; %时间步长
mc = 20; % 蒙特卡罗方法的样本量
S_value = zeros(1,mc); v_value = zeros(1,mc); Y_3_value = zeros(1,mc); Payoff_value = zeros(1,mc);
for p = 1:mc
%生成两个正态分布的随机向量
Z_1 = randn(1,n); Z_2 = randn(1,n);
%用来储存布朗运动的数组
B_1 = zeros(1,n); B_2 = zeros(1,n);
for k = 2:n %布朗运动的路径
B_1(1,k) = B_1(1,k-1) + sqrt(dt) * Z_1(1,k-1);
B_2(1,k) = B_2(1,k-1) + sqrt(dt) * Z_2(1,k-1);
end
%S, v, Y3 :
S = zeros(1,n); v = zeros(1,n); Y_3 = zeros(1,n); Payoff = zeros(1,n);
%计算每个时刻的 S, v, Y_3
S(1,1) = x_1; v(1,1) = x_2; Y_3(1,1) = x_1; %赋初值
for k = 2:n
dw_1 = B_1(1,k) - B_1(1,k-1);
dw_2 = B_2(1,k) - B_2(1,k-1);
S(1,k) = S(1,k-1) + mu*S(1,k-1)*dt + S(1,k-1)*sqrt(v(1,k-1))*dw_1;
v(1,k) = v(1,k-1) + kappa*(theta - v(1,k-1))*dt + beta*sqrt(v(1,k-1))*dw_2;
Y_3(1,k) = Y_3(1,k-1) + S(1,k-1)*dt;
Payoff(1,k) = max(Y_3(1,k)/k-SK,0);
end
S_value(1,p) = S(1,n);
v_value(1,p) = v(1,n);
Y_3_value(1,p) = Y_3(1,n);
Payoff_value(1,p) = Payoff(1,n);
end
fin_value = mean(S_value)
error_em = abs(fin_value - true_result);
plot(S_value)