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

#16 Pip: Собираем пул сделок по тренду во время коррекций

Оглавление

Делаю нового робота: новая торговая идея, подбор инструментов, теоритическая проверка, реализация робота, проверка идеи практикой. Получился Pip 1, который накачал 17% за неделю в состоянии полуготовности.

Небольшое отступление: Про блог

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

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

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

Торговая идея

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

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

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

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

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

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

Если закрывать без накопления то 1 позиция на тренд (последняя) будет убыточной, после серии прибыльных позиций, что приемлемо при равном объеме позиций.

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

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

Базовая стратегия

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

  1. Отследить наличие тренда
  2. Определить откаты внутри тренда
  3. Вести стоп-ордера

Концептуальные идеи по теме:

  • использовать небольшой таймфрейм (не хочу отслеживать месячные тренды, нужны дни в позициях как максимум) — возьму M15;
  • умеренный риск-менеджмент — небольшой таймфрейм уже этому способствует, но никаких исправлений позиций (это, в прочем, как обычно), малые объемы позиций (на случай накопления ордеров);
  • Дополнительная идея для входа: последняя убыточная позиция это тоже сигнал о переломе тренда;
  • стоит поискать такой торговый инструмент, где тренды будут более выраженные и желательно частые

От чего зависит прибыльность:

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

Инструменты стратегии

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

Претенденты на определение тренда: MA и производные (SAR, MACD)

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

Претенденты на определение точки входа: Stoch, Momentum и прочие

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

Проверка теории на графике

Для определения тренда на рынке, после некоторых поисков, я решил взять индикатор TrendEnvelopes:

индикатор TrendEnvelopes (14, 0.1) на диаграмме EUR/USD 15M
индикатор TrendEnvelopes (14, 0.1) на диаграмме EUR/USD 15M

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

Теперь, когда базовый тренд определен, надо получить точку входа. Ищу дальше... Для определения точки входа я взял индикатор AROON:

индикатор AROON (14) на диаграмме EUR/USD 15M
индикатор AROON (14) на диаграмме EUR/USD 15M

Aroon Up (желтая линия) рассчитывается на основе времени, в течение которого конкретная ценная бумага или индекс достиг недавнего максимума. И наоборот, Aroon Down (пунктир) - это показатель времени, прошедшего с недавнего минимума. Оба индикатора строятся в виде линий в диапазоне от нуля до 100.

С помощью этого индикатора можно отследить момент, когда меняется инициатива на рынке. Когда Up пересекает Down — быки перехватывают инициативу, при обратном пересечении — медведи.

Суммируя: Учитывая, что наличие тренда определяется с помощью TrendEnvelopes, при смене тенденции на Aroon в сторону тренда мы можем судить о завершении коррекции — точке входа по стратегии.

теория: торговые сигналы (стрелки) по стратегии
теория: торговые сигналы (стрелки) по стратегии

Точками выхода будут служить уровни TrendEnvelopes, которые, в общем, позволяют «вести» позиции. Еще, важное замечание, сначала попробую вариант с пулом позиций — буду вести их стоп-ордера, без закрытия.

Торговый алгоритм

Коротко выпишу функциональную часть алгоритма робота, поскольку ни разу не выносил эту часть работы в блог:

Расчеты (при открытии нового бара):

Получаем значение TrendEnvelopes с текущего [0] и с прошлого [1] баров;

Получаем значение Aroon Up и Down с текущего [0] и с прошлого [1] баров;

* предусмотреть заранее: возможно потребуется дополнительное сравнение значений TrendEnvelopes (прошлое и новое), это поможет фильтровать флеты

Сигнал на покупку:

Если Bid [0] > TrendEnvelopes [0] (цена выше линии тренда)

и Aroon Up [1] < Aroon Down [1] (рынок был медвежий)

и Aroon Up [0] > Aroon Down [0] (рынок стал бычий)

тогда, BUY (... SL = TrendEnvelopes [0] ...) — открываем покупку

Сигнал на продажу:

Если Bid [0] < TrendEnvelopes [0] (цена ниже линии тренда)

и Aroon Up [1] > Aroon Down [1] (рынок был бычий)

и Aroon Up [0] < Aroon Down [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] }

* предусмотреть заранее: возможно потребуется закрытие при возникновении перескока TrendEnvelopes на противоположную сторону, это должно быть более прибыльно

Из идеи в Робота

Осталось превратить теорию в практику, протестировать на ошибки, и можно будет проверить результативность стратегии. Разобью на 2 очень неравноценных по объему работы этапа:

1. Создание всего каркаса робота. Здесь же реализую фундамент для работы с ордерами.

Пока будет открытие позиций по TrendEnvelopes (по факту перехода от верхнего конверта к нижнему — продажа; наоборот — покупка) и выставление (перемещение) стоп-ордера по значению TrendEnvelopes.

2. Добавление Aroon и открытие позиций по сигналам стратегии.

Pip 1: Первая реализация

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

Первая реализация Pip 1 в тестере стратегий
Первая реализация Pip 1 в тестере стратегий

На данном этапе робот на каждом новом баре (пока нет точки входа) открывает по позиции согласно положению TrendEnvelopes и трейлит стоп-ордер при изменении значения TE.

Любопытно, что даже в такой версии Робот прошел тест в плюс:

результат тестирования Pip 1 за неделю
результат тестирования Pip 1 за неделю

Ну конечно, требуется дальнейшая доработка, а именно включение подтверждения точки входа на тренде по индикатору Aroon.

Pip 2: Полная версия

Поскольку самую сложную часть работы я уже проделал, написав всю систему робота, осталось добавить точку входа — фильтрацию по индикатору Aron.

результат тестирования Pip1 - сверху; Pip 2 - снизу
результат тестирования Pip1 - сверху; Pip 2 - снизу

Фильтрация однозначно удалась :)

результат тестирования Pip 2 за неделю
результат тестирования Pip 2 за неделю

И результаты теста приличные. Но что-то точек входа маловато, в расчетах получалось больше. Проверю на ценовом графике:

теория на графике с практикой
теория на графике с практикой

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

Проверил, технически ошибок нет, значит надо смотреть медленно тестирование.

*спустя полчаса*

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

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

Итоги

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

Исходный код Pip_1 на Github.

Исходный код Pip_2 на Github.

В следующий раз поищу какой индикатор сможет дать мне точку коррекции тренда и реализую эту идею в виде Пипа 3.