ra81
ra81 личный блог
14 января 2013, 12:38

От идеи до робота за один день.

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

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


От идеи до робота за один день.


Приветствую всех алготрейдеров, а так же тех, кто планирует пойти по пути системного трейдинга. В данной статье я на примере стратегии, частично раскрытой на конференции трейдеров SSH 2012, попробую показать возможности и некоторые особенности программы TSLab которых не встречал в других используемых мной платформах. Сама стратегия не претендует на грааль, но идея рабочая. Кроме того, мы будем использовать TSLab непривычным для многих способов, мы будем комбинировать программирование и графический редактор. Используем версию программы 1.2.5.


Задача наша будет состоять из нескольких этапов:
  1. Получение исторических тиковых данных, которые включают направление сделки помимо цены и объема.
  2. Написание стратегии и необходимых элементов, а так же тестирование на исторических данных. Оптимизация параметров.
  3. Подготовка стратегии к запуску в реальную работу. Упаковка в зашифрованный контейнер для размещения на паркинге скриптов .

Получение исторических данных.

Для тестирования стратегии будем использовать фьючерс РТС RTS-12.12 (RIZ2). Чтобы иметь возможность протестировать стратегию на истории и оптимизировать параметры, нам нужна не просто история, а история, содержащая в себе направления сделок, то есть помимо цены и объема сделки, нам необходимо знать покупка это была или продажа. Как известно такой истории нет в свободном доступе. Во всяком случае, те источники, о которых я знаю, не дают направление сделок (Finam.ru, ftp.rts.ru/pub/FORTS/pubstat и так далее). К счастью, TSLab обладает отличной функцией, которая позволяет сохранять все тики по выбранному инструменту в специальный кэш. Этот кэш можно использовать далее в тестировании. Помимо сделок, он содержит так же еще некоторые дополнительные данные, которые нам не понадобятся. Для активации данной функции не нужно производить никаких специальных манипуляций, достаточно просто открыть окно «Сделки по инструментам» и настроить его на отображение необходимого инструмента, в нашем случае это RIZ2. Пока TSLab запущен, подключен к брокеру и окно «Сделки по инструментам» открыто история будет накапливаться в кэшэ.
Далее мы можем просто подождать несколько дней, пока накопится достаточный объем данных в кэшэ, и использовать этот кэш. Но есть вариант более быстрый. Сообщество TSLab достаточно большое, у многих уже накопилась история за длительный период времени. Можно обратиться на форум http://forum.tslab.ru/ и попросить поделиться историей по нужному инструменту (я специально провел следственный эксперимент, и попросил историю за неделю. Тут же мне выдали историю за полтора месяца совершенно безвозмездно). Теперь важным моментом является то, что для разных брокеров кэш находится в разных местах и именование файлов может быть разным. Поэтому рекомендую брать историю с того же брокера, на котором вы сами работаете, дабы процедура подключения кэша была максимально простой.
Я подключен через Finam следовательно, папка с кэшэм для данного брокера называется FinamCacheTrades. Для Windows Vista/7 и Windows XP место нахождения кэша будет отличаться. Я работаю под Windows 7, и у меня кэш хранится в c:\Users\ra81\AppData\Local\TSLab\TSLab\FinamCacheTrades\. Где ra81 — это имя пользователя, под которым я работаю в операционной системе.
Рисунок 1. Папка, содержащая кэш по инструментам.
Рисунок 1. Папка, содержащая кэш по инструментам.

Как видно для каждого инструмента каждый день создается новый файл с расширением “*.bin”. Данные в файлах хранятся в специальном формате, и их в принципе можно конвертировать в обычный текстовый файл и обратно (если чуть-чуть уметь программировать). Получив файлы кэша для инструмента RIZ2 за интересующий нас период, мы помещаем их в эту папку и собственно все. После этого TSLab сможет использовать эти данные, как будто он их сам сохранил.

Написание стратегии и необходимых элементов. Оптимизация.

