private double GetFirstDerivativeToStrike(double t, double k) { double forwardPrice = PriceBump.BumpForward(k); double backwardPrice = PriceBump.BumpBackward(k); return((ImpliedVol.GetValue(t, forwardPrice) - ImpliedVol.GetValue(t, backwardPrice)) / (forwardPrice - backwardPrice)); }
private double GetSecondDerivativeToStrike(double t, double k) { // there is possibility that the bump sizes are different between forward and backward. // we use the minimum of them to calculate the second order derivative. double bumpsize = PriceBump.MinBump(k); return((ImpliedVol.GetValue(t, k + bumpsize) + ImpliedVol.GetValue(t, k - bumpsize) - 2 * ImpliedVol.GetValue(t, k)) / (bumpsize * bumpsize)); }
private double MaxY() { var solidMaxY = ImpliedVol.MaxY(); return(PriceBump.BumpForwardInverse(solidMaxY)); }
private double MinY() { var solidMinY = ImpliedVol.MinY(); return(PriceBump.BumpBackwardInverse(solidMinY)); }