Заметка

Мой домашний робот

  2  

В данной статье я хочу рассказать о свое опыте создания управления роботом. В конце заметки вы найдете полностью рабочий алгоритм (робот) для QUIK, который работал у меня на реальном счете в 2012 году.

В рамках создания робота передо мной стояла задача разработки торгового алгоритма и его программирования. В свою очередь данная задача делится на следующие подзадачи:

1)      разработка идеи торгового алгоритма

2)      формализация торгового алгоритма с помощью языка программирования (в том числе и выбор платформы и языка программирования)

3)      тестирование алгоритма на исторических данных

4)      оптимизация параметров торгового алгоритма

5)      принятие решения о возможности применения алгоритма

6)      программная реализация робота и применение на реальном счете

7)      организация инфраструктуры для робота

Рассмотрим все эти этапы подробно.

Разработка идеи торгового алгоритма

Я тестировал на истории многие стратегии связанные с использованием индикаторов, паттернов, уровней. В результате исследования, в рамках выработки идеи торгового алгоритма, я остановился на уровнях. Мною были исследованы различные торговые системы, основанные на уровнях – уровни Камариллы, уровни Вуди, уровни де Марка. Основываясь на комплексном анализе подходов к этим уровням, я взял за основу формулы для определения этих уровней

Поскольку все эти уровни являются классом уровней пивот, то есть определяющие точки разворота на основе исторических данных,

Pivot = (High + Low + 2×Close) / 4

Сопротивление:
Resist = (2 × Pivot) — Low

Поддержка
Support = (2 × Pivot) — High


где High, Low, Close – соответственно цены максимума, минимума и закрытия вчерашнего дня.

Параметры входа в сделку мной выбраны следующие.

- При пробитии уровня Resist – осуществляется вход в лонг

- При пробитии уровня Support – осуществляется вход в шорт

Формализация торгового алгоритма

Поскольку по образованию я программист, мне не составляет труда применить один из известных языков программирования для формализации идеи. За основу я выбрал платформу Welath-Lab и язык программирования C#.

В качестве торгуемого инструмента был выбран самый ликвидный актив — фьючерс на индекс РТС.

 

Тестирование алгоритма на исторических данных

Таймфрейм для тестирования был выбран мной равным 15 минутам.

Чтобы не возникало вопросов по тестированию за полный период, приведу сразу эти результаты (Рис. 1 – Рис. 6):

 

Рис. 1. Тестирование на исторических данных за 2008-2013 год (1 контракт фьючерса на Индекс РТС).



Рис. 2. Историческая кривая доходности




Рис. 3. Просадка системы







Рис. 4. Распределение прибыли по сделкам




Рис. 5. Распределение прибыли по месяцам

Рис. 6. Распределение прибыли по годам

Почему я привел данные за 2008-2013, хотя в начале заметки указал, что робот работал у меня в 2012 году? Всё потому что я регулярно запускал тестирование и проверял – насколько совпадает кривая доходности (эквити) на истории с реальными данными торговли. В случае сильного расхождения я искал ошибки в реализации робота.

При тестировании мне важна не столько доходность системы, сколько соотношение риск/прибыль, плавность кривой доходности (отсутствие резких просадок) и процент прибыли на один контракт (должен по моему мнению быть выше среднего банковского процента).

Оптимизация параметров торгового алгоритма

Поскольку в системе были жестко заложены модельные формулы, параметрами оптимизации был только временной интервал (таймфрейм), который остался прежним – 15 минут и стоп-лосс (Рис. 7). Тип торговли был выбран по тренду внутри дня без переноса позиций через ночь.

Рис. 7. Зависимости стоп-лосса от прибыльности системы.

Стоп-лосс при этом рассчитывался как:

Stop_loss = min(loss1, loss2)

где

loss1 =25 * (resist – support) / 100     (25% четверть от уровней),
loss2 = enterPrice / 100 * 3    (3% лось от уровня закрытия),
enterPrice – цена входа в позицию.

Оптимальное количество сделок в день – 2 сделки.

Проскальзывание – 50 пунктов.

Разрешенное время для входа в позицию с 11.00 (исключаем первый час торговой сессии).

 

Принятие решения о возможности применения алгоритма

Вернемся к этапам тестирования.

На первом этапе тестирования я выбрал период с 2008 года до 2010, на основании того что там были большие тренды, индекс резко рос и резко падал. В итоге получил следующую картину при тестировании системы за 2008-2009 год, заложив в качестве (приемлемой для меня) начальной суммы 250 т.р., и 3 плечо с реинвестированием капитала (Рис. 7 – Рис. 9).

Рис. 8. Статистика системы за 2008-2009 год с реинвестированием капитала

 

Рис. 9. Доходность системы за 2008-2009 год с реинвестированием капитала

Рис. 10. Просадка системы за 2008-2010 год с реинвестированием капитала

Действительно, картинка получилась очень привлекательная – за  3 года с реинвестированием стартовый капитал увечился с 250 тысяч рублей до 4 миллионов, с приемлемым риском в 30%. Всё очень заманчиво, но нужно помнить, что это исторические данные и как поведет себя робот в будущем, мне было не известно.

Тем не менее, тестирование на 2008-2009 мне дало повод протестировать и на более позднем периоде – 2010-2011 годах. Конечно, результаты были не столь ошеломляющие, но система была рабочая. И я решил начать использовать данную систему вручную на реальном счете, параллельно отлаживая робота и тестируя на тестовом счете.

Сразу приведу результаты ручной торговли на реальном счете (Рис. 10). Напомню, что это был этап тестирования (хоть и на реальном счете), поэтому начальная сумма была 30 т.р.