Сама стратегия достаточно проста, и ее можно описать в нескольких словах. Основная идея в том чтобы ловить импульсы:
  1. Выбираем базовый таймфрейм. Например, 5 секунд.
  2. По окончанию свечи считаем весь объем покупок и весь объем продаж для свечи. Делим объем покупок на объем продаж и получаем некую величину, которую будем называть дельта покупки. Делим объем продаж на объем покупок и получаем дельту продажи.
  3. Если дельта покупки больше предопределенной величины (например 40), и полный объем свечи больше чем минимально необходимый (эта величина задается как параметр, например 100), тогда входим в покупку лимитным приказом. Для продажи действуем аналогично, только используем разность продажи.
  4. Выход из позиции по тейк профиту и стоп лоссу. Выставляем после входа в позицию сразу же условные заявки.
Первое что нам необходимо (оно же главная деталь всего робота) это некий индикатор, который будет показывать дельту покупки и дельту продажи. Некий похожий индикатор уже написан сообществом, но там используется разность, а я использую деление. В конце концов, написать подобный индикатор не составляет труда. Если убрать стандартный код, который есть во всех индикаторах, то вся логика укладывается в несколько строк.
Cкачать код кубиков.
Подключаем эти новые индикаторы в TSLab (предварительно скомпилировав код в “*.dll” файл), собираем простенький скрипт и смотрим, что у нас получилось.
Рисунок 2. Скрипт для проверки работы индикаторов.
Рисунок 2. Скрипт для проверки работы индикаторов.

Рисунок 3. График инструмента с графиками индикаторов.
Рисунок 3. График инструмента с графиками индикаторов.

Как видно все отлично работает. К бирже мы не подключены, но используем исторические данные из кэша TSLab, в которых есть направление сделок. Сразу можно обратить внимание на пики индикаторов дельт, которые говорят от значительном перевесе покупок перед продажами или наоборот. Вот эти пики мы и будем использовать для торговли.
Саму стратегию реализовывать будем тоже в виде внешнего скрипта (с использованием навыков программирования как я всегда делаю), а не через кубики TSLab. На это есть несколько причин:
  1. Отладка стратегии, которая состоит из кубиков, затруднительна, в то время как отладка внешнего скрипта позволяет полностью контролировать процесс и в случае ошибок быстро их устранить.
  2. При некотором навыке программирования читать стратегию и понимать ее гораздо проще, если она написана в виде программы. Читать стратегию, в которой десять и более кубиков, уже становится несколько неудобно.
  3. Мне гораздо проще написать внешний скрипт, чем собирать стратегию кубиками. Тем более что некоторые вещи через кубики реализовать очень проблематично.
Скачать код стратегии.
Как видно из кода параметры по умолчанию мы выбираем следующими: Дельта объемов  = 40, TakeProfit = 300, StopLoss = 100, Минимально необходимый объем свечи = 300. Собственно на глаз, тейк больше стопа в 3 раза, этого должно вполне хватать. Объем выбираем таким же образом.
Компилируем полученный скрипт в библиотеку и подключаем к TSLab. Собираем в редакторе скриптов следующий скрипт:
Рисунок 4. Скрипт для тестирования стратегии.
Рисунок 4. Скрипт для тестирования стратегии.

Как видим, здесь появился блок «ВнешнийСкрипт», в который мы подключили библиотеку с нашей стратегией. Так же добавлены два блока индикаторов, которые будут показывать дельты объемов на графике. Ну и естественно добавлен блок комиссии, в котором я ставлю 3 пункта комиссию на сделку что вполне реальная цифра, с учетом того что проскальзывания в сделках быть не должно при выбранной методике входа.
Запускаем полученный скрипт на исторических данных. Я выбрал диапазон в 1 неделю как пример. Результаты получились следующие:
Рисунок 5. График инструмента со сделками и отображением стоплосса и тейкпрофита.
Рисунок 5. График инструмента со сделками и отображением стоплосса и тейкпрофита.

