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

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)

Чтобы оставить комментарий, вам необходимо войти или зарегистрироваться
  • "Вот тут и приходит страх - а если что-то пойдет не так, а если не дойдем в пару тиков до тейка?"

    разве "прогонка" алгоритма на исторических данных не прогонить страх?

    Типа , если сделать количество тиков до тейков , как параметр и потом оптимизировать под конкретный инструмент, основываясь на исторический данных?

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



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

  • В общем все по делу, спасибо

  • thebopper, рад если был полезен ab.gif

UP