Рис. 11. Результаты ручной торговли на реальном счете с 01.10.2011 до 12.09.2012

В результате максимальная прибыль системы составила на тот период (почти год тестирования) 48%.

Программная реализация робота и применение на реальном счете

Для программной реализации робота мной выбран был встроенный в QUIK язык Qpile, как наиболее удачный и простой инструмент для меня.

Не вдаваясь во все проблемы реализации, скажу, что на этапе тестирования на демо-счете, пришлось решать ряд проблем связанных с выставлением позиций, проскальзыванием, не исполнением ордеров и т.д. Причем тестирование длилось порядка четырёх месяцев.

После отладки, мной были принято запустить робота в режим реальной работы.

В торговом роботе я постарался максимально упростить изменение параметров системы, введя переменные:

canTrade = 1                          'Разрешено ли совершать сделки, 0 = запрещено, 1 = разрешено

clientAccount = "SPBFUT00000"         'Номер счета клиента

clientCode = "SPBFUT00000"            'Код счета клиента

secClass = "SPBFUT"                   'Класс инструмента

secCode = "RIU2"                      'Код инструмента

timeFrame = 15                        'ТаймФрейм

shareCount = 1                        'Количество контрактов для сделки

dealsCountPerDay = 2                  'Максимально количество сделок за день

slippage = 200                        'Проскальзывание

stopLoss = 800                        'Стоп-лосс — максимальная просадка от текущей позиции

minStepPrice = 10                      'Минимальный шаг цены торгуемого инструмента (для фьючерса РТС = 10 пунктов)

filePath = "C:\temp\robot_data.txt"        'Файл для хранения информации о количестве сделанных за день сделок

candlesWatchCount = 500               'Количество просматриваемых свечей назад от текущего времени, для определения High, Low, Close предыдущего дня (необходимо просмотреть все свечи предыдущего дня или больше)

isDebug = 1                           'Использовать ли режим отладки, 0 — нет, 1 – да

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

Организация инфраструктуры для робота

Как оказалось этот этап стал не менее сложным при интеграции робота и реальных торгов.

Был установлен компьютер с операционной системой Windows XP SP3. Для синхронизации времени компьютера я использовал программу SymmTime, настроенную на московское время.

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

В свою очередь, при этом пришлось использовать программу XStarter, которая позволяет отслеживать появление окон (прерывание связи, окно логина). Также с помощью этой программы автоматически запускался торговый терминал QUIK по расписанию.

Проблему с выключением электричества я решил путём покупки источника бесперебойного питания, в результате чего компьютер мог работать еще 10 минут от аккумулятора.

Монитор, мышь и клавиатура мне не потребовались (только на этапе настройки компьютера). Подключался к компьютеру я всегда удаленно с помощью программ TeamViewer и RMS Viewer(которой пользуюсь до сих пор).

Для организации и тестирования инфраструктуры ушло еще почти 2 месяца.

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

Итоги работы

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

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

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

Прикрепленные файлы

·   data.rar

Комментарии

ALendi — 12 марта 2014 г.

Максим, что показывает бэктест в 2013-2014 гг..?

0 +

Максим Милованов — 12 марта 2014 г.

ALendi, 2014 год не тестировал, в 2013 было около нуля. В архиве вся стратегия в Wealth-Lab есть, можно самому запустить

0 +

Николай Камынин — 14 марта 2014 г.

Максим,
Понравился Ваш вывод о расхождении алгоритма и рынка.
Вы собственно подтвердили закон для всех простых роботов: Простые роботы прибыльными в реале не бывают
Почему указываете Tradematic, TSLab и обходите QLUA?
Есть отрицательный опыт или пока не пользовали?
TSLab - это транзак, а не КВИК.

0 +

Максим Милованов — 16 марта 2014 г.

Чесно говоря qlua пока что не пробовал, хотя очень рад что появился такой инструмент.
По поводу простых алгорилмов, моё мнение, что они работают, но ограниченное время и привязаны к определенной фазе и поведению рынка

0 +

Николай Камынин — 16 марта 2014 г.

Максим Милованов,
Согласен, именно поэтому они и не работают.
Полагаю, что секрет в том, что оптимизация позволяет подогнать такой алгоритм на текущем рынке.
Но, после подгона, на реале начинается его расхождение.
Т е мы его подогнали на истории и после этого он медленно умирает в реале.
Т е такие роботы не умеют прогнозировать они лишь медленно сливают депозит.
Но если подгон не делать, то они будут умирать еще быстрее.
------------
Ваше мнение по следующим вопросам:
1) Почему никому не удается, точно повторив рекламируемые в книжках, на семинарах , в интернете стратегии и алгоритмы , получить результаты близкие к результатам авторов этих алгоритмов?
2) Почему на различных торговых конкурсах никто из победителей не побеждает дважды?

0 +

Максим Милованов — 19 марта 2014 г.

Николай Камынин,
наверное на оба эти вопросы ответ в том, что рынки меняются постоянно. повторить чужую систему сложно, т.к. влияет человечечкий фактор. Хотя на ЛЧИ есть ряд примеров кто многие годы повторяет свой результат стабильного ручного трейдинга, ну и конечно хфт роботы

1 +

k-105839 — 24 марта 2014 г.

Можно использовать для авто торговли лицензионный ВЛД и реалтаймтрейдинг.

0 +

denis14031986 — 10 ноября 2016 г.

можете мне прислать своего робота я скачать его не могу

0 +

Написать комментарий

Чтобы написать комментарий, необходимо авторизоваться.

Написать администратору