用二叉树法求解美式期权的定价推导,用matlab操作的代码应该是什么
时间: 2024-03-02 07:52:53 浏览: 140
美式期权二叉树定价及matlab程序.docx
二叉树法是一种常见的期权定价方法,其中最著名的是Cox-Ross-Rubinstein(CRR)模型。下面是基于CRR模型的二叉树法定价美式期权的推导过程:
1. 建立二叉树模型:根据所给的标的资产价格、期权价格、波动率和时间跨度,按照CRR模型建立一棵二叉树。每个节点代表一个标的资产价格,每个节点的子节点分别代表在下一时间步长内标的资产价格上涨或下跌的情况。在树的底部,每个节点对应的是到期时的标的资产价格。
2. 计算期权价格:从树的底部开始,按照以下步骤计算每个节点的期权价格:
(a) 对于期权到期时的节点,期权价格等于最终支付的现金流(如看涨期权的现金流等于到期时标的资产价格与行权价之差)。
(b) 对于其他节点,期权价格等于在该节点下一时间步长内行权的期望现值折现。具体来说,对于看涨期权,期望现值折现等于期望上涨后的期权价格和期望下跌后的期权价格的加权平均值,再乘以折现因子;对于看跌期权,期望现值折现等于期望上涨后的期权价格和期望下跌后的期权价格的加权平均值,再乘以折现因子。
3. 反向传播:从树的底部开始,按照以下步骤向上反向传播:
(a) 对于期权到期时的节点,期权价值等于最终支付的现金流。
(b) 对于其他节点,期权价值等于在该节点下一时间步长内行权的期望现值折现减去当前的标的资产价格与行权价之差。
4. 逐步比较:从根节点开始,按照以下步骤逐步比较每个节点的期权价值和期权价格:
(a) 对于期权到期时的节点,期权价值等于最终支付的现金流。
(b) 对于其他节点,如果期权价值大于期权价格,那么该节点对应的标的资产价格为美式期权的最优行权价格;如果期权价值小于期权价格,那么该节点对应的标的资产价格不是美式期权的最优行权价格,该节点的期权价值等于期权价格,继续向上比较。
根据以上步骤,我们可以编写如下的MATLAB代码来实现美式期权的定价:
```matlab
function price = american_option(S0, X, r, sigma, T, N)
% S0: 标的资产初始价格
% X: 行权价格
% r: 无风险利率
% sigma: 波动率
% T: 到期时间
% N: 二叉树步数
% 计算二叉树参数
dt = T / N;
u = exp(sigma * sqrt(dt));
d = 1 / u;
p = (exp(r * dt) - d) / (u - d);
% 初始化二叉树
stock_tree = zeros(N+1, N+1);
stock_tree(1,1) = S0;
for i = 2:N+1
stock_tree(1:i-1,i) = stock_tree(1:i-1,i-1) .* u;
stock_tree(i,i) = stock_tree(i-1,i-1) .* d;
end
% 计算期权价值
option_tree = zeros(N+1, N+1);
for i = 1:N+1
option_tree(i,N+1) = max(stock_tree(i,N+1) - X, 0);
end
for j = N:-1:1
for i = 1:j
option_tree(i,j) = max(exp(-r*dt)*(p*option_tree(i,j+1)+(1-p)*option_tree(i+1,j+1)), ...
max(stock_tree(i,j)-X, 0));
end
end
% 反向传播
value_tree = zeros(N+1, N+1);
for i = 1:N+1
value_tree(i,N+1) = max(stock_tree(i,N+1)-X, 0);
end
for j = N:-1:1
for i = 1:j
value_tree(i,j) = max(exp(-r*dt)*(p*value_tree(i,j+1)+(1-p)*value_tree(i+1,j+1)-...
(stock_tree(i,j)-X)), 0);
end
end
% 逐步比较
for j = 1:N
for i = 1:j
if value_tree(i,j) > option_tree(i,j)
option_tree(i,j) = value_tree(i,j);
end
end
end
% 返回期权价格
price = option_tree(1,1);
end
```
该代码中,我们首先根据输入参数计算二叉树参数,然后初始化标的资产价格和期权价值的二叉树,接着按照上述步骤计算期权价值和期权价格,最后返回期权价格。
阅读全文