aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/analytics/index.py31
-rw-r--r--python/analytics/utils.py11
2 files changed, 15 insertions, 27 deletions
diff --git a/python/analytics/index.py b/python/analytics/index.py
index 9ec3b7ac..0da98e47 100644
--- a/python/analytics/index.py
+++ b/python/analytics/index.py
@@ -5,17 +5,16 @@ import pandas as pd
from pyisda.legs import ContingentLeg, FeeLeg
from quantlib.settings import Settings
-from quantlib.time.api import (
- Date, Schedule, WeekendsOnly, CDS, Following,
- Unadjusted, Period, pydate_from_qldate )
+from quantlib.time.api import Date, Actual365Fixed
from termcolor import colored
from pandas.tseries.offsets import BDay
from dates import prev_immdate
from db import dbconn
from psycopg2 import DataError
from pyisda.curve import SpreadCurve
+from .utils import previous_twentieth
from yieldcurve import YC, ql_to_jp, roll_yc, rate_helpers
-from quantlib.time.api import Actual365Fixed
+
serenitasdb = dbconn('serenitasdb')
@@ -35,13 +34,6 @@ class Index():
"""
self.fixed_rate = fixed_rate
self.notional = notional
- self._sched = Schedule(Date.from_datetime(start_date),
- Date.from_datetime(end_date),
- Period("3M"),
- WeekendsOnly(),
- Following,
- Unadjusted,
- CDS)
self._start_date = start_date
self._end_date = end_date
self.recovery = recovery
@@ -67,26 +59,12 @@ class Index():
self._fee_leg = FeeLeg(d, self.end_date, True, 1, 1)
self._default_leg = ContingentLeg(d, self.end_date, 1)
self._start_date = d
- self._sched = Schedule(Date.from_datetime(d),
- Date.from_datetime(self.end_date),
- Period("3M"),
- WeekendsOnly(),
- Following,
- Unadjusted,
- CDS)
@end_date.setter
def end_date(self, d):
self._fee_leg = FeeLeg(self.start_date, d, True, 1, 1)
self._default_leg = ContingentLeg(self.start_date, d, 1)
self._end_date = d
- self._sched = Schedule(self.start_date,
- d,
- Period("3M"),
- WeekendsOnly(),
- Following,
- Unadjusted,
- CDS)
def forward_annuity(self, exercise_date):
step_in_date = exercise_date + datetime.timedelta(days=1)
@@ -226,8 +204,7 @@ class Index():
def trade_date(self, d):
settings = Settings()
settings.evaluation_date = Date.from_datetime(d)
- self.start_date = pydate_from_qldate(
- self._sched.previous_date(settings.evaluation_date))
+ self.start_date = previous_twentieth(d)
self._helpers = rate_helpers(self.currency)
self._ql_yc = YC(self._helpers)
self._yc = ql_to_jp(self._ql_yc)
diff --git a/python/analytics/utils.py b/python/analytics/utils.py
index a67d6f32..ddfc6b23 100644
--- a/python/analytics/utils.py
+++ b/python/analytics/utils.py
@@ -1,7 +1,18 @@
import numpy as np
from scipy.special import h_roots
+from dateutil.relativedelta import relativedelta
+import datetime
def GHquad(n : int):
"""Gauss-Hermite quadrature weights"""
Z, w = h_roots(n)
return Z*np.sqrt(2), w/np.sqrt(np.pi)
+
+def previous_twentieth(d):
+ r = datetime.date(d.year, d.month, 20)
+ if r > d:
+ r -= relativedelta(months=1)
+ mod = r.month % 3
+ if mod != 0:
+ r -= relativedelta(months = mod)
+ return r