aboutsummaryrefslogtreecommitdiffstats
path: root/python/yieldcurve.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/yieldcurve.py')
-rw-r--r--python/yieldcurve.py30
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()