Паттерн Трубовидная вершина Трубовидное дно стратегия

Рейтинг брокеров бинарных опционов за 2020 год:
  • БИНАРИУМ
    БИНАРИУМ

    1 место! Самый лучший брокер бинарных опционов для СНГ!
    Бесплатное обучение трейдингу и демо-счет!
    Получите бонус за регистрацию, перейдя по ссылке:

Разворотные паттерны: Тестируем паттерн «Двойная вершина/дно»

Содержание

Введение

Анализ, проведенный в статье «Сколько длится тренд?», демонстрирует, что около 60% ценовое движение находится в тренде. И именно открытие позиции в начале тренда дает возможность получить максимальный результат. Поиски точек разворотов трендов породили большое количество разворотных паттернов. Одним из наиболее известных и часто применяемых паттернов является двойная вершина/дно.

1. Теоретические аспекты формирования паттерна

На ценовом графике паттерн «Двойная вершина/дно» можно встретить довольно часто. Природа его формирования тесно связана с теорией торговых уровней. Паттерн образуется в конце тренда или тенденции, когда ценовое движение упирается в уровень сопротивления или поддержки, в зависимости предыдущего движения, и после коррекции при повторном тестировании не пробивает уровень, а вновь откатывается.

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

При поиске паттерна на графике не следует искать точного совпадения вершин/впадин. Считается нормальным отклонение уровня вершин/впадин. Главное, чтобы вершины находились в пределах одного уровня сопротивления/поддержки. Надежность паттерна прямо пропорциональна силе уровня, в зоне которого происходит его формирование.

2. Стратегия торговли по паттерну

Насколько широкое распространение получил паттерн, настолько и различные стратегии его торговли. На просторах интернета существует как минимум три различные точки входа отработки данного паттерна.

2.1. Сценарий 1

Первая точка входа основана на пробитии линии шеи. Стоп-лосс выставляется за линией вершин / впадин. При этом существуют различные подходы для определения «пробития лини шеи». Здесь может использоваться как закрытие бара под линией шеи, так и преодоление линии шеи на фиксированное расстояние. Оба подхода имеют свои плюсы и минусы. При резком движении закрытие свечи может произойти на достаточном расстоянии от линии шеи, что сделает неэффективным использование паттерна.

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

ТОП лучших платформ для торговли бинарными опционами:
  • БИНАРИУМ
    БИНАРИУМ

    1 место! Самый лучший брокер бинарных опционов для СНГ!
    Бесплатное обучение трейдингу и демо-счет!
    Получите бонус за регистрацию, перейдя по ссылке:

2.2. Сценарий 2

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

2.3. Сценарий 3

Третья точка входа основана на трендовой теории. И определяется по пробитию трендовой линии, построенной от точки начала движения до экстремума на линии шеи. Стоп-лосс, как и в первом случае, выставляется за линией вершин/впадин. Ранний вход дает меньший уровень стоп-лосса по сравнению с первой точкой входа. А также дает больше сигналов по сравнению со вторым сценарием. В тоже время, такая точка входа дает больше ложных сигналов, так как возможно формирование канала между линиями экстремумом и шеи или паттерна вымпел, которые являются фигурами продолжения тренда.

Во всех трех стратегиях предлагается выход на уровне равном расстоянию от экстремумом до линии шеи.

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

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

3. Создаем советник

3.1. Поиск экстремумов

Создание торгового советника начнем с создания блока поиска паттерна. Для поиска экстремумом на графике воспользуемся индикатором зиг-заг из коробочной поставки MetaTrader 5. Перенесем расчетную часть индикатора в класс по технологии, описанной в статье [1]. Как известно, данный индикатор содержит два индикаторных буфера, содержащих значение цены в точках экстремумом. Между экстремумами индикаторные буферы содержат пустые значения. Чтобы не создавать два индикаторных буфера, содержащих множество пустых значений, они были заменены массивом структур, содержащих информацию об экстремуме. Структура для хранения информации об экстремуме имеет нижеследующий вид.

Я думаю, каждый, кто хотя бы раз пользовался индикатором зиг-заг, знает на сколько компромиссов придется пойти при поиске оптимальных параметров. Малые значения параметров ведут к разбиению одного большого движения на мелкие части. И наоборот, слишком большие значения параметров приведут к пропуску коротких движений. Алгоритм поиска графических паттернов очень требовательный к качеству нахождения экстремумов. В попытках «совместить несовместимое» было принято решение использовать индикатор с малыми значениями параметров, при этом создать дополнительную надстройку, которая будет объединять однонаправленные движения с короткими коррекциями в одно движение.

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

Для получения информации об экстремумах в классе предусмотрены методы:

  • ExtremumByTime — получение номера экстремума в базе по заданному времени,
  • Extremum — возвращает экстремум по указанной позиции в базе,
  • IsHigh — возвращает true, если указанный экстремум является вершиной, и false — если впадиной.

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

Основная логика класса реализована в методе Calculate. Давайте рассмотрим его подробнее.

В начале метода проверим актуальность ссылки на объект индикаторного класса и наличие экстремумов, найденных индикатором.

