English 中文 Español Deutsch 日本語 Português
Улучшение распознавания свечных паттернов на примере Доджи

Улучшение распознавания свечных паттернов на примере Доджи

MetaTrader 5Индикаторы | 13 декабря 2021, 09:15
4 902 6
ds2
ds2

Введение

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

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

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


Недостаток классических свечей и идея его устранения

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

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

Рисунок 1. Идеальная свеча Доджи "Надгробие"


В примере на ценовом графике ниже нет таких свечей Доджи:

Рисунок 2. Обычные бары таймфрейма H4


Но так ли это? Давайте посмотрим, какие движения происходили внутри этих баров, перейдем для этого на таймфрейм поменьше:


Рисунок 3. Обычные бары таймфрейма H1


На рисунке выше видно, что некоторые бары имеют цены закрытия, примерно равные ценам открытия других баров. И если объединить все бары в промежутке с 1-го по 5-й часы, то получается свеча Доджи. Аналогично для баров с 6-го по 9-й и с 7-го по 9-й часы. Назовем такие группы баров «метабары»:

Рисунок 4. Метабары на таймфрейме H1


Это не какая-то магия или лукавый трюк. Это самые настоящие свечи Доджи, основанные на реальных ценовых движениях длиной в 5, 4 и 3 часовых баров, которые не было видно на стандартном таймфрейме H4 просто потому, что там жестко задана длина бара в 4 часа и жесткое время начала этого бара. Отличие длины всего на 1 час или сдвиг границ бара на 1 час приводят к серьезной разнице в результате.

Сколько таких свечей Доджи не видят трейдеры? А ведь это огромное количество упущенных сигналов для торговли.

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


Разработка улучшенного индикатора Доджи

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

Вспомним детальней, из каких частей состоит свеча Доджи.

Рисунок 5. Структура свечи

Height — общая высота свечи.

Body — высота тела свечи.

Shadow — высота самой короткой тени свечи. У обычного бара две тени: верхняя и нижняя. Но именно у свечи Доджи нас интересует только самая короткая из них, так как в описании свечей Доджи сказано, что она должна почти отсутствовать, а про противоположную ей тень ничего не сказано.

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

input double  Candle_BodyPowerMax      = 0.2;    // Максимальная высота тела относительно высоты свечи

То есть, Candle_BodyPowerMax = Body / Height (см. рисунок выше), а точнее, каким предельным может быть это соотношение. Все бары, у которых это соотношение равно или меньше (вплоть до нуля) заданного, — это свеча Доджи.

Аналогично и с тенью:

input double  Candle_ShadowPowerMax    = 0.2;    // Максимальная высота тени относительно высоты свечи

Candle_ShadowPowerMax = Shadow / Height (см. рисунок выше), а точнее, каким предельным может быть это соотношение. Все бары, у которых это соотношение равно или меньше (вплоть до нуля) заданного — это свеча Доджи.

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


Рисунок 6. Особенный параметр свечи, строящейся на метабарах


Ширина эта может быть не фиксированной (в этом преимущество метабаров перед обычными таймфреймами), а задаваться трейдером как диапазон:

input int     Candle_WidthMin          = 1;      // Минимальная ширина свечи, баров
input int     Candle_WidthMax          = 2;      // Максимальная ширина свечи, баров

Кстати, если трейдер задаст индикатору и Candle_WidthMin, и Candle_WidthMax равными 1, то все метабары будут равны обычным барам, то есть, индикатор будет строить свечи Доджи классическим способом. В противном же случае индикатор будет перебирать все последовательности баров в заданном диапазоне ширины и проверять, не образуют ли они вместе свечу Доджи.

Так как в случае метабаров индикатор на каждом баре оперирует не только самим баром, но и еще несколькими более старыми по времени, то в событии OnInit (инициализация индикатора) нужно это указать терминалу, чтобы он не рисовал индикатор на всей истории, а сделал в самом ее начале небольшой отступ:

SkipBars = Candle_WidthMax;
PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, SkipBars);

Переменная SkipBars должна быть объявлена как глобальная (типа int), и ее нужно будет также использовать в расчетах индикатора (в OnCalculate), чтобы на самых старых барах истории не только не рисовался индикатор, но даже и не пытался вычисляться (что гарантированно приведет к выходу метабара за границу истории и к ошибке).

Далее опишу алгоритм основной части индикатора в общих чертах.

В OnCalculate() организован обычный индикаторный цикл — перебор всех непосчитанных баров индикатора. Чтобы, собственно, рассчитать все значения индикатора.
Внутри этого общего цикла организован еще один цикл — для построения всех возможных метабаров, начинающихся от текущего рассчитываемого бара индикатора и расширяющихся в прошлое. Это цикл от 1 до Candle_WidthMax (входной параметр индикатора).  То есть, сначала метабар равен одному обычному ценовому бару. На каждой итерации к метабару добавляется еще один бар из ценовой истории, и так далее.

