Пример #1
0
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)
Пример #2
0
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
Пример #3
0
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)
Пример #4
0
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:],
    )
Пример #5
0
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)