コード例 #1
0
        /// <summary>
        /// Removes the expiry.
        /// </summary>
        /// <param name="expiry">The expiry.</param>
        public void RemoveExpiry(ForwardExpiry expiry)
        {
            ForwardExpiry matchedExpiry = ForwardExpiryHelper.FindExpiry(expiry.ExpiryDate, expiry.FwdPrice, expiry.InterestRate, _expiries);

            if (matchedExpiry == null)
            {
                _expiries.Remove(matchedExpiry);
            }

            if (_rawExpiryDates.Contains(expiry.ExpiryDate))
            {
                _rawExpiryDates.Remove(expiry.ExpiryDate);
                _expiries.Remove(expiry);
            }
        }
コード例 #2
0
ファイル: FittingTests.cs プロジェクト: zhangz/Highlander.Net
        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);
        }
コード例 #3
0
 /// <summary>
 /// Adds the expiry.
 /// </summary>
 /// <param name="expiry">The expiry.</param>
 public void AddExpiry(ForwardExpiry expiry)
 {
     ForwardExpiryHelper.AddExpiry(expiry, _expiries);
     _rawExpiryDates.Add(expiry.ExpiryDate);
 }