本文整理汇总了C#中InitializedList.GetRange方法的典型用法代码示例。如果您正苦于以下问题:C# InitializedList.GetRange方法的具体用法?C# InitializedList.GetRange怎么用?C# InitializedList.GetRange使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类InitializedList
的用法示例。
在下文中一共展示了InitializedList.GetRange方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: testMonteCarloCapletPricing
public void testMonteCarloCapletPricing()
{
//"Testing caplet LMM Monte-Carlo caplet pricing..."
//SavedSettings backup;
/* factor loadings are taken from Hull & White article
plus extra normalisation to get orthogonal eigenvectors
http://www.rotman.utoronto.ca/~amackay/fin/libormktmodel2.pdf */
double[] compValues = {0.85549771, 0.46707264, 0.22353259,
0.91915359, 0.37716089, 0.11360610,
0.96438280, 0.26413316,-0.01412414,
0.97939148, 0.13492952,-0.15028753,
0.95970595,-0.00000000,-0.28100621,
0.97939148,-0.13492952,-0.15028753,
0.96438280,-0.26413316,-0.01412414,
0.91915359,-0.37716089, 0.11360610,
0.85549771,-0.46707264, 0.22353259};
Matrix volaComp=new Matrix(9,3);
List<double> lcompValues=new InitializedList<double>(27,0);
List<double> ltemp = new InitializedList<double>(3, 0);
lcompValues=compValues.ToList();
//std::copy(compValues, compValues+9*3, volaComp.begin());
for (int i = 0; i < 9; i++)
{
ltemp = lcompValues.GetRange(3*i, 3);
for (int j = 0; j < 3; j++)
volaComp[i, j] = ltemp[j];
}
LiborForwardModelProcess process1 = makeProcess();
LiborForwardModelProcess process2 = makeProcess(volaComp);
List<double> tmp = process1.fixingTimes();
TimeGrid grid=new TimeGrid(tmp ,12);
List<int> location=new List<int>();
for (int i=0; i < tmp.Count; ++i) {
location.Add(grid.index(tmp[i])) ;
}
// set-up a small Monte-Carlo simulation to price caplets
// and ratchet caps using a one- and a three factor libor market model
ulong seed = 42;
LowDiscrepancy.icInstance = new InverseCumulativeNormal();
IRNG rsg1 = (IRNG)new LowDiscrepancy().make_sequence_generator(
process1.factors()*(grid.size()-1), seed);
IRNG rsg2 = (IRNG)new LowDiscrepancy().make_sequence_generator(
process2.factors()*(grid.size()-1), seed);
MultiPathGenerator<IRNG> generator1=new MultiPathGenerator<IRNG> (process1, grid, rsg1, false);
MultiPathGenerator<IRNG> generator2=new MultiPathGenerator<IRNG> (process2, grid, rsg2, false);
const int nrTrails = 250000;
List<GeneralStatistics> stat1 = new InitializedList<GeneralStatistics>(process1.size());
List<GeneralStatistics> stat2 = new InitializedList<GeneralStatistics>(process2.size());
List<GeneralStatistics> stat3 = new InitializedList<GeneralStatistics>(process2.size() - 1);
for (int i=0; i<nrTrails; ++i) {
Sample<MultiPath> path1 = generator1.next();
Sample<MultiPath> path2 = generator2.next();
List<double> rates1=new InitializedList<double>(len);
List<double> rates2 = new InitializedList<double>(len);
for (int j=0; j<process1.size(); ++j) {
rates1[j] = path1.value[j][location[j]];
rates2[j] = path2.value[j][location[j]];
}
List<double> dis1 = process1.discountBond(rates1);
List<double> dis2 = process2.discountBond(rates2);
for (int k=0; k<process1.size(); ++k) {
double accrualPeriod = process1.accrualEndTimes()[k]
- process1.accrualStartTimes()[k];
// caplet payoff function, cap rate at 4%
double payoff1 = Math.Max(rates1[k] - 0.04, 0.0) * accrualPeriod;
double payoff2 = Math.Max(rates2[k] - 0.04, 0.0) * accrualPeriod;
stat1[k].add(dis1[k] * payoff1);
stat2[k].add(dis2[k] * payoff2);
if (k != 0) {
// ratchet cap payoff function
double payoff3 = Math.Max(rates2[k] - (rates2[k-1]+0.0025), 0.0)
* accrualPeriod;
stat3[k-1].add(dis2[k] * payoff3);
}
}
}
double[] capletNpv = {0.000000000000, 0.000002841629, 0.002533279333,
0.009577143571, 0.017746502618, 0.025216116835,
0.031608230268, 0.036645683881, 0.039792254012,
0.041829864365};
double[] ratchetNpv = {0.0082644895, 0.0082754754, 0.0082159966,
0.0082982822, 0.0083803357, 0.0084366961,
0.0084173270, 0.0081803406, 0.0079533814};
//.........这里部分代码省略.........