Добавление бара к метабару — это сравнение OHLC-цен бара с OHLC метабара. В результате чего метабар накапливает в себе самые крайние значения, так постепенно, шаг за шагом, вычисляя свои растущие габариты.

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

Если свеча оказывается искомой свечой Доджи, то происходит следующее:

Индикатор рисует вертикальную линию в том направлении (вверх или вниз), в котором ориентирована свеча. Высота линии равна ширине этой свечи.

Цикл расширения метабаров прерывается.

Полный код индикатора есть в приложении к статье.

Посмотрим, как работа такого индикатора выглядит в терминале.

Вот индикатор нашел свечи Доджи, состоящие из одного бара:

Рисунок 7. Индикатор сигнализирует о нахождении свечей Доджи шириной в 1 бар


Свечи Доджи на графике отстают на 1 бар от сигналов индикатора, так как индикатор анализирует только завершенные бары. Цель индикатора — показывать не сами свечи, а давать в настоящем времени сигнал, что свеча Доджи только что достроилась (и что она уже не изменится). Причем свеча в данном случае может состоять из множества баров. Ширину найденной свечи индикатор сообщает своим значением (высотой своей линии) — в данном случае это "1" для свечи, направленной вверх, и "-1" для направленной вниз.

И вот для примера свеча Доджи, состоящая из пяти баров. Ради поиска именно таких — составных — свечей и создавался этот индикатор:

Рисунок 8. Индикатор сигнализирует о нахождении свечи Доджи шириной в 5 баров


Видно, что алгоритм поиска свечей Доджи работает верно. На рисунке выше я подсветил габариты найденного метабара и уровни его OHLC-цен.

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

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

input double  Candle_HeightMin          = 0.01;   // Минимальная высота свечи (в абсолютных ценах)

И в OnCalculate фильтровать все находимые свечи по этому критерию.

Это решение идеально сработало бы, если бы свечи строились на обыкновенных одиночных барах. Но из-за использования метабаров возникает неочевидная проблема, снижающая эффективность такого решения. Один обычный бар имеет некоторую среднюю (статистически) высоту — назовем ее величиной h. Если мы ищем крупные свечи Доджи, то можно задавать в настройках индикатора Candle_HeightMin равное, например, 2*h. Но что если мы ищем крупные свечи Доджи, построенные на метабарах, которые могут иметь ширину, например, от 1 до 4 баров? Тогда метабар, состоящий из 4-х баров средней высоты, часто может иметь суммарную высоту 2*h (если сначала два бара идут друг за другом вверх, а потом еще два бара идут вниз).

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

Но и задать в настройках индикатора Candle_HeightMin равное, например, 4*h в данном случае тоже было бы неправильно, так как в нашем примере метабары могут быть и шириной в 1 бар, а для него это может оказаться слишком уж сильным порогом, индикатор пропустит хорошие свечи высотой 2*h и 3*h, которые мы хотели бы увидеть.

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

Решение этой задачки вполне простое. Нужно Candle_HeightMin задавать не в абсолютных ценах, а в относительных. То есть, это должна быть не абсолютная высота метабара, а его высота в единицу времени. Height/Width свечи.

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

Итак, вместо входного параметра Candle_HeightMin делаем немного другой:

input double  Candle_HeightPowerMin          = 0.5;   // Мощность свечи = Высота/Ширина, пунктов в минуту

Фильтр по этому критерию в коде индикатора будет выглядеть так:

if ((CandleHeight/CandleWidth/_Point) < (Candle_HeightPowerMin*PeriodSeconds()/60)) DojiExists = false;

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

Тестирование индикатора

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

На график EURUSD с таймфреймом H4 установим индикатор со следующими настройками:

Candle_WidthMin  
1
Candle_WidthMax    1

То есть, настроим индикатор на поиск только однобаровых свечей Доджи.

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

Candle_BodyPowerMax      
0.2
Candle_ShadowPowerMax   
0.2

Это довольно либеральные настройки размеров частей свечи, и в реальном применении, возможно, некоторые трейдеры захотят задать по 0.1 или совсем близко к нулю, чтобы свечи Доджи были более идеальными. Но сейчас цель тестирования в том, чтобы сравнить количество свечей, находимых разными методами (однобаровыми и с метабарами). А чтобы эта статистика имела меньшую погрешность, желательно обеспечить большие размеры выборки.

Из этих же соображений требования к высоте свечи тоже не будем ставить слишком большие. Зададим этот фильтр вообще нулевым, чтобы посмотреть все свечи Доджи, и сильные, и слабые:

Candle_HeightPowerMin   
0

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


