使用EONIA贴现曲线和600万欧元银行同业拆借利率远期曲线计算python中IR掉期的潜在未来敞口

2024-09-28 23:43:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用两条曲线计算两次掉期组合的潜在未来风险敞口(PFE)——欧元银行同业拆借利率(EURIBOR)为浮动部分定价,EONIA曲线为掉期固定部分贴现。我使用Quantlib Python Cookbook构建了这两条曲线,对于掉期定价和PFE计算器,我想使用以下示例:(https://ipythonquant.wordpress.com/2015/04/08/expected-exposure-and-pfe-simulation-with-quantlib-and-python/)。我的问题是,在这个例子中,他们使用一条曲线进行贴现和转发,从一个费率计算(这并不现实)。我可以构建收益率曲线,但我不能将这两个示例合并到一个代码中以正常工作。(请帮助我,我的论文工作的最后期限就要到了!)我对任何其他可以解决这个问题的代码或解决方案都感兴趣。这是我的密码:

! pip install QuantLib-Python

# import the used libraries
%%capture
%pylab inline --no-import-all
import math
import utils
import datetime as dt
import pandas  as pd
#utils.set_default_plot_size()
import QuantLib as ql

from QuantLib import *

today = Date(8, September, 2020)
Settings.instance().evaluationDate = today

eonia = Eonia()
helpers = [ OISRateHelper(2, Period(*tenor),
QuoteHandle(SimpleQuote(rate/100)), eonia)
for rate, tenor in [(-0.468, (1,Days)), (-0.470000013709068, (1,Weeks)),(-0.473499998450279, (2,Weeks)), (-0.476999998092651, (1,Months)), (-0.478000000119209, (2,Months)),(-0.480000004172325, (3,Months)), (-0.483400002121925, (4,Months)),(-0.486249998211861, (5,Months)), (-0.488499999046326, (6,Months)),(-0.493000000715256, (7,Months)), (-0.497000008821487, (8,Months)),(-0.500199988484383, (9,Months)), (-0.504599988460541, (10,Months)),(-0.50874999165535, (11,Months)), (-0.512099981307983, (12,Months)),(-0.531000018119812, (18,Months)), (-0.541999995708465, (2,Years)),(-0.546999990940093, (30,Months)), (-0.550999999046326, (3,Years)),(-0.544999986886978, (4,Years)), (-0.527999997138977, (5,Years)),(-0.49499998986721, (6,Years)), (-0.459999993443489, (7,Years)),(-0.417999997735023, (8,Years)), (-0.373999997973442, (9,Years)),(-0.326999992132187, (10,Years)), (-0.277999997138977, (11,Years)),(-0.236000001430512, (12,Years)), (-0.123999997973442, (15,Years)),(-0.0370000004768372, (20,Years)), (-0.0330000007525086, (25,Years)),(-0.0490000005811453, (30,Years)), (-0.0710000023245811,(35,Years)),(-0.0889999493956566, (40,Years)), (-0.128000002354383, (50,Years))] ]

eonia_curve_c = PiecewiseLogCubicDiscount(0, TARGET(),
helpers, Actual360())
eonia_curve_c.enableExtrapolation()

helpers = [ DepositRateHelper(QuoteHandle(SimpleQuote(-0.459/100)),Period(6,Months), 3,TARGET(), Following, False, Actual360()) ]
euribor6m = Euribor6M()

此外,这里的问题是什么??:

helpers += [ FraRateHelper(QuoteHandle(SimpleQuote(rate/100)),
start, euribor6m)
for rate, start in [(-0.43818798661232, 7), (-0.442768007516861, 8), (-0.440380990505219, 9),
   (-0.437555998563766, 10), (-0.445408999919891, 11), (-0.452802002429962, 12),
   (-0.453942000865936, 13), (-0.450417011976242, 14), (-0.466143995523453, 15),
  (-0.450170010328293, 16), (-0.,452068001031876, 17), (-0.468688994646072, 18)] ]

(它显示的值太多,无法解压缩)

discount_curve = RelinkableYieldTermStructureHandle()
discount_curve.linkTo(eonia_curve)

helpers += [ SwapRateHelper(QuoteHandle(SimpleQuote(rate/100)),Period(tenor, Years), TARGET(),Annual, Unadjusted,Thirty360(Thirty360.BondBasis),euribor6m, QuoteHandle(), Period(0, Days),discount_curve)for rate, tenor in [(-0.471998006105423, 2), (-0.4668410122394563, 3), (-0.448518991470337, 4),(-0.419505000114441, 5),(-0.386981993913651, 6), (-0.345064997673035, 7), (-0.301272988319397, 8),(-0.259175002574921, 9), (-0.206983998417854, 10), (-0.164517998695374, 11),(-0.123749002814293, 12),(-0.0165138002485037, 15), (0.0642198026180267, 20),(0.0658923983573914, 25), (0.0394961982965469, 30),(-0.0109016001224518, 40),(-0.0604206994175911, 50)] ]

euribor6m_curve = PiecewiseLogCubicDiscount(2, TARGET(), helpers,Actual365Fixed())
euribor6m_curve.enableExtrapolation()

然后,我想把这些曲线添加到代码中:https://ipythonquant.wordpress.com/2015/04/08/expected-exposure-and-pfe-simulation-with-quantlib-and-python/ 要替换此选项,请执行以下操作:

# Setup Marketdata
rate = ql.SimpleQuote(0.0536)
rate_handle = ql.QuoteHandle(rate)
dc = ql.Actual365Fixed()
yts = ql.FlatForward(today, rate_handle, dc)
yts.enableExtrapolation()
hyts = ql.RelinkableYieldTermStructureHandle(yts)
t0_curve = ql.YieldTermStructureHandle(yts)
euribor6m = ql.Euribor6M(hyts)

然后用这些曲线为掉期定价。 如果你知道这个问题的解决方案,请与我分享!或者任何建议,如何用两条自举曲线为掉期定价。Thx


Tags: andimportrate曲线helpersperiod定价curve
1条回答
网友
1楼 · 发布于 2024-09-28 23:43:32

这里有两个问题:

一,。PFE示例

首先,无法提取FraRateHelper的数据的原因是其中一个元素中有一个额外的逗号。请注意,此处的类型使特定元组具有3个元素而不是2个:

(-0.,452068001031876, 17)

之后,替换这段代码(您正在创建平曲线):

rate = ql.SimpleQuote(0.0536)
rate_handle = ql.QuoteHandle(rate)
dc = ql.Actual365Fixed()
yts = ql.FlatForward(today, rate_handle, dc)
yts.enableExtrapolation()

yts = euribor6m_curve

你应该善于使用你提到的例子

二,。定价互换

现在,对于具有两条曲线的掉期定价,我们的想法是使用远期曲线作为指数:

euribor6m = ql.Euribor6M(hyts)

然后是发动机的折扣曲线:

engine = ql.DiscountingSwapEngine(discount_curve)
swap.setPricingEngine(engine)
print( swap.NPV() )
print( swap.fairRate() )

相关问题 更多 >