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


C# CommonVars.makeEngine方法代码示例

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


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

示例1: testConsistency

        public void testConsistency()
        {
            // Testing consistency between yoy inflation cap,floor and collar...
            CommonVars vars = new CommonVars();

            int[] lengths = { 1, 2, 3, 5, 7, 10, 15, 20 };
            double[] cap_rates = { 0.01, 0.025, 0.029, 0.03, 0.031, 0.035, 0.07 };
            double[] floor_rates = { 0.01, 0.025, 0.029, 0.03, 0.031, 0.035, 0.07 };
            double[] vols = { 0.001, 0.005, 0.010, 0.015, 0.020 };

            for (int whichPricer = 0; whichPricer < 3; whichPricer++)
            {
                for (int i=0; i<lengths.Length; i++)
                {
                    for (int j=0; j<cap_rates.Length; j++)
                    {
                        for (int k=0; k<floor_rates.Length; k++)
                        {
                            for (int l=0; l<vols.Length; l++)
                            {

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

                                YoYInflationCapFloor cap = vars.makeYoYCapFloor(CapFloorType.Cap,
                                           leg, cap_rates[j], vols[l], whichPricer);

                                YoYInflationCapFloor floor = vars.makeYoYCapFloor(CapFloorType.Floor,
                                           leg, floor_rates[k], vols[l], whichPricer);

                                YoYInflationCollar collar = new YoYInflationCollar(leg,new List<double>(){cap_rates[j]},
                                  new List<double>(){floor_rates[k]});

                                collar.setPricingEngine(vars.makeEngine(vols[l], whichPricer));

                                if (Math.Abs((cap.NPV()-floor.NPV())-collar.NPV()) > 1e-6)
                                {
                                    Assert.Fail(
                                   "inconsistency between cap, floor and collar:\n"
                                   + "    length:       " + lengths[i] + " years\n"
                                   + "    volatility:   " +  "\n"
                                   + "    cap value:    " + cap.NPV()
                                   + " at strike: " + "\n"
                                   + "    floor value:  " + floor.NPV()
                                   + " at strike: " +  "\n"
                                   + "    collar value: " + collar.NPV());

                                }
                                // test re-composition by optionlets, N.B. ONE per year
                                double capletsNPV = 0.0;
                                List<YoYInflationCapFloor> caplets = new List<YoYInflationCapFloor>();
                                for (int m=0; m<lengths[i]*1; m++)
                                {
                                    caplets.Add(cap.optionlet(m));
                                    caplets[m].setPricingEngine(vars.makeEngine(vols[l], whichPricer));
                                    capletsNPV += caplets[m].NPV();
                                }

                                if (Math.Abs(cap.NPV() - capletsNPV) > 1e-6)
                                {
                                    Assert.Fail(
                                    "sum of caplet NPVs does not equal cap NPV:\n"
                                    + "    length:       " + lengths[i] + " years\n"
                                    + "    volatility:   " +  "\n"
                                    + "    cap value:    " + cap.NPV()
                                    + " at strike: " +  "\n"
                                    + "    sum of caplets value:  " + capletsNPV
                                    + " at strike (first): " + caplets[0].capRates()[0] + "\n"
                                    );
                                }

                                double floorletsNPV = 0.0;
                                List<YoYInflationCapFloor>  floorlets = new List<YoYInflationCapFloor>();
                                for (int m=0; m<lengths[i]*1; m++)
                                {
                                    floorlets.Add(floor.optionlet(m));
                                    floorlets[m].setPricingEngine(vars.makeEngine(vols[l], whichPricer));
                                    floorletsNPV += floorlets[m].NPV();
                                }

                                if (Math.Abs(floor.NPV() - floorletsNPV) > 1e-6)
                                {
                                    Assert.Fail(
                                    "sum of floorlet NPVs does not equal floor NPV:\n"
                                    + "    length:       " + lengths[i] + " years\n"
                                    + "    volatility:   " +  "\n"
                                    + "    cap value:    " + floor.NPV()
                                    + " at strike: " + floor_rates[j] + "\n"
                                    + "    sum of floorlets value:  " + floorletsNPV
                                    + " at strike (first): " + floorlets[0].floorRates()[0] + "\n"
                                    );
                                }

                                double collarletsNPV = 0.0;
                                List<YoYInflationCapFloor>  collarlets = new List<YoYInflationCapFloor>();
                                for (int m=0; m<lengths[i]*1; m++)
                                {
                                    collarlets.Add(collar.optionlet(m));
                                    collarlets[m].setPricingEngine(vars.makeEngine(vols[l], whichPricer));
                                    collarletsNPV += collarlets[m].NPV();
                                }
//.........这里部分代码省略.........
开发者ID:Yenyenx,项目名称:qlnet,代码行数:101,代码来源:T_InflationCapFloorTest.cs

示例2: testImpliedVolatility

        public void testImpliedVolatility()
        {
            //"Testing implied volatility for swaptions...";

            CommonVars vars=new CommonVars();

            int maxEvaluations = 100;
            double tolerance = 1.0e-08;

            Settlement.Type[] types = { Settlement.Type.Physical, Settlement.Type.Cash };
            // test data
            double[] strikes = { 0.02, 0.03, 0.04, 0.05, 0.06, 0.07 };
            double[] vols = { 0.01, 0.05, 0.10, 0.20, 0.30, 0.70, 0.90 };

            for (int i = 0; i < exercises.Length; i++)
            {
                for (int j = 0; j < lengths.Length; j++)
                {
                    Date exerciseDate = vars.calendar.advance(vars.today, exercises[i]);
                    Date startDate = vars.calendar.advance(exerciseDate,
                                                           vars.settlementDays, TimeUnit.Days);
                    Date maturity = vars.calendar.advance(startDate, lengths[j],
                                                          vars.floatingConvention);
                    for (int t = 0; t < strikes.Length; t++)
                    {
                        for (int k = 0; k < type.Length; k++)
                        {
                            VanillaSwap swap = new MakeVanillaSwap(lengths[j], vars.index, strikes[t])
                                        .withEffectiveDate(startDate)
                                        .withFloatingLegSpread(0.0)
                                        .withType(type[k]);
                            for (int h = 0; h < types.Length; h++)
                            {
                                for (int u = 0; u < vols.Length; u++)
                                {
                                    Swaption swaption = vars.makeSwaption(swap, exerciseDate,
                                                                            vols[u], types[h]);
                                    // Black price
                                    double value = swaption.NPV();
                                    double implVol = 0.0;
                                    try
                                    {
                                        implVol =
                                          swaption.impliedVolatility(value,
                                                                      vars.termStructure,
                                                                      0.10,
                                                                      tolerance,
                                                                      maxEvaluations);
                                    }
                                    catch (System.Exception e)
                                    {
                                        // couldn't bracket?
                                        swaption.setPricingEngine(vars.makeEngine(0.0));
                                        double value2 = swaption.NPV();
                                        if (Math.Abs(value - value2) < tolerance)
                                        {
                                            // ok, just skip:
                                            continue;
                                        }
                                        // otherwise, report error
                                        Assert.Fail("implied vol failure: " +
                                                    exercises[i] + "x" + lengths[j] + " " + type[k] +
                                                    "\nsettlement: " + types[h] +
                                                    "\nstrike      " + strikes[t] +
                                                    "\natm level:  " + swap.fairRate() +
                                                    "\nvol:        " + vols[u] +
                                                    "\nprice:      " + value +
                                                    "\n" + e.Message.ToString());
                                    }
                                    if (Math.Abs(implVol - vols[u]) > tolerance)
                                    {
                                        // the difference might not matter
                                        swaption.setPricingEngine(vars.makeEngine(implVol));
                                        double value2 = swaption.NPV();
                                        if (Math.Abs(value - value2) > tolerance)
                                        {
                                            Assert.Fail("implied vol failure: " +
                                                exercises[i] + "x" + lengths[j] + " " + type[k] +
                                                "\nsettlement:    " + types[h] +
                                                "\nstrike         " + strikes[t] +
                                                "\natm level:     " + swap.fairRate() +
                                                "\nvol:           " + vols[u] +
                                                "\nprice:         " + value +
                                                "\nimplied vol:   " + implVol +
                                                "\nimplied price: " + value2);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
开发者ID:akasolace,项目名称:qlnet,代码行数:94,代码来源:T_Swaption.cs

示例3: testImpliedVolatility

        public void testImpliedVolatility()
        {
            CommonVars vars = new CommonVars();

            int maxEvaluations = 100;
            double tolerance = 1.0e-6;

            CapFloorType[] types = { CapFloorType.Cap, CapFloorType.Floor };
            double[] strikes = { 0.02, 0.03, 0.04 };
            int[] lengths = { 1, 5, 10 };

            // test data
            double[] rRates = { 0.02, 0.03, 0.04 };
            double[] vols = { 0.01, 0.20, 0.30, 0.70, 0.90 };

            for (int k = 0; k < lengths.Length; k++) {
                List<CashFlow> leg = vars.makeLeg(vars.settlement, lengths[k]);

                for (int i = 0; i < types.Length; i++) {
                    for (int j = 0; j < strikes.Length; j++) {
                        CapFloor capfloor = vars.makeCapFloor(types[i], leg, strikes[j], 0.0);

                        for (int n = 0; n < rRates.Length; n++) {
                            for (int m = 0; m < vols.Length; m++) {
                                double r = rRates[n];
                                double v = vols[m];
                                vars.termStructure.linkTo(Utilities.flatRate(vars.settlement, r, new Actual360()));
                                capfloor.setPricingEngine(vars.makeEngine(v));

                                double value = capfloor.NPV();
                                double implVol = 0.0;

                                try {
                                    implVol = capfloor.impliedVolatility(value,
                                                                         vars.termStructure,
                                                                         0.10,
                                                                         tolerance,
                                                                         maxEvaluations);
                                } catch (Exception e) {
                                    // couldn't bracket?
                                    capfloor.setPricingEngine(vars.makeEngine(0.0));
                                    double value2 = capfloor.NPV();
                                    if (Math.Abs(value - value2) < tolerance) {
                                        // ok, just skip:
                                        continue;
                                    }

                                    // otherwise, report error
                                    Assert.Fail("implied vol failure: " + typeToString(types[i]) +
                                        "  strike:     " + strikes[j] +
                                        "  risk-free:  " + r +
                                        "  length:     " + lengths[k] + "Y" +
                                        "  volatility: " + v + e.Message);
                                }
                                if (Math.Abs(implVol - v) > tolerance) {
                                    // the difference might not matter
                                    capfloor.setPricingEngine(vars.makeEngine(implVol));
                                    double value2 = capfloor.NPV();
                                    if (Math.Abs(value - value2) > tolerance) {
                                        Assert.Fail(
                                            typeToString(types[i]) + ":"
                                            + "    strike:           "
                                            + strikes[j] + "\n"
                                            + "    risk-free rate:   "
                                            + r + "\n"
                                            + "    length:         "
                                            + lengths[k] + " years\n\n"
                                            + "    original volatility: "
                                            + v + "\n"
                                            + "    price:               "
                                            + value + "\n"
                                            + "    implied volatility:  "
                                            + implVol + "\n"
                                            + "    corresponding price: " + value2);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
开发者ID:tickzoom,项目名称:QLNet,代码行数:82,代码来源:T_CapFloor.cs

示例4: 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

示例5: testConsistency

        public void testConsistency()
        {
            CommonVars vars = new CommonVars();

            int[] lengths = { 1, 2, 3, 5, 7, 10, 15, 20 };
            double[] cap_rates = { 0.03, 0.04, 0.05, 0.06, 0.07 };
            double[] floor_rates = { 0.03, 0.04, 0.05, 0.06, 0.07 };
            double[] vols = { 0.01, 0.05, 0.10, 0.15, 0.20 };

            Date startDate = vars.termStructure.link.referenceDate();

            for (int i = 0; i < lengths.Length; i++) {
                for (int j = 0; j < cap_rates.Length; j++) {
                    for (int k = 0; k < floor_rates.Length; k++) {
                        for (int l = 0; l < vols.Length; l++) {

                            List<CashFlow> leg = vars.makeLeg(startDate, lengths[i]);
                            Instrument cap = vars.makeCapFloor(CapFloorType.Cap, leg,
                                                  cap_rates[j], vols[l]);
                            Instrument floor = vars.makeCapFloor(CapFloorType.Floor, leg,
                                                  floor_rates[k], vols[l]);
                            Collar collar = new Collar(leg, new InitializedList<double>(1, cap_rates[j]),
                                          new InitializedList<double>(1, floor_rates[k]));
                            collar.setPricingEngine(vars.makeEngine(vols[l]));

                            if (Math.Abs((cap.NPV() - floor.NPV()) - collar.NPV()) > 1e-10) {
                                Assert.Fail(
                                  "inconsistency between cap, floor and collar:\n"
                                  + "    length:       " + lengths[i] + " years\n"
                                  + "    volatility:   " + vols[l] + "\n"
                                  + "    cap value:    " + cap.NPV()
                                  + " at strike: " + cap_rates[j] + "\n"
                                  + "    floor value:  " + floor.NPV()
                                  + " at strike: " + floor_rates[k] + "\n"
                                  + "    collar value: " + collar.NPV());
                            }
                        }
                    }
                }
            }
        }
开发者ID:tickzoom,项目名称:QLNet,代码行数:41,代码来源:T_CapFloor.cs


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