这篇日志里给出了一个非常经典的美式期权定价算法,最先是Barone Adesi and Whaley(1987)提出的,实际上就是将美式期权的价值视为欧式期权价值加上一个美式期权带来的溢价。这种算法快速,但是精确度不够高,后来的其他学者提出了一些改进方法,最有名的是Ju and Zhong(1999),这个算法会在另一篇日志中。
该算法还有一个缺点就是没有希腊字母的解析表达式,所以这个类中就只给出了求期权价值的功能。Ju and Zhong(1999)在提高算法精确性时还给出了三个希腊字母(Delta、Gamma、Theta)的表达式。
需要注意的是:
1)这里用到了之前日志里的BS公式的类 http://blog.csdn.net/u010501526/article/details/8880225
2)这里设r和q如果等于0,那么就令其为1e-10这样一个很小的数,主要是因为数值计算方便,否则可能出现无穷大或者无穷小之类数值结果
public class BAW87
{
//S:标的资产现价
//X:执行价
//r:无风险利率
//q:连续分红率,Cost of Carry = r-q
//sigma:波动率
//t:距离到期时间
//PutCall:Call/Put
public enum EPutCall
{
Call,
Put,
}
public EPutCall PutCall
{
get;
set;
}