コード例 #1
0
        public void FixedPaymentStreamLevelFunctionTest()
        {
            PaymentStream.Direction direction = PaymentStream.Direction.Payer;
            decimal        notional           = 1239771.88m;
            List <decimal> notionals          = new List <decimal>(40);

            for (int i = 0; i < 40; ++i)
            {
                notionals.Add(notional);
            }

            DateTime referenceDate = new DateTime(2009, 7, 1);


            FixedPaymentStream fixedPaymentStream = new FixedPaymentStream(direction,
                                                                           notionals,
                                                                           fixedYearFractions,
                                                                           fixedCashflows,
                                                                           fixedDiscountFactors,
                                                                           0.0m);

            decimal calculatedLevelFunction = fixedPaymentStream.LevelFunction();
            // decimal calculatedAccruedNPV = fixedPaymentStream.AccruedNPV();
            //fixedPaymentStream.AccruedNPV(4.22095m/100.0m);

            //double expectedAccruedNPV = -397825.73;

            double expectedLevelFunction = -7.60223072;

            Assert.AreEqual(Convert.ToDouble(calculatedLevelFunction), expectedLevelFunction, 5e-3);
            // Assert.AreEqual(Convert.ToDouble(calculatedAccruedNPV), expectedAccruedNPV, 0.2);
        }
コード例 #2
0
 public decimal BreakEvenRate(PaymentStream.Direction direction)
 {
     if (direction == _payerPaymentStream.Dir)
     {
         if (_payerPaymentStream.GetType() == typeof(FixedPaymentStream))
         {
             return((((_receiverPaymentStream.NPV() / getSpotExchangeRate(direction)) - _payerPaymentStream.PrincipleExchangePV()) / _payerPaymentStream.AccruedNPVOfNotional()) * -1.0m);
         }
         //else
         //{
         //      find the spread over floating rate
         //}
     }
     else
     {
         if (_receiverPaymentStream.GetType() == typeof(FixedPaymentStream))
         {
             return((((_payerPaymentStream.NPV() / getSpotExchangeRate(direction)) - _receiverPaymentStream.PrincipleExchangePV()) / _receiverPaymentStream.AccruedNPVOfNotional()) * -1.0m);
         }
         //else
         //{
         //      find the spread over floating rate
         //}
     }
     return(0.0m);
 }
コード例 #3
0
 public CrossCurrencyIRSwap(PaymentStream payerPaymentStream, PaymentStream receiverPaymentStream,
                            decimal spotExchangeRate, PaymentStream.Direction direction)
 {
     _payerPaymentStream    = payerPaymentStream;
     _receiverPaymentStream = receiverPaymentStream;
     _spotExchangeRate      = spotExchangeRate;
     _spotExchangeRateBase  = direction;
 }
コード例 #4
0
        public decimal getSpotExchangeRate(PaymentStream.Direction direction)
        {
            if (direction == _spotExchangeRateBase)
            {
                return(_spotExchangeRate);
            }

            return(1.0m / _spotExchangeRate);
        }
コード例 #5
0
        public decimal SpotExchangeRate(PaymentStream.Direction conversionBase)
        {
            if (conversionBase == _payerPaymentStream.Dir)
            {
                return(_receiverPaymentStream.PrincipleExchange / _payerPaymentStream.PrincipleExchange);
            }

            return(_payerPaymentStream.PrincipleExchange / _receiverPaymentStream.PrincipleExchange);
        }
