public double PutPrice(EuropeanCallPutParams optionParameters) { double callPrice = CallPrice(optionParameters); // put-call parity return(callPrice - optionParameters.s0 + optionParameters.strike * Math.Exp(-p.r * optionParameters.T)); }
public double CallPrice(EuropeanCallPutParams optionParameters) { double r = p.r; // Interest rate double sig = p.sigma; // Volatility double K = optionParameters.strike; // Strike price double T = optionParameters.T; // Expiry date double S = optionParameters.s0; double tmp = sig * Math.Sqrt(T); double d1 = (Math.Log(S / K) + (r + 0.5 * sig * sig) * T) / tmp; double d2 = d1 - tmp; return(S * SpecialFunctions.N(d1) - (K * Math.Exp(-r * T) * SpecialFunctions.N(d2))); }