python - PiecewiseCubicZero 和 PiecewiseLogCubicDiscount 之间的区别
问题描述
我正在创建 PiecewiseCubicZerocurve 和 PiecewiseLogCubicDiscount 并从两条曲线中获得 1 年零利率。我希望我的 1 年零利率等于我的 1 年票面利率。
我有两个问题:
- 为什么 PiecewiseCubicZerocurve 和 PiecewiseLogCubicDiscount 的零利率不同?
- 为什么 1 年期零利率不等于 1 年期票面利率?
我试着玩弄工作日数和约定。但这至今还没有解决问题。
from QuantLib import *
today = Date(29, 1, 2019)
Settings.instance().evaluationDate = today
convention = Actual365Fixed()
helpers = [OISRateHelper(2, Period(*tenor),
QuoteHandle(SimpleQuote(rate)), Eonia())
for rate, tenor in [(0.001, (1, Years)), (0.002, (2,Years))]]
curve1 = PiecewiseCubicZero(0, TARGET(), helpers, convention)
curve2 = PiecewiseLogCubicDiscount(0, TARGET(), helpers, convention)
print('discount factor (zero)', curve1.discount(today + Period(1, Years)))
print('discount factor (discount)', curve2.discount(today + Period(1, Years)))
print('expected discount factor', 1/(1+0.001))
print('zero (zero)', curve1.zeroRate(today + Period(1, Years), convention, Annual))
print('zero (discount)', curve2.zeroRate(today + Period(1, Years), convention, Annual))
print('expected zero 0.1%')
打印语句输出:
discount factor (zero) 0.9989871380405977
discount factor (discount) 0.9989954702856564
expected discount factor 0.9990009990009991
zero (zero) 0.101389 % Actual/365 (Fixed) Annual compounding
zero (discount) 0.100554 % Actual/365 (Fixed) Annual compounding
expected zero 0.1%
解决方案
我认为这是工作日会议和结算日的问题。
当使用convention = Actual360()
EONIA 标准的 和(而不是)0
中的结算日时,我得到以下输出:OISRateHelper
2
zero (zero) 0.099999 % Actual/360 Annual compounding
zero (discount) 0.099999 % Actual/360 Annual compounding
expected zero 0.1%
当使用结算日 > 0 时,您必须相应地调整您的曲线和到期日。
推荐阅读
- sql - 如何检查A列是否链接到另一列A中的一个或多个
- next.js - 错误:libuuid.so.1:无法打开共享对象文件:没有这样的文件或目录
- php - 英国车辆数据:每公斤价格函数的实施
- python - 达到特定条件时取消异步任务
- git - git diff 产生不正确的补丁
- react-redux - ReduxToolkit-CreateAsyncThunk - 异步操作正在工作,但当状态改变时反应应用程序没有更新
- gtsummary - 设置总体列以报告 gtsummary 中的列百分比
- python - 将 train_test_split() 添加到 K-Means 算法代码
- javascript - 如何根据滑块选择呈现列表项?
- javascript - Jquery循环重复创建相同的对象