예제 #1
0
def new_dividends(tickers: tuple[str, ...]) -> set[str]:
    """Список тикеров с новой информацией о дивидендах.

    По российским акция используется информация о предстоящих дивидендах со SmartLab, а по иностранным с
    MOEX.

    Выбираются только тикеры из предоставленного списка.

    :param tickers:
        Тикеры, для которых нужно проверить актуальность данных.
    :return:
        Список новых тикеров.
    """
    status = set()
    for ticker, date, div_value in _new_div_all().itertuples():
        if ticker not in tickers:
            continue

        df = div.dividends(ticker)
        if not _check_div_in_df(ticker, date, div_value, df):
            status.add(ticker)

    if status:
        print("\nДАННЫЕ ПО ДИВИДЕНДАМ ТРЕБУЮТ ОБНОВЛЕНИЯ\n")  # noqa: WPS421
        print(", ".join(status))  # noqa: WPS421

    return status
예제 #2
0
def dividends_validation(ticker: str) -> pd.DataFrame:
    """Проверяет корректности данных о дивидендах для тикера.

    Запускает принудительное обновление, сравнивает основные данные по дивидендам с альтернативными
    источниками и распечатывает результаты.
    """
    bootstrap.BUS.handle_event(events.UpdateDivCommand(ticker))

    df_local = div.dividends(ticker)
    df_local.columns = ["LOCAL"]

    div_ex = div.div_ext(ticker)

    df_comp = _compare(div_ex.iloc[:, -1:], df_local)
    df_comp = pd.concat(
        [div_ex.iloc[:, :-1], df_comp],
        axis=1,
    )

    first_quote = not_div.quotes((ticker, ))[0].index[0]
    df_comp = df_comp.loc[first_quote:]

    comp_str = f"\nСравнение интернет источников с локальными данными - {ticker}\n\n{df_comp}"
    LOGGER.info(comp_str)  # noqa: WPS421

    return df_comp
예제 #3
0
def test_dividends(ticker, div_data):
    """Проверка, что первые дивиденды после даты обрезки."""
    df = div.dividends(ticker)

    assert isinstance(df, pd.DataFrame)
    assert df.index.is_monotonic_increasing

    assert df.index[0] >= bootstrap.START_DATE
    assert df.columns.tolist() == [ticker]

    date, div_value = div_data
    assert df.loc[date, ticker] == div_value