Возвращение к базовому торговому алгоритму и новая порция борьбы с позициями-пустышками — даже придумал понятие «флет-хеджа». В этот раз все крутится вокруг наблюдения и выводах из базовой торговой идеи.
После нескольких неудачных попыток фильтрации торговых сигналов робота Эмма, пришлось вернуться к более раннему этапу разработки, чтобы попробовать снова.
Возвращение к истокам
И так, я вернулся к версии алгоритма Эмма 2. Для понимания концепции:
Эмма использует индикатор MACD (12, 26, 9), чтобы ухватить импульс тренда. При этом, сигналы фильтруются со старшего таймфрейма (4H).
Когда рынок начинает направленно ускоряться, и это не коррекция существующего тренда, Эмма получает сигнал на покупку / продажу.
Когда гистограмма MACD выше 0, и значение MACD (синяя линия) оказывается выше сигнальной (желтой) линии — открывается покупка.
Когда гистограмма MACD ниже 0, и значение MACD (синяя линия) оказывается ниже сигнальной (желтой) линии — открывается покупка.
На практике же, алгоритм работает так (USD/CHF 15m):
Отлично ухватывает тренды, НО во время флета начинает чередовать позиции при любом малом движении рынка, съедая прибыль небольшими убытками.
Пытаясь побороться с этим, в прошлых сериях я очищал сигналы, используя больший таймфрейм и использовал фильтры из индикаторов, но разработка зашла в тупик — с каждой новой фильтрацией я смещал проблемный момент, но не устранял его.
Почему не бросить эту идею, когда есть куча торговых стратегий?
На данном этапе мне нужен именно трендовый робот и Эмма, в целом, отлично чувствует тренд, просто имеет лишние сигналы.
Эмма 5: Безубыток вместо прямого закрытия позиций во флете
Рассматривая визуализацию тестирования Эммы 2 я обратил внимание на то, что трендовые позиции робот открывает отлично, но копит мелкие убыточные позиции во флете.
Особенность флета, как известно, что цена проходит одни и те же значения помногу раз и эту особенность можно использовать.
Если позиция была открыта верно, Эмма попала в тренд, то ко времени поступления обратного сигнала имеющаяся позиция уже давно находится в плюсе (как продажа, отмеченная красной стрелкой на скрине выше).
Если же позиция оказалась открыта во флете, то скорее всего ко времени поступления обратного для нее сигнала она находится в небольшом минусе, но рынок не имеет выраженного тренда.
Идея заключается в следующем: чтобы не накапливать небольшие минусы при возникновении обратного сигнала во флете, можно использовать характерную особенность последнего и вместо закрытия по обратному сигналу, переставлять тейк на 0.
Попробую допилить это в основной алгоритм версии 2, и поскольку несколько последующих версий я забраковал, это будет уже Эмма 5.
Важное примечание: я не трогаю стоп-ордер, поэтому не должно возникнуть проблемы с зависанием позиций (без закрытия вообще).
Решил частично переписать алгоритм Эммы 2, запомнить отдельно уже открытые ордера и добавить новые условия для закрытия или переноса тейка в ноль. Новый алгоритм Эммы 5 теперь выглядит так:
Протестирую новый алгоритм с визуализацией и разберу полученные результаты.
Отличный результат ценой новых проблем
Судя по результатам отчета все стало намного лучше! В контрольном тесте было:
А после внесения изменений с (не)закрытием позиций во время флета стало:
Для того, чтобы детальнее понять произошедшие изменения надо заглянуть в визуализацию работы нового алгоритма при тестировании:
Да, отлично, в том месте (фиолетовые овалы) где прежде во флете позиции часто сменяли друг друга, каждая закрываясь понемногу в минус, теперь такой ситуации не возникает.
Однако, возникли и новые проблемы, после изменения алгоритма.
Теперь иногда попросту застревают позиции из флета на время всего тренда (овалы: зеленый — покупка и красный — продажа ).
Конечно, у этих позиций имеется стоп-ордер, поэтому они не будут висеть бесконечно, но такая ситуация чревата 2 проблемами:
1. Застрявшая позиция при выходе в стоп (а сейчас он стоит 200 пт.) просто убьет ранее наработанную прибыль и даже больше.
2. Каждая застрявшая позиция не дает открываться новым аналогичным позициям, коверкая всю базовую торговую стратегию.
Вторая проблема значительно важнее, поскольку застрявшая покупка не дает открываться новым покупкам (зеленый прямоугольник), которые должны открываться по стратегии; продажа, соотвественно, не дает открывать продажи (красный прямоугольник). Большое упущение.
Разбор и решение проблемы
Такую ситуацию легко исправить в неверное состояние — просто укоротить расстояние до стопа — применить техническое решение, но есть и логическое решение, согласующееся со стратегией.
Когда во время рыночной неопределенности (между зеленой и красной стрелкой) возникает ситуация смены позиции. Разберу по шагам:
- Открывается покупка «0», которая одновременно закрывает продажу
- Потом возникает условие для новой продажи «1» и выставляется безубыток для покупки (тейк в точку открытия), ожидам, что рынок оказался во флете и она просто закроется, перед новым трендом
- Но рынок оказался не во флете, тренд на продажу начинает разгораться, формируя более низкие локальные максимумы
- Конечно, возникает и новое условие покупки, «buy», однако мы не открываем позиции на покупку, поскольку у нас уже есть ордер, который, как мы надеемся, выйдет в ноль, в этот момент только закрываем продажу
- Дальше Эмма получает новый сигнал на продажу, покупка с безубытком есть, поэтому просто продаем, но покупка «0» (из флета, которого не оказалось) продолжает висеть.
Примечание: когда я взял эту идею, то сразу понимал, что могут возникать разнонаправленные позиции — теперь в проблемной ситуации баланс не меняется — это приемлемо. Назовем положение «флет-хедж». Однако, я не ждал, что позиции будут застревать так надолго.
На конкретном примере, для простоты понимания, решение будет следующим:
Когда возникает продажа «1», мы ставим безубыток для покупки «0» и открываем, по сути, хедж-позицию — пока все ок. Конечно, в этот прибыль не получается, но и убыток тоже, возник флет-хедж, который не дает открывать кучу позиций в отсутствии тренда.
Но вот далее, когда возникает новая продажа «2», уже после того, как закрылась предыдущая «1», можно считать флет-хедж застрявшим. То есть уже пошел тренд (красный), а у нас все еще висит какая-то позиция (0), нужная для предотвращения лишних позиций во флете.
При таком разборе, решение становится очевидно — когда открывается вторая однонаправленная позиция подряд нужно избавиться от флет-хеджа, закрыв обратную позицию (которая ждала безубытка).
Итоги
Поскольку у меня не получилось сходу написать придуманное решение и оно требует более серьезной переработки алгоритма, оставлю разработку на следующий день.