C++:实现量化存在净额结算协议的交易对手风险下的利率互换估值公式测试实例

#include <ql/qldefines.hpp>
#if !defined(BOOST_ALL_NO_LIB) && defined(BOOST_MSVC)
#  include <ql/auto_link.hpp>
#endif
#include <ql/instruments/vanillaswap.hpp>
#include <ql/instruments/makevanillaswap.hpp>
#include <ql/pricingengines/swap/discountingswapengine.hpp>
#include <ql/pricingengines/swap/cvaswapengine.hpp>
#include <ql/termstructures/yield/piecewiseyieldcurve.hpp>
#include <ql/termstructures/yield/ratehelpers.hpp>
#include <ql/termstructures/credit/interpolatedhazardratecurve.hpp>
#include <ql/indexes/ibor/euribor.hpp>
#include <ql/time/calendars/target.hpp>
#include <ql/time/daycounters/actualactual.hpp>
#include <ql/time/daycounters/actual360.hpp>#include <iostream>
#include <iomanip>using namespace std;
using namespace QuantLib;/*This example reproduces Table 2 on page 11 of A Formula for Interest Rate Swaps Valuation underCounterparty Risk in presence of Netting AgreementsDamiano Brigo and Massimo Masetti; May 4, 2005*/int main(int, char* []) {try {std::cout << std::endl;Calendar calendar = TARGET();Date todaysDate(10, March, 2004);// must be a business daytodaysDate = calendar.adjust(todaysDate);Settings::instance().evaluationDate() = todaysDate;ext::shared_ptr<IborIndex>  yieldIndx(new Euribor3M());Size tenorsSwapMkt[] = {5, 10, 15, 20, 25, 30};// rates ignoring counterparty risk:Rate ratesSwapmkt[] = {.03249, .04074, .04463, .04675, .04775, .04811};vector<ext::shared_ptr<RateHelper> > swapHelpers;for(Size i=0; i<sizeof(tenorsSwapMkt)/sizeof(Size); i++)swapHelpers.push_back(ext::make_shared<SwapRateHelper>(Handle<Quote>(ext::shared_ptr<Quote>(new SimpleQuote(ratesSwapmkt[i]))),tenorsSwapMkt[i] * Years,TARGET(),Quarterly,ModifiedFollowing,ActualActual(ActualActual::ISDA),yieldIndx));ext::shared_ptr<YieldTermStructure> swapTS(new PiecewiseYieldCurve<Discount,LogLinear>(2, TARGET(), swapHelpers, ActualActual(ActualActual::ISDA)));swapTS->enableExtrapolation();ext::shared_ptr<PricingEngine> riskFreeEngine(ext::make_shared<DiscountingSwapEngine>(Handle<YieldTermStructure>(swapTS)));std::vector<Handle<DefaultProbabilityTermStructure> >defaultIntensityTS;Size defaultTenors[] = {0, 12, 36, 60, 84, 120, 180, 240, 300, 360};// months// Three risk levels:Real intensitiesLow[] = {0.0036, 0.0036, 0.0065, 0.0099, 0.0111, 0.0177, 0.0177, 0.0177, 0.0177, 0.0177, 0.0177};Real intensitiesMedium[] = {0.0202, 0.0202, 0.0231, 0.0266, 0.0278, 0.0349, 0.0349, 0.0349, 0.0349, 0.0349,0.0349};Real intensitiesHigh[] = {0.0534, 0.0534, 0.0564, 0.06, 0.0614, 0.0696,0.0696, 0.0696, 0.0696, 0.0696, 0.0696};// Recovery rates:Real ctptyRRLow = 0.4, ctptyRRMedium = 0.35, ctptyRRHigh = 0.3;std::vector<Date> defaultTSDates;std::vector<Real> intesitiesVLow, intesitiesVMedium, intesitiesVHigh;for(Size i=0; i<sizeof(defaultTenors)/sizeof(Size); i++) {defaultTSDates.push_back(TARGET().advance(todaysDate, Period(defaultTenors[i], Months)));intesitiesVLow.push_back(intensitiesLow[i]);intesitiesVMedium.push_back(intensitiesMedium[i]);intesitiesVHigh.push_back(intensitiesHigh[i]);}defaultIntensityTS.emplace_back(ext::shared_ptr<DefaultProbabilityTermStructure>(new InterpolatedHazardRateCurve<BackwardFlat>(defaultTSDates, intesitiesVLow,Actual360(), TARGET())));defaultIntensityTS.emplace_back(ext::shared_ptr<DefaultProbabilityTermStructure>(new InterpolatedHazardRateCurve<BackwardFlat>(defaultTSDates, intesitiesVMedium,Actual360(), TARGET())));defaultIntensityTS.emplace_back(ext::shared_ptr<DefaultProbabilityTermStructure>(new InterpolatedHazardRateCurve<BackwardFlat>(defaultTSDates, intesitiesVHigh,Actual360(), TARGET())));Volatility blackVol = 0.15;   ext::shared_ptr<PricingEngine> ctptySwapCvaLow = ext::make_shared<CounterpartyAdjSwapEngine>(Handle<YieldTermStructure>(swapTS), blackVol,defaultIntensityTS[0], ctptyRRLow);ext::shared_ptr<PricingEngine> ctptySwapCvaMedium = ext::make_shared<CounterpartyAdjSwapEngine>(Handle<YieldTermStructure>(swapTS), blackVol, defaultIntensityTS[1],ctptyRRMedium);ext::shared_ptr<PricingEngine> ctptySwapCvaHigh = ext::make_shared<CounterpartyAdjSwapEngine>(Handle<YieldTermStructure>(swapTS), blackVol,defaultIntensityTS[2],ctptyRRHigh);defaultIntensityTS[0]->enableExtrapolation();defaultIntensityTS[1]->enableExtrapolation();defaultIntensityTS[2]->enableExtrapolation();/// SWAP RISKY REPRICE----------------------------------------------// fixed legFrequency fixedLegFrequency = Quarterly;BusinessDayConvention fixedLegConvention = ModifiedFollowing;DayCounter fixedLegDayCounter = ActualActual(ActualActual::ISDA);DayCounter floatingLegDayCounter = ActualActual(ActualActual::ISDA);Swap::Type swapType = Swap::Payer;ext::shared_ptr<IborIndex> yieldIndxS(new Euribor3M(Handle<YieldTermStructure>(swapTS)));std::vector<VanillaSwap> riskySwaps;for(Size i=0; i<sizeof(tenorsSwapMkt)/sizeof(Size); i++) riskySwaps.push_back(MakeVanillaSwap(tenorsSwapMkt[i]*Years,yieldIndxS,ratesSwapmkt[i], 0*Days).withSettlementDays(2).withFixedLegDayCount(fixedLegDayCounter).withFixedLegTenor(Period(fixedLegFrequency)).withFixedLegConvention(fixedLegConvention).withFixedLegTerminationDateConvention(fixedLegConvention).withFixedLegCalendar(calendar).withFloatingLegCalendar(calendar).withNominal(100.).withType(swapType));cout << "-- Correction in the contract fix rate in bp --" << endl;/* The paper plots correction to be substracted, here is printedwith its sign */for(Size i=0; i<riskySwaps.size(); i++) {cout << fixed << setprecision(3);cout << setw(4);riskySwaps[i].setPricingEngine(riskFreeEngine);// should recover the input here:Real nonRiskyFair = riskySwaps[i].fairRate();cout << tenorsSwapMkt[i];cout << setw(5);cout << " | " << io::rate(nonRiskyFair);cout << fixed << setprecision(2);cout << setw(5);// Low Risk:riskySwaps[i].setPricingEngine(ctptySwapCvaLow);cout << " | " << setw(6) << 10000.*(riskySwaps[i].fairRate() - nonRiskyFair);//cout << " | " << setw(6) << riskySwaps[i].NPV() ;// Medium Risk:riskySwaps[i].setPricingEngine(ctptySwapCvaMedium);cout << " | " << setw(6) << 10000.*(riskySwaps[i].fairRate() - nonRiskyFair);//cout << " | " << setw(6) << riskySwaps[i].NPV() ;riskySwaps[i].setPricingEngine(ctptySwapCvaHigh);cout << " | " << setw(6) << 10000.*(riskySwaps[i].fairRate() - nonRiskyFair);//cout << " | " << setw(6) << riskySwaps[i].NPV() ;cout << endl;}cout << endl;return 0;} catch (exception& e) {cerr << e.what() << endl;return 1;} catch (...) {cerr << "unknown error" << endl;return 1;}
}

该博文为原创文章,未经博主同意不得转。
本文章博客地址:https://cplusplus.blog.csdn.net/article/details/128309272

C++:实现量化存在净额结算协议的交易对手风险下的利率互换估值公式测试实例相关推荐

  1. C++:实现量化如何建立一个期限结构,并为一个简单的FRA远期利率协议测试实例

    C++:实现量化如何建立一个期限结构,并为一个简单的FRA远期利率协议测试实例 #include <ql/qldefines.hpp> #if !defined(BOOST_ALL_NO_ ...

  2. C++:实现量化forward rate agreement远期利率协议测试实例

    C++:实现量化forward rate agreement远期利率协议测试实例 #include "forwardrateagreement.hpp" #include &quo ...

  3. C++:实现量化相关的Interpolation插值测试实例

    C++:实现量化相关的Interpolation插值测试实例 #include "interpolations.hpp" #include "utilities.hpp& ...

  4. C++:实现量化期权交易CDS加密货币衍生品测试实例

    C++:实现量化期权交易CDS加密货币衍生品测试实例 #include <ql/qldefines.hpp> #if !defined(BOOST_ALL_NO_LIB) &&am ...

  5. C++:实现量化daycounters 日计数器测试实例

    C++:实现量化daycounters 日计数器测试实例 #include "daycounters.hpp" #include "utilities.hpp" ...

  6. C++:实现量化CPI债券交换测试实例

    C++:实现量化CPI债券交换测试实例 #include "utilities.hpp" #include "inflationcpiswap.hpp" #in ...

  7. C++:实现量化SMM Caplet均匀校准测试实例

    C++:实现量化SMM Caplet均匀校准测试实例 #include "markovfunctional.hpp" #include "utilities.hpp&qu ...

  8. C++:实现量化Overnight-indexed swap 隔夜指数掉期测试实例

    C++:实现量化Overnight-indexed swap 隔夜指数掉期测试实例 #include "overnightindexedswap.hpp" #include &qu ...

  9. C++:实现量化Piecewise yield曲线测试实例

    C++:实现量化Piecewise yield曲线测试实例 #include "piecewiseyieldcurve.hpp" #include "utilities. ...

  10. C++:实现量化Libor市场模型测试实例

    C++:实现量化Libor市场模型测试实例 #include "libormarketmodel.hpp" #include "utilities.hpp"#i ...

最新文章

  1. leetcode算法题--二叉树的前序遍历
  2. 波卡链Substrate (1)生态介绍
  3. ThreadLocal类与Synchonized对象锁的区别
  4. codeigniter钩子的使用
  5. 简述JAVA线程调度的原理,Rxjava原理(二)--线程调度
  6. mysql datetime month不走索引_like百分号加前面一定不走索引吗?一不小心就翻车,关于mysql索引那些容易错的点...
  7. java 新建菜单选项_请完成下列Java程序:创建一个下拉式菜单,菜单项包括3个CheckboxM..._考试资料网...
  8. c ++类成员函数_C ++编程中的数据成员和成员函数
  9. 【可临摹UI设计干货】APP UI界面的版式设计理论!
  10. html js 选择器,h.js - dom元素选择器
  11. 地址管理和子网划分基础
  12. c#解析XML到DATASET及dataset转为xml文件函数
  13. MonoCSharp Evaluator Extension
  14. JS 打印 data数据_用D3.js 十分钟实现字符跳动效果
  15. 使用GifCam软件录制gif动图
  16. 统一数据接入实践分享
  17. 5.16 图层合并的几种方式 [原创Ps教程]
  18. 【时间序列】周期性检测算法及其 Python 实践
  19. 做母婴微商怎么线上引流?做母婴产品如何线上引流?
  20. 中缀转后缀并分别计算

热门文章

  1. GTK+:GTK+的简介、安装、使用方法之详细攻略
  2. maya中英文对照_maya2011中英文对照表
  3. 5.学城项目 支付宝支付
  4. Android 高通8909 系统之路之 裁剪系统 一
  5. 采样频率在频谱分析中的理解
  6. 基于asp.net725原创(古代)文学交流网站系统
  7. flux护眼软件设置
  8. Kbps、KBps是什么意思?网络下载速度单位换算
  9. jeecms mysql_jeecms学习笔记
  10. ubuntu 20.04 设定固定IP地址碰到的坑