Ejemplo n.º 1
0
        public void TestFitter()
        {
            var stock = TestDataHelper.GetStock("AGK");

            Assert.AreEqual("AGK", stock.Name);
            Stock stockObject = TestHelper.CreateStock(stock);

            stockObject.VolatilitySurface.Calibrate();
            decimal spot   = stockObject.Spot;
            var     fwdexp = ForwardExpiryHelper.FindExpiry(new DateTime(2016, 9, 9), stockObject.VolatilitySurface.NodalExpiries.ToList());
            int     i      = -1;
            var     str    = StrikeHelper.FindStrikeWithPrice(1404, new List <Strike>(fwdexp.Strikes), out i);

            Assert.AreNotEqual(i, -1);
            double fwd    = Math.Round(fwdexp.Strikes[i].InterpModel.WingParams.AtmForward, 7);
            double cc     = Math.Round(fwdexp.Strikes[i].InterpModel.WingParams.CallCurve, 7);
            double vc     = Math.Round(fwdexp.Strikes[i].InterpModel.WingParams.CurrentVol, 7);
            double dc     = Math.Round(fwdexp.Strikes[i].InterpModel.WingParams.DnCutoff, 7);
            double dsr    = Math.Round(fwdexp.Strikes[i].InterpModel.WingParams.Dsr, 7);
            double pc     = Math.Round(fwdexp.Strikes[i].InterpModel.WingParams.PutCurve, 7);
            double reffwd = Math.Round(fwdexp.Strikes[i].InterpModel.WingParams.RefFwd, 7);
            double refvol = Math.Round(fwdexp.Strikes[i].InterpModel.WingParams.RefVol, 7);
            double scr    = Math.Round(fwdexp.Strikes[i].InterpModel.WingParams.Scr, 7);
            double sr     = Math.Round(fwdexp.Strikes[i].InterpModel.WingParams.SlopeRef, 7);
            double ssr    = Math.Round(fwdexp.Strikes[i].InterpModel.WingParams.Ssr, 7);
            double uc     = Math.Round(fwdexp.Strikes[i].InterpModel.WingParams.UpCutoff, 7);
            double usr    = Math.Round(fwdexp.Strikes[i].InterpModel.WingParams.Usr, 7);
            double vcr    = Math.Round(fwdexp.Strikes[i].InterpModel.WingParams.Vcr, 7);

            Assert.AreNotEqual(spot, 0);
            Assert.AreEqual(fwd, 1682);
            Assert.AreEqual(cc, 0.0705147);
            Assert.AreEqual(vc, 0.2933592);
            Assert.AreEqual(dc, Math.Round(-0.5 - Math.Log(Convert.ToDouble(fwdexp.FwdPrice / spot))), 7);
            Assert.AreEqual(uc, Math.Round(0.5 - Math.Log(Convert.ToDouble(fwdexp.FwdPrice / spot))), 7);
            Assert.AreEqual(dsr, 0.20);
            Assert.AreEqual(pc, 0.0025281);
            Assert.AreEqual(reffwd, 1682);
            Assert.AreEqual(refvol, vc);
            Assert.AreEqual(scr, 0);
            Assert.AreEqual(sr, -0.0565697);
            Assert.AreEqual(ssr, 100);
            Assert.AreEqual(usr, 0.20);
            Assert.AreEqual(vcr, 0.0);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Adds the strike.
 /// </summary>
 /// <param name="strike">The strike.</param>
 /// <param name="nodal"></param>
 /// <example>
 ///     <code>
 ///     // Create a Strike instance
 ///     OptionPosition callOption = new OptionPosition("123", 456, PositionType.Call);
 ///     OptionPosition putOption = new OptionPosition("123", 789, PositionType.Put);
 ///     Strike strike = new Strike(123, callOption, putOption);
 ///
 ///     // Adds a strike to an expiry instance
 ///     ForwardExpiry expiry = new ForwardExpiry(new DateTime(2008,10,21), 400.97, 8.4);
 ///     expiry.AddStrike(strike);
 ///     </code>
 /// </example>
 public void AddStrike(Strike strike, bool nodal)
 {
     StrikeHelper.AddStrike(strike, _strikes);
     strike.NodalPoint = nodal;
     RawStrikePrices.Add(strike.StrikePrice);
 }