コード例 #1
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);
        }
コード例 #2
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);
            }
        }
コード例 #3
0
        public void CrossCurrencyIRSwapTest1()
        {
            #region Floating Leg input data

            List <decimal> floatingNotionals = new List <decimal>();
            for (int i = 0; i < 40; ++i)
            {
                floatingNotionals.Add(1000000.0m);
            }

            decimal[] floatingCashflowArray = { 1413.758339m,    1357.325m, 2105.335574m, 2643.196134m,
                                                3435.867838m,    4208.025m, 5167.232823m, 6026.930053m,
                                                6967.466788m, 7659.166734m, 8360.802018m, 8885.113689m,
                                                9413.389053m, 9677.224613m,       10084m, 10805.54232m,
                                                10317.46796m, 10808.16019m,     11046.7m, 11637.15594m,
                                                11250.75686m,  11903.5855m, 11520.39757m, 12271.52705m,
                                                11829.69033m,   11489.875m, 11890.38872m, 12168.57066m,
                                                11778.58132m, 11876.46066m,   11962.925m, 12318.87233m,
                                                11912.36465m, 12093.83465m,   12004.925m, 12308.25566m,
                                                11932.40021m, 12075.81799m,     11950.5m, 12219.1515m };

            List <decimal> floatingCashflows = new List <decimal>();
            floatingCashflows.AddRange(floatingCashflowArray);


            decimal[] floatingDFArray = { 0.99996697m, 0.99855634m, 0.99721368m, 0.99511863m, 0.99249526m,
                                          0.98909686m, 0.98496355m, 0.97990017m, 0.97402975m,
                                          0.96729018m,   0.959942m, 0.95198266m, 0.94359868m,
                                          0.93479904m, 0.92583948m, 0.91659652m, 0.90679809m,
                                          0.89753777m, 0.88794078m, 0.87823913m,  0.8681365m,
                                          0.85847797m, 0.84837922m, 0.83872383m, 0.82855617m,
                                          0.81886731m, 0.80956909m, 0.80005611m, 0.79043761m,
                                          0.78123576m, 0.77206787m, 0.76294086m, 0.75365666m,
                                          0.74478451m, 0.73588485m, 0.72715541m, 0.71831421m,
                                          0.70984407m,  0.7013744m, 0.69309162m, 0.68472485m };

            List <decimal> floatingDFs = new List <decimal>();
            floatingDFs.AddRange(floatingDFArray);


            decimal[] floatingAccrualFactorsArray = { 0.26388889m,       0.25m, 0.25277778m, 0.25277778m,
                                                      0.25555556m,       0.25m, 0.25277778m, 0.25277778m,
                                                      0.25555556m, 0.25277778m, 0.25277778m, 0.25277778m,
                                                      0.25555556m, 0.25555556m,       0.25m, 0.25277778m,
                                                      0.25555556m, 0.25555556m,       0.25m, 0.25277778m,
                                                      0.25555556m, 0.26111111m, 0.24444444m, 0.25277778m,
                                                      0.26388889m,       0.25m, 0.25277778m, 0.25277778m,
                                                      0.25555556m, 0.25277778m,       0.25m, 0.25277778m,
                                                      0.25555556m, 0.25555556m,       0.25m, 0.25277778m,
                                                      0.25555556m, 0.25555556m,       0.25m, 0.25277778m };

            List <decimal> floatingAccrualFactors = new List <decimal>();
            floatingAccrualFactors.AddRange(floatingAccrualFactorsArray);

            #endregion

            #region Fixed Leg input data
            List <decimal> fixedNotionals = new List <decimal>();
            for (int i = 0; i < 40; ++i)
            {
                fixedNotionals.Add(1251486.140m);
            }

            decimal[] fixedCashflowArray = { 12769.54216m,  12268.9029m, 12169.50037m,  12046.9249m,
                                             11920.08957m, 11782.57773m, 11636.61242m, 11483.93456m,
                                             11324.49385m, 11279.68822m,   10985.172m, 10807.51677m,
                                             10755.52554m,  10581.4098m, 10181.80822m, 10119.20911m,
                                             10066.37768m, 9901.496597m, 9527.773713m, 9471.434113m,
                                             9431.287684m, 9486.829505m, 8751.219051m, 8911.522481m,
                                             9061.257678m, 8638.242213m, 8505.583569m, 8374.380285m,
                                             8254.568021m, 8224.448529m, 7931.557441m, 7904.578399m,
                                             7876.463967m, 7763.082748m, 7487.306473m, 7462.646259m,
                                             7441.192267m, 7339.380491m, 7083.929521m, 7066.285688m };

            List <decimal> fixedCashflows = new List <decimal>();
            fixedCashflows.AddRange(fixedCashflowArray);


            decimal[] fixedDFArray = { 0.99998157m, 0.99049958m, 0.98303994m, 0.97507536m, 0.96525406m,
                                       0.95509144m, 0.94407337m, 0.93237797m, 0.92014473m,
                                       0.90736962m, 0.89395592m, 0.88018162m, 0.86594708m,
                                       0.85241414m, 0.83861484m, 0.82487708m, 0.81079676m,
                                       0.79779669m, 0.78472927m, 0.77189061m,  0.7588941m,
                                       0.74746352m, 0.73586825m, 0.72509133m, 0.71403145m,
                                       0.70285777m,   0.692135m, 0.68150579m, 0.67099319m,
                                       0.66139329m, 0.65181717m, 0.64257348m, 0.63335054m,
                                       0.62423814m, 0.61525227m, 0.60658258m, 0.59794094m,
                                       0.58974129m, 0.58167234m, 0.57390308m, 0.56618274m };

            List <decimal> fixedDFs = new List <decimal>();
            fixedDFs.AddRange(fixedDFArray);

            decimal[] fixedAccrualFactorsArray = { 0.25753425m, 0.24931507m, 0.24931507m, 0.24931507m,
                                                   0.24931507m, 0.24931507m, 0.24931507m, 0.24931507m,
                                                   0.24931507m, 0.25205479m, 0.24931507m, 0.24931507m,
                                                   0.25205479m, 0.25205479m, 0.24657534m, 0.24931507m,
                                                   0.25205479m, 0.25205479m, 0.24657534m, 0.24931507m,
                                                   0.25205479m, 0.25753425m, 0.24109589m, 0.24931507m,
                                                   0.25753425m, 0.24931507m, 0.24931507m, 0.24931507m,
                                                   0.24931507m, 0.25205479m, 0.24657534m, 0.24931507m,
                                                   0.25205479m, 0.25205479m, 0.24657534m, 0.24931507m,
                                                   0.25205479m, 0.25205479m, 0.24657534m, 0.24931507m };

            List <decimal> fixedAccrualFactors = new List <decimal>();
            fixedAccrualFactors.AddRange(fixedAccrualFactorsArray);
            #endregion


            FloatingPaymentStream floatingLeg = new FloatingPaymentStream(PaymentStream.Direction.Receiver,
                                                                          floatingNotionals, floatingAccrualFactors,
                                                                          floatingCashflows, floatingDFs,
                                                                          1000000.0m);

            FixedPaymentStream fixedLeg = new FixedPaymentStream(PaymentStream.Direction.Payer,
                                                                 fixedNotionals, fixedAccrualFactors,
                                                                 fixedCashflows, fixedDFs,
                                                                 1251486.14m);


            CrossCurrencyIRSwap swap = new CrossCurrencyIRSwap(fixedLeg, floatingLeg, 0.799064724m, PaymentStream.Direction.Payer);
            decimal             ber  = swap.BreakEvenRate(PaymentStream.Direction.Payer);
        }