Затем, определим количество необработанных экстремумов. В случае, если все экстремумы обработаны, выходим из метода с результатом true.

После этого запрашиваем необходимое количество экстремумов из индикаторного класса.

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

Далее организовываем цикл с перебором всех загруженных экстремумом. Экстремумы до последнего ранее сохраненного пропускаются.

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

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

С полным кодом всех классов и их методов можно ознакомиться во вложении.

3.2. Поиск паттернов

После определения ценовых экстремумом построим блок поиска точек открытия позиции. Разделим эту работу на 2 подэтапа:

  1. Поиск паттерна для потенциального открытия позиции.
  2. Непосредственно точки открытия позиции.

Этот функционал будет возложен на класс CPttern, заголовок которого представлен ниже.

Паттерн будем определять по четырем соседним экстремумам, информацию о которых сохраним в четырех структурах s_StartTrend, s_StartCorrection, s_EndCorrection и s_EndTrend. Для идентификации паттерна нам также потребуются уровни минимума и максимума коррекции, которые будут храниться в переменных d_MinCorrection и d_MaxCorrection. Экстремумы будем получать из экземпляра ранее созданного класса CTrends.

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

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

Вначале метода проверим актуальность указателя на объект класса CTrends и наличие сохраненных экстремумов. В случае негативного результата выходим из метода с результатом false.

Затем определяем экстремум, соответствующий дате, полученной в входных параметрах. Если экстремум не найден, выходим из метода с результатом false.

Далее, организовываем цикл по перебору всех экстремумов, начиная с указанной даты и до последнего найденного. Сначала получим 4 последовательных экстремума. Если хотя бы один из экстремумов не получен, перейдем к следующему экстремуму.

На следующем этапе проверим соответствие экстремумов искомому паттерну. Если экстремумы не удовлетворяют искомому паттерну, переходим к следующим экстремумам. При нахождении паттерна устанавливаем флаг в положение true и выходим из метода с тем же результатом.

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

Для реализации этого функционала создадим метод CheckSignal(). Данный метод, помимо непосредственно сигнала, будет возвращать торговые уровни стоп-лосса и тейк-профита, поэтому в параметрах метода воспользуемся указателями на переменные.

В начале метода проверим флаг на наличие ранее найденного паттерна, и если паттерн не найден, выходим из метода с результатом false.

Затем определим время закрытия свечи образования паттерна и загрузим данные интересующего нас таймфрейма от начала формирования паттерна до текущего момента.

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

Стоит отметить, что здесь я добавил еще некоторые ограничения:

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

После обнаружения сигнала на открытие позиции укажем тип сигнала («-1» — Продажа, «1» — Покупка) и торговые уровни. Стоп-лосс установим на уровне максимальной глубины коррекции к линии шеи после ее пробития. Для тейк-профита установим 2 уровня:

1. На уровне, равном 90% расстояния от линии экстремумов до шеи в сторону открытия позиции.

2. На уровне, равно 90% от предыдущего трендового движения.

При этом добавим ограничение, что уровень первого тейк-профита не может превышать уровень второго тейк-профита.

С полным кодом всех классов и методов можно ознакомиться во вложении.

3.3. Собираем советник

После проведения подготовительной работы соберем все блоки в единый советник. Объявим внешние переменные, которые разделим на три блока:

  • Параметры индикатора зиг-заг;
  • Параметры для поиска паттернов и точек входа;
  • Параметры для совершения торговых операций.

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

Для реализации возможности выставления одновременно двух тейк-профитов к позиции воспользуемся технологией, предложенной в статье [2]

В функции OnInit() проведем инициализацию всех необходимых объектов. При этом, так как мы глобально не объявляли экземпляры классов CZigZag и CTrends, мы просто их инициализируем и добавим указатели на эти объекты в наш массив. В случае ошибки инициализации на любом из этапов выходим из функции с результатом INIT_FAILED.

В функции OnDeinit() произведем очистку экземпляров используемых объектов.

Как всегда, основной функционал реализован в функции OnTick. Функционал данной функции можно условно разделить на два блока:

1. Проверка сигналов на открытие позиции в ранее найденных паттернах. Запускается при каждом открытии новой свечи на малом таймфрейме поиска подтверждения сигнала.

2. Поиск новых паттернов. Запускается при каждом открытии новой свечи на рабочем (указанном для индикатора) таймфрейме.

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

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

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

При появлении нового бара определим начальную дату поиска паттернов (с учётом заданной в параметрах глубины анализируемой истории). Затем проверим актуальность указателя на объект класса CPattern и, в случае недействительного указателя, создадим новый экземпляр класса.

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

Если же найден новый паттерн, то проверим сигнал на открытие позиции, вызвав функцию CheckPattern(). После чего, при необходимости, сохраняем паттерн в наш массив и инициализируем новый экземпляр класса для следующего поиска. Цикл продолжается пока при очередном поиске метод Search() не вернет значение false.

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

В начале функции вызовем метод поиска сигнала на открытия позиции класса CPattern. В случае ошибки проверки выходим из функции с результатом false.

