Описание: Этот бот Telegram предназначен для отслеживания изменений цен на акции на бирже Тинькофф. Он использует API Tinkoff Invest для получения данных о ценах и API Telegram для отправки уведомлений пользователям.
Необходимые компоненты:
- Аккаунт Tinkoff Invest: Для доступа к API Tinkoff Invest.
- Токен API Tinkoff Invest: Получите токен в настройках вашего аккаунта Tinkoff Invest.
- Аккаунт Telegram: Для создания бота и получения токена бота.
- Токен API Telegram: Получите токен бота в @BotFather в Telegram.
- CSV-файл с FIGI-кодами акций: CSV-файл с колонками "figi" и "Company", содержащий FIGI-коды акций, которые нужно отслеживать, и их названия.
- База данных: База данных для хранения идентификаторов пользователей, которые подписались на уведомления.
Установка:
- Установка Python: Убедитесь, что на вашем компьютере установлен Python 3.
- Установка библиотек: Установите необходимые библиотеки из папки requirements.txt:
- Создание базы данных: Создайте файл usersid.db для хранения идентификаторов пользователей.
Настройка:
- Замена токенов:
- Замените TOKEN в коде на ваш токен API Tinkoff Invest.
- Замените settings.bots.bot_token на токен вашего бота Telegram.
- Замените settings.bots.admin_id на ваш идентификатор пользователя в Telegram.
- Настройка CSV-файла:
- Создайте CSV-файл с колонками "figi" и "Company", содержащий FIGI-коды акций, которые нужно отслеживать, и их названия.
- Сохраните файл в папке с кодом.
- Настройка базы данных:
- Настройте BotDB в файле core/db.py для использования созданного файла usersid.db.
- Убедитесь, что BotDB корректно работает и сохраняет идентификаторы пользователей.
Запуск бота:
- Запустите код: Запустите файл с кодом, например, с помощью команды: python3 main.py
- Добавьте бота в чат: Добавьте бота в свой чат в Telegram.
- Используйте команды: Используйте команды бота:
- /start: Запустить бота.
- /help: Показать справку по командам.
- /subscribe: Подписаться на уведомления о изменении цен.
- /report: Получить отчет о текущих ценах акций (не реализовано).
- /unsubscribe: Отписаться от уведомлений.
Обработка ошибок:
- Логирование: Добавьте в код логирование ошибок, чтобы легче выявлять и устранять проблемы.
- Обработка исключений: Используйте обработку исключений для предотвращения неожиданных завершений программы.
Важно:
- API Tinkoff Invest: Убедитесь, что вы ознакомились с документацией API Tinkoff Invest, чтобы правильно использовать его функции.
- API Telegram: Убедитесь, что вы ознакомились с документацией API Telegram, чтобы правильно использовать функции ботов.
- Безопасность: Храните токен API Tinkoff Invest и токен API Telegram в безопасном месте, чтобы избежать несанкционированного доступа.
Этот бот является основой для отслеживания цен на акции. Разработайте и расширьте его функциональность в соответствии со своими потребностями.
Обзор кода:
Разбивка кода:
- send_message(user_id, message):
- Это асинхронная функция, которая отправляет сообщение в Telegram пользователю с указанным user_id.
- Использует await bot.send_message(), чтобы отправить сообщение с помощью экземпляра бота bot.
- Выводит сообщение в консоль.
- main():
- Основная асинхронная функция, которая запускает все остальные задачи.
- Инициализирует dp, экземпляр бота bot, и базу данных bot_db_instance.
- Загружает список figi_to_name, который содержит список, содержащий уникальный индетификационный номер компании и ее название.
- Использует Client для подключения к потоку рыночных данных.
- В цикле обрабатывает данные marketdata из потока:
- Если данные содержат candle (свечу), то вызывается функция process_candle_data().
- В противном случае выводит сообщение о полученных данных без свечи.
- В блоке finally закрывает сессию бота и базу данных.
- process_candle_data(candle, figi_to_name):
Функция process_candle_data() обрабатывает данные свечи, полученные от Tinkoff Invest API. Она выполняет следующие действия:
- Извлекает данные: Извлекает FIGI, название компании, цену открытия и цену закрытия свечи.
- Рассчитывает изменение цены: Рассчитывает процентное изменение цены между ценой открытия и ценой закрытия свечи.
- Проверяет порог изменения: Проверяет, превышает ли процентное изменение цены заданный порог (0.1% по умолчанию).
- Отправляет уведомления: Если процентное изменение цены превышает порог, то функция отправляет уведомления всем пользователям, которые подписались на эту акцию.
- asyncio.run(main()):
- Запускает асинхронную функцию main(), которая запускает цикл обработки данных.
- База данных пользователей
-
Бот использует базу данных bot_db_instance для хранения и получения ID пользователей, которые подписались на уведомления.
Добавление пользователя:
-
Когда пользователь отправляет команду /subscribe, бот добавляет его ID в базу данных.
-
Удаление пользователя: Когда пользователь отправляет команду /unsubscribe, бот удаляет его ID из базы данных.
Получение списка пользователей:
Функция bot_db_instance.id_for_print() возвращает список ID всех пользователей, которые подписались на уведомления.
Пример использования:
- Пользователь добавляет бота в свой Telegram-чат.
- Бот следит за данными финансового инструмента, например, акцией Apple.
- Если цена акции Apple увеличивается на 5%, то бот отправляет уведомление в Telegram-чат пользователю.