想请教大家一下关于写欧式看涨期权的二叉树定价问题,网上看到的二叉树定价代码是首先通过二叉树一步一步得到终端的股票价格,然后得到终端期权的payoff,再通过终端期权payoff与风险中性概率,一步一步地倒腾回去。
但是,因为对于欧式期权而已,可以把期权的终端支付的期望直接通过无风险利率贴现回初始时刻,这样就一步到位了,我基于这个思想写了如下的Matlab代码:
function [CallP] = MYBSM(S0,K, r,T, sigma,M)
dt = T/M;
u = exp(sqrt(dt)*sigma);
d = 1/u;
S = zeros(M+1,1);
NP = (exp(r*dt)-d)/(u-d);
VectorP = zeros(M+1,1);
for j = M:-1:0
S(j+1,1) = S0*u^(j)*d^(M-j);
VectorP(j+1,1) = NP^(j) * (1-NP)^(M-j)* nchoosek(M,j);
end
VectorC = max([S - K, zeros(M+1,1)],[],2);
CallP = mean(VectorC .* VectorP) * exp(-r* T);
end
这时候会出现问题,nchoosek(M,j),当M很大时候,Matlab无法计算,但是二叉树定价在200期左右才收敛。请问大家有没有办法解决这个问题,如何通过风险中性一步计算出期权价格?
谢谢大家!