这里的期权定价算法是指Bjerksund and Stensland分别在1993年和2002年的两篇论文里提出的算法,2002年是1993的改进,更精确。这个类原本就是为Bjerksund and Stensland( 2002)写得,不过由于稍作改动就可以得出Bjerksund and Stensland(1993)的结果,所以也加入了1993年的算法。
由于原文只是给出了期权的定价算法,但是没有给出希腊字母表达式,所以,这里也就只是写了期权定价的程序,如果要求希腊字母值能很简单地求出来,就不写了。
Bjerksund and Stensland的美式期权定价算法中有一个特别重要的问题就是里面用到了标准二元正态分布的累积分布函数,期权定价的精确性直接受制于累计分布函数的数值计算结果。这里用的是Drezner and Wesolowsky(1990),实际上这个还不够精确。最好使用Genz(2004)年的方法。
Bjerksund and Stensland的美式期权定价算法另有一个Bug就是,wilmott论坛上好像有人反映用quantlib中带的程序竟然求出了期权价格为负。。。不知道是程序的问题还是什么别的。感觉还是Ju and Zhong(1999)的算法更靠谱
public class BjerksundStensland
{
//S:标的资产现价
//X:执行价
//r:无风险利率
//q:连续分红率,Cost of Carry = r-q
//sigma:波动率
//t:距离到期时间
//PutCall:Call/Put
//Year:Paper1993/Paper2002,选择论文的年份
public enum EPutCall
{
Call,
Put,
}
public EPutCall PutCall
{
get;
set;
}
public enum EYear
{
Paper1993,
Paper2002,
}
public EYear Year
{
get;
set;
}
public double GetOptionV