Найти тему
Трейдинг и Роботы

#11 Эмма: Стоит ли менять стратегию?

Отчет: +7% за неделю в риал-тайм тесте Марка. Поиск недочетов в базовой стратегии Эммы и небольшое изменение базового торгового алгоритма, которое привело к пересмотру всей стратегии.

Первая неделя Марка в риал-тайм тесте

Перед тем, как начать доработку Эммы, хочу поделить результатом первой недели (10-17 августа) тестирования Марка на демо-счете.

скриншот отчета по позициям (для стартового баланса $5k)
скриншот отчета по позициям (для стартового баланса $5k)

За неделю, как и должно быть, робот открыл 5 торговых позиций и заработал $350, что для стартового баланса в $5k составляет +7%.

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

Одна позиция (SELL) ушла в стоп, забрав с собой $150, но она, благодаря особенности базового алгоритма, практически сразу была хеджирована (BUY); убыток оказался покрыт, счет подрос, после закрытия $270. То есть в моменте просадка составила не более 3%. Это очень хорошо, учитывая соотношение объема позиций и счета.

И одна позиция просто открылась в нужную сторону и принесла чистую прибыль $140 без каких-либо осложнений.

Читайте целиком: Марк: Оглавление для серии роботов

Если еще неделька пройдет также прибыльно, отправлю Марка трейдить на реальном счете. А теперь к текущему роботу.

Не вошедшее в видео про Эмму

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

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

В видео не вошел исходный код трейдинг-робота Эмма 1 на Github. Далее, необходимо улучшить этого робота, сделав сигналы точнее и прибыльнее.

Поиск недочетов в базовой стратегии

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

Поскольку используется 15-минутный таймфрейм за месяц точно можно будет насмотреться на разные ситуации.

Входные параметры и результаты тестирования за месяц
Входные параметры и результаты тестирования за месяц

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

Посмотрю как меняется баланс по позициям. Эмма за месяц открыла 208 позиций, при этом баланс счета менялся следующим образом:

Изменение баланса счета по позициям
Изменение баланса счета по позициям

Примечание: Чистое изменение -$150, при том, что в отчете -$240, вызвано наличием комиссионных.

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

Визуализация тестирования стратегии
Визуализация тестирования стратегии

Нашел ситуацию, на которой все проблемы уместились на одном экране:

  • Во флете (белый цвет) постоянно возникают небольшие позиции, которые постоянно меняются местами;
  • во время тренда (желтый цвет), когда сокращается волатильность и / или возникают коррекции, также возникает ненужная смена позиций.

То есть нужно очистить торговые сигналы: исключить «листание» позиций во флете, которое съедает прибыль больших прибыльных сделок, и исключить ложные сигналы на смену тренда.

Одна проблема и множество решений

Стоит понимать, что это развилка с множеством путей; некоторые из которых обернутся впустую потраченным временем.

Какие методы решения можно использовать?

1. Подрезать открытие позиций

Я заметил, что верные позиции достаточно большие (по количеству пунктов), а неверные — маленькие.

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

То есть сейчас, мы сравниваем высоту гистограммы MACD с нулем (больше — лонг; меньше — шорт), но можно сделать какой-то небольшой зазор, в пределах которого будем считать рынок во флете.

2. Добавить индикатор-фильтр

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

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

3. Пересмотреть условия открытия/закрытия позиций

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

Как я описывал в статье про торговую идею Эммы:
Когда гистограмма MACD выше 0, и значение MACD оказывается выше сигнальной линии — открывается покупка.
Когда гистограмма MACD ниже 0, и значение MACD оказывается ниже сигнальной линии — открывается продажа.

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

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

Если нанести это условие на график с предыдущего тестирования, то получается следующее:

Ручной просмотр нового решения
Ручной просмотр нового решения

В отдельно примере выше: исключаются «листание» позиций во флете (a) и исключаются позиции против глобального тренда (b).

a) Исключаются покупки (первая красная линия) в моменте, когда рынок медленно движется вниз, посколько в это время линия MACD и сигнальная линия MACD находятся ниже нуля (красный прямоугольник в окне осциллятора).

b) И исключаются покупки (вторая красная линия) при ложных перегибах MACD через ноль во время сокращения волатильности.

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

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

Плюсы: легко внести корректировку в базовый алгоритм (добавить всего пару блоков) и проверить очистятся ли сигналы.

Какое решение использовать?

Мне не нравится первое решение тем, что при подрезании открытия возникает непреодолимая дилемма: сколько подрезать?

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

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

Третье решение реализуется достаточно просто и укладывается в изначальную торговую идею. Беру его.

Эмма 2: Алгоритм с подтверждением тренда

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

Скрин из визуального редактора
Скрин из визуального редактора

Я просто добавил проверку при выполнении условий сигнала на:

  • продажу — линия MACD должна быть меньше нуля
  • покупку — линия MACD должна быть больше нуля

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

Результаты теста Эммы 2
Результаты теста Эммы 2

Судя по результатам стало лучше. Но надо смотреть подробнее.

Первое, на что обратил внимание, количество позиций за месяц сократилось с более 200 до 70. Цель достигнута — сигналы очищены.

Но что там с изменения баланса счета по позициям?

Изменение баланса счета по позициям
Изменение баланса счета по позициям

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

Для начала надо проверить на корректность работы самого алгоритма:

Тест алгоритма Эмма 2 показал правильно исполнение ордеров
Тест алгоритма Эмма 2 показал правильно исполнение ордеров

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

Сравню проблемный период Эммы 1, который подробно разбирал выше:

Сравнение позиций по алгоритмам Эмма 1 и Эмма 2
Сравнение позиций по алгоритмам Эмма 1 и Эмма 2

Результат однозначный: Эмма 2 (сверху) не открывает тех пустых позиций во время флета, который открывала Эмма 1 (снизу). Но стала стала очевидна цена решения — съезжает открытие позиций (пунктир).

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

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

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

Убыточный и прибыльный периоды Эммы 2
Убыточный и прибыльный периоды Эммы 2

Все ясно, с трендами (красная стрелка) все работает отлично, но вот с флетами — беда.

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

Итоги

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

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

Разберусь с этим в следующий раз, а пока исходный код Эмма 2 на Github.