- PVSM.RU - https://www.pvsm.ru -

Как я искал рекомендации аналитиков по покупке российских ценных бумаг в JSON формате

Четыре года назад [1] я написал систему поиска поиска недооцененных американских акций, используя данные Яху Финанс, ведь на американском рынке торгуется больше 10 тысяч бумаг, из которых около 4 тысяч бумаг имеют рекомендации аналитиков [2] о прогнозируемой цене. Это большие цифры, с которыми сложно работать. Но что по России?

Я вялотекуще пытался найти систему которая бы также отдавала рекомендации аналитиков по российским компаниям, пока недавно не нашёл такой API. Вот например какие рекомендации для оператора аренды электросамокатов WUSH [3]:

{
  "targets": [
    {
      "uid": "b993e814-9986-4434-ae88-b086066714a0",
      "ticker": "WUSH",
      "company": "SberCIB Investment Research",
      "recommendation": "RECOMMENDATION_HOLD",
      "recommendationDate": "2024-10-02T00:00:00Z",
      "currency": "rub",
      "currentPrice": {
        "units": "192",
        "nano": 0
      },
      "targetPrice": {
        "units": "250",
        "nano": 0
      },
      "priceChange": {
        "units": "58",
        "nano": 0
      },
      "priceChangeRel": {
        "units": "30",
        "nano": 210000000
      },
      "showName": "Whoosh"
    },
    {
      "uid": "b993e814-9986-4434-ae88-b086066714a0",
      "ticker": "WUSH",
      "company": "Финам",
      "recommendation": "RECOMMENDATION_HOLD",
      "recommendationDate": "2024-09-26T00:00:00Z",
      "currency": "rub",
      "currentPrice": {
        "units": "192",
        "nano": 0
      },
      "targetPrice": {
        "units": "250",
        "nano": 0
      },
      "priceChange": {
        "units": "58",
        "nano": 0
      },
      "priceChangeRel": {
        "units": "30",
        "nano": 210000000
      },
      "showName": "Whoosh"
    },
    {
      "uid": "b993e814-9986-4434-ae88-b086066714a0",
      "ticker": "WUSH",
      "company": "Газпромбанк",
      "recommendation": "RECOMMENDATION_HOLD",
      "recommendationDate": "2024-09-24T00:00:00Z",
      "currency": "rub",
      "currentPrice": {
        "units": "192",
        "nano": 0
      },
      "targetPrice": {
        "units": "355",
        "nano": 0
      },
      "priceChange": {
        "units": "163",
        "nano": 0
      },
      "priceChangeRel": {
        "units": "84",
        "nano": 900000000
      },
      "showName": "Whoosh"
    }
  ],
  "consensus": {
    "uid": "b993e814-9986-4434-ae88-b086066714a0",
    "ticker": "WUSH",
    "recommendation": "RECOMMENDATION_HOLD",
    "currency": "rub",
    "currentPrice": {
      "units": "192",
      "nano": 0
    },
    "consensus": {
      "units": "285",
      "nano": 0
    },
    "minTarget": {
      "units": "250",
      "nano": 0
    },
    "maxTarget": {
      "units": "355",
      "nano": 0
    },
    "priceChange": {
      "units": "93",
      "nano": 0
    },
    "priceChangeRel": {
      "units": "48",
      "nano": 440000000
    }
  }
}

Правда есть один нюанс в количестве. На московской бирже представлено 170 бумаг, из которых имеют рекомендации всего 89 акций.

Гораздо меньшее количество бумаг, зато API выдаёт конкретные имена компаний, которые давали рекомендации, а также дату дачи прогноза и прогнозную цену. Теоретически можно составлять списки самых точных аналитиков, через какое-то время собирая цены и сопоставляя их с прогнозными.

Но мне было больше интересно составить сводную таблицу по всем доступным 89 акциям.

Код представлен на GitHub [4].

Что делает код?

