<HELP> for explanation

rss

Профиль компании

Финансовые компании

Блог компании RusAlgo | TSLab. Невозможное возможно. Отправка SMS.

Данная статья написана по мотивам вебинара «TSLab. Невозможное возможно. Отправка SMS.» прошедшего 18.07.2013.
Все необходимые материалы приложены, и вы сможете сами воспроизвести все что входило в программу вебинара.

Подобные и более сложные вещи используя программирование на языке C# вы сможете создавать в TSLab сами после обучения на моем курсе.
Подать заявку можно на сайте RusAlgo


TSLab. Невозможное возможно. Отправка SMS.


Приветствую всех алготрейдеров, а так же тех, кто планирует пойти по пути системного трейдинга. В данной статье мы рассмотрим отправку sms из скриптов, а так же откроем серию статей и видеороликов «TSLab. Невозможное возможно» в которых я попробую рассказать как делать простые (и не очень простые) вещи невозможные в визуальном редакторе. В качестве примера используем банальный торговый алгоритм, который позволит абстрагироваться от реализации торгового робота и сосредоточиться на целевой задаче. Используем версию программы 1.2.7.36 или выше. На версиях ниже указанной, некоторые элементы могут не работать, так как были добавлены по моей просьбе.


Задача наша будет состоять из нескольких этапов:
  1. Написание простенького торгового робота, который будет совершать сделки. Главное условие, чтобы сделки он совершал часто, и мы могли проверить работу sms уведомления в реальном режиме.
  2. Выяснение возможных механизмов отправки sms из работающего скрипта TSLab. Выбор наилучшего способа.
  3. Написание кода отправки sms уведомления.
  4. Тестирование в реальном времени полученной схемы.

Написание торгового робота.

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

Вариантов реализации такого скрипта минимум два:
  • через визуальный редактор
  • через TSLab API.
Мы пойдем по простому пути и напишем код нашего торгового робота через TSLab API. Конечно, вы можете со мной не согласиться в том, что TSLab API проще визуального редактора, но я смею утверждать обратное. Для меня визуальный редактор штука сложная и куда менее понятная чем C#, так что будем ваять скрипт на API.
Итак, после пяти минут наш «супер прибыльный» торговый робот готов. На истории он создает огромное количество сделок и это дарит надежду на удачный исход нашего тестирования.
Ссылка на код торгового робота SmsSmartlabRobot

Рисунок 1. Папка, содержащая кэш по инструментам.
Рисунок 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.
Рисунок 2. Создание аккаунта Google.

Рисунок 3. Успешная регистрация.
Рисунок 3. Успешная регистрация.

Выбираем сверху пункт меню «Календарь» и попадаем в Google Calendar
Рисунок 4. Первый вход в Google Calendar.
Рисунок 4. Первый вход в Google Calendar.

Можно закрыть появившееся окошко. Нам необходимо подключить сотовый телефон к данному сервису, только после этого мы сможем отправлять sms уведомления. Делаем это следующим образом.
Рисунок 5. Переходим в настройки календаря.
Рисунок 5. Переходим в настройки календаря.

После того как мы попали в настройки календаря, нужно перейти к пункту «Настройка для мобильных устройств». Вводим номер нашего телефона, жмем кнопку «Отправить проверочный код». После получения кода, вводим его в окно ниже и жмем кнопку «Завершить настройку» и далее в самом низу «Сохранить». Настройка окончена.
Рисунок 6. Подключаем телефон.
Рисунок 6. Подключаем телефон.

После всех этих манипуляций, мы можем создать запись в календаре и назначить для нее уведомление по sms. Создадим тестовую запись о мероприятии и назначим уведомление за 10 минут до его начала. Выглядеть это будет так:
Рисунок 7. Тестовое мероприятие в календаре.
Рисунок 7. Тестовое мероприятие в календаре.

Написание кода отправки SMS.


Мы уже в середине пути, осталось только подключить TSLab к сервису Google. Я для себя нашел самый простой и верный способ такой связки – написать стандартный нотификатор. Мы напишем небольшую библиотеку, поместим в нужную папку TSLab и потом будем использовать новый нотификатор обычным способом, как любой другой уже существующий в программе. В конце получим следующую картинку:
Рисунок 8. Внешний вид готового sms нотификатора.
Рисунок 8. Внешний вид готового sms нотификатора.

Подключение к сервису Google легко реализовать через специальные библиотеки, которые Google предоставляет для разработчиков. Единственный минус такого решения в том, что документации по данным библиотекам просто ноль и до всего приходится доходить, собирая по крупицам информацию из интернета. Сами классы библиотеки совершенно не документированы и интуитивно непонятны.

