Forward Swap Rate Berechnung mit Quantlib
Hier haben wir ein Beispiel für die Berechnung des Forward-Swap-Satzes - Wie berechnet man den Forward-Swap-Satz?
Unten ist mein Forward Swap -
from QuantLib import *
import datetime
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
calc_date = Date(29, 3, 2019)
start = 10
length = 10
start_date = TARGET().advance(calc_date, start, Years)
maturity_date = start_date + Period(length, Years)
spot_curve = FlatForward(calc_date, QuoteHandle(SimpleQuote(0.01)), Actual365Fixed())
termStructure = YieldTermStructureHandle(spot_curve)
index = Euribor6M(termStructure)
fixedSchedule = Schedule(start_date, ## pd.DataFrame({'date': list(fixedSchedule)})
maturity_date,
Period(1, Years),
TARGET(),
Unadjusted,
Unadjusted,
DateGeneration.Forward,
False
)
floatingSchedule = Schedule(start_date, ## pd.DataFrame({'date': list(floatingSchedule)})
maturity_date,
Period(6, Months),
TARGET(),
ModifiedFollowing,
ModifiedFollowing,
DateGeneration.Forward,
True
)
swap = VanillaSwap(VanillaSwap.Receiver,
10000000,
fixedSchedule,
1.45 / 100,
Thirty360(Thirty360.BondBasis),
floatingSchedule,
index,
0.0,
index.dayCounter()
)
Gibt es eine Möglichkeit, den Forward Swap-Satz direkt mit zu erhalten QuantLib? Ich versuche, explizite Berechnungen über den angegebenen Link zu vermeiden.
Vielen Dank für Ihren Hinweis.
Antworten
Sie können den Forward Swap nicht direkt erhalten, da Sie einige Konventionen für das geben müssen, was Sie wollen. Es gibt jedoch eine weniger ausführliche Möglichkeit, einen Forward-Swap zu erstellen und dessen FairRate zu erhalten. Beachten Sie, dass die meisten Konventionen aus dem von Ihnen angegebenen Index stammen.
import QuantLib as ql
calc_date = ql.Date(29, 3, 2019)
spot_curve = ql.FlatForward(calc_date, ql.QuoteHandle(ql.SimpleQuote(0.01)), ql.Actual365Fixed())
termStructure = ql.YieldTermStructureHandle(spot_curve)
index = ql.Euribor6M(termStructure)
engine = ql.DiscountingSwapEngine(termStructure)
start = 10
length = 10
swapTenor = ql.Period(length, ql.Years)
forwardStart = ql.Period(start, ql.Years)
swap = ql.MakeVanillaSwap(swapTenor, index, 0.0, forwardStart, pricingEngine=engine)
print(f"Forward Rate Swap Rate: {swap.fairRate():.3%}")
Forward Rate Swap Rate: 1,006%
(Bearbeiten) So zeigen Sie die Swap-Details an:
print(swap.fixedDayCount().name())
print([dt.ISO() for dt in swap.fixedSchedule()])
print(swap.floatingDayCount().name())
print([dt.ISO() for dt in swap.floatingSchedule()])
30/360 (Bond Basis)
['2030-09-23', '2031-09-23', '2032-09-23', '2033-09-23', '2034-09-25', '2035 -09-24 ',' 2036-09-23 ',' 2037-09-23 ',' 2038-09-23 ',' 2039-09-23 ',' 2040-09-24 ']
Actual / 360
[ "2030-09-23", "2031-03-24", "2031-09-23", "2032-03-23", "2032-09-23", "2033-03-23", "2033" -09-23 ',' 2034-03-23 ',' 2034-09-25 ',' 2035-03-27 ',' 2035-09-24 ',' 2036-03-24 ',' 2036-09 -23 ',' 2037-03-23 ',' 2037-09-23 ',' 2038-03-23 ',' 2038-09-23 ',' 2039-03-23 ',' 2039-09-23 ' ',' 2040-03-23 ',' 2040-09-24 ']