Рисунок 9. Индикатор свечей Доджи, построенный на классических (одиночных) барах H4


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

Чтобы оценить преимущество использования метабаров, сменим теперь таймфрейм графика на H1 и соответственно поменяем входные параметры индикатора:

Candle_WidthMin  
4
Candle_WidthMax   
4

То есть, индикатор будет теперь искать свечи шириной в 4 бара H1. По ширине такой метабар эквивалентен предыдущему варианту — 1 классический бар H4. С той лишь разницей, что у классических баров строгое время начала: 0:00, 4:00, 8:00 и т.д. А у метабара получится в 4 раза больше вариантов начала: 0:00, 1:00, 2:00, 3:00, 4:00 и т.д. Ширина та же, но гораздо больше гибкость во времени. Посмотрим, к чему же это приведет на практике:


Рисунок 10. Индикатор свечей Доджи, построенных на метабарах из 4-х баров H1


На рисунке 10 тот же ценовой участок, что и на рисунке 9. Видно, как много дополнительных свечей Доджи нашел индикатор. А за два месяца в общей сложности индикатор на метабарах выявил 54 свечи Доджи.

Это в 6 раз больше чем классический метод! Преимущество нового метода очевидно.

Ну и проверим теперь вариант не только с гибким временем начала, но и с гибкой шириной метабара на H1, немного плавающей относительно классического бара на H4:

Candle_WidthMin  
3
Candle_WidthMax   
5


Рисунок 11. Индикатор свечей Доджи, построенный на метабарах шириной 3-5 баров H1


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

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

Candle_WidthMin  
180
Candle_WidthMax   
300

На первый взгляд, это эквивалентно диапазону 3-5 на H1. Но с гораздо более гибким временем начала баров — измеряемым теперь уже минутами, а не целыми часами. Однако же, отличие куда глубже — ведь теперь мы получим метабары с чрезвычайно гибкой шириной: теперь это могут быть не только целые значения H1 (3, 4, 5), а и вещественные: например, 199 M1 – это 3.32 H1 или 6.63 M30, или 39.8 M5 и т.д. Это крайне нестандартные таймфреймы по меркам классического трейдинга, на которых трейдеры никогда не строили вообще какие-либо свечи. А тут в одном индикаторе, на одном графике объединяются сотни таких таймфреймов:


Рисунок 12. Индикатор свечей Доджи, построенный на метабарах шириной 180-300 баров M1


Количество сигналов индикатора тут уже исчисляется тысячами. Образно говоря, индикатор аж «зашкаливает» — свечи Доджи обнаруживаются чуть ли не повсюду. Так как метабары в данном примере очень широкие (на два порядка(!) шире одного бара), то они сильно перекрывают друг друга. Так как индикатор сообщает ширину всех найденных свечей Доджи, то это позволяет найти их границы на ценовом графике. Для примера я обвел цветными прямоугольниками некоторые из этих метабаров.

Особо поражает то (как видно на рисунке выше), что одна и та же длинная последовательность цен в таком случае может одновременно являться и частью свечи Доджи, идущей вверх, и частью свечи, идущей вниз! Это может показаться безумием, хаосом, несовместимым с каким-либо трейдингом. Но на самом деле никакой ошибки и проблемы здесь нет. Мы ведь не ставили фильтр по высоте обнаруживаемых свечей – поэтому многие из них имеют маленькую высоту – то есть, на уровне шума ценовых колебаний рынка, и поэтому так легко меняют направление при небольшом сдвиге по времени или небольшом изменении ширины. Попробуем выйти за пределы этого шума фильтром в настройках индикатора:

Candle_HeightPowerMin   
2

Ну вот, совсем другое дело — теперь на графике остались только сильные свечи, и последовательности таких обнаруживаемых свечей теперь имеют одинаковые направленности:


Рисунок 13. Индикатор свечей Доджи на метабарах шириной 180-300 баров M1, с фильтром по высоте свечей


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


Заключение

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

  • находить их гораздо чаще, чем классические методы;

  • находить их даже на таймфреймах, где классические методы в принципе недоступны;

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

  • точно отслеживать начало и конец появления свечей, видеть динамику изменения каждой свечи за период ее жизни.

А так как приемы, описанные в данной статье, применимы не только к Доджи, это открывает простор для новой трактовки всей свечной классики.