Я написал свой код на на Node.js и обращался к T‑Bank Invest API для получения данных [5]. Вот его функциональность:

  1. Инициализация и настройка:

  • Скрипт начинает с импорта необходимых модулей, таких как конфигурация (secrets), утилиты ведения журнала (logService) и клиент Tinkoff (tinkoffClient), что облегчает взаимодействие с API Tinkoff Invest.

  • API_TOKEN из файла конфигурации используется для аутентификации запросов API.

  1. Шаг 1: Получение данных по акциям:

  • Функция getStockData запрашивает у InstrumentsService Tinkoff список доступных акций. Она фильтрует эти данные, чтобы отобрать акции, котирующиеся на бирже MOEX (REAL_EXCHANGE_MOEX).

  • Отфильтрованный список и полный список акций регистрируются и возвращаются. Ключевые данные акций, такие как figi, ticker, uid и logoName, извлекаются для дальнейшей обработки.

  1. Шаг 2: Извлечение прогнозов аналитиков:

  • Функция getForecastsForStocks проходит по отфильтрованному списку акций и извлекает прогнозы аналитиков с помощью конечной точки InstrumentsService/GetForecastBy.

  • Для каждой акции она проверяет, есть ли доступные прогнозы. Если они есть, данные прогноза (текущая цена, консенсусная цена, изменение цены и количество рекомендаций) сохраняются в массиве. Если прогнозы не найдены, это увеличивает счётчик бумаг без рекомендаций на плюс один.

  • Система обеспечивает задержку в 600 мс между вызовами API для соблюдения ограничений по частоте (100 запросов в минуту).

  • Прогнозы сортируются на основе потенциального изменения цены, с наибольшим ростом цены вверху.

  1. Шаг 3: Генерация HTML-таблицы:

  • Функция generateHTMLTable создает HTML-файл для визуального отображения данных в таблице.

  • Она использует Google Charts для визуализации таблицы с логотипами акций, цен, консенсусных цен и количества рекомендаций аналитиков.

  • Таблица сохраняется как HTML-файл, что позволяет пользователю легко просматривать ее в браузере.

  1. Окончательное выполнение:

  • Код оборачивает все в асинхронную функцию, которая сначала извлекает данные по акциям, затем получает прогнозы и, наконец, генерирует HTML-таблицу, обобщающую рекомендации аналитиков.

  • На выходе получается HTML-файл с данными об акциях в реальном времени из API Т-Банк: Т‑Инвестиции, отсортированных по потенциальному изменению цены, а ещё добавил логотипы акций и страну риска.

Подводя итог, можно сказать, что этот скрипт представляет собой инструмент аналитики, который извлекает актуальные данные по акциям из API Т-Банк - Т‑Инвестиции, обрабатывает рекомендации аналитиков и формирует понятный, наглядный отчет для принятия решений.

Какие результаты работы скрипта?

С логом работы можно познакомиться на GitHub [6]. Готовую таблицу можно скачать с него же [7].

Сгенерированная таблица

Сгенерированная таблица
  • Каждый заголовок столбца можно отсортировать.

  • Для числовых столбцов, таких как текущая цена, консенсусная цена и потенциальное изменение цены, сортировка проста: по возрастанию или по убыванию.

  • Для текстовых столбцов, таких как имя и тикер, сортировка будет алфавитной.

  • Процентная сортировка (например, потенциальное изменение цены) помогает быстро определять акции с самым высоким потенциалом роста.

Итоги

Скрипт позволяет находить компании у которых есть рекомендации аналитиков. Однако эта выборка не является индивидуальной инвестиционной рекомендацией и может не соответствовать вашим инвестиционным целям. Это связано с тем, что скрипт - всего лишь инструмент, а решение о покупке конкретных бумаг принимает уже сам человек после изучения эмитента.

Проект полностью представлен на Гитхабе: https://github.com/empenoso/SilverFir-TradingBot [8]. Новые модули будут загружаться по мере написания и тестирования.

Автор: Михаил Шардин [9]

14 октября 2024 г.

Автор: empenoso

Источник [10]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/rekomendatsii/399313

Ссылки в тексте:

[1] Четыре года назад: https://github.com/empenoso/SilverFir-Investment-Report/tree/master/Node.js%20Release/YahooFinance_Analyst%20Price%20Targets/searching_results

[2] ведь на американском рынке торгуется больше 10 тысяч бумаг, из которых около 4 тысяч бумаг имеют рекомендации аналитиков: https://habr.com/ru/articles/836450/

[3] для оператора аренды электросамокатов WUSH: https://www.moex.com/ru/issue.aspx?board=TQBR&code=WUSH

[4] Код представлен на GitHub: https://github.com/empenoso/SilverFir-TradingBot/blob/main/src/forecastMap.js

[5] к T‑Bank Invest API для получения данных: https://habr.com/ru/articles/846938/

[6] можно познакомиться на GitHub: https://github.com/empenoso/SilverFir-TradingBot/blob/main/logs/trading_2024-10-10.log

[7] можно скачать с него же: https://github.com/empenoso/SilverFir-TradingBot/blob/main/data/forecastTable.html

[8] https://github.com/empenoso/SilverFir-TradingBot: https://github.com/empenoso/SilverFir-TradingBot

[9] Михаил Шардин: https://shardin.name/

[10] Источник: https://habr.com/ru/articles/849556/?utm_campaign=849556&utm_source=habrahabr&utm_medium=rss