Exemplo n.º 1
0
 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);
         }
     }));
 }
Exemplo n.º 2
0
        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);
        }