diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/analytics/basket_index.py | 40 | ||||
| m--------- | python/pyisda | 0 |
2 files changed, 20 insertions, 20 deletions
diff --git a/python/analytics/basket_index.py b/python/analytics/basket_index.py index 3dfcbb9e..100c55c3 100644 --- a/python/analytics/basket_index.py +++ b/python/analytics/basket_index.py @@ -29,7 +29,7 @@ class BasketIndex(CreditIndex): tweaks: List[float] def __init__(self, index_type: str, series: int, tenors: List[str], *, - trade_date: pd.Timestamp=pd.Timestamp.today().normalize() - BDay()): + value_date: pd.Timestamp=pd.Timestamp.today().normalize() - BDay()): self.index_type = index_type self.series = series if index_type == 'IG' or index_type == 'EU': @@ -54,13 +54,13 @@ class BasketIndex(CreditIndex): maturities = self.index_desc.maturity.sort_values().dt.to_pydatetime() self.index_desc = self.index_desc.reset_index().set_index('maturity') self.index_desc.tenor = self.index_desc.tenor.astype(tenor_t) - curves = get_singlenames_curves(index_type, series, trade_date) + curves = get_singlenames_curves(index_type, series, value_date) self.currency = "EUR" if index_type in ["XO", "EU"] else "USD" - self.yc = get_curve(trade_date, self.currency) - self.step_in_date = trade_date + Day() - self.value_date = trade_date + 3 * BDay() + self.yc = get_curve(value_date, self.currency) + self.step_in_date = value_date + Day() + self.cash_settle_date = value_date + 3 * BDay() self.tweaks = [] - super().__init__(self.issue_date, maturities, curves, trade_date=trade_date) + super().__init__(self.issue_date, maturities, curves, value_date=value_date) def __reduce__(self): _, args = CreditIndex.__reduce__(self) @@ -80,7 +80,7 @@ class BasketIndex(CreditIndex): def _query_version(self, i): for lastdate, *data in self._version: - if lastdate >= self.trade_date: + if lastdate >= self.value_date: return data[i] @property @@ -98,15 +98,15 @@ class BasketIndex(CreditIndex): def _get_quotes(self): pass - trade_date = property(CreditIndex.trade_date.__get__) + value_date = property(CreditIndex.value_date.__get__) - @trade_date.setter - def trade_date(self, d: pd.Timestamp): + @value_date.setter + def value_date(self, d: pd.Timestamp): self.curves = get_singlenames_curves(self.index_type, self.series, d) self.yc = get_curve(d, self.currency) self.step_in_date = d + Day() - self.value_date = d + 3 * BDay() - CreditIndex.trade_date.__set__(self, d) + self.cash_settle_date = d + 3 * BDay() + CreditIndex.value_date.__set__(self, d) def pv(self, maturity=None, epsilon=0., coupon=None): if maturity is None: @@ -159,7 +159,7 @@ class BasketIndex(CreditIndex): Otherwise computes the theta for that specific maturity (which needs not be an existing tenor)""" if hasattr(self, "index_quotes"): - index_quotes = self.index_quotes.loc[self.trade_date] + index_quotes = self.index_quotes.loc[self.value_date] else: index_quotes = None if maturity is None: @@ -167,7 +167,7 @@ class BasketIndex(CreditIndex): for m in self.maturities: coupon = self.index_desc.coupon[m] index_quote = np.nan if index_quotes is None else index_quotes[m] - r.append(super().theta(self.step_in_date, self.value_date, m, + r.append(super().theta(self.step_in_date, self.cash_settle_date, m, self.yc, self.recovery, coupon, index_quote)) return pd.Series(r, index=self.index_desc.tenor, name='theta') @@ -177,7 +177,7 @@ class BasketIndex(CreditIndex): coupon = self.index_desc.coupon[maturity] except KeyError: raise ValueError("Non standard maturity: coupon must be provided") - return super().theta(self.step_in_date, self.value_date, maturity, + return super().theta(self.step_in_date, self.cash_settle_date, maturity, self.yc, self.recovery, coupon, np.nan) @@ -208,21 +208,21 @@ class BasketIndex(CreditIndex): break else: print("couldn't calibrate for date: {} and maturity: {}". - format(self.trade_date.date(), m.date())) + format(self.value_date.date(), m.date())) self.tweaks.append(np.NaN) continue self.tweaks.append(eps) self.tweak_portfolio(eps, m) def _snacpv(self, spread, coupon, recov): - return upfront_charge(self.trade_date, self.value_date, self.start_date, + return upfront_charge(self.value_date, self.cash_settle_date, self.start_date, self.step_in_date, self.start_date, self.maturity, coupon, self.yc, spread, recov) class MarkitBasketIndex(BasketIndex): def __init__(self, index_type: str, series: int, tenors: List[str], *, - trade_date: pd.Timestamp=pd.Timestamp.today().normalize() - BDay()): - super().__init__(index_type, series, tenors, trade_date=trade_date) + value_date: pd.Timestamp=pd.Timestamp.today().normalize() - BDay()): + super().__init__(index_type, series, tenors, value_date=value_date) self.index_quotes = (get_index_quotes(index_type, series, tenors, years=None)['closeprice']. unstack(). @@ -234,7 +234,7 @@ class MarkitBasketIndex(BasketIndex): self.index_quotes = 1 - self.index_quotes / 100 def _get_quotes(self): - return self.index_quotes.loc[self.trade_date] + return self.index_quotes.loc[self.value_date] if __name__ == "__main__": ig28 = BasketIndex("IG", 28, ["3yr", "5yr", "7yr", "10yr"]) diff --git a/python/pyisda b/python/pyisda -Subproject eec079094894475e747dd4bb82231f56119b54e +Subproject 80226519ecd6661ac9b9da08082205cceb8aa5b |
