Forward Swap Rate Berechnung mit Quantlib

Sep 17 2020

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

2 DavidDuarte Sep 17 2020 at 14:06

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 ']