Quantlib kullanarak Forward Swap Rate hesaplama

Sep 17 2020

Burada Forward Swap Rate hesaplaması için bir örnek var - Forward swap oranları nasıl hesaplanır?

Aşağıda Forward Swap'ım var -

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()
                    )

Forward Swap oranını kullanarak doğrudan elde etmenin bir yolu var mı QuantLib? Verilen bağlantıyı kullanarak açık hesaplamalardan kaçınmaya çalışıyorum.

İşaretçiniz için çok teşekkürler.

Yanıtlar

2 DavidDuarte Sep 17 2020 at 14:06

İstediğiniz şey için bazı kurallar vermeniz gerekeceğinden Forward Swap'ı doğrudan alamazsınız. Bununla birlikte, ileriye dönük bir takas oluşturmanın ve adilOranı elde etmenin daha az ayrıntılı bir yolu vardır. Çoğu konvansiyonun belirttiğiniz dizinden geleceğini unutmayın.

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 Oranı:% 1.006

(Düzenle) Takas ayrıntılarını görmek için:

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 (Tahvil Temeli)
["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 ']
Gerçek / 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 "]