Объективности ради стоит добавить, что в статье были рассмотрены не все нюансы. Ведь, индикатор — это еще не торговля. Практический эффект от применения метабаров в виде индикаторов может отличаться от применения в торговых стратегиях. Свечи Доджи сами по себе торговыми сигналами не являются, поэтому не стоит ожидать, что количество сделок с метабарами возрастет во столько же раз, во сколько выросли показания индикатора. Для торговли по свечам Доджи нужен дополнительный анализ, проверка дополнительных рыночных условий. Получится ли сочетать метабары с другими видами анализа (на классических барах), насколько это будет удобно? Насколько реально повысится количество сделок? Ведь мы видели на таймфрейме M1, что огромное количество подряд идущих сигналов индикатора — это по сути одна свеча. Несомненно, ее растянутость во времени и ее переменчивость дают ей много возможностей вписаться в различные рыночные ситуации, возникающие за время ее существования. Что повышает шансы дать полезный сигнал (для открытия/закрытия сделки) там, где одна классическая свеча бы не дала (дала бы не вовремя).

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

Прикрепленные файлы |
MetaDoji.mq5 (10.4 KB)
Последние комментарии | Перейти к обсуждению на форуме трейдеров (6)
Andrey Khatimlianskii
Andrey Khatimlianskii | 14 дек. 2021 в 02:14

Это не какая-то магия или лукавый трюк. Это самые настоящие свечи Доджи, основанные на реальных ценовых движениях длиной в 5, 4 и 3 часовых баров, которые не было видно на стандартном таймфрейме H4 просто потому, что там жестко задана длина бара в 4 часа и жесткое время начала этого бара. Отличие длины всего на 1 час или сдвиг границ бара на 1 час приводят к серьезной разнице в результате.

Сколько таких свечей Доджи не видят трейдеры? А ведь это огромное количество упущенных сигналов для торговли.

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

А, чтобы массы начали смотреть на эти "смещенные" паттерны, они должны стать популярными. Но не станут, потому что не будут работать (см. п1).

Такой себе замкнутый круг ;)


Но идея интересная, спасибо за статью.

Dmitry Fedoseev
Dmitry Fedoseev | 14 дек. 2021 в 04:49
Дык все известные ценовые паттерны, если их вот так собрать, превратятся в какой-нибудь известный свечной паттерн. Также и наоборот. 
Valeriy Yastremskiy
Valeriy Yastremskiy | 14 дек. 2021 в 14:52
Dmitry Fedoseev #:
Дык все известные ценовые паттерны, если их вот так собрать, превратятся в какой-нибудь известный свечной паттерн. Также и наоборот. 

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

Не знаю даже, но логика может в этом и есть, но точно не 100%

Aleksandr Masterskikh
Aleksandr Masterskikh | 16 дек. 2021 в 12:33

Интересная статья, так как автор обозначил важную проблему аналитики, а именно:

в традиционном ТА, не выявлена элементарная структура, пригодная для анализа в любой момент, которая присутствует на графике без разрывов во времени и имеет надёжные параметры. В физике - это атом, в химии - это молекула или элемент таблицы Менделеева. Кто-то скажет, а чем плоха свеча?

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

Serhii Tymchenko
Serhii Tymchenko | 23 дек. 2021 в 02:42

Возможно полезный индикатор был бы показывая какие более старшие свечи сформированы, более месяца ТФ, тут МН идет поверх дневки но прошлый месяц по нему удалось поймать четко

D1+MN

Работаем со временем (Часть 1): Основные принципы Работаем со временем (Часть 1): Основные принципы
Рассмотренные в статье функции и код помогут лучше понять принципы обработки времени, смещение времени брокера и перехода на летнее или зимнее время. Точная работа со временем — очень важный аспект трейдинга. Лондонская или нью-йоркская биржа уже открылась или еще нет? Когда начинается и заканчивается торговая сессия на форексе?
Графика в библиотеке DoEasy (Часть 90): События стандартных графических объектов. Базовый функционал Графика в библиотеке DoEasy (Часть 90): События стандартных графических объектов. Базовый функционал
В статье создадим базовый функционал для отслеживания событий стандартных графических объектов. Начнем с события двойного щелчка мыши на графическом объекте.
Графика в библиотеке DoEasy (Часть 91): События стандартных графических объектов в программе. История изменения имени объекта Графика в библиотеке DoEasy (Часть 91): События стандартных графических объектов в программе. История изменения имени объекта
В статье доработаем базовый функционал для предоставления контроля событий графических объектов из программы, работающей на основе библиотеки. Начнём создание функционала для хранения истории изменений свойств графических объектов на примере свойства "Имя объекта".
Универсальная регрессионная модель для прогнозирования рыночной цены (Часть 2): Функции природных, техногенных и общественных переходных процессов Универсальная регрессионная модель для прогнозирования рыночной цены (Часть 2): Функции природных, техногенных и общественных переходных процессов
Настоящая статья является логическим продолжением предыдущей и написана для освещения выявленных фактов подтверждения ее выводов в течении последующих десяти лет после ее выхода, по части выявленных трех функций динамических переходных процессов, описывающих закономерности изменения рыночной цены.