def test_t2_shift(): index = moex.prices(("NLMK", "GMKN"), pd.Timestamp("2018-10-08")).index assert pd.Timestamp("2018-05-14") == t2_shift(pd.Timestamp("2018-05-15"), index) assert pd.Timestamp("2018-07-05") == t2_shift(pd.Timestamp("2018-07-08"), index) assert pd.Timestamp("2018-09-28") == t2_shift(pd.Timestamp("2018-10-01"), index) assert pd.Timestamp("2018-10-09") == t2_shift(pd.Timestamp("2018-10-10"), index) assert pd.Timestamp("2018-10-11") == t2_shift(pd.Timestamp("2018-10-12"), index) assert pd.Timestamp("2018-10-11") == t2_shift(pd.Timestamp("2018-10-13"), index) assert pd.Timestamp("2018-10-11") == t2_shift(pd.Timestamp("2018-10-14"), index) assert pd.Timestamp("2018-10-12") == t2_shift(pd.Timestamp("2018-10-15"), index) assert pd.Timestamp("2018-10-17") == t2_shift(pd.Timestamp("2018-10-18"), index)
def div_ex_date_prices(tickers: tuple, last_date: pd.Timestamp): """Дивиденды на с привязкой к эксдивидендной дате и цены. Дивиденды на эксдивидендную дату нужны для корректного расчета доходности. Также для многих расчетов удобна привязка к торговым дням, а отсечки часто приходятся на выходные. """ price = moex.prices(tickers, last_date) div = dividends_all(tickers) div.index = div.index.map(functools.partial(t2_shift, index=price.index)) # Может образоваться несколько дат, если часть дивидендов приходится на выходные div = div.groupby(by=DATE).sum() return div.reindex(index=price.index, fill_value=0), price
def test_prices(): df = moex.prices(("AKRN", "GMKN", "KBTK"), pd.Timestamp("2018-12-06")) assert isinstance(df, pd.DataFrame) assert len(df) > 3000 assert df.shape[1] == 3 assert df.index[-1] == pd.Timestamp("2018-12-06") assert df.loc["2006-10-20", "AKRN"] == pytest.approx(834.93) assert df.loc["2018-09-10", "AKRN"] == pytest.approx(4528) assert df.loc["2018-09-07", "GMKN"] == pytest.approx(11200) assert df.loc["2018-12-06", "GMKN"] == pytest.approx(12699) assert df.loc["2018-03-12", "KBTK"] == pytest.approx(145) assert df.loc["2010-05-24", "KBTK"] == pytest.approx(180)
def div_ex_date_prices( tickers: tuple, last_date: pd.Timestamp) -> Tuple[pd.DataFrame, pd.DataFrame]: """Дивиденды на с привязкой к эксдивидендной дате и цены. Дивиденды на эксдивидендную дату нужны для корректного расчета доходности. Также для многих расчетов удобна привязка к торговым дням, а отсечки часто приходятся на выходные. Данные обрезаются с учетом установки о начале статистики. """ price = moex.prices(tickers, last_date) div = dividends_all(tickers) div.index = div.index.map(functools.partial(t2_shift, index=price.index)) # Может образоваться несколько дат, если часть дивидендов приходится на выходные div = div.groupby(by=DATE).sum() return ( div.reindex(index=price.index, fill_value=0).loc[STATS_START:], price.loc[STATS_START:], )
def test_zero_prices(): df = moex.prices(("AKRN", "KAZTP"), pd.Timestamp("2018-12-14")) assert df.loc["2012-03-12", "KAZTP"] == pytest.approx(46.011) assert df.loc["2012-03-15", "KAZTP"] == pytest.approx(47.101)