При успешном поиске сигнала на открытие позиции установим торговые уровни и отправим приказ на открытие позиции в соответствии с полученным сигналом.

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

С полным кодом всех методов и функций можно ознакомиться во вложении.

4. Тестирование стратегии

После создания нашего советника пришло время проверить его работу на исторических данных. Тестирование будем проводить за период в 9 месяцев 2020 года для пары EURUSD. Поиск паттернов будем проводить на тайм фрейме М30, а точки открытия позиции будем искать на тайм-фрейме М5.

Результаты тестирование показали возможность советника генерировать прибыль. За тестируемый период советник совершил 90 трейдов, 70 из которых было прибыльными. Советник показал профит фактор 2.02 и фактор восстановления 4.77, что свидетельствует о возможности использования советника на реальных счетах. Полные результаты тестирования приведены ниже.

Заключение

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

«Трубовидное дно» — графическая ценовая модель

Статистические данные показывают, что у ежедневных трубовидных моделей уровень отказов составляет 18% со средней прибьлью в 33%. Почти половина формаций (45%) имеют прибыли менее чем 20%. Однако есть ряд крупных прибылей; почти у четверти формаций (23%) прибыли составляют более 50%.

Рекомендуемые товары для трейдера форекс:

Стратегия торговли по паттернам разворота рынка

Паттерны встречаются на максимумах и минимумах графика цены, что позволит Вам открывать сделки с коротким стоп лоссом, иметь соотношение риск — прибыль более 1 к 3 и вероятность отработки сигнала 75%

СЛАБОЕ ДНО
СЛАБАЯ ВЕРШИНА

РАЗВОРОТНОЕ ДНО
РАЗВОРОТНАЯ ВЕРШИНА

СЛОЖНОЕ СЛАБОЕ ДНО
СЛОЖНАЯ СЛАБАЯ ВЕРШИНА

Почему эти паттерны

так хорошо работают?

Они основаны на психологии поведения трейдеров.

Мы знаем, что страх и жадность 2 самых сильных состояния,

которые приводят в действие кнопку мыши.

Профессиональные трейдеры, и грая на эмоциях толпы,

часто ложно подталкивают цену вниз или вверх.

Толпа думает, что тренд усиливается, но на самом деле это ловушка.

В итоге срабатывают ордера стоп лосс,

в то время как профи уже открыли сделки в обратном направлении.

Поэтому у цены не остается причин двигаться в текущем направлении

и она разворачивается.

Хотите принимать решения хладнокровно

и не быть частью табуна, которое гоняют из стойла в стойло?

Тогда стратегия торговли по разворотным паттернам это то,

что нужно Вам сейчас!

Изучите 6 мощных паттернов и

находите лучшие точки для открытия сделок на разворот

«ZTrader» ©2020 — 2020. Все права защищены.

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

Мы не верим в программы быстрого обогащения. Мы верим в дисциплинированный, системный и осознанный трейдинг. И это то, для чего разработаны все наши программы, чтобы помочь Вам в достижении больших результатов. Как указано в законе, мы не можем и не даем никаких гарантий относительно Ваших собственных результатов, так как Ваши результаты зависят только от Вас. Мы здесь, чтобы предоставить Вам наши лучшие стратегии и системы торговли, которые протестированы и которые работают. Однако ничто на этой странице или на любом из наших веб-сайтов или электронных писем не является обещанием или гарантией будущих доходов. Цифры, статистика и положительные результаты наших трейдеров и студентов являются их собственными в том смысле, что Ваши результаты могут отличаться. Если у Вас есть вопросы, пишите на [email protected] Помните, что прибыльный трейдинг может быть только дисциплинированным, системным и осознанным.

ИП Енокян Аркадий Романович

ОГРНИП 317482700011850

ИНН 482425416402

«ZTrader» ©2020 — 2020. Все права защищены.

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

Мы не верим в программы быстрого обогащения. Мы верим в дисциплинированный, системный и осознанный трейдинг. И это то, для чего разработаны все наши программы, чтобы помочь Вам в достижении больших результатов. Как указано в законе, мы не можем и не даем никаких гарантий относительно Ваших собственных результатов, так как Ваши результаты зависят только от Вас. Мы здесь, чтобы предоставить Вам наши лучшие стратегии и системы торговли, которые протестированы и которые работают. Однако ничто на этой странице или на любом из наших веб-сайтов или электронных писем не является обещанием или гарантией будущих доходов. Цифры, статистика и положительные результаты наших трейдеров и студентов являются их собственными в том смысле, что Ваши результаты могут отличаться. Если у Вас есть вопросы, пишите на [email protected] Помните, что прибыльный трейдинг может быть только дисциплинированным, системным и осознанным.

ИП Енокян Аркадий Романович

Список русскоязычных брокеров бинарных опционов:
  • БИНАРИУМ
    БИНАРИУМ

    1 место! Самый лучший брокер бинарных опционов для СНГ!
    Бесплатное обучение трейдингу и демо-счет!
    Получите бонус за регистрацию, перейдя по ссылке:

Добавить комментарий