diff options
Diffstat (limited to 'python/analytics/index.py')
| -rw-r--r-- | python/analytics/index.py | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/python/analytics/index.py b/python/analytics/index.py index a9b6ab6a..87f5471d 100644 --- a/python/analytics/index.py +++ b/python/analytics/index.py @@ -8,8 +8,6 @@ import warnings from dateutil.relativedelta import relativedelta from pyisda.legs import ContingentLeg, FeeLeg -from quantlib.settings import Settings -from quantlib.time.api import Date, Actual365Fixed from termcolor import colored from pandas.tseries.offsets import BDay from sqlalchemy import exc @@ -21,6 +19,7 @@ from bbg_helpers import BBG_IP, retrieve_data, init_bbg_session from yieldcurve import get_curve, rate_helpers, YC, ql_to_jp from weakref import WeakSet + def g(index, spread, exercise_date, pv=None): """computes the strike clean price using the expected forward yield curve. """ step_in_date = exercise_date + datetime.timedelta(days=1) @@ -173,7 +172,7 @@ class Index(object): @property def flat_hazard(self): sc_data = self._sc.inspect()['data'] - ## conversion to continuous compounding + # conversion to continuous compounding return sc_data[0][1] @property @@ -210,7 +209,7 @@ class Index(object): self._sc = SpreadCurve( self.value_date, self._yc, self.start_date, self._step_in_date, self._cash_settle_date, - [self.end_date], array.array('d',[self.fixed_rate*1e-4]), + [self.end_date], array.array('d', [self.fixed_rate*1e-4]), array.array('d', [self._clean_pv]), array.array('d', [self.recovery])) self._risky_annuity = self._fee_leg.pv( @@ -269,7 +268,7 @@ class Index(object): rh.quote += 1e-4 ql_yc = YC(helpers) self._yc = ql_to_jp(ql_yc) - self._update() ## to force recomputation + self._update() # to force recomputation new_pv = self.pv # for r in self._helpers: # r.quote -= 1e-4 @@ -279,7 +278,7 @@ class Index(object): @property def rec_risk(self): - old_pv, old_recovery = self.pv, self.recovery + old_recovery = self.recovery self.recovery = old_recovery - 0.01 self._update() pv_minus = self.pv @@ -315,7 +314,7 @@ class Index(object): self._value_date = d self._step_in_date = d + datetime.timedelta(days=1) self._accrued = self._fee_leg.accrued(self._step_in_date) - self._cash_settle_date = pd.Timestamp(self._value_date) + 3* BDay() + self._cash_settle_date = pd.Timestamp(self._value_date) + 3 * BDay() if self._spread is not None: self._update() self.notify() @@ -329,7 +328,7 @@ class Index(object): if self._original_clean_pv is None: raise ValueError("original pv not set") else: - ## TODO: handle factor change + # TODO: handle factor change days_accrued = (self.value_date - self._trade_date).days / 360 return - self._direction * self.notional * self.factor * \ (self._clean_pv - self._original_clean_pv - @@ -397,7 +396,7 @@ class Index(object): coupon = df.coupon[0] if tenor is None: tenor = df.tenor[0] - index_type = index.upper() if index else df.loc[0,'index'] + index_type = index.upper() if index else df.loc[0, 'index'] series = series if series else df.series.iat[0] df.loc[df.lastdate.isnull(), 'lastdate'] = maturity except exc.DataError as e: @@ -408,7 +407,7 @@ class Index(object): instance = cls(value_date, maturity, recovery, coupon, notional, index_type == "HY", df.issue_date[0]) instance._version = tuple((ld.date(), factor / 100, version) for ld, factor, version in \ - df[['lastdate', 'indexfactor', 'version']].itertuples(index=False)) + df[['lastdate', 'indexfactor', 'version']].itertuples(index=False)) instance.index_type = index_type instance.series = series instance.tenor = tenor @@ -428,7 +427,7 @@ class Index(object): @classmethod def from_tradeid(cls, trade_id): - engine = dbengine('dawndb') + engine = dbengine('dawndb') r = engine.execute(""" SELECT * FROM cds LEFT JOIN index_desc @@ -465,7 +464,7 @@ class Index(object): accrued_str = "Accrued ({} Day)".format(self.days_accrued) s = ["{:<20}\tNotional {:>5}MM {}\tFactor {:>28}".format("Buy Protection"\ - if self._direction == -1 \ + if self._direction == -1 else "Sell Protection", self.notional/1_000_000, self.currency, @@ -482,7 +481,7 @@ class Index(object): [None, None, None, None]] s += build_table(rows, format_strings, "{:<20}{:>19}\t\t{:<20}{:>15}") s += ["", - colored("Calculator", attrs = ['bold'])] + colored("Calculator", attrs=['bold'])] rows = [["Valuation Date", self.value_date], ["Cash Settled On", self._cash_settle_date]] format_strings = [[None, '{:%m/%d/%y}'], @@ -511,7 +510,7 @@ class ForwardIndex(object): self.forward_date = forward_date.date() else: self.forward_date = forward_date - self.exercise_date_settle = pd.Timestamp(forward_date) + 3* BDay() + self.exercise_date_settle = pd.Timestamp(forward_date) + 3 * BDay() self.df = index._yc.discount_factor(self.exercise_date_settle) self._update() if observer: |
