Black-Scholes期权定价公式是最简单的,这里放出来主要是因为其他的美式期权定价也要用到。
这个类里可以求期权价格、希腊字母、隐含波动率。
唯一可能造成不同Black-Scholes期权定价程序结果不一致的原因就是累计正态分布实现方法不同。众所周知,累计正态分布是没有解析表达式计算的,只能通过数值方法逼近。这里提供了两种算法:
1)Financial Numerical Recipes in C++这本书附录部分采用的算法
2)Bagby, R. J. "Calculating Normal Probabilities." Amer. Math. Monthly 102, 46-49, 1995这篇论文里的方法
public class BS
{
//S:标的资产现价
//X:执行价
//r:无风险利率
//q:连续分红率,Cost of Carry = r-q
//sigma:波动率
//t:距离到期时间
//PutCall:Call/Put
public enum EPutCall
{
Call,
Put,
}
public EPutCall PutCall
{
get;
set;
}
public double GetOptionValue(double S, double X, double q, double r,
double sigma, double t, EPutCall PutCall)
{
double t_sqrt = Math.Sqrt(t);
double sigma2