当前位置: 首页>>代码示例>>C#>>正文


C# CommonVars.makeYoYCapFlooredLeg方法代码示例

本文整理汇总了C#中CommonVars.makeYoYCapFlooredLeg方法的典型用法代码示例。如果您正苦于以下问题:C# CommonVars.makeYoYCapFlooredLeg方法的具体用法?C# CommonVars.makeYoYCapFlooredLeg怎么用?C# CommonVars.makeYoYCapFlooredLeg使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在CommonVars的用法示例。


在下文中一共展示了CommonVars.makeYoYCapFlooredLeg方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: testDecomposition

        public void testDecomposition()
        {
            // Testing collared coupon against its decomposition...

             CommonVars vars= new CommonVars();

             double tolerance = 1e-10;
             double npvVanilla,npvCappedLeg,npvFlooredLeg,npvCollaredLeg,npvCap,npvFloor,npvCollar;
             double error;
             double floorstrike = 0.05;
             double capstrike = 0.10;
             InitializedList<double> caps = new InitializedList<double>(vars.length,capstrike);
             List<double> caps0 = new List<double>();
             InitializedList<double> floors = new InitializedList<double>(vars.length,floorstrike);
             List<double> floors0 = new List<double>();
             double gearing_p = 0.5;
             double spread_p = 0.002;
             double gearing_n = -1.5;
             double spread_n = 0.12;
             // fixed leg with zero rate
             List<CashFlow> fixedLeg  = vars.makeFixedLeg(vars.startDate,vars.length);
             // floating leg with gearing=1 and spread=0
             List<CashFlow> floatLeg  = vars.makeYoYLeg(vars.startDate,vars.length);
             // floating leg with positive gearing (gearing_p) and spread<>0
             List<CashFlow> floatLeg_p = vars.makeYoYLeg(vars.startDate,vars.length,gearing_p,spread_p);
             // floating leg with negative gearing (gearing_n) and spread<>0
             List<CashFlow> floatLeg_n = vars.makeYoYLeg(vars.startDate,vars.length,gearing_n,spread_n);
             // Swap with null fixed leg and floating leg with gearing=1 and spread=0
             Swap vanillaLeg = new Swap(fixedLeg,floatLeg);
             // Swap with null fixed leg and floating leg with positive gearing and spread<>0
             Swap vanillaLeg_p = new Swap(fixedLeg,floatLeg_p);
             // Swap with null fixed leg and floating leg with negative gearing and spread<>0
             Swap vanillaLeg_n = new Swap(fixedLeg,floatLeg_n);

             IPricingEngine engine = new DiscountingSwapEngine(vars.nominalTS);

             vanillaLeg.setPricingEngine(engine);    // here use the autoset feature
             vanillaLeg_p.setPricingEngine(engine);
             vanillaLeg_n.setPricingEngine(engine);

             // CAPPED coupon - Decomposition of payoff
             // Payoff = Nom * Min(rate,strike) * accrualperiod =
             // = Nom * [rate + Min(0,strike-rate)] * accrualperiod =
             // = Nom * rate * accrualperiod - Nom * Max(rate-strike,0) * accrualperiod =
             // = VanillaFloatingLeg - Call
             //

             int whichPricer = 0;

             // Case gearing = 1 and spread = 0
             List<CashFlow> cappedLeg = vars.makeYoYCapFlooredLeg(whichPricer,vars.startDate,vars.length,
                              caps,floors0,vars.volatility);
             Swap capLeg = new Swap(fixedLeg,cappedLeg);
             capLeg.setPricingEngine(engine);
             YoYInflationCap cap = new YoYInflationCap(floatLeg, new List<double>(){capstrike});
             cap.setPricingEngine(vars.makeEngine(vars.volatility,whichPricer));
             npvVanilla = vanillaLeg.NPV();
             npvCappedLeg = capLeg.NPV();
             npvCap = cap.NPV();
             error = Math.Abs(npvCappedLeg - (npvVanilla-npvCap));
             if (error>tolerance)
             {
            Assert.Fail("\nYoY Capped Leg: gearing=1, spread=0%, strike=" + capstrike*100 +
                        "%\n" +
                        "  Capped Floating Leg NPV: " + npvCappedLeg + "\n" +
                        "  Floating Leg NPV - Cap NPV: " + (npvVanilla - npvCap) + "\n" +
                        "  Diff: " + error );
             }

             // gearing = 1 and spread = 0
             // FLOORED coupon - Decomposition of payoff
             // Payoff = Nom * Max(rate,strike) * accrualperiod =
             // = Nom * [rate + Max(0,strike-rate)] * accrualperiod =
             // = Nom * rate * accrualperiod + Nom * Max(strike-rate,0) * accrualperiod =
             // = VanillaFloatingLeg + Put
             //

             List<CashFlow> flooredLeg = vars.makeYoYCapFlooredLeg(whichPricer,vars.startDate,vars.length,
                              caps0,floors,vars.volatility);
             Swap floorLeg = new Swap(fixedLeg,flooredLeg);
             floorLeg.setPricingEngine(engine);
             YoYInflationFloor floor= new YoYInflationFloor(floatLeg, new List<double>(){floorstrike});
             floor.setPricingEngine(vars.makeEngine(vars.volatility,whichPricer));
             npvFlooredLeg = floorLeg.NPV();
             npvFloor = floor.NPV();
             error = Math.Abs(npvFlooredLeg-(npvVanilla + npvFloor));
             if (error>tolerance)
             {
            Assert.Fail("YoY Floored Leg: gearing=1, spread=0%, strike=" + floorstrike *100 +
                        "%\n" +
                        "  Floored Floating Leg NPV: " + npvFlooredLeg + "\n" +
                        "  Floating Leg NPV + Floor NPV: " + (npvVanilla + npvFloor) + "\n" +
                        "  Diff: " + error );
             }

             // gearing = 1 and spread = 0
             // COLLARED coupon - Decomposition of payoff
             // Payoff = Nom * Min(strikem,Max(rate,strikeM)) * accrualperiod =
             // = VanillaFloatingLeg - Collar
             //
//.........这里部分代码省略.........
开发者ID:Yenyenx,项目名称:qlnet,代码行数:101,代码来源:T_InflationCapFlooredCouponTest.cs

示例2: testInstrumentEquality

        public void testInstrumentEquality()
        {
            // Testing inflation capped/floored coupon against inflation capfloor instrument...

             CommonVars vars = new CommonVars();

             int[] lengths = { 1, 2, 3, 5, 7, 10, 15, 20 };
             // vol is low ...
             double[] strikes = { 0.01, 0.025, 0.029, 0.03, 0.031, 0.035, 0.07 };
             // yoy inflation vol is generally very low
             double[] vols = { 0.001, 0.005, 0.010, 0.015, 0.020 };

             // this is model independent
             // capped coupon = fwd - cap, and fwd = swap(0)
             // floored coupon = fwd + floor
             for (int whichPricer = 0; whichPricer < 3; whichPricer++) {
            for (int i=0; i<lengths.Length; i++) {
               for (int j=0; j<strikes.Length; j++) {
                     for (int k=0; k<vols.Length; k++) {

                        List<CashFlow> leg = vars.makeYoYLeg(vars.evaluationDate,lengths[i]);

                        Instrument cap = vars.makeYoYCapFloor(CapFloorType.Cap,
                                                leg, strikes[j], vols[k], whichPricer);

                        Instrument floor = vars.makeYoYCapFloor(CapFloorType.Floor,
                                                leg, strikes[j], vols[k], whichPricer);

                        Date from = vars.nominalTS.link.referenceDate();
                        Date to = from+new Period(lengths[i],TimeUnit.Years);
                        Schedule yoySchedule = new MakeSchedule().from(from).to(to)
                        .withTenor(new Period(1,TimeUnit.Years))
                        .withCalendar(new UnitedKingdom())
                        .withConvention(BusinessDayConvention.Unadjusted)
                        .backwards().value();

                        YearOnYearInflationSwap swap = new YearOnYearInflationSwap(YearOnYearInflationSwap.Type.Payer,
                                                         1000000.0,
                                                         yoySchedule,//fixed schedule, but same as yoy
                                                         0.0,//strikes[j],
                                                         vars.dc,
                                                         yoySchedule,
                                                         vars.iir,
                                                         vars.observationLag,
                                                         0.0,        //spread on index
                                                         vars.dc,
                                                         new UnitedKingdom());

                        Handle<YieldTermStructure> hTS = new Handle<YieldTermStructure>(vars.nominalTS);
                        IPricingEngine sppe = new DiscountingSwapEngine(hTS);
                        swap.setPricingEngine(sppe);

                        List<CashFlow> leg2 = vars.makeYoYCapFlooredLeg(whichPricer, from,
                                                            lengths[i],
                                                            new InitializedList<double>(lengths[i],strikes[j]),//cap
                                                            new List<double>(),//floor
                                                            vols[k],
                                                            1.0,   // gearing
                                                            0.0);// spread

                        List<CashFlow> leg3 = vars.makeYoYCapFlooredLeg(whichPricer, from,
                                                            lengths[i],
                                                            new List<double>(),// cap
                                                            new InitializedList<double>(lengths[i],strikes[j]),//floor
                                                            vols[k],
                                                            1.0,   // gearing
                                                            0.0);// spread

                        // N.B. nominals are 10e6
                        double capped = CashFlows.npv(leg2,vars.nominalTS,false);
                        if ( Math.Abs(capped - (swap.NPV() - cap.NPV())) > 1.0e-6)
                        {
                           Assert.Fail(
                                       "capped coupon != swap(0) - cap:\n"
                                       + "    length:      " + lengths[i] + " years\n"
                                       + "    volatility:  " + vols[k] + "\n"
                                       + "    strike:      " + strikes[j] + "\n"
                                       + "    cap value:   " + cap.NPV() + "\n"
                                       + "    swap value:  " + swap.NPV() + "\n"
                                       + "   capped coupon " + capped);
                        }

                        // N.B. nominals are 10e6
                        double floored = CashFlows.npv(leg3,vars.nominalTS,false);
                        if ( Math.Abs(floored - (swap.NPV() + floor.NPV())) > 1.0e-6)
                        {
                           Assert.Fail(
                                       "floored coupon != swap(0) + floor :\n"
                                       + "    length:      " + lengths[i] + " years\n"
                                       + "    volatility:  " + vols[k] + "\n"
                                       + "    strike:      " + strikes[j] + "\n"
                                       + "    floor value: " + floor.NPV() + "\n"
                                       + "    swap value:  " + swap.NPV() + "\n"
                                       + "  floored coupon " + floored);
                        }
                     }
               }
            }

             }
//.........这里部分代码省略.........
开发者ID:Yenyenx,项目名称:qlnet,代码行数:101,代码来源:T_InflationCapFlooredCouponTest.cs


注:本文中的CommonVars.makeYoYCapFlooredLeg方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。