Найти в Дзене
Трейдинг и Роботы

#15 Эмма: Новая идея для старого робота

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

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

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

Почему вернулся к доработке Эммы

Перебирая индикаторы, мне попался на глаза неизвестный ранее DMI; гуглю:

Индикатор направленного движения (Directional Movement Index) показывает есть ли тренд на рынке или нет. Он состоит из двух линий: DMI+ положительно и DMI- отрицательно направленного индикатора, которые генерируют сигналы на покупку и на продажу.

Описание, конечно, практичное, но как получается-то значение?

да что же ты такое?
да что же ты такое?

Это всегда беда, когда вываливается следствие, а не причина. Я стараюсь понять как рассчитываются значения индикатора или осциллятора, а не только как его использовать.

первый же пик по запросу DMI в гугле
первый же пик по запросу DMI в гугле

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

Average Directional Moving Index (Индекс направленного движения) — система технических индикаторов разработанная Уэллсом Уайлдером и представленная в июне 1978 года в его книге «Новые концепции в технических торговых системах».

И тут меня осенило, надо алгоритм Эммы профильтровать силой тренда. В общем говоря, меня не интересует какие сигналы выдает DMI, но ADX покажет силу движения.

Эмма 6: Новый фильтр из ADX

Вектор есть (направление определяется в базовом алгоритме Эммы), и теперь я могу определить скаляр силу тренда по ADX (во флете сила тренда стремится к нулю).

Эта картинка говорит о том, как значения ADX соотносятся с силой тренда
Эта картинка говорит о том, как значения ADX соотносятся с силой тренда

Путь разработки торговой идеи прежний:

  • нанести индикатор на график визуализации из тестера
  • нанести индикатор-фильтр
  • разметить сигналы
  • найти хорошие и проблемные места

Если взять значение ADX более 25 как наличие тренда (осциллятор в самом нижнем окне), то в теории все выглядит хорошо:

теоретический расчет применения фильтра
теоретический расчет применения фильтра

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

Внесу индикатор-фильтр в базовую стратегию и посмотрю как это будет выглядеть на практике.

флеты удалось отфильтровать
флеты удалось отфильтровать

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

Повышение прибыльности нового алгоритма

Теперь, когда удалось побороть «пустые» позиции — избавиться от убытков — настало время борьбы за прибыльность.

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

минусы все еще есть
минусы все еще есть

Мда, есть очень хорошие позиции, которые забирают жирные плюсы, а есть серии убытков, надо смотреть на визуализации что происходит:

Визуализация торговых позиций Эммы 6 из тестера
Визуализация торговых позиций Эммы 6 из тестера

При просмотре в таком масштабе я заметил, что робот хорошие позиции на разгоне тренда, когда ADX растет, и нехорошие во время затухания тренда, когда ADX снижается.

То есть можно исключить некоторые позиции (справа), если учесть поднимается ли сейчас кривая ADX — тренд разгоняется, или затухает — новое значение ADX меньше предыдущего.

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

отрисовано не очень точно, но для понимания общей концепции сгодится
отрисовано не очень точно, но для понимания общей концепции сгодится

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

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

Такой подход почти (2) не затронет открытие сделок, но исключит некоторые неудачные (not) позиции, которые пытаются открыться на угасающем движении.

Важнее то, что закрытие (1) (2) (3)(4) будет происходить раньше, когда тренд только заходит в момент консолидации или перелома. Что повысит прибыльность. Выглядит, по крайней мере в теории, многообещающе.

Необходимо реализовать

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

Надо получить текущее и предыдущее значение кривой ADX, и, поскольку используются несколько ра в разных местах, то резонно один раз вычислить создать флаг из переменной (private).

trend_acselerate: тренд стоит = 0; разгоняется = 1; затухает = -1
trend_acselerate: тренд стоит = 0; разгоняется = 1; затухает = -1

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

даже не буду пытаться пояснить
даже не буду пытаться пояснить

Короче, новый алгоритм стал сильно отличаться от прежней версии, поэтому теперь это Эмма 7. Протестирую и сравню с прошлым графиком:

верхний - планировалось, нижний - получилось по факту
верхний - планировалось, нижний - получилось по факту

Смотри-ка, сработало! Посмотрим что в отчете по тестированию за месяц:

Чистая прибыль/убыток по позициям; тестирование Эмма 7 за 1 месяц
Чистая прибыль/убыток по позициям; тестирование Эмма 7 за 1 месяц

Да, определенно стало лучше, чем было, но надо еще улучшать.

Итоги дня

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