Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- vector<float>
- RichardRollPrepayment::ComputingCPR(
- float maturity,
- float settledTime,
- float frequencyPreYear,
- float couponRate,
- vector<float> mortgageRate
- )
- {
- vector<float> cprVector(ceil((maturity-settledTime) * frequencyPreYear));
- float seasonality[] = {
- .94, .76, .73, .96, .98, .92, .99, 1.1, 1.18, 1.21, 1.23, .97
- };
- int seasoning = int(settledTime) * 12;
- for (int i = 0; i < cprVector.size(); i++) {
- if (seasoning < 30) {
- cprVector[i] =
- (.2406 - .1389 * atan(5.952*(1.089 - couponRate/mortgageRate[i])))
- * (seasoning/30) * seasonality[seasoning%12];
- seasoning++;
- }
- else {
- cprVector[i] =
- (.2406 - .1389 * atan(5.952*(1.089 - couponRate/mortgageRate[i])))
- * 1 * seasonality[seasoning%12];
- seasoning++;
- }
- }
- return cprVector;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement