diff options
Diffstat (limited to 'python/yieldcurve.py')
| -rw-r--r-- | python/yieldcurve.py | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/python/yieldcurve.py b/python/yieldcurve.py index b524a04c..50588aa6 100644 --- a/python/yieldcurve.py +++ b/python/yieldcurve.py @@ -4,10 +4,10 @@ import requests, zipfile from io import BytesIO import xml.etree.ElementTree as ET import datetime -from quantlib.time.api import Calendar, Date, Period, Days, Schedule, today +from quantlib.time.api import Calendar, Period, Days, Schedule, today, Actual360 from quantlib.time import imm from quantlib.util.converter import qldate_to_pydate, pydate_to_qldate -from quantlib.market.market import libor_market +from quantlib.market.market import libor_market, next_imm_date import numpy as np import matplotlib.pyplot as plt @@ -45,30 +45,32 @@ def get_futures_data(date = datetime.date.today()): def YC(date = datetime.date.today(), MarkitData=None, futures = None): if not MarkitData: - MarkitData = getMarkitIRData(date) + MarkitData = getMarkitIRData(date.date()) if not futures: - calendar = Calendar.from_name('TARGET')## need to figure out which is the right calendar to use - prev_day = calendar.advance(pydate_to_qldate(date), -1, Days) - futures = get_futures_data(qldate_to_pydate(prev_day).date()) + futures = get_futures_data(date.date()) m = libor_market('USD(NY)') quotes = [('ED',i+1, v) for i, v in enumerate(futures)] + # if next_imm_date(date, 9) == pydate_to_qldate(date) + Period('2Yr'): + # quotes.pop(8) quotes += [('SWAP', k, v) for k, v in MarkitData['swaps'].items()] m.set_quotes(date, quotes) - m.bootstrap_term_structure() - return m + ts = m.bootstrap_term_structure(interpolator='linear') + return ts if __name__=="__main__": - m = YC() + date = datetime.date(2013, 12, 23) + ts = YC(date) + cal = Calendar.from_name('USA') p1 = Period('1Mo') p2 = Period('2Mo') p3 = Period('3Mo') p6 = Period('6Mo') p12 = Period('12Mo') - calendar = Calendar.from_name(m.calendar) - sched = Schedule(m.settle_date, m.settle_date+Period('5Yr'), Period('3Mo'), calendar) + sched = Schedule(ts.reference_date, ts.reference_date+Period('5Yr'), Period('3Mo'), cal) days = [qldate_to_pydate(day) for day in sched] - f3 = [m.forward(d, p3, 1) for d in sched] - f6 = [m.forward(d, p6, 1) for d in sched] - f2 = [m.forward(d, p2, 1) for d in sched] + f3 = [ts.forward_rate(d, d+p3, Actual360()).rate for d in sched] + f6 = [ts.forward_rate(d, d+p6, Actual360()).rate for d in sched] + f2 = [ts.forward_rate(d, d+p2, Actual360()).rate for d in sched] + plt.plot(days, f2, days, f3, days, f6) plt.show() |
