Блог им. UHSF
Бывает нужно получать от торгующего робота какие-то уведомления – это могут быть уведомления об открытии позиций, закрытии, каком-то сбое и тд.
Так вот, сегодня рассмотрим способ отправки сообщений в один из популярных мессенджеров Телеграм.
Инструкция состоит из 3-х пунктов:
1. Создание бота в Telegram для приема сообщений
2. Отправка сообщений на примере бесплатного робота OsEngine
3. Обзор кода робота
1. Создание бота в Telegram для приема сообщений
Нам будет нужен бот в самом мессенджере Телеграм. Для его создания используем BotFather (https://t.me/BotFather) – это официальный бот мессенджера, который позволяет создавать ботов и управлять ими. Открываем его и начинаем с ним чат (команда “/start” или Запустить):
BotFather отвечает списком команд, нам нужна команда – “/newbot” – вводим ее. В ответ предлагается выбрать имя нашему новому боту – придумываем и вводим, например, “newOSAbot”.
Далее предлагается выбрать имя пользователя, оканчивающееся на “bot” – делаем его, просто приписав в конец то, что нужно — “newOSAbot_bot”.
Вот так в итоге выглядит диалог создания бота:
BotFather сообщил нам об успешном создании бота и выдал Токен, который нужно куда-то сохранить – он нам будет нужен для работы.
При необходимости, созданных в BotFather ботов можно настраивать – добавлять описание, команды, устанавливать аватар и прочее.
Далее нам нужно узнать свой Telegram ID. Для этого можно использовать вот этого бота — https://t.me/userinfobot
Запускаем бота, и он выдает нам в ответ ID, сохраняем его рядом с Токеном.
Вот как это выглядит:
Давайте теперь проверим нашего вновь созданного бота — вводим в поиске Телеграм имя бота (newOSAbot_bot) и запускаем его. Проверить отправку ему сообщений можно в браузере – для этого в адрес («api.telegram.org/bot + Token + /sendMessage?chat_id= + ID + &text=Hello!») надо вставить наши Токен и ID:
Если все правильно, то в чат с ботом придет приветственное сообщение:
Впоследствии все уведомления от робота OsEngine будут приходить сюда же.
2. Отправка сообщений на примере бесплатного робота OsEngine
Нам нужен робот-пример отправки сообщений в Телеграм, называется он TelegramSample.cs
Запускаем OsEngine, добавляем данного робота. Настройки уведомлений находятся во вкладке Параметров Telegram settings – там вводим ранее полученные Токен и ID в соответствующие поля:
Включаем режим “On” не забываем. Так же на вкладке Trade settings надо тоже включить и настроить индикатор там еще можно и рабочий объем.
Робот не для боевой торговли, а для демонстрации работы с уведомлениями в Телеграм, его торговая стратегия простейшая — индикатор Price Channel, вход в лонг при пробое верхней границы канала, выход при пробое нижней…
Уведомления в роботе сделана на: а) открытие позиции; б) закрытие позиции; в) потерю соединения с сервером.
Уведомление о потере соединения работает только в OsTrader (в боевом режиме). Поэтому в Тестере мы сейчас проверим уведомления о сделках.
В уведомлениях текст события, в скобках название робота, цена входа/выхода.
Настроили все, запустили тест (без ускорения, а то спамить уведомлениями будет) — уведомления есть:
3. Обзор кода робота
За отправку уведомлений в Телеграм отвечает асинхронный метод SendTelegramMessageAsync(string message), принимает, соответственно, сообщение, которое нужно отправить:
В методе некоторые проверки что введены ID и Токен и правильности ввода.
Метод для открытия и закрытия позиций вызывается в обработчиках успешного открытия и закрытия позиции. В обработчиках собираем нужную нам строку и передаем в метод:
Проверка соединения с сервером реализована в методе CheckConnect():
В методе крутится бесконечный цикл while с периодичностью 10 секунд, проверяется статус сервера. Когда соединение обрывается – приходит уведомление об этом.
Метод запускается в отдельном потоке из Конструктора в том случае, если робот запущен в боевом соединении (OsTrader):
Спасибо за внимание! Прибыльных алгоритмов и всего доброго!
Ссылка на робота на GitHub: https://github.com/AlexWan/OsEngine/blob/master/project/OsEngine/bin/Debug/Custom/Robots/TelegramSample.cs
Десятки людей будут использовать. От всех выражаю признательность!
Или вот — человек, позиция в прибыли, надо обмыть.