第一部分 新手入门
- 一 量化投资视频学习课程
- 二 Python 手把手教学
- 量化分析师的Python日记【第1天:谁来给我讲讲Python?】
- 量化分析师的Python日记【第2天:再接着介绍一下Python呗】
- 量化分析师的Python日记【第3天:一大波金融Library来袭之numpy篇】
- 量化分析师的Python日记【第4天:一大波金融Library来袭之scipy篇】
- 量化分析师的Python日记【第5天:数据处理的瑞士军刀pandas】
- 量化分析师的Python日记【第6天:数据处理的瑞士军刀pandas下篇
- 量化分析师的Python日记【第7天:Q Quant 之初出江湖】
- 量化分析师的Python日记【第8天 Q Quant兵器谱之函数插值】
- 量化分析师的Python日记【第9天 Q Quant兵器谱之二叉树】
- 量化分析师的Python日记【第10天 Q Quant兵器谱 -之偏微分方程1】
- 量化分析师的Python日记【第11天 Q Quant兵器谱之偏微分方程2】
- 量化分析师的Python日记【第12天:量化入门进阶之葵花宝典:因子如何产生和回测】
- 量化分析师的Python日记【第13天 Q Quant兵器谱之偏微分方程3】
- 量化分析师的Python日记【第14天:如何在优矿上做Alpha对冲模型】
- 量化分析师的Python日记【第15天:如何在优矿上搞一个wealthfront出来】
第二部分 股票量化相关
- 一 基本面分析
- 1.1 alpha 多因子模型
- 1.2 基本面因子选股
- 1.3 财报阅读 • [米缸量化读财报] 资产负债表-投资相关资产
- 1.4 股东分析
- 1.5 宏观研究
- 二 套利
- 三 事件驱动
- 四 技术分析
- 4.1 布林带
- 4.2 均线系统
- 4.3 MACD
- 4.4 阿隆指标 • 技术指标阿隆( Aroon )全解析
- 4.5 CCI • CCI 顺势指标探索
- 4.6 RSI
- 4.7 DMI • DMI 指标体系的构建及简单应用
- 4.8 EMV • EMV 技术指标的构建及应用
- 4.9 KDJ • KDJ 策略
- 4.10 CMO
- 4.11 FPC • FPC 指标选股
- 4.12 Chaikin Volatility
- 4.13 委比 • 实时计算委比
- 4.14 封单量
- 4.15 成交量 • 决战之地, IF1507 !
- 4.16 K 线分析 • 寻找夜空中最亮的星
- 五 量化模型
- 5.1 动量模型
- 5.2 Joseph Piotroski 9 F-Score Value Investing Model
- 5.3 SVR
- 5.4 决策树、随机树
- 5.5 钟摆理论
- 5.6 海龟模型
- 5.7 5217 策略
- 5.8 SMIA
- 5.9 神经网络
- 5.10 PAMR
- 5.11 Fisher Transform
- 5.12 分型假说, Hurst 指数
- 5.13 变点理论
- 5.14 Z-score Model
- 5.15 机器学习
- 5.16 DualTrust 策略和布林强盗策略
- 5.17 卡尔曼滤波
- 5.18 LPPL anti-bubble model
- 六 大数据模型
- 6.1 市场情绪分析
- 6.2 新闻热点
- 七 排名选股系统
- 八 轮动模型
- 九 组合投资
- 十 波动率
- 十一 算法交易
- 十二 中高频交易
- 十三 Alternative Strategy
第三部分 基金、利率互换、固定收益类
- 一 分级基金
- 二 基金分析
- 三 债券
- 四 利率互换
第四部分 衍生品相关
- 一 期权数据
- 二 期权系列
- 三 期权分析
- 四 期货分析
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
Swap Curve Construction
在这个示例中,我们将指导用户如何使用平台的功能,完成从利率互换的市场报价完成收益率曲线的构造。
from CAL.PyCAL import *
SetEvaluationDate(Date(2015, 8, 6))
1. 构造收益率曲线
我们从一组市场标准化互换的市场报价中获取收益率曲线的信息:
swap_rates
:标准互换对应的固定端利率swap_tenor
:标准互换对应的期限
swap_rates = [0.02, 0.03, 0.04 ,0.05, 0.055, 0.06, 0.065, 0.07]
swap_tenor = ['6M', '1Y', '2Y', '3Y', '4Y', '5Y', '7Y', '10Y']
shiborIndex = Shibor('3M')
instruments = []
for rate, tenor in zip(swap_rates, swap_tenor):
print('{0:3s} benchmark Shibor Swap fixed at: {1:.2f}%'.format(tenor, rate*100))
rateHelper = ShiborSwapRateHelper(rate, Period(tenor), Frequency.Quarterly, shiborIndex)
instruments.append(rateHelper)
6M benchmark Shibor Swap fixed at: 2.00%
1Y benchmark Shibor Swap fixed at: 3.00%
2Y benchmark Shibor Swap fixed at: 4.00%
3Y benchmark Shibor Swap fixed at: 5.00%
4Y benchmark Shibor Swap fixed at: 5.50%
5Y benchmark Shibor Swap fixed at: 6.00%
7Y benchmark Shibor Swap fixed at: 6.50%
10Y benchmark Shibor Swap fixed at: 7.00%
通过标准互换校正(calibration)收益率曲线:
calibratedCurve = CalibratedYieldCurve(EvaluationDate(), instruments, 'Actual/365 (Fixed)')
收益率曲线的基本信息:
discount
:折现因子forward(%)
:远期利率zero(%)
:零息利率
calibratedCurve.curveProfile().head(10)
date | discount | forward(%) | zero(%) | |
---|---|---|---|---|
2015-08-06 | 2015-08-06 | 1.000000 | 1.994947 | 2.014979 |
2015-09-06 | 2015-09-06 | 0.998307 | 1.994947 | 2.014979 |
2015-10-06 | 2015-10-06 | 0.996672 | 1.994947 | 2.014979 |
2015-11-06 | 2015-11-06 | 0.994984 | 1.994947 | 2.014979 |
2015-12-06 | 2015-12-06 | 0.993354 | 1.994947 | 2.014979 |
2016-01-06 | 2016-01-06 | 0.991672 | 1.994947 | 2.014979 |
2016-02-06 | 2016-02-06 | 0.989994 | 1.994947 | 2.014979 |
2016-03-06 | 2016-03-06 | 0.986950 | 4.014304 | 2.276446 |
2016-04-06 | 2016-04-06 | 0.983591 | 4.014304 | 2.505840 |
2016-05-06 | 2016-05-06 | 0.980351 | 4.014304 | 2.678750 |
我们可以画图来看:
calibratedCurve.curveProfile()['zero(%)'].plot(figsize=(16,8))
<matplotlib.axes.AxesSubplot at 0x6bbabd0>
2. 测试
首先可以看这条收益率曲线是否真的可以完美定价基准互换(perfectly pricing):
cal = Calendar('China.IB')
startDate = cal.advanceDate(Date(2015, 8, 6), '1B', BizDayConvention.Following)
shiborIndex = Shibor('3M', calibratedCurve)
nominal = 100000000.
pricingEngine = DiscountingSwapEngine(calibratedCurve)
for rate, tenor in zip(swap_rates, swap_tenor):
benchmarkSwap = ShiborSwap(SwapLegType.Payer, nominal, startDate, Period(tenor), Period('3M'), rate, shiborIndex)
benchmarkSwap.setPricingEngine(pricingEngine)
print('{0:3s} benchmark Shibor Swap NPV: {1:>8.4f}'.format(tenor, benchmarkSwap.NPV()))
6M benchmark Shibor Swap NPV: 0.0000
1Y benchmark Shibor Swap NPV: -0.0000
2Y benchmark Shibor Swap NPV: 0.0000
3Y benchmark Shibor Swap NPV: 0.0000
4Y benchmark Shibor Swap NPV: -0.0000
5Y benchmark Shibor Swap NPV: 0.0000
7Y benchmark Shibor Swap NPV: 0.0000
10Y benchmark Shibor Swap NPV: 0.0000
然后我们取一个假设已经存在的互换(seasoned swap),通过这条收益率曲线估计它的现值:
startDate = Date(2015, 7, 15)
shiborIndex.addFixing(Date(2015, 7, 14), 0.045)
customizeSwap = ShiborSwap(SwapLegType.Receiver, nominal, startDate, Period('9Y'), Period('3M'), 0.06, shiborIndex)
customizeSwap.setPricingEngine(pricingEngine)
print('{0:3s} Shibor Swap fixed at {1:.2f}% NPV: {2:15.4f}'.format('9Y',6.00, customizeSwap.NPV()))
9Y Shibor Swap fixed at 6.00% NPV: -6308510.5573
customizeSwap.legAnalysis(0).head(10)
AMOUNT | NOMINAL | ACCRUAL_START_DATE | ACCRUAL_END_DATE | ACCRUAL_DAYS | INDEX | FIXING_DAYS | FIXING_DATES | INDEX_FIXING | DAY_COUNTER | ACCRUAL_PERIOD | EFFECTIVE_RATE | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
PAYMENT_DATE | ||||||||||||
2015-10-15 | 1512329 | 1e+08 | 2015-07-15 | 2015-10-15 | 92 | #NA | #NA | #NA | #NA | Actual/365 (Fixed) | 0.2520548 | 0.06 |
2016-01-15 | 1512329 | 1e+08 | 2015-10-15 | 2016-01-15 | 92 | #NA | #NA | #NA | #NA | Actual/365 (Fixed) | 0.2520548 | 0.06 |
2016-04-15 | 1495890 | 1e+08 | 2016-01-15 | 2016-04-15 | 91 | #NA | #NA | #NA | #NA | Actual/365 (Fixed) | 0.2493151 | 0.06 |
2016-07-15 | 1495890 | 1e+08 | 2016-04-15 | 2016-07-15 | 91 | #NA | #NA | #NA | #NA | Actual/365 (Fixed) | 0.2493151 | 0.06 |
2016-10-17 | 1545205 | 1e+08 | 2016-07-15 | 2016-10-17 | 94 | #NA | #NA | #NA | #NA | Actual/365 (Fixed) | 0.2575342 | 0.06 |
2017-01-16 | 1495890 | 1e+08 | 2016-10-17 | 2017-01-16 | 91 | #NA | #NA | #NA | #NA | Actual/365 (Fixed) | 0.2493151 | 0.06 |
2017-04-17 | 1495890 | 1e+08 | 2017-01-16 | 2017-04-17 | 91 | #NA | #NA | #NA | #NA | Actual/365 (Fixed) | 0.2493151 | 0.06 |
2017-07-17 | 1495890 | 1e+08 | 2017-04-17 | 2017-07-17 | 91 | #NA | #NA | #NA | #NA | Actual/365 (Fixed) | 0.2493151 | 0.06 |
2017-10-16 | 1495890 | 1e+08 | 2017-07-17 | 2017-10-16 | 91 | #NA | #NA | #NA | #NA | Actual/365 (Fixed) | 0.2493151 | 0.06 |
2018-01-15 | 1495890 | 1e+08 | 2017-10-16 | 2018-01-15 | 91 | #NA | #NA | #NA | #NA | Actual/365 (Fixed) | 0.2493151 | 0.06 |
customizeSwap.legAnalysis(1).head(10)
AMOUNT | NOMINAL | ACCRUAL_START_DATE | ACCRUAL_END_DATE | ACCRUAL_DAYS | INDEX | FIXING_DAYS | FIXING_DATES | INDEX_FIXING | DAY_COUNTER | ACCRUAL_PERIOD | EFFECTIVE_RATE | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
PAYMENT_DATE | ||||||||||||
2015-10-15 | 1150000 | 1e+08 | 2015-07-15 | 2015-10-15 | 92 | Shibor3M Actual/360 | 1 | 2015-07-14 | 0.045 | Actual/360 | 0.2555556 | 0.045 |
2016-01-15 | 504102.3 | 1e+08 | 2015-10-15 | 2016-01-15 | 92 | Shibor3M Actual/360 | 1 | 2015-10-14 | 0.01972574 | Actual/360 | 0.2555556 | 0.01972574 |
2016-04-15 | 871825.4 | 1e+08 | 2016-01-15 | 2016-04-15 | 91 | Shibor3M Actual/360 | 1 | 2016-01-14 | 0.03448979 | Actual/360 | 0.2527778 | 0.03448979 |
2016-07-15 | 1005852 | 1e+08 | 2016-04-15 | 2016-07-15 | 91 | Shibor3M Actual/360 | 1 | 2016-04-14 | 0.03979193 | Actual/360 | 0.2527778 | 0.03979193 |
2016-10-17 | 1234864 | 1e+08 | 2016-07-15 | 2016-10-17 | 94 | Shibor3M Actual/360 | 1 | 2016-07-14 | 0.04729266 | Actual/360 | 0.2611111 | 0.04729266 |
2017-01-16 | 1260227 | 1e+08 | 2016-10-17 | 2017-01-16 | 91 | Shibor3M Actual/360 | 1 | 2016-10-14 | 0.04985512 | Actual/360 | 0.2527778 | 0.04985512 |
2017-04-17 | 1260227 | 1e+08 | 2017-01-16 | 2017-04-17 | 91 | Shibor3M Actual/360 | 1 | 2017-01-13 | 0.04985512 | Actual/360 | 0.2527778 | 0.04985512 |
2017-07-17 | 1260227 | 1e+08 | 2017-04-17 | 2017-07-17 | 91 | Shibor3M Actual/360 | 1 | 2017-04-14 | 0.04985512 | Actual/360 | 0.2527778 | 0.04985512 |
2017-10-16 | 1668056 | 1e+08 | 2017-07-17 | 2017-10-16 | 91 | Shibor3M Actual/360 | 1 | 2017-07-14 | 0.06598904 | Actual/360 | 0.2527778 | 0.06598904 |
2018-01-15 | 1790725 | 1e+08 | 2017-10-16 | 2018-01-15 | 91 | Shibor3M Actual/360 | 1 | 2017-10-13 | 0.07084187 | Actual/360 | 0.2527778 | 0.07084187 |
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论