我真的需要帮助...我有一个使用 QuantLib 构建自己的 Vanilla Swap Pricer 的项目。我想根据 ois 掉期的市场价格进行计算以进行贴现,并根据 Euribor 6M 掉期 + FRA 进行预测固定。总而言之,我的目标是尽可能接近彭博社对标准 Euribor 6M 掉期的定价(贴现 ois) - fwd Euribor 6M)。
很容易开始,我得到了 QuantLib 的文档,但是当完全遵循这段代码时,我遇到了错误...
https://quantlib-python-docs.readthedocs.io /en/latest/examples/fixedvenue/vanillaswap.html
TypeError: MakeVanillaSwap() 有一个意外的关键字参数“Nominal”
我非常感谢您的帮助,因为我陷入了困境我项目的第一步....
谢谢!
我尝试删除标称值,因此它使用的是 1 默认值,但我不知道应该在哪里输入标称值。
I tried to remove the nominal, so it's working with a 1 default value I think but I don't know where should I input the nominal.
当然,我可以帮助你解决这个问题。你遇到的错误“TypeError: MakeVanillaSwap() got an unexpected keyword argument 'Nominal'”是因为
ql.MakeVanillaSwap
函数中没有“Nominal”参数。
以下是如何在 QuantLib 中对普通掉期进行定价的方法,以及如何更正你的代码:
import QuantLib as ql
# -------- 市场数据 --------
calculation_date = ql.Date(15, 12, 2022)
ql.Settings.instance().setEvaluationDate(calculation_date)
# OIS 曲线用于折现
ois_helpers = [
ql.OISRateHelper(ql.Period(1, ql.Days), ql.QuoteHandle(ql.SimpleQuote(rate / 100)), ql.Euribor6M()),
# 添加更多 OIS 报价...
]
ois_curve = ql.PiecewiseLogCubicDiscount(0, ql.TARGET(), ois_helpers, ql.ActualActual())
# Euribor 6M 曲线用于预测
euribor6m_helpers = [
ql.SwapRateHelper(ql.QuoteHandle(ql.SimpleQuote(rate / 100)), ql.Period(tenor), ql.TARGET(), ql.ModifiedFollowing, ql.TARGET(), ql.Euribor6M(), ql.QuoteHandle(), ql.Period(6, ql.Months)),
# 添加更多 Euribor 6M 报价...
]
euribor6m_curve = ql.PiecewiseLogCubicDiscount(0, ql.TARGET(), euribor6m_helpers, ql.ActualActual())
# 设置 Euribor 6M 指数
euribor6m_index = ql.Euribor6M(ql.QuoteHandle(ql.SimpleQuote(0.02))) # 虚拟初始值
# -------- 掉期详细信息 --------
nominal = 1000000 # 标称本金
maturity = ql.Period(5, ql.Years)
fixed_rate = 0.03 # 固定利率
fixed_leg_tenor = ql.Period(1, ql.Years)
fixed_leg_daycount = ql.Thirty3_60()
floating_leg_daycount = ql.Actual360()
# -------- 构建掉期 --------
fixed_leg_schedule = ql.Schedule(calculation_date, calculation_date + maturity, fixed_leg_tenor, ql.ModifiedFollowing, ql.TARGET(), ql.ModifiedFollowing, ql.DateGeneration.Forward, False)
floating_leg_schedule = ql.Schedule(calculation_date, calculation_date + maturity, ql.Period(6, ql.Months), ql.ModifiedFollowing, ql.TARGET(), ql.ModifiedFollowing, ql.DateGeneration.Forward, False)
# 使用构建器函数
swap = ql.MakeVanillaSwap(maturity, euribor6m_index, fixed_rate, fixed_leg_tenor, fixed_leg_daycount, floating_leg_daycount, ql.ModifiedFollowing, nominal, ql.TARGET())
# -------- 定价引擎 --------
swap.setPricingEngine(ql.DiscountingSwapEngine(ois_curve))
# -------- 结果 --------
print("NPV:", swap.NPV())
print("公平利率:", swap.fairRate())
print("固定支腿 NPV:", swap.fixedLegNPV())
print("浮动支腿 NPV:", swap.floatingLegNPV())
说明:
- 导入 QuantLib: 导入必要的 QuantLib 库。
- 市场数据:
- 设置计算日期。
- 创建 OIS 帮助程序列表。这些将用于构建用于折现的 OIS 曲线。请确保用实际的 OIS 市场报价替换占位符。
- 使用 OIS 帮助程序创建 OIS 曲线。
- 创建 Euribor 6M 帮助程序列表。这些将用于构建用于预测浮动支腿的 Euribor 6M 曲线。请确保用实际的 Euribor 6M 市场报价替换占位符。
- 使用 Euribor 6M 帮助程序创建 Euribor 6M 曲线。
- 实例化 Euribor 6M 指数并为其分配虚拟初始值。这将在构建掉期时更新。
- 掉期详细信息:
- 定义掉期的标称值、期限、固定利率、固定支腿期限、固定支腿日计数惯例和浮动支腿日计数惯例。
- 构建掉期:
- 为固定支腿和浮动支腿生成支付时间表。
-
使用
ql.MakeVanillaSwap
函数创建普通掉期。在此函数中,你需要指定掉期的参数,例如期限、指数、固定利率、期限等。 - 定价引擎:
-
创建一个
DiscountingSwapEngine
,并为其提供 OIS 曲线进行折现。 - 使用此引擎设置掉期的定价引擎。
- 结果:
- 打印掉期的 NPV、公平利率、固定支腿 NPV 和浮动支腿 NPV。
更正代码中的其他注意事项:
- 确保用实际的市场数据(如 OIS 和 Euribor 6M 报价)替换占位符。
- 根据你的特定需求调整掉期详细信息和市场数据。
通过进行这些更改,你应该能够对你的普通掉期进行定价并解决你遇到的错误。
标签:python,swap,finance,derivative,quantlib From: 78808874