Есть разные версии данных библиотек и последняя версия №3. Понять что-либо в этой версии я не смог, поэтому использовал версию №1, которую в прошлом использовал. Тут вступает в действие принцип: Зачем тратить время на изобретение решения, если есть работающее решение. Этим принципом и будет руководствоваться, благо работает старая схема до сих пор отлично на старых библиотеках.

Ссылка на библиотеки Google

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

Ссылка на готовый код нотификатора RusAlgo.Notification

Для подключения созданной нами библиотеки RusAlgo.Notification.dll к TSLab нужно создать в папке, где хранятся все данные программы, создать папку Notification и в нее поместить нашу библиотеку. Выглядит все это следующим образом:
Рисунок 9. Создание папки Notification.
Рисунок 9. Создание папки Notification.

Рисунок 10. Все библиотеки лежат там, где им положено быть.
Рисунок 10. Все библиотеки лежат там, где им положено быть.

После того как вы создали папку Notification и поместили туда нашу библиотеку RusAlgo.Notification.dll вместе со всеми библиотеками Google можно запускать TSLab. В менеджере уведомлений будет картинка идентичная изображенной на рисунке 8. А мы переходим к кульминации, к тестированию реализованной схемы.

Тестирование в реальном времени полученной схемы.


Используя все ранее реализованные элементы, мы уже можем настроить уведомление об ошибках внутри торговых роботов. Для этого используем стандартный механизм фильтров для отсечения ненужного и отправки только нужного. Но наша целевая задача была в отправке любых сообщений из торгового робота к нам через sms, поэтому исходный тестовый скрипт придется несколько модернизировать.

Поставим себе задачу получать sms каждый раз, когда скрипт входит в позицию и каждый раз при выходе. В сообщении я хочу получать размер депозита при открытии позиции и величину профита при закрытии позиции. Можно добавить еще несколько условий, но я не буду загромождать код лишними условиями, чтобы базовая концепция была на виду.

При реализации поставленных условий нужно учесть, что тестовый скрипт генерирует множество сделок на истории и, если ничего с этим не сделать, мы будем получать огромное число лишних сообщений. Помимо кода отправки сообщения, обязательно нужно добавить фильтрацию сделок совершенных на исторических данных. Вот что у нас получилось.

Ссылка на финальный код торгового робота SmsSmartlabRobotFinal

Ура, все готово и можно приступать к боевому тестированию. Подключаем полученный скрипт в виде Агента и запускаем его. Все настройки делаем такие же, какие вы обычно делаете для ваших торговых роботов. После запуска получаем следующую картинку:
Рисунок 11. Вид программы TSLab с запущенным скриптом тестирования sms.
Рисунок 11. Вид программы TSLab с запущенным скриптом тестирования sms.

Надеюсь, вы поставили таймфрейм 1 минута? Да? Отлично, это позволит нам за 5 минут проверить отправку сообщения при входе в позицию и при выходе. Ждем пока скрипт войдет в позицию и выйдет из нее, получаем sms на телефон и выключаем агента. Если зайти в Google Calendar, то вы увидите все сообщения, которые были посланы вам из вашего торгового робота. У меня же картинка следующая:
Рисунок 12. Сообщения, посланные из скрипта в календаре google.
Рисунок 12. Сообщения, посланные из скрипта в календаре google.

Рисунок 13. Содержание сообщения пришедшего по входу в позицию.
Рисунок 13. Содержание сообщения пришедшего по входу в позицию.

Итоги.


В сухом остатке у нас есть sms нотификатор, работающий стандартным способом. У нас есть пример отправки sms сообщения из любого вашего торгового робота, написанного через TSLab API.

Отправить sms сообщение из скрипта собранного через визуальный редактор тоже можно, но для этого нужно сделать кубик, отправляющий сообщение по сигналу. Создание такого кубика тема отдельной статьи, А СЕЙЧАС ВСЁ.

Команда RusAlgo и я лично желаем вам успехов в трейдинге и освоении платформы TSLab.


Данная статья написана по мотивам вебинара «TSLab. Невозможное возможно. Отправка SMS.» прошедшего 18.07.2013.
Все необходимые материалы приложены, и вы сможете сами воспроизвести все что входило в программу вебинара.

Подобные и более сложные вещи используя программирование на языке C# вы сможете создавать в TSLab сами после обучения на моем курсе.
Подать заявку можно на на сайте RusAlgo
 

Очень здорово!:)
avatar

nikitagreb

nikitagreb, Рад :)
avatar

ra81

А можно это прикрутить к Ninjatrader (робот тоже написал на С#) или надо обязательно ставить TSLab?
avatar

Kotyk

Kotyk, выдрать код отправки смс и прикрутить можно куда угодно в принципе. Ограничений нет. Но нужно понять что и куда пихать конечно :)
avatar

ra81

Хорошая статья. Для отправки смс можно использовать специлизированные смс сервисы, расценки приемлимые (29 копеек за смс). Как пример, www.smspilot.ru/?r=1537 (реферальная ссылка). Ну а лично в своих роботах, никаких уведомлений нет, ведется журнал, работает стабильно.
Sergey Masyura, Да есть. Об этом в статье есть целый абзац. Каждый для себя выбирает то что ему больше нравится.
avatar

ra81

Sergey Masyura, за 29 копеек можно по миру слать:
www.twilio.com/sms/pricing/ru
А на чём роботов пишите(платформа или своё)?
Как все трудно. В Билайне email на адрес 7ХХХХХХХХХХ@sms.beemail.ru приходит в виде СМС. Услуга бесплатна, включается через общение с суппортом. В Мегафоне, вроде, тоже есть. МТС- не знаю, должно быть.
avatar

TT

TT, плюс работает нестабильно. Гугл рассылка на телефон — самая ненадежная. А значит и нет никакого смысла в ней, так как нам как раз и нужно получать уведомления в особых и редких ситуациях.
Евгений, Вы использовали? Я использовал. Получал по 20-30 смс пачками подряд. Все отлично работало. Поэтому я бы не говорил про плохой сервис. Хороший и надежный сервис.
avatar

ra81

TT, Сколько сообщений эта услуга разрешает? Насколько я знаю везде есть жесткие ограничения. Вы проверяли?
avatar

ra81

ra81, Насколько я знаю, никаких ограничений нет. Мой робот шлет от пары до десятка сообщений в сутки без каких-либо проблем.
avatar

TT

TT, Да должны быть ограничения, иначе было бы слишком сладко :), я просто точно не помню какое оно. Видимо вам хватает объема данного ограничения. Это отлично. Везде есть ограничения :).
avatar

ra81

ra81, Рынок должен падать, а он растет. Ограничения должны быть, а их нет. Кто Вам сказал, что это слишком сладко? Эта услуга появилась лет десять назад, может раньше. Сегодня, как я понимаю, ей никто не пользуется, поэтому в открытом доступе она нигде не описана. Но сервис такой существует. Я позвонил в техподдержку, описал суть услуги, люди задумались. Через некоторое время мне перезвонил соответствующий специалист и объяснил какой USSD командой активировать сервис. Все. Думаю, что если ограничения и есть, то чисто технические. Я, собственно, писал о такой возможности, но сМарт-лабу это показалось не слишком интересным. сМарт-лаб, как комсомолец, не ищет легких путей. Вобщем дарю идею. :)
avatar

TT

TT, Эту идею мне дарить уже поздно :). Я о ней знаю очень и очень давно. И она обсуждалась уже не раз, на том же форуме ТСЛаба :). Но всплывали везде ограничения на число смс в единицу времени. Сам не проверял.
В общем каждому свое :)
avatar

ra81

ra81, Не знаю кто там где что обсуждал давно, когда я гуглил тему, никаких трейдерских обсуждений этого вопроса не встречал. Админы, да, обсуждали, но с повсеместным распространением 3Г и смартфонов, эта тема полностью отпала.
Извращение с посредником в виде Гугла, не может дать Вам большую пропускную способность, чем взаимодействие с оператором связи _напрямую_. Чисто технически. К тому же Вы все равно не сможете обработать больше одной СМС в единицу времени. Чисто физически. :)))
avatar

TT

TT, вы меня сподвигните сейчас проверить данный сервис на ограничения :).

Ну и не надо ругать чужие решения. Они проверены временем, надежны и не привязаны к оператору связи.
avatar

ra81

ra81, Я буду только приветствовать проверку Вами данного сервиса. И даже настоятельно рекомендовать это сделать. По моему опыту, СМС в любом случае приходят в единицу времени чаще, чем я могу успеть их прочитать.

Ваше решение заслуживает уважения с точки зрения программирования, классы там, библиотеки. Очень круто, я б так не смог. Но мне кажется, что его использование простительно, только если не знать о сервисе, описанном мною.
avatar

TT

TT, +1. Единственная особенность — у каждого мобильного провайдера свой способ подключения услуги. У билайна он отличается. А так, ваш способ в 100 раз проще, чем описан в статье. И надежнее.

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.

Залогиниться

Зарегистрироваться
....все тэги
Регистрация
UP