Пример #1
0
        public static double GetATMfwd(ZeroCurve myZero, DivList myDivList, double spot, double t)
        {
            double spotstar = spot;

            //compute the discounted dividends and take off spot
            if ((myDivList != null) && (myZero != null))
            {
                for (int idx = 0; idx < myDivList.Divpoints; idx++)
                {
                    if (myDivList.GetT(idx) <= t)
                    {
                        double d1 = myDivList.GetD(idx);
                        double r1 = myZero.LinInterp(myDivList.GetT(idx));
                        double t1 = Math.Exp(-r1 * myDivList.GetT(idx));
                        spotstar -= d1 * t1;
                    }
                }
            }
            //gross up to expiry to get atfwd
            if (myZero != null)
            {
                double r = myZero.LinInterp(t);
                return(spotstar * Math.Exp(r * t));
            }
            return(0);
        }
Пример #2
0
        public void NonFlatRates()
        {
            ZeroCurve myZero = new ZeroCurve();

            myZero.Ratepoints = 2;
            myZero.MakeArrays();
            myZero.SetR(0, 0.05, 1.0);
            myZero.SetR(1, 0.075, 2.0);

            //test interpolation priot to point 0
            double tTime = 0.5;
            double val   = myZero.LinInterp(tTime);

            Assert.IsTrue(val > 0.0499999999);
            Assert.IsTrue(val < 0.050000001);

            //test interpolation prior to point 1
            tTime = 1.5;
            val   = myZero.LinInterp(tTime);
            Assert.IsTrue(val > 0.062499999999);
            Assert.IsTrue(val < 0.06250000001);

            //test interpolation post  point 1
            tTime = 2.5;
            val   = myZero.LinInterp(tTime);
            Assert.IsTrue(val > 0.07499999999);
            Assert.IsTrue(val < 0.0750000001);

            //test forward rates

            //test interpolation priot to point 0
            double tl = 0.25;

            tTime = 0.5;
            val   = myZero.ForwardRate(tl, tTime);
            Assert.IsTrue(val > 0.0499999999);
            Assert.IsTrue(val < 0.050000001);

            //test interpolation prior to point 1
            tTime = 1.5;
            val   = myZero.ForwardRate(tl, tTime);
            Assert.IsTrue(val > 0.06499999); /// 0.065
            Assert.IsTrue(val < 0.065000001);

            //test interpolation post  point 1
            tTime = 2.5;
            val   = myZero.ForwardRate(tl, tTime); ///0.077778
            Assert.IsTrue(val > 0.0777777);
            Assert.IsTrue(val < 0.07777778);
        }
Пример #3
0
        //fill grid forward rates
        private void FillForwardRate(ZeroCurve myZero)
        {
            double dt = Tau / Gridsteps;

            if (myZero != null)
            {
                if (flatFlag)
                {
                    flatRate = myZero.LinInterp(Tau);
                }
                for (int idx = 0; idx < Gridsteps; idx++)
                {
                    SetR(idx, flatFlag ? flatRate : myZero.ForwardRate(idx * dt, (idx + 1) * dt));
                }
            }
        }
Пример #4
0
 private void MakeSpotStar(ZeroCurve myZero, DivList myDivList)
 {
     SpotStart = Spot;
     if ((myDivList != null) && (myZero != null))
     {
         for (int idx = 0; idx < myDivList.Divpoints; idx++)
         {
             if (myDivList.GetT(idx) <= Tau)
             {
                 double d1 = myDivList.GetD(idx);
                 double r1 = myZero.LinInterp(myDivList.GetT(idx));
                 double t1 = Math.Exp(-r1 * myDivList.GetT(idx));
                 SpotStart -= d1 * t1;
             }
         }
     }
 }