Программирование скриптов в TSLab » Элитный трейдер
Элитный трейдер


Программирование скриптов в TSLab

Данная статья написана по мотивам вебинара «TSLab: интересные возможности и программирование» прошедшего в субботу 12.01.2013.
16 января 2013
От идеи до робота за один день.

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


Задача наша будет состоять из нескольких этапов:

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


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

Для тестирования стратегии будем использовать фьючерс РТС 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. Папка, содержащая кэш по инструментам.


Рисунок 1. Папка, содержащая кэш по инструментам.

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

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

Сама стратегия достаточно проста, и ее можно описать в нескольких словах. Основная идея в том чтобы ловить импульсы:

Выбираем базовый таймфрейм. Например, 5 секунд.
По окончанию свечи считаем весь объем покупок и весь объем продаж для свечи. Делим объем покупок на объем продаж и получаем некую величину, которую будем называть дельта покупки. Делим объем продаж на объем покупок и получаем дельту продажи.
Если дельта покупки больше предопределенной величины (например 40), и полный объем свечи больше чем минимально необходимый (эта величина задается как параметр, например 100), тогда входим в покупку лимитным приказом. Для продажи действуем аналогично, только используем разность продажи.
Выход из позиции по тейк профиту и стоп лоссу. Выставляем после входа в позицию сразу же условные заявки.

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

Cкачать код кубиков.

Подключаем эти новые индикаторы в TSLab (предварительно скомпилировав код в “*.dll” файл), собираем простенький скрипт и смотрим, что у нас получилось.

Рисунок 2. Скрипт для проверки работы индикаторов.Рисунок 2. Скрипт для проверки работы индикаторов.


Рисунок 2. Скрипт для проверки работы индикаторов.

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


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

Как видно все отлично работает. К бирже мы не подключены, но используем исторические данные из кэша TSLab, в которых есть направление сделок. Сразу можно обратить внимание на пики индикаторов дельт, которые говорят от значительном перевесе покупок перед продажами или наоборот. Вот эти пики мы и будем использовать для торговли.
Саму стратегию реализовывать будем тоже в виде внешнего скрипта (с использованием навыков программирования как я всегда делаю), а не через кубики TSLab. На это есть несколько причин:

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

Скачать код стратегии.

Как видно из кода параметры по умолчанию мы выбираем следующими: Дельта объемов = 40, TakeProfit = 300, StopLoss = 100, Минимально необходимый объем свечи = 300. Собственно на глаз, тейк больше стопа в 3 раза, этого должно вполне хватать. Объем выбираем таким же образом.
Компилируем полученный скрипт в библиотеку и подключаем к TSLab. Собираем в редакторе скриптов следующий скрипт:

Рисунок 4. Скрипт для тестирования стратегии.Рисунок 4. Скрипт для тестирования стратегии.


Рисунок 4. Скрипт для тестирования стратегии.

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

Рисунок 5. График инструмента со сделками и отображением стоплосса и тейкпрофитаРисунок 5. График инструмента со сделками и отображением стоплосса и тейкпрофита


Рисунок 5. График инструмента со сделками и отображением стоплосса и тейкпрофита

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


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

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


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

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

Рисунок 8. Окно оптимизатора параметров с настройками.Рисунок 8. Окно оптимизатора параметров с настройками.


Рисунок 8. Окно оптимизатора параметров с настройками.

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

Рисунок 9. Результаты оптимизации.Рисунок 9. Результаты оптимизации.


Рисунок 9. Результаты оптимизации.

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

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


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

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


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

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

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

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

Рисунок 12. Первый этап генерации контейнера из скрипта.Рисунок 12. Первый этап генерации контейнера из скрипта.


Рисунок 12. Первый этап генерации контейнера из скрипта.

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


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

Рисунок 14. Первый этап загрузки контейнера скрипта на сервереРисунок 14. Первый этап загрузки контейнера скрипта на сервере


Рисунок 14. Первый этап загрузки контейнера скрипта на сервере

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


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

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


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

(C) Источник
Не является индивидуальной инвестиционной рекомендацией
При копировании ссылка обязательна Нашли ошибку: выделить и нажать Ctrl+Enter