public double CallPremium(CalculatorValues Values) { Values.CalcForwardPrice(); return((Values.ForwardPrice * NormDistZ(D1(Values)) - Values.Strike * NormDistZ(D2(Values))) * Values.Interest); }
public double D1(CalculatorValues Values) { double pt1 = (Math.Log(Values.ForwardPrice / Values.Strike) + Math.Pow(Values.Volatility, 2) * (Values.QtdDaysExpire / 252.0) / 2.0); double pt2 = Values.Volatility * Math.Pow(Values.QtdDaysExpire / 252, (1.0 / 2.0)); return(pt1 / pt2); }
public double CallPremium(CalculatorValues Values) { return(Math.Exp(-Values.Dividend * Values.TimeAnually) * Values.UnderlinePrice * NormDistZ(D1(Values)) - Values.Strike * Math.Exp(-Values.RiskFreeRate * Values.TimeAnually) * NormDistZ(D1(Values) - Values.Volatility * Math.Sqrt(Values.TimeAnually))); }
public double PutPremium(CalculatorValues Values) { double d2 = D2(Values); // optionValue = X * Math.Exp(-r * T) * CumulativeNormalDistributionFun(-d2) - S * CumulativeNormalDistributionFun(-d1); return((Values.Strike * Math.Exp(-Values.RiskFreeRate * Values.TimeAnually) * NormDistZ(-D2(Values))) - (Math.Exp(-Values.Dividend * Values.TimeAnually) * Values.UnderlinePrice * NormDistZ(-D1(Values)))); }
public double D2(CalculatorValues Values) { return(D1(Values) - Values.Volatility * Math.Pow((Values.QtdDaysExpire / 252.0), (1.0 / 2.0))); }
double NdD1(CalculatorValues Values) { return(Math.Exp(-Math.Pow(D1(Values), 2) / 2) / (Math.Sqrt(2 * Math.PI))); }
public double D2(CalculatorValues Values) { return(D1(Values) - Values.Volatility * Math.Sqrt(Values.TimeAnually)); }
public double D1(CalculatorValues Values) { return((Math.Log(Values.UnderlinePrice / Values.Strike) + (Values.RiskFreeRate - Values.Dividend + 0.5 * Math.Pow(Values.Volatility, 2)) * Values.TimeAnually) / (Values.Volatility * (Math.Sqrt(Values.TimeAnually)))); }