コード例 #6
0
        public void CrossCurrencyIRSwapTest()
        {
            #region Receiver Leg of the swap
            PaymentStream.Direction direction = PaymentStream.Direction.Receiver;
            decimal        notional           = 1000000.0m;
            List <decimal> notionals          = new List <decimal>(40);
            for (int i = 0; i < 40; ++i)
            {
                notionals.Add(notional);
            }

            DateTime referenceDate = new DateTime(2009, 7, 1);


            FloatingPaymentStream floatingPaymentStream = new FloatingPaymentStream(direction,
                                                                                    notionals,
                                                                                    floatingYearFractions,
                                                                                    floatingCashflows,
                                                                                    floatingDiscountFactors,
                                                                                    0.0m);
            #endregion

            #region Payer Leg of the swap
            PaymentStream.Direction dir   = PaymentStream.Direction.Payer;
            decimal        payerNotional  = 1239771.88m;
            List <decimal> payerNotionals = new List <decimal>(40);
            for (int i = 0; i < 40; ++i)
            {
                payerNotionals.Add(payerNotional);
            }

            DateTime payerReferenceDate = new DateTime(2009, 7, 1);


            FixedPaymentStream fixedPaymentStream = new FixedPaymentStream(dir,
                                                                           payerNotionals,
                                                                           fixedYearFractions,
                                                                           fixedCashflows,
                                                                           fixedDiscountFactors,
                                                                           0.0m);

            #endregion


            CrossCurrencyIRSwap swap = new CrossCurrencyIRSwap(fixedPaymentStream, floatingPaymentStream, 0.8066m, PaymentStream.Direction.Payer);
            decimal             ber  = swap.BreakEvenRate(PaymentStream.Direction.Payer);
        }
コード例 #7
0
        public void FloatingPaymentStreamConstructorTest()
        {
            PaymentStream.Direction direction = PaymentStream.Direction.Payer;
            decimal notional = 1000000.0m;

            List <decimal> notionals = new List <decimal>();

            for (int i = 0; i < 40; ++i)
            {
                notionals.Add(notional);
            }

            DateTime referenceDate = new DateTime(2009, 7, 1);


            FloatingPaymentStream floatingPaymentStream = new FloatingPaymentStream(direction,
                                                                                    notionals,
                                                                                    floatingYearFractions,
                                                                                    floatingCashflows,
                                                                                    floatingDiscountFactors,
                                                                                    0.0m);

            #region expected forward rates

            decimal[] expectedForwardRates = { 0.59494m / 100.0m,  0.6464m / 100.0m, 0.98232m / 100.0m, 1.25659m / 100.0m,
                                               1.62129m / 100.0m, 1.99391m / 100.0m, 2.37068m / 100.0m, 2.70303m / 100.0m,
                                               3.02493m / 100.0m, 3.29518m / 100.0m, 3.55722m / 100.0m, 3.74159m / 100.0m,
                                               3.88433m / 100.0m, 3.85484m / 100.0m,  4.0788m / 100.0m, 4.29895m / 100.0m,
                                               4.2114m / 100.0m,  4.40091m / 100.0m, 4.58781m / 100.0m, 4.76869m / 100.0m,
                                               4.40348m / 100.0m, 4.54149m / 100.0m, 4.67837m / 100.0m, 4.78932m / 100.0m,
                                               4.49065m / 100.0m, 4.59064m / 100.0m, 4.68818m / 100.0m, 4.78657m / 100.0m,
                                               4.59108m / 100.0m, 4.66833m / 100.0m, 4.74582m / 100.0m, 4.82381m / 100.0m,
                                               4.59301m / 100.0m,  4.6531m / 100.0m, 4.71192m / 100.0m, 4.76986m / 100.0m,
                                               4.69361m / 100.0m, 4.74621m / 100.0m, 4.79761m / 100.0m, 4.84809m / 100.0m };

            #endregion
            List <decimal> calculatedForwardRates = new List <decimal>();
            calculatedForwardRates.AddRange(floatingPaymentStream.ForwardRates);

            int len = floatingPaymentStream.ForwardRates.Count;
            for (int i = 0; i < len; ++i)
            {
                Assert.AreEqual(Convert.ToDouble(calculatedForwardRates[i]), Convert.ToDouble(expectedForwardRates[i]), 5e-3);
            }
        }