本文整理汇总了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();
}
//.........这里部分代码省略.........
示例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);
}
}
}
}
}
}
}
}
}
示例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);
}
}
}
}
}
}
}
}
示例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
//
//.........这里部分代码省略.........
示例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());
}
}
}
}
}
}