Рисунок 6. Результаты стратегии в стандартной форме.
Рисунок 6. Результаты стратегии в стандартной форме.

Рисунок 7. График доходности стратегии.
Рисунок 7. График доходности стратегии.

В общем и целом стратегия уже показывает некоторую доходность, но нужно учитывать, что результаты показаны в пунктах, а не в рублях. Просто шаг цены инструмента измеряется в пунктах. Но на самом деле конечно результат совершенно невнятный. Стратегию нужно доработать.
Попробуем оптимизировать параметры стратегии, дабы получить результат лучше, чем уже есть. Для этого используем оптимизатор. Как видно на картинке ниже, полное поле параметров предусматривает больше 100000 итераций, что весьма долго, даже с учетом огромной скорости оптимизатора TSLab. Уменьшим число итераций до 10000, и TSLab автоматом изменит шаг каждого параметра необходимым образом, чтобы накрыть все поле параметров. В нашем случае шаг будет увеличен. Окно оптимизатора будет выглядеть так:
Рисунок 8. Окно оптимизатора параметров с настройками.
Рисунок 8. Окно оптимизатора параметров с настройками.

Нажимаем кнопку старт и ждем, пока оптимизация завершится. Далее сортируем полученные результаты по убыванию профита и получаем следующую картину:
Рисунок 9. Результаты оптимизации.
Рисунок 9. Результаты оптимизации.

Выбираем какой-либо результат. Я буду искать параметры, дающие хороший фактор восстановления и небольшое число сделок. Найдя нужный мне набор параметров (100, 250, 70, 140), и два раза кликнув на него, применяю оптимизированные параметры к стратегии. TSLab сразу же производит пересчет стратегии и результат вышел следующий:
Рисунок 10. Результат работы оптимизированной стратегии в стандартной форме.
Рисунок 10. Результат работы оптимизированной стратегии в стандартной форме.

Рисунок 11. График доходности оптимизированной стратегии.
Рисунок 11. График доходности оптимизированной стратегии.

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

Подготовка стратегии к размещению на паркинг скриптов.

Если вы еще не знаете о такой услуге, то самое время о ней узнать. Обычно все начинают трейдинг дома, используя свой собственный персональный компьютер. Рано или поздно встает вопрос: как бороться с отключениями света, отключениями интернета, сбоями компьютера и прочими техническими неполадками возникающими всегда в самый неподходящий момент. Не стоит забывать и про наших любимых чад, которые так и норовят потыкать кнопками на клавиатуре или понажимать разные штучки системного блока. Естественно они не знают о том, что у папы запущено несколько роботов, а на рынке началось столпотворение. Итоги бывают самые не предсказуемые.
Способов борьбы со всеми перечисленными проблемами может быть много. Можно купить второй компьютер, на случай если сломается основной, а так же монитор и клавиатуру с мышкой. Провести домой дополнительный канал интернета, и обеспечить автоматическое переключение на резервный канал. От  пропадания электричества спасет мощный UPS. От детей спасет отдельный кабинет с замком. В общем, решения имеются, но они потребуют значительных финансовых затрат. Тот же UPS часа на 4 будет стоить в районе 30000 р. Если сюда добавить другие затраты то набегает нормальная сумма. При всем при этом надежность полученного решения будет меньше, чем надежность арендованного сервера в специализированном датацентре. Собственно паркинг скриптов от TSLab и есть такое решение, заточенное конкретно под TSLab. Вам нужно только подключиться к вашему серверу в датацентре, а дальше работать с программой TSLab так же как вы это обычно делаете у себя дома. Никаких специальных знаний не требуется для обеспечения бесперебойной работы сервера, все сделают специалисты датацентра.
При загрузке вашего скрипта на удаленный сервер всегда остается опасность того, что кто-то, без вашего ведома, сможет получить доступ к нему и воспользоваться им. На этот случай в программе TSLab уже есть готовое решение называемое «контейнер скрипта». Контейнер скрипта это некий файл, в котором зашифрован ваш скрипт. Чтобы он смог работать, необходимо ввести специальный код, обеспечивающий возможность дешифрации содержимого файла. Но даже если ввести код скрипт сможет работать ровно столько, сколько вы установили при создании контейнера. Так что даже если контейнер смогут заполучить злоумышленники и смогут раздобыть код от него, они не смогут использовать его долго. Через заданное время он перестанет работать.
Итак, создадим контейнер из полученного нами выше скрипта. Предварительно необходимо произвести все необходимые настройки в редакторе скрипта, потому как контейнер не разрешает изменять никаких настроек, а только запускать и останавливать скрипт. Имеет смысл ограничить число подаваемых в скрипт баров для увеличения скорости работы, а также снять ограничение на временной диапазон, которое мы устанавливали в целях тестирования. Не буду на этом отдельно останавливаться, а сразу же перехожу к генерации контейнера. Создается он в два действия как это видно ниже:
Рисунок 12. Первый этап генерации контейнера из скрипта.
Рисунок 12. Первый этап генерации контейнера из скрипта.

