public static object AmericanFutureOptionImpliedVol( [ExcelArgument(Description = "Time-to-expiry")] double T, [ExcelArgument(Description = "Strike")] double K, [ExcelArgument(Description = "Forward")] double F, [ExcelArgument(Description = "Discounting rate")] double R, [ExcelArgument(Description = "Option Premium")] double PV, [ExcelArgument(Description = "Call or Put")] string CP, [ExcelArgument(Description = "Pricing method (Defult Trinomial)")] string Method) { return(ExcelHelper.Execute(_logger, () => { if (!Enum.TryParse(CP, out OptionType optType)) { return $"Could not parse call or put flag - {CP}"; } if (!Enum.TryParse(Method, out AmericanPricingType method)) { return $"Could not parse pricing type - {Method}"; } if (method == AmericanPricingType.Binomial) { return BinomialTree.AmericanFuturesOptionImpliedVol(F, K, R, T, PV, optType); } else { return TrinomialTree.AmericanFuturesOptionImpliedVol(F, K, R, T, PV, optType); } })); }
public void ImpliedVolFacts() { var t = 1.0; var k = 120; var f = 100; var vol = 0.32; var rf = 0.05; var cp = OptionType.P; var PVbi = BinomialTree.AmericanFutureOptionPV(f, k, rf, t, vol, cp); var PVtri = TrinomialTree.AmericanFutureOptionPV(f, k, rf, t, vol, cp); var impliedVolBi = BinomialTree.AmericanFuturesOptionImpliedVol(f, k, rf, t, PVbi, cp); var impliedVolTri = TrinomialTree.AmericanFuturesOptionImpliedVol(f, k, rf, t, PVtri, cp); Assert.Equal(vol, impliedVolBi, 10); Assert.Equal(vol, impliedVolTri, 10); }