Когда в прошлый раз попытка исключить лишние позиции в алгоритме Эммы зашла в тупик, я решил заморозить разработку этого робота, но поиск новой стратегии обернулся доработкой прежнего алгоритма.
Поскольку мне попрежнему нужен трендовый робот, открыв ценовой график, я начал думать, какой индикатор взять за основу новой торговой стратегии в этот раз.
Почему вернулся к доработке Эммы
Перебирая индикаторы, мне попался на глаза неизвестный ранее DMI; гуглю:
Индикатор направленного движения (Directional Movement Index) показывает есть ли тренд на рынке или нет. Он состоит из двух линий: DMI+ положительно и DMI- отрицательно направленного индикатора, которые генерируют сигналы на покупку и на продажу.
Описание, конечно, практичное, но как получается-то значение?
Это всегда беда, когда вываливается следствие, а не причина. Я стараюсь понять как рассчитываются значения индикатора или осциллятора, а не только как его использовать.
И в данном случае, как это часто бывает — это просто производная от давно известного мне ADX.
Average Directional Moving Index (Индекс направленного движения) — система технических индикаторов разработанная Уэллсом Уайлдером и представленная в июне 1978 года в его книге «Новые концепции в технических торговых системах».
И тут меня осенило, надо алгоритм Эммы профильтровать силой тренда. В общем говоря, меня не интересует какие сигналы выдает DMI, но ADX покажет силу движения.
Эмма 6: Новый фильтр из ADX
Вектор — есть (направление определяется в базовом алгоритме Эммы), и теперь я могу определить скаляр — силу тренда по ADX (во флете сила тренда стремится к нулю).
Путь разработки торговой идеи прежний:
- нанести индикатор на график визуализации из тестера
- нанести индикатор-фильтр
- разметить сигналы
- найти хорошие и проблемные места
Если взять значение ADX более 25 как наличие тренда (осциллятор в самом нижнем окне), то в теории все выглядит хорошо:
Выделение вектора сигнала по MACD с подтверждением скаляром по ADX, позволяет сохранить сделки в тренде (зеленый и красный) и при этом исключить массу пустых позиций во флете (фиолетовый).
Внесу индикатор-фильтр в базовую стратегию и посмотрю как это будет выглядеть на практике.
Идея сработала, как и ожидалось в теории! Куча пустых позиций во флете наконец-то исключена.
Повышение прибыльности нового алгоритма
Теперь, когда удалось побороть «пустые» позиции — избавиться от убытков — настало время борьбы за прибыльность.
Преобразую в наглядный вид отчет по месячному тестированию:
Мда, есть очень хорошие позиции, которые забирают жирные плюсы, а есть серии убытков, надо смотреть на визуализации что происходит:
При просмотре в таком масштабе я заметил, что робот хорошие позиции на разгоне тренда, когда ADX растет, и нехорошие во время затухания тренда, когда ADX снижается.
То есть можно исключить некоторые позиции (справа), если учесть поднимается ли сейчас кривая ADX — тренд разгоняется, или затухает — новое значение ADX меньше предыдущего.
Также я заметил, что можно «подрезать» прибыльные позиции — закрывая их раньше получится уловить больше прибыли. Сейчас покажу:
Во время разгона тренда (желтые квадраты на нижем осцилляторе) каждое следующее значение ADX больше предыдущего, и в это время резонно открывать позиции.
Когда тренд начинает затухать (голубые квадраты на ADX), в это время стоит закрывать позицию, подтвердив закрытие переходом гистограммы MACD на противоположную для позиции территорию.
Такой подход почти (2) не затронет открытие сделок, но исключит некоторые неудачные (not) позиции, которые пытаются открыться на угасающем движении.
Важнее то, что закрытие (1) (2) (3)(4) будет происходить раньше, когда тренд только заходит в момент консолидации или перелома. Что повысит прибыльность. Выглядит, по крайней мере в теории, многообещающе.
Необходимо реализовать
Для улучшения алгоритма нужно добавить некоторые условия к открытию позиций и новые условия закрытия.
Надо получить текущее и предыдущее значение кривой ADX, и, поскольку используются несколько ра в разных местах, то резонно один раз вычислить создать флаг из переменной (private).
Поскольку надо добавить фильтр и прежний алгоритм был уже достаточно запутанным, я переделал условия, распроточив открытия и закрытия позиций:
Короче, новый алгоритм стал сильно отличаться от прежней версии, поэтому теперь это Эмма 7. Протестирую и сравню с прошлым графиком:
Смотри-ка, сработало! Посмотрим что в отчете по тестированию за месяц:
Да, определенно стало лучше, чем было, но надо еще улучшать.
Итоги дня
Разработка робота вязнет в версиях, хотя есть более удачные вариации, в целом слишком много внимания одному торговому алгоритму. В следующий раз может его продолжу, а может начну следующего робота.