Рисунок 13. Завершающий этап генерации контейнера из скрипта.
Рисунок 13. Завершающий этап генерации контейнера из скрипта.

Как видно из скриншотов, мы задали время работы скрипта до 20 января 2013 года и получили на выходе длинный ключ, который невозможно взломать перебором.
Далее контейнер необходимо собственно загрузить на сервер паркинга, и загрузить в TSLab. Делается это еще проще:
Рисунок 14. Первый этап загрузки контейнера скрипта на сервере.
Рисунок 14. Первый этап загрузки контейнера скрипта на сервере.

Рисунок 15. Результат загрузки контейнера скрипта на сервере.
Рисунок 15. Результат загрузки контейнера скрипта на сервере.

Как мы видим скрипт отлично загрузился и при этом совершенно работоспособен до указанной даты. Его можно хоть сейчас ставить в торговлю.


Итак, что у нас в сухом остатке? Готовый к работе робот, не боящийся отключений света и прочих технических неурядиц, который будет работать в то время, когда вы заняты другими важными делами. Время, затраченное на реализацию идеи, тестирование и подготовку контейнера составляет 1 день.
Что для этого нужно? TSLab, идея для стратегии, и немного знаний программирования.


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

Подобную и более сложные стратегии используя программирование на языке C# вы сможете создавать сами после обучения на моем курсе. Подать заявку можно на сайте TSLab.
Подать заявку на участие в курсе.
50 Комментариев
  • Микаелян Саро
    14 января 2013, 13:11
    Ребят, очень профессиональная работа!!! качественно изложили информацию!
  • Дмитрий Интрадей
    14 января 2013, 13:35
    вот такие «портянки» надо читать на смарте от начала и до конца, а не всякую гребаную пропаганду… +4!
  • Trig
    14 января 2013, 14:17
    Имеется ли в этой программе функционал построения трендовых линий, а также работа с ними?
      • Shved
        14 января 2013, 14:42
        ra81, добрый день, около месяца назад я увлекся тслабом, но пока всё на уровне кубиков. подскажите, какую программу нужно использовать для написания скриптов?
  • megatrader
    14 января 2013, 17:46
    Попоробней рпо паркинг скриптов.
    Стоимости?
    Как происходит отработка заявок? если ушла цена, набрано часть позы и т.д.
  • Archie
    14 января 2013, 20:05
    Роботы не работают по одной простой причине — любой робот построен на основании определенного алгоритма, схемы и т.д. то бишь на основании какой либо логики или производной от нее. Рынок АЛОГИЧЕН. Как только он станет логичен — перестанет существовать.
    Роботы — один из типичных примеров околорыночного бизнеса.
    Любой робот работает на определенном временном промежутке и не более того (более длинном или коротком). предсказать этот промежуток так же невозможно как создать робота который будет всегда зарабатывать.
    Роботы необходимы для избавления индивида от принятия решений.Это порочная практика.Когда робот «вдруг» перестают приносить прибыль их начинают дописывать «усовершествовать»))).
    Роботы большой бизнес и «модная штучка» (все теперь становятся программистами и начинают писать).Предполагаю что мало кому понравится мое «откровение».
    Только человек с помощью таланта, любви к делу, самодисциплины и ТС
    способен зарабатывать на рынке.
    • Микаелян Саро
      14 января 2013, 20:54
      Arlekin, весьма грамотный комментарий, возможно поэтому необходимо уметь делать роботов, чтоб иметь возможность не 1-2 дня зарабатывать или 1-2 месяца, а хотя бы год постоянной торговли.
      огромный + к Вашему комментарию
      • Archie
        14 января 2013, 21:39
        Saro, Спасибо! И все же, я уверен что на роботов не стоит тратить время.
        • Микаелян Саро
          14 января 2013, 22:33
          Arlekin, каждый выбирает делает сам…
          Главное, что скорее будет по теме, деньги вложенные в себя (имеется ввиду знания) они окупаются в большинстве случаев.
  • _sg_
    15 января 2013, 14:50
    За вебинар спасибо. Сделано профессионально. Даже краткий конспект в посте выложили. Респект Автору.
    Цель этого вебинара была рассказать про тслаб и про сопутствующие сервисы от TSLAB ( Паркинг итд). Цель выполнена. Карфаген взят.
    А все остальные вопросы, как то: нужны ли в принципе роботы, паркинги, С диезы и прочие бемоли — это дело выбора каждого. Нравится и можешь — используй, не нравится — не используй. Вот и все.
  • SergeB
    16 января 2013, 03:07
    Спасибо!
  • soul
    18 января 2013, 15:53
    надо посмотреть тоже вебинар будет сегодня-завтра.
    где то я уже видел это название TSLab.
    там кажется еще на форуме зеленые холмики рисует и у кого то есть должность такая «художник зеленых холмов»
    Или я опять ошибся, ооооох старость и склероз.
      • Владимир С.
        18 марта 2013, 16:08
        ra81, помогите разобраться с тиками. У вас указана версия 1.2, но тики положили в c:\Users\ra81\AppData\Local\TSLab\TSLab\FinamCacheTrades\, т.е в папку версии 1.1

        У меня в c:\Users\...\AppData\Local\TSLab\TSLab12\ есть только папки FinamCacheBars и FinamCacheData. Сохранять в FinamCacheBars?
  • Finsov
    28 ноября 2013, 14:31
    Имеет ли смысл прохордить обучение по TSLAB API если ранее не имел опыт программирования на С#???
      • Safonov
        06 сентября 2014, 09:16
        ra81, Я считаю, что вы все правильно делаете.
        на своем примере объясню-если есть рабочая торговая стратегия, независимая от сжимания одного места, то ее надо алгоритмизировать. А потом приступать к созданию или поиску других стратегий.
        а то, что роботы через год перестают зарабатывать-это верно, но я лично, если робот на фьюче прогоняю параметры каждую экспирацию или каждые полгода на Мамбе.
        Спасибо вам, ребята, хорошую работу делаете
  • Roki
    04 августа 2014, 13:05
    а как сохранить результаты оптимизации в тслаб? не один, а всю таблицу результатов
      • Roki
        04 августа 2014, 13:28
        ra81, спасибо за ответ) ещё если можно вопрос — сколько ядер умеет использовать оптимизатор?
          • Safonov
            22 мая 2015, 15:41
            ra81, Выложите, пожалуйста, заново код и кубики. ссылка не открывается
  • MyProfit
    11 января 2015, 22:29
    выложите пожалуйста код стратегии заново, ссылки не работают уже.
    Заранее Спасибо!
  • Алекс
    28 августа 2015, 16:59
    Добрый день а не перевыложите материалы которые прикрепрены были к статье, а то они не доступны

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн