TSLab. Невозможное возможно. Отправка SMS.
Приветствую всех алготрейдеров, а так же тех, кто планирует пойти по пути системного трейдинга. В данной статье мы рассмотрим отправку sms из скриптов, а так же откроем серию статей и видеороликов «TSLab. Невозможное возможно» в которых я попробую рассказать как делать простые (и не очень простые) вещи невозможные в визуальном редакторе. В качестве примера используем банальный торговый алгоритм, который позволит абстрагироваться от реализации торгового робота и сосредоточиться на целевой задаче. Используем версию программы 1.2.7.36 или выше. На версиях ниже указанной, некоторые элементы могут не работать, так как были добавлены по моей просьбе.
Задача наша будет состоять из нескольких этапов:
Написание простенького торгового робота, который будет совершать сделки. Главное условие, чтобы сделки он совершал часто, и мы могли проверить работу sms уведомления в реальном режиме.
Выяснение возможных механизмов отправки sms из работающего скрипта TSLab. Выбор наилучшего способа.
Написание кода отправки sms уведомления.
Тестирование в реальном времени полученной схемы.
Написание торгового робота.
Для целей тестирования, подойдет очень простой алгоритм, генерирующий плотный поток сделок. Я предлагаю сделать совершенно синтетическую логику, сильно оторванную от реальности. Наш скрипт будет входить в позицию на четном баре, удерживать позицию 2 бара и затем выходить из нее. На следующем четном баре вся история повторяется. Естественно, ожидать какой либо прибыльности от робота не приходится, но это и не является задачей статьи.
Вариантов реализации такого скрипта минимум два:
через визуальный редактор
через TSLab API.
Мы пойдем по простому пути и напишем код нашего торгового робота через TSLab API. Конечно, вы можете со мной не согласиться в том, что TSLab API проще визуального редактора, но я смею утверждать обратное. Для меня визуальный редактор штука сложная и куда менее понятная чем C#, так что будем ваять скрипт на API.
Итак, после пяти минут наш «супер прибыльный» торговый робот готов. На истории он создает огромное количество сделок и это дарит надежду на удачный исход нашего тестирования.
Ссылка на код торгового робота SmsSmartlabRobot
Рисунок 1. Результат работы синтетического торгового робота.
Выбор способа отправки SMS из скриптов TSLab.
В этом разделе статьи, можно долго теоретизировать на тему разных вариантов реализации системы sms уведомления. На форуме TSLab неоднократно данная тематика поднималась пользователями программы, где каждый выдумывает свои схемы, подходящие под личные реалии и предпочтения. В итоге, мы находимся в ситуации отсутствия некоего универсального способа, который подошел бы всем и работал бы у всех, при этом еще не выглядел кривой пристройкой к программе TSLab.
Ну а зачем собственно нужно это sms уведомление? Ну, есть же уведомление по почте, звуковое уведомление, уведомление всплывающим окном которые уже давно реализованы внутри платформы TSLab. Зачем воротить еще какой-то способ, который возможно и не нужен вовсе? Тут опять же выхожу на сцену я, как автор статьи и бывалый программист торговых роботов, и утверждаю: «Sms уведомление нужно. Это, что говорится, “must have”». Если вы не сидите, все время, перед экраном компьютера и при этом хотите быть в курсе возникающих у ваших торговых роботов проблем, к тому же хотите получать информацию оперативно, то без sms уведомлений не обойтись. Пользовался, пользуюсь и пользоваться буду. Ни один другой способ не дает такого технически простого и быстрого механизма передачи полезной информации от вашего робота до вас. Да здравствуют операторы сотовой связи! Даешь интернационал! Ой, что-то я отошел от темы.
Один из вариантов реализации нашей задачи состоит в использовании связки «Электронная почта – сервисы отправки sms». Ваш скрипт генерирует некое сообщение, почтовый нотификатор TSLab подхватывает его и генерирует электронное письмо на сервис отправки sms. Далее данный сервис конвертирует наше письмо в sms и отправляет нам на телефон. Все очень неплохо, но сервисы обычно платные и это главный минус такой схемы. В остальном, все получается очень неплохо и без каких-либо трудозатрат. Одна беда – в визуальном редакторе невозможно генерировать пользовательские сообщения в лог, поэтому отправить уведомление о выходе из позиции, о просадке счета в 10% и т.д. не получится. Придется использовать TSLab API. Да и оплата за услугу накладывает некоторые требования на память. Можно забыть внести средства и получить отказ в обслуживании в самый неподходящий момент. Собственно, все плохое происходит чаще всего в этот самый неподходящий момент. Сложно представить человека, который думает про себя: «Ну вот, сейчас самый момент для плохого. Я готов».
Другой вариант довольно экзотичен и требует прокачанных навыков программирования вместе с пониманием модемных команд AT. Берем сотовый телефон, подключаем его кабелем к вашему ПК и получаем систему отправки sms «на дому». Далее нам придется написать кучу кода, с помощью которого мы будем передавать наши сообщения из торгового робота в телефон. Система имеет плюсы и минусы. Плюсы в том, что нам не нужны сторонние сервисы, мы используем свой телефон и ничего более. На этом плюсы, пожалуй, закончились и мы «плавно» переходим к минусам. Нужно написать много кода, мы не можем использовать эту схему, если наши роботы находятся на удаленных серверах, нужно найти телефон, поддерживающий правильный набор АТ команд. Этих пунктов уже достаточно, чтобы забраковать этот вариант и оставить его для тех, кто любит программировать на досуге для получения удовольствия. Если вы решитесь реализовать такую схему, то знайте, есть уже готовые библиотечки для общения с GSM девайсами через COM порт, так что изобретать велосипед не придется.
Ну и, наконец, третий способ, который мне больше всего нравится. Мы используем бесплатный сервис sms уведомлений. Такой сервис на самом деле есть и он прекрасно работает. Google Calendar позволяет к запланированным мероприятиям подключать sms уведомление и это как раз то, чем мы будем пользоваться. Помимо sms уведомлений мы получаем бонусом возможность просматривать историю сообщений, которые были посланы нашими торговыми роботами. В общем, практически идеальный вариант, но проблемы имеются и здесь. Нам нужно написать нечто, что будет добавлять задачи в Goggle Calendar. Так же необходимо реализовать генерацию сообщений из скрипта TSLab. Этим мы займемся позже, а сейчас попробуем подключиться к сервису Google Calendar.
Регистрируемся в Google
Рисунок 2. Создание аккаунта Google.
Рисунок 3. Успешная регистрация.
Выбираем сверху пункт меню «Календарь» и попадаем в Google Calendar
Рисунок 4. Первый вход в Google Calendar.
Можно закрыть появившееся окошко. Нам необходимо подключить сотовый телефон к данному сервису, только после этого мы сможем отправлять sms уведомления. Делаем это следующим образом.
Рисунок 5. Переходим в настройки календаря.
После того как мы попали в настройки календаря, нужно перейти к пункту «Настройка для мобильных устройств». Вводим номер нашего телефона, жмем кнопку «Отправить проверочный код». После получения кода, вводим его в окно ниже и жмем кнопку «Завершить настройку» и далее в самом низу «Сохранить». Настройка окончена.
Рисунок 6. Подключаем телефон.
После всех этих манипуляций, мы можем создать запись в календаре и назначить для нее уведомление по sms. Создадим тестовую запись о мероприятии и назначим уведомление за 10 минут до его начала. Выглядеть это будет так:
Рисунок 7. Тестовое мероприятие в календаре.
Написание кода отправки SMS.
Мы уже в середине пути, осталось только подключить TSLab к сервису Google. Я для себя нашел самый простой и верный способ такой связки – написать стандартный нотификатор. Мы напишем небольшую библиотеку, поместим в нужную папку TSLab и потом будем использовать новый нотификатор обычным способом, как любой другой уже существующий в программе. В конце получим следующую картинку:
Рисунок 8. Внешний вид готового sms нотификатора.
Подключение к сервису Google легко реализовать через специальные библиотеки, которые Google предоставляет для разработчиков. Единственный минус такого решения в том, что документации по данным библиотекам просто ноль и до всего приходится доходить, собирая по крупицам информацию из интернета. Сами классы библиотеки совершенно не документированы и интуитивно непонятны.
Есть разные версии данных библиотек и последняя версия №3. Понять что-либо в этой версии я не смог, поэтому использовал версию №1, которую в прошлом использовал. Тут вступает в действие принцип: Зачем тратить время на изобретение решения, если есть работающее решение. Этим принципом и будет руководствоваться, благо работает старая схема до сих пор отлично на старых библиотеках.
Ссылка на библиотеки Google
Самый простой способ сделать что-то стандартным способом, это изучение уже созданного. Для этого исследовались классы стандартных нотификаторов TSLab и был сделан вывод, что необходимо реализовать свой класс нотификатора от NotificationHandler.Главной деталью класса будут атрибуты, через которые TSLab подключит нотификатор правильным образом. Описывать процесс написания кода большого смысла не имеет, поэтому сразу смотрим готовый код.
Ссылка на готовый код нотификатора RusAlgo.Notification
Для подключения созданной нами библиотеки RusAlgo.Notification.dll к TSLab нужно создать в папке, где хранятся все данные программы, создать папку Notification и в нее поместить нашу библиотеку. Выглядит все это следующим образом:
Рисунок 9. Создание папки Notification.
Рисунок 10. Все библиотеки лежат там, где им положено быть.
После того как вы создали папку Notification и поместили туда нашу библиотеку RusAlgo.Notification.dll вместе со всеми библиотеками Google можно запускать TSLab. В менеджере уведомлений будет картинка идентичная изображенной на рисунке 8. А мы переходим к кульминации, к тестированию реализованной схемы.
Тестирование в реальном времени полученной схемы.
Используя все ранее реализованные элементы, мы уже можем настроить уведомление об ошибках внутри торговых роботов. Для этого используем стандартный механизм фильтров для отсечения ненужного и отправки только нужного. Но наша целевая задача была в отправке любых сообщений из торгового робота к нам через sms, поэтому исходный тестовый скрипт придется несколько модернизировать.
Поставим себе задачу получать sms каждый раз, когда скрипт входит в позицию и каждый раз при выходе. В сообщении я хочу получать размер депозита при открытии позиции и величину профита при закрытии позиции. Можно добавить еще несколько условий, но я не буду загромождать код лишними условиями, чтобы базовая концепция была на виду.
При реализации поставленных условий нужно учесть, что тестовый скрипт генерирует множество сделок на истории и, если ничего с этим не сделать, мы будем получать огромное число лишних сообщений. Помимо кода отправки сообщения, обязательно нужно добавить фильтрацию сделок совершенных на исторических данных. Вот что у нас получилось.
Ссылка на финальный код торгового робота SmsSmartlabRobotFinal
Ура, все готово и можно приступать к боевому тестированию. Подключаем полученный скрипт в виде Агента и запускаем его. Все настройки делаем такие же, какие вы обычно делаете для ваших торговых роботов. После запуска получаем следующую картинку:
Рисунок 11. Вид программы TSLab с запущенным скриптом тестирования sms.
Надеюсь, вы поставили таймфрейм 1 минута? Да? Отлично, это позволит нам за 5 минут проверить отправку сообщения при входе в позицию и при выходе. Ждем пока скрипт войдет в позицию и выйдет из нее, получаем sms на телефон и выключаем агента. Если зайти в Google Calendar, то вы увидите все сообщения, которые были посланы вам из вашего торгового робота. У меня же картинка следующая:
Рисунок 12. Сообщения, посланные из скрипта в календаре google.
Рисунок 13. Содержание сообщения пришедшего по входу в позицию.
Итоги.
В сухом остатке у нас есть sms нотификатор, работающий стандартным способом. У нас есть пример отправки sms сообщения из любого вашего торгового робота, написанного через TSLab API.
Отправить sms сообщение из скрипта собранного через визуальный редактор тоже можно, но для этого нужно сделать кубик, отправляющий сообщение по сигналу. Создание такого кубика тема отдельной статьи, А СЕЙЧАС ВСЁ.
Команда RusAlgo и я лично желаем вам успехов в трейдинге и освоении платформы TSLab.