Алгоритмизация системы - как, с чем, и почему

1. Вступление (или мое отношение к алгоритмам)

Как и обещал - пишу небольшую, но надеюсь что полезную статью об алгоритмизации и автоматизации систем.

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

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

 

2. Что есть на рынке и что с этим делать

Многие знают, слышали, возможно видели - рынок переполнен роботами - hft, долгосроки, среднесроки, внутридневные... Огромное множество идей уже реализовано и перепробовано- какие-то работают, но большинство - закопаны в архивах винчестеров юных программистов и идейщиков. Просторы интернета молчат на тему прибыльных торговых роботов, точнее не молчат, а ярко кричат - "Продадим робота на 5000000% годовых", продаются книжки по HFT, в которых "палят" уже отработавших себя роботов. Да, можно почерпнуть что-либо интересное из книги, найти для себя вдохновение, узнать новые методы подхода, но запомните - никто, никогда не продаст зарабатывающего робота. Это догма.

Я бы разделил алгоритмы текущих рынков на условные (читай - в моем понимании) виды:

- роботы, основанные исключительно на математике и теории вероятности

- роботы, основанные на спаме ордерами и маркет-мейкерстве (hft)

- роботы, основанные на индикаторах (опять же - чуть ниже опишу что имею ввиду)

- роботы, основанные на логике

 

Обычному студенту-математику/программисту конечно под силу написать любого из этого роботов, но вопросы будут следующие:

- понимание рынка

- время написания (сроки)

- затрат ресурсов (как финансовых, так и моральных)

- поиск капитала (под тот же HFT, которые не запустишь с 5 кусков зеленых)

 

3. Что реально сделать

Ответ очень прост - написать можно все. Даже самые сложные задачи - решаемы. Главное - подход.

Единственной проблемой на пути к написанию правильного робота есть не четкое понимание того что делаем. Все данные должны быть структурированы и правильно воспроизводиться и использоваться. Все мы получаем одинаковое количество данных от рынка: цены и объемы. Все. Больше данных у нас нет. А вот как их интерпритировать - это самый главный вопрос.

Хотим сделать робота на пробой уровня - легко! Звучит легко. В реализации будет чуток сложнее. Для этого нам потребуется четкий ответ на вопросы:

- что такое уровень?

- как мы будем его искать?

- с помощью какого инструмента мы можем найти его?

- что такое пробой?

- когда мы будем входить в позицию?

- когда мы будем выходить из позиции?

- стоп/тейк/риск?

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

Что имеется ввиду под "с помощью какого инструмента"? С помощью индикатора или собственного алгоритма. 

Все мы понимаем что такое консолидация или как ее найти на графике. А как это описать роботу? Ведь не вы ему будете указывать что это консолидация, а он сам должен каким-то образом понять. Маленький ИИ, но без обучения (хотя нейронные сети - вот это сила!).

Или же описать роботу поиск уровня - кажется что все просто - для кого-то уровнем является хай какого-либо бара (например).

На самом же деле только для этого нам потребуется:

- указать скрипту поиск хая

- указать за сколько его искать

- возможно отношение этого хая к другим

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

p.s.: мудрая мысль и подсказка начинающим роботописцам - чем меньше фиксированных параметров в роботе - тем лучше результат.

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

 

4. Индикаторы или стратегия

Не так давно меня посещала мысль (после очередного написанного индикатора, у которого было достаточно ложных сигналов) - что если использовать полу-автоматический трейдинг. Есть рабочий индикатор, показывает точки входа в рынок, написан с 0 своими руками на основе собственной идеи. Проблема - достаточно много сигналов в правильном направлении, но или слишком рано или поздно (хотя глазами видно что там глупо заходить). Выход: добавлять ограничения (а их тоже нужно описать и реализовать) или торговать по такому индикатору руками. Могу сказать точно - торговля руками будет в данном случае более прибыльна. Просто будете получать алерты и сами принимать решение - войти или нет. То есть рискуете вы, но не робот.

Вторая сторона медали - стратегия. Стратегия решает сама - войти в рынок или нет. Чтобы доверить свои средства системе должна быть уверенность в точности сигналов и их правильности. Вот тут и приходит страх - а если что-то пойдет не так, а если не дойдем в пару тиков до тейка? Решение: обучение робота к принятию решения в моменте - не дошли до тейка и откатываемся - выход. Реализация - с помощью собственного индикатора учета движения цены сравниваем движение в направлении тейка и до - сильно откатываемся - стоп в б.у. или выход. 

Свой голос я бы конечно отдал за стратегию, но для этого - она должна быть проверенной временем. Я предпочитаю системы, основанные на логике, но не на математике. Я конечно тоже использую математический и статистический анализ, но исключительно для поиска вероятностей. Например: можно предположить, что возле сильный уровней вероятность разворота цены увеличивается. Соответственно я могу задать роботу рабочий диапазон - искать сигналы только возле таких уровней. Но при этом, сам уровень в торговой системе описан логическим путем. Так же как ложный пробой можно описать "разводом толпы", так и уровень можно назвать "уровень сильного игрока". Совмещая данные техники можно получить вполне приемлимые результаты.

 

Немного итогов:

- Алгоритмизировать можно любую систему и идею - главное - четкая формулировка задачи и понятий

- Торговать можно и роботом и с помощью собственных индикаторов

- Вы должны учить робота, а не сами думать как робот

- Прибыльные роботы имеют минимум фиксированных параметров и значений

- Если нет инструмента который позволит найти нужную формацию (например паттерн) - нужно его сформулировать и написать самому :)

 

5. Небольшой пример, или последняя решенная задача (бета)

Поставил себе задачу для поиска консолидаций перед пробоями. Все же просто вроде - консолидация, она и в Африке консолидация - глазами видно -цена стоит и все. На деле - индикаторов под NinjaTrader (работаю на этой платформе) - не нашел. Паттерн консолидации - да фиг его знает какой он - может быть один бар, может два или десять - сколько простоим, столько и простоим. А значит что? Фиксированные значения отпадают. Значит будем искать автоматически везде перед пробоем (поиск пробитых хаев и лоев описывать не буду). 

Следующий момент который был обдуман: является ли пробитие консолидации в 1 тик пробоем? А если на часовом графике? Врядли. Как роботу это сказать - да все просто - пробой должен быть резкий и соизмерим с размером консолидации и всего предыдущего движения в эту сторону. В реальности в роботе решение выглядит в % соотношении от безоткатного движения до пика консолидации. 

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

Вот некоторые скриншоты. Настроен на поиск консолидаций непосредственно перед пробоем пиков движений. Красные зоны - консолидации перед пробоями хаев, зеленые - перед пробоями лоев.

p.s.: бета-версия, еще тестирую и есть над чем работать.

p.p.s.: маленькие зеленые полосы это тоже зоны, просто они короткие очень.

  • практика
  • роботы
  • Индикаторы
  • ninjatrader
  • консолидация
  • теория
  • алгоритмизация
  • примеры
X

Похожие публикации

Комментарии (5)

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