В прошлый раз я сумел хорошо выделить тренд, но взял неподходящий индикатор для поиска точки входа в тренд. Найду в этот раз. Спойлер: и не раз.
На этом я остановился в прошлый раз
Торговая идея заключается в поиске коррекций в тренде для входа в рынок по направлению глобального движения. Отловить наличие тренда мне удалось с помощью индикатора TrendEnvelopes.
Пока я сделал алгоритм, который входит на каждой новой свече по треду — точка для входа не определена — и выглядит это так:
В базовый алгоритм я также прописал условия закрытия сделок — трейлить стоп-ордер по TrendEnvelopes, и, соответсвенно, они все текущие позиции закрываются при смене тренда.
Теперь надо найти точку для входа. Выделить из этого огромного пучка позиций только те, которые находятся в моментах проседания тренда.
Поиск нового индикатора точки входа
Первые идеи: для поиска точки коррекции тренда можно использовать перекупленность/перепроданность, поискать «ямку/кочку» графически или с помощью индикатора.
Вернусь к том, что просто открою график, возьму наиболее подходящий момент и поищу на идеальной ситуации подходящий инструмент, который будет выглядеть прилично и в проблемной ситуации.
И так, спустя некоторое время поиска мне попался индикатор Accelerator Decelerator (AC), который измеряет ускорение и замедление текущей движущей силы рынка.
Столбчатая диаграмма AC - это разница между значением 5/34 гистограммы движущей силы и 5-периодной простой скользящей средней, взятой из этой гистограммы.
Точка входа в рынок для Pip 3: когда столбчатая диаграмма AC лежит в противоположном конверте от направления тренда, определенного TrendEnvelopes, и динамика значения оказывается сонаправлена тренду, можно судить о прохождении самой глубокой точки конкретной коррекции.
Торговый алгоритм
Новая функциональная часть алгоритма робота:
Расчеты (при открытии нового бара):
Получаем значение TrendEnvelopes с текущего [0] и прошлого [1] баров;
Получаем значение AC positive и AC negative с текущего [0] и прошлого [1] баров;
Сигнал на покупку:
Если Bid [0] > TrendEnvelopes [0] (цена выше линии тренда)
и AC positive [1] < AC negative [1] (рынок был медвежий)
и AC positive [0] > AC negative [0] (рынок стал бычий)
тогда, BUY (... SL = TrendEnvelopes [0] ...) — открываем покупку
Сигнал на продажу:
Если Bid [0] < TrendEnvelopes [0] (цена ниже линии тренда)
и AC positive [1] > AC negative [1] (рынок был бычий)
и AC positive [0] < AC negative [0] (рынок стал медвежий)
тогда, SELL (... SL = TrendEnvelopes [0] ...) — открываем продажу
Ведение ордеров (при открытии нового бара):
В цикле считываем очередной открытый ордер и в каждой итерации:
Если покупка {
если Bid [0] > TrendEnvelopes [0] и SL_price < TrendEnvelopes [0],
тогда SL = TrendEnvelopes [0] }
Если продажа {
если Bid [0] < TrendEnvelopes [0] и SL_price > TrendEnvelopes [0],
тогда SL = TrendEnvelopes [0] }
Реализация Pip 3 и Тестирование
Реализацию оставлю за кадром. Теперь, когда готов Pip 3, можно посмотреть, что получается на графике:
Да, фильтрация работает, и даже удалось поймать точки коррекции тренда для входа.
Однако, результат тестирования за 1 месяц выглядит не очень. Прибыли робот в таком состоянии практически не генерирует (все съела комиссия):
При этом, на графике видно, что все происходит правильно — открываются позиции в коррекциях тренда:
Видимо нужен более спокойный инструмент (акции, например) или больший таймфрейм, где тренды будут более выраженные.
План Б
Изначально, продумывая базовую стратегию, я планировал:
Вход в рынок: Одним индикатором отловить наличие тренда, другим отслеживать ситуацию коррекции и в каждой новой коррекции наращивать позицию по направлению движения тренда.
Выход из рынка: Вовремя закрыть позицию — позицию при возвращении в тренд или пул при переломе тренда.
Поскольку с пулом сделок нужно подбирать инструмент, где такой подход будет работать лучше, а я хочу получить робота для популярных валютных, то можно взять вторую часть идеи — закрывать позиции при возвращении в тренд.
По сути, у меня уже есть интрумент для выделения импульса, с его помощью робот входит в позицию, используя тот же AC, попробую выходить из позиций, когда рынок возвращается к обычному состоянию.
Это не сложно добавить в основной алгоритм, поскольку все данные уже получены. Нужно просто помнить последнюю позицию, ее тип и добавить пару веток с условиями проверки ситуации:
Открыта продажа:
Если AC positive [1] < AC negative [1] (рынок был медвежий)
и AC positive [0] > AC negative [0] (рынок стал бычий), то
-> Закрываем продажу
Открыта покупка:
Если AC positive [1] > AC negative [1] (рынок был бычий)
и AC positive [0] < AC negative [0] (рынок стал медвежий), то
-> Закрываем покупку
/разработка опять за кадром/
Итоги
С учетом последнего добавления, стало значительно лучше, Пип теперь закрывает позиции при возвращении тренда в обычное состояние.
Необходимо тестировать/оптимизировать/дорабатывать. Продолжу в следующий раз.