grass 发表于 2009-6-4 21:17:27

美式期权边界问题

本帖最后由 grass 于 2009-6-4 21:40 编辑

我在用Matlab做美式期权边界问题。为解下题已经苦思三个星期了. 特此请前辈们指点密经。


X=100;
r=0.05;
q=0;
sigma=0.3;
T=1;
n=2:1:1000;
t=T/n;







在算B1时f =r*X*exp(-r.*(T-t))*N4 - q*B.*exp((-q).*(T-t)).*N3
因为每求一次B, i会从1走到n-1。 因为i 在变所以 (T-t)会变成(n-i) Δt,N3, N4会随着(n-i) Δt改动。每个(n-i) Δt都会配对的B.比如,(2-1) Δt和 B T-1*Δt= 92.4808是一组的.


1.在求B2的公式里要用到B1. 在求B3的公式里要用到B2.所以是一步一步算的。
2.每算一次nΔt都会变, 因为n从2走到1000。
3.每算一次∑(.)号里的内容都会变多,因为n从2走到1000。


B0=X=100
求:
B2?
B3?
B4?

B1000?

B1,n=1我是这么求的:
Matlab Code


function y=P(B)

S0=100;
X=100;
r=0.05;
q=0;
sigma=0.3;
n=52;
T=52/52;
t=(51/52);

% S = stock price at time t
% X = strike price
% r = interest rate
% q = dividend yield
% sigma = volatility
% T-t = time to maturity

d1 = (log(B/X) + (r-q+0.5.*sigma.^2)*(T-t))/(sigma.*sqrt(T-t));
d2 = d1 - sigma.*sqrt(T-t);
N1 = 0.5 + 0.5*erf(d1./sqrt(2));
N2 = 0.5 + 0.5*erf(d2./sqrt(2));
N3 = 1-N1;
N4 = 1-N2;
BSM_Put = X*exp(-r.*(T-t))*N4 - B.*exp((-q).*(T-t)).*N3;

delta_t = 1/52;

y1 = 0;
y2 = r*X*exp(-r.*(T-t))*N4 - q*B.*exp((-q).*(T-t)).*N3;

integral = delta_t*(y1 + y2)/2;

y = BSM_Put+integral-X+B;

%z=fzero(@P,90)
%92.4808

答案应该类似于图上线的走动。







问题:

如果从n=2算到1000。每算一次n都需进行∑(.)号里公式改动。而且随着n变大,∑(.)号里的公式也会变长。
算B1时还可以,我用的是很土的办法,但n=1000的时候咋办哪?有方法让公式自动改变吗?
第二个问题是怎样能把B1直接转到算B2的公式里面?因为算B2需要B0和B1,算B3需要B0,B1和B2.

messenger 发表于 2009-6-4 21:24:33

你只是描述了问题,没说你遇到了什么困难呀。

从你的描述来看,问题只是麻烦一些,做的时候仔细一些就可以了。

grass 发表于 2009-6-4 21:39:59

如果从n=2算到1000。每算一次n都需进行∑(.)号里公式改动。而且随着n变大,∑(.)号里的公式也会变长。
算B1时还可以,我用的是很土的办法,但n=1000的时候咋办哪?有方法让公式自动改变吗?
第二个问题是怎样能把B1直接转到算B2的公式里面?因为算B2需要B0和B1,算B3需要B0,B1和B2.

messenger 发表于 2009-6-4 22:28:57

又看了一下你的问题,真够复杂的。

不过,你说的这两个问题,如果用递归,这两个问题就都不存在了。

但是,递归速度慢,而且技巧要求比较高。然而,如果不用递归,感觉你这个问题没办法解。

grass 发表于 2009-6-5 03:47:25

用递归是没错。就是我对编程了解不够深奥,没法编。周围的人都不会。有高手能解释下吗?

feynmand 发表于 2009-6-5 04:02:23

递归的思想一般讲编程的书上都会提到的,你找来看看再写两个例子就好了。具体的别人在这里给你讲了和你自己去看书有什么区别?遇到具体问题再来问。
页: [1]
查看完整版本: 美式期权边界问题