Ejemplo n.º 1
0
def test_log_total_returns():
    data = log_total_returns(("GMKN", "RTKMP", "MTSS"), pd.Timestamp("2018-10-17"))

    assert isinstance(data, pd.DataFrame)
    assert list(data.columns) == ["GMKN", "RTKMP", "MTSS"]

    assert data.index[0] == pd.Timestamp("2003-10-02")
    assert data.index[-1] == pd.Timestamp("2018-10-17")

    assert data.loc["2018-10-08", "MTSS"] == pytest.approx(
        np.log(((269.9 + 2.6 * AFTER_TAX) / 275.1))
    )
    assert data.loc["2018-10-09", "MTSS"] == pytest.approx(np.log(((264 + 0) / 269.9)))

    assert data.loc["2018-10-01", "GMKN"] == pytest.approx(
        np.log(((11307 + 0) / 11388))
    )
    assert data.loc["2018-09-28", "GMKN"] == pytest.approx(
        np.log(((11388 + 776.02 * AFTER_TAX) / 11830))
    )

    assert data.loc["2018-07-05", "RTKMP"] == pytest.approx(
        np.log(((62.53 + 5.045825249373 * AFTER_TAX) / 66))
    )
    assert data.loc["2018-07-06", "RTKMP"] == pytest.approx(np.log(((62 + 0) / 62.53)))
Ejemplo n.º 2
0
 def get(self, params=None) -> pd.Series:
     """Для дат, в которые есть котировки указывается тикер."""
     returns = data.log_total_returns(self._tickers, self._last_date)
     tickers = returns.stack()
     tickers.loc[:] = tickers.index.get_level_values(1)
     tickers.name = self.name
     return tickers
Ejemplo n.º 3
0
 def get(self, params=None) -> pd.Series:
     """Средняя доходность за указанное количество предыдущих дней."""
     params = params or self._params
     days = params["days"]
     returns = data.log_total_returns(self._tickers, self._last_date)
     mom12m = returns.rolling(days).mean()
     mom12m = mom12m.stack()
     mom12m.name = self.name
     return mom12m
Ejemplo n.º 4
0
 def get(self, params=None) -> pd.Series:
     """СКО за указанное количество предыдущих дней."""
     params = params or self._params
     days = params["days"]
     returns = data.log_total_returns(self._tickers, self._last_date)
     std = returns.rolling(days).std()
     std = std.stack()
     std.name = self.name
     return std[std > LOW_STD]
Ejemplo n.º 5
0
 def get(self, params=None) -> pd.Series:
     """Средняя доходность за указанное количество следующих дней."""
     params = params or self._params
     days = params["days"]
     returns = data.log_total_returns(self._tickers, self._last_date)
     label = returns.rolling(days).mean()
     label = label.shift(-days).stack()
     label.name = self.name
     return label
Ejemplo n.º 6
0
 def get(self, params=None) -> pd.Series:
     """Максимальная доходность за указанное количество предыдущих дней."""
     params = params or self._params
     days = params["days"]
     returns = data.log_total_returns(self._tickers, self._last_date)
     retmax = returns.rolling(days).max()
     retmax = retmax.stack()
     retmax.name = self.name
     return retmax