English Deutsch 日本語
preview
Освоение массивов премии и дисконта: Оптимизация торговли по дисбалансам в PD-массивах

Освоение массивов премии и дисконта: Оптимизация торговли по дисбалансам в PD-массивах

MetaTrader 5Трейдинг |
20 0
Eugene Mmene
Eugene Mmene

Введение

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

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

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

Будучи трейдером, я знаю, что с этой проблемой сталкивается большинство начинающих трейдеров и трейдеров среднего уровня, работающих с ICT-концепциями. На самом деле почти все трейдеры в определенный момент своей карьеры сталкиваются с похожими, если не идентичными, трудностями. Различие в том, как трейдеры справляются с этими трудностями, реагируют на них и заранее их учитывают. Поэтому их торговые результаты могут существенно различаться даже при близком уровне навыков, опыта, хладнокровия, принятия решений и торговой техники. Кроме того, в рамках других концепций та же проблема может называться иначе, например пробоем. Поэтому статья будет полезна не только трейдерам, работающим с ICT-концепциями, но и тем, кто использует другие подходы, поскольку PD-массивы и дисбалансы возникают в динамике цены независимо от применяемой торговой стратегии.

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

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


Определения — PD-массивы, дисбалансы, сдвиги рыночной структуры, фрактальная структура и OTE, оптимальная точка входа

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

1. Дисбалансы и неэффективности

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

Наиболее наглядно это можно объяснить на примере маляра: когда он красит стену, мазки должны быть одинаковыми или хотя бы схожими и наноситься в противоположных направлениях. Тогда краска ложится ровно, а поверхность получается равномерно окрашенной и качественной. Та же логика применима и к цене. Когда бычья свеча резко движется вверх и проходит ценовой уровень, например от 1,3010 до 1,3030, медвежья свеча также должна пройти этот уровень в обратном направлении, чтобы сбалансировать цену. Если этого не происходит, возникает дисбаланс. Часто, если не всегда, цена в конечном итоге возвращается к этой отметке. Это может происходить на любом таймфрейме.

Picture  showing price Imbalance

2. Сдвиги рыночной структуры

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

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

Picture showing  market structure shift

3. PD-массивы — массивы премии и дисконта

Термин "PD Arrays" расшифровывается как "premium and discount arrays", то есть массивы премии и дисконта. По сути, PD-массивы применяют простую логику для интерпретации движения цены. Это можно объяснить на примере обычной торговли: предприниматели и покупатели предпочитают приобретать товары дешево, с дисконтом, а продавать дорого, с премией. Тот же принцип применим к цене в трейдинге: трейдерам следует покупать в дисконтной зоне и продавать в премиальной. Это связано с тем, что продажа в дисконтной зоне и покупка в премиальной зоне могут приводить к убыткам.

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

Picture showing PD array on a price expansion leg

4. Фрактальная структура

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

Фрактальную структуру можно использовать для отслеживания торговых сетапов от HTF к LTF и снижения риска по сделкам при переходе на младшие таймфреймы.

5. OTE

OTE означает optimal trade entry, то есть оптимальную точку входа. По сути, это вход в сделки в оптимальных ценовых точках. Можно сказать, что OTE представляет собой усиленную версию PD-массивов: она позволяет совершать сделки в дисконтных или премиальных зонах, являющихся оптимальными точками входа в зависимости от текущего положения цены. Это весьма эффективный инструмент, который можно использовать как на старшем, так и на младшем таймфрейме. OTE может предоставлять точки входа для краткосрочных сделок, особенно после импульсного расширения и сдвига рыночной структуры. Он также помогает определить, находится ли цена в дисконтной или премиальной зоне в рамках продолжительного тренда либо после свинга на старшем таймфрейме.

Наиболее благоприятная зона для оптимальной точки входа обычно находится между 62% и примерно 70% по уровням Фибоначчи. В целом OTE можно использовать в краткосрочной торговле и на младших таймфреймах. Сетап на младшем таймфрейме используется для определения премиальных или дисконтных цен непосредственно перед началом ценового движения.

Picture showing optimal trade entry



Разбор эффективного использования PD-массивов и дисбалансов

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

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

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

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

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

Лучший способ определить рыночный сценарий, тренд и PD-массивы — использовать старшие таймфреймы, главным образом W1 и D1, и внимательно их анализировать. Первый шаг, который выполняет советник и который также можно выполнить вручную, — использование простых и экспоненциальных скользящих средних для определения того, находится ли рынок в тренде или в фазе консолидации. Трендовые рынки обычно предлагают более безопасные и качественные торговые возможности. Трендовые рынки определяются, когда простая скользящая средняя с периодом 9 находится ниже или выше скользящей средней с периодом 21, а сами средние имеют четкий восходящий или нисходящий наклон и правильно расположены относительно друг друга. Второй важный шаг — проанализировать динамику цены на этих двух старших таймфреймах и определить, в каком направлении она движется. С помощью этих шагов можно определить, является ли тренд бычьим или медвежьим.

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

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

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


Автоматизация торговых решений с помощью советника на основе PD-массивов в MQL5

Для автоматизации, наглядной демонстрации и реализации этой стратегии создано:

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

Процесс принятия решений

Решения этого советника — определение тренда, выявление PD-массивов, обнаружение дисбалансов, анализ динамики цены и совершение сделок — основываются на следующей логике:

Исходный код советника на основе PD-массивов

Этот советник выявляет потенциальные торговые сигналы, соответствующие общему направлению тренда и рыночному сценарию, и ожидает появления торговых сетапов только на основе дисбалансов в соответствующих PD-массивах. Выбор PD-массива зависит от текущего положения цены относительно прошлых расширений и движений; позиции против тренда или без корректного PD-массива не открываются. Он также использует экспоненциальные и простые скользящие средние для определения общего направления тренда перед входом в сделки и применяет логику трейлинг-стопа для определения уровней стоп-лосса и защиты капитала, когда цена движется в благоприятном направлении. В нем предусмотрено управление рисками — риск 1% на сделку.

Входные параметры — регулируемые настройки торговли

Эти объявления input задают настраиваемые переменные в окне свойств советника MetaTrader, позволяя адаптировать стратегию к меняющейся динамике золота без изменения кода. Значение LotSize = 0.01 по умолчанию соответствует микролоту, что на стандартных счетах XM составляет примерно $0,10 за пункт и подходит для осторожного скальпинга на сильных движениях золота. Однако существуют типы счетов с другими размерами контрактов, например микросчета, где 0.01 соответствует одному микролоту. Чтобы избежать заниженного или завышенного размера позиции, параметры следует отдельно проверять через SymbolInfoDouble().

Значение RR = 1.3 задает умеренное соотношение риска и вознаграждения, ориентированное на частые небольшие прибыльные сделки и повышение уверенности трейдера. Такой подход учитывает склонность золота к просадкам, при которой чрезмерно амбициозные значения RR, например 3:1, часто приводят к срабатыванию SL на фоне пилообразных колебаний. Параметр "MaxTradesPerDay = 3" поддерживает дисциплину, предотвращая торговлю "из мести" после убытков — распространенную психологическую ловушку в условиях эмоциональной волатильности золота. Переключатели направлений, такие как TradeLong=true и TradeShort=false, отражают предпочтения, выявленные при тестировании на исторических данных. Психология золота как защитного актива часто предполагает более сильные развороты после снятия ликвидности под минимумами, то есть ловушки для продавцов в нижней части диапазона. Поэтому короткие позиции по умолчанию отключены, чтобы избежать контртрендовой торговли при восходящем движении.

Параметр MinBodyPercent=0.6 требует уверенного направленного движения: тело свечи должно составлять не менее 60% диапазона. Он отфильтровывает психологические ложные паттерны, например пин-бары без продолжения. Крайний случай: гэпы выходного дня, формирующие чрезмерно крупные свечи, которые могут активировать сигнал при отсутствии фильтрации по сессиям. Параметр MinRangePoints=0.0 отключает фильтр минимального диапазона. При включении, например со значением 10, он отфильтровывает слишком мелкие движения во время азиатской сессии и концентрируется на свечах с сильным импульсным смещением, указывающих на институциональное намерение, а не на шум розничных трейдеров.

В параметрах сессий жестко заданы временные интервалы GMT+2: Азия (0-7) — для формирования диапазона в условиях консолидации при низком объеме, то есть психологической фазы накопления; Лондон (9-12) — для всплесков ликвидности на открытии европейской сессии; Нью-Йорк (15-18) — для моментума, задаваемого рынком США. С точки зрения психологии здесь используются переходы между торговыми сессиями, когда позиции, открытые в течение ночи, оказываются в диапазонах азиатской сессии, а затем закрываются при притоке свежего капитала — в результате классической манипуляции "умных денег". Крайние случаи: переходы на летнее или зимнее время, изменяющие часы сессий и требующие ручной корректировки, а также расхождение времени брокера, приводящее к сделкам вне сессии. Такая настраиваемость помогает трейдерам адаптировать советник как индивидуальный инструмент защиты от рыночных манипуляций.

//+-----------------------------------------------------------------------------------------+
//| PD Arrays Detector EA.mq5 – XM GMT+2                                                    |
//| Expert Advisor for MetaTrader 5                                                         |  
//| Description: Trades based on PD Arrays and imbalances  utilizing                        |
//| premium and discount arrays.                                                            |
//+-----------------------------------------------------------------------------------------+
#property copyright "EUGENE MMENE"
#property link "HTTPS://WWW.EMCAPITAL.COM"
#property version "7.11"  
#include <Trade/Trade.mqh>
CTrade trade;
//+--------------------------------------------------------------------------------+
//| Inputs                                                                         |
//+--------------------------------------------------------------------------------+
input double LotSize = 0.01;
input double RR = 1.3;
input int MaxTradesPerDay = 3;
input bool TradeLong  = true;      //--- Enable long trades (SweepLow)
input bool TradeShort = false;     //--- Enable short trades (SweepHigh) - disabled by default for better performance
input double MinBodyPercent = 0.6; //--- Minimum body percent for strong displacement
input double MinRangePoints = 0.0; //--- Minimum candle range in points to filter small ranges (0 to disable)

//--- XM GMT+2 sessions
input int AsiaStart = 0;
input int AsiaEnd = 7;
input int LondonStart = 9;
input int LondonEnd = 12;
input int NYStart = 15;
input int NYEnd = 18;

Глобальные переменные, сохраняющие состояние

Эти глобальные переменные сохраняют состояние советника между тиками, что важно для отслеживания сессионной динамики золота без нагрузки на базу данных. Переменные asiaHigh=0 и asiaLow=0 инициализируются нулевыми значениями, а затем обновляются экстремумами азиатской сессии. Они представляют психологические уровни поддержки и сопротивления, вблизи которых в тихие часы концентрируются стоп-ордера розничных трейдеров и которые могут стать целями институциональных выносов ликвидности. Крайний случай: азиатская сессия без движения, в которой high=low – без обработки она может блокировать сделки. Здесь флаг ready устанавливается только при значениях >0, поэтому недопустимые диапазоны пропускаются.

Флаг asiaRangeReady=false блокирует торговлю до окончания азиатской сессии, чтобы выносы ликвидности оценивались в контексте уже сформированных пулов ликвидности. Переменные tradesToday=0 и currentDay=0 управляют ежедневным сбросом. С точки зрения психологии лимиты сдерживают чрезмерную самоуверенность после прибыльных сделок и предотвращают крупные потери на серийных движениях золота. Крайние случаи: скачки серверного времени, например при перезапуске VPS, из-за которых может быть пропущена смена дня. Надежность TimeCurrent() частично смягчает эту проблему.

Массив Price[] содержит последние записи MqlRates — OHLC, время и объем — и настроен как временной ряд для удобной индексации. С психологической точки зрения это позволяет точно выявлять выносы ликвидности, фиксируя "срежиссированные" движения: тени свечей проверяют границы диапазонов, вызывают FOMO, а затем цена разворачивается, используя стадное поведение участников. Минимальное число глобальных переменных повышает скорость, что важно при интенсивном потоке тиков по золоту. Крайние случаи: переполнение массива при длинной истории, здесь ограниченной пятью барами, или пробелы в данных из-за обрывов соединения; эти ситуации обрабатываются проверками CopyRates.

double asiaHigh       =0.0; 
double asiaLow        =0.0;
bool   asiaRangeReady =false;
int    tradesToday    =0;
int    currentDay     =0;
MqlRates           Price[];

OnInit — однократная процедура запуска советника

Эта функция вызывается при добавлении советника на график или перекомпиляции и инициализирует базовые настройки скальпинга на золоте. Команда ArraySetAsSeries(Price,true); переводит массив в режим временного ряда: индекс 0 соответствует текущему бару. Это стандартный подход, знакомый трейдерам еще со времен MQL4, упрощающий анализ баров и согласующий порядок данных с интуицией трейдера (последние данные идут первыми). Крайние случаи: ошибка при применении к переменным, не являющимся массивами, или миграция на MQL5, при которой для восходящего порядка может потребоваться значение false в ArraySetAsSeries.

Возврат INIT_SUCCEEDED означает готовность. С точки зрения психологии быстрый запуск укрепляет доверие и помогает избежать задержек на волатильном рынке золота. Здесь все сведено к минимуму, чтобы сосредоточить ресурсы на выполнении программы. Однако отсутствие проверки входных параметров означает, что пользователи должны сами убедиться, что symbol=XAUUSD и выбранный таймфрейм, например M5-M15 для скальпинга, подходят для используемой стратегии.

//+-------------------------------------------------------------------------------+
//| Expert Initialization function                                                |
//+-------------------------------------------------------------------------------+
int OnInit()
 {
  ArraySetAsSeries(Price,true);
  return(INIT_SUCCEEDED);
 }

OnTick — основной логический цикл, выполняемый на каждом ценовом тике

OnTick срабатывает на каждом тике, но обработка ограничивается условием if(!IsNewBar()) return;, переводящим логику на работу по барам. Это повышает эффективность при тысячах тиков в минуту по золоту. С психологической точки зрения это имитирует дискреционную торговлю: действия совершаются по закрытым свечам, чтобы избежать иллюзий в формирующихся барах. Шаги: получить структуру времени для доступа к .day и .hour; при необходимости выполнить ежедневный сброс; скопировать пять баров. Крайний случай: при наличии менее пяти баров на новых графиках шаг пропускается, после чего система самостоятельно корректируется.

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

//+----------------------------------------------------------------------------------------+
//| OnTick                                                                                 |
//+----------------------------------------------------------------------------------------+
void OnTick()
  {
   if(!IsNewBar()) 
     return;

   MqlDateTime t;
   TimeToStruct(TimeCurrent(),t);
   ResetDaily(t);

   if(CopyRates(_Symbol,_Period,0,5,Price)<5)
      return;

   BuildAsiaRange(t);
        
   if(!asiaRangeReady)
      return;

   if(!InTradingSession(t))
      return;

   if(PositionSelect(_Symbol)) 
      return;
                
   if(tradesToday >= MaxTradesPerDay) 
      return;

   CheckForSweepEntry();
  }

ResetDaily — инициализация нового торгового дня

Сравнивает t.day с сохраненным значением; если начинается новый день, сбрасывает все данные. С психологической точки зрения каждый день рассматривается как отдельный, что противодействует эффекту недавности в бестрендовых ночных сессиях по золоту. Крайние случаи: переходы между месяцами и годами, обрабатываемые через .day, а также дрейф времени на VPS, при котором используется сервер брокера. Обеспечивает обновленный контекст: новый азиатский диапазон для дневного сценария ликвидности.

//+----------------------------------------------------------------------------------+
//| Reset daily values when the day changes                                          |
//+----------------------------------------------------------------------------------+
void ResetDaily(MqlDateTime &t)
  {
    if(t.day != currentDay)
      {
        currentDay  = t.day;
        tradesToday = 0.0;
        asiaHigh    = 0.0;
        asiaLow     = 0.0;
        asiaRangeReady = false;
      }
  }

BuildAsiaRange — построение опорной зоны ликвидности

В азиатские часы экстремумы обновляются по закрытому бару Price[1], накапливая максимумы и минимумы сессии. С психологической точки зрения это спокойный период, в котором диапазоны формируют "ловушки" для последующих выносов ликвидности. После азиатской сессии, если диапазон задан, устанавливается флаг готовности. Крайние случаи: отсутствие обновлений при рынке без движения, когда ready=false; гэпы, пропускающие бары, при которых используются доступные данные. С психологической точки зрения это фиксирует состояние консолидации, которое затем можно использовать в течение активных сессий.

void BuildAsiaRange(MqlDateTime & t)
{
   if(t.hour >= AsiaStart && t.hour <= AsiaEnd)
   {
      if(asiaHigh == 0 || Price[1].high > asiaHigh)
         asiaHigh = Price[1].high;
      if(asiaLow == 0 || Price[1].low < asiaLow)
         asiaLow = Price[1].low;
   }
   if(t.hour > AsiaEnd && asiaHigh > 0 && asiaLow > 0)
      asiaRangeReady = true;
}

InTradingSession — фильтр временного интервала

Проверяет часы Лондона и Нью-Йорка, разрешая торговлю только в периоды высокой ликвидности. Психологическое обоснование: выносы ликвидности наиболее вероятны при высоком объеме; азиатская сессия исключается из-за бокового рынка с низкой активностью. Крайние случаи: при hour=8 наступает переходный период и функция возвращает false; DST требует ручной корректировки. Это соответствует институциональной психологии: потоки капитала провоцируют развороты.

bool InTradingSession(MqlDateTime & t)
{
   if((t.hour >= LondonStart && t.hour <= LondonEnd) ||
      (t.hour >= NYStart && t.hour <= NYEnd))
      return (true);
   return (false);
}

CheckForSweepEntry — выявление основного сигнала и исполнение ордера

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

Короткая позиция: тень свечи и ее максимум выходят выше максимума азиатской сессии, однако закрытие остается ниже этого максимума. С психологической точки зрения ложный пробой заманивает быков в ловушку, после чего институциональные участники разворачивают цену. Вход выполняется на середине импульсного движения: с психологической точки зрения откат на 50% позволяет войти при угасании движения. SL устанавливается на максимуме, за зоной ликвидности, а TP рассчитывается по RR. Крайний случай: close=high, то есть тени нет, поэтому сигнал пропускается. Отключенный TradeShort позволяет избежать смещения.

Длинная позиция: применяется зеркальная логика; с психологической точки зрения это ловушка для медведей на снижении с последующим бычьим восстановлением. Оператор return после сигнала на продажу предотвращает редкие двойные сигналы. В целом стратегия использует психологию выносов ликвидности: "инжиниринг ликвидности", при котором проверка экстремумов провоцирует входы в неверном направлении с последующим разворотом цены, является характерным для рынка золота паттерном манипуляций. Крайний случай: гэпы, например на новостях, могут создавать некорректные закрытия, но логика на основе баров смягчает эту проблему. Масштабирование по RR обеспечивает асимметричное вознаграждение при возврате к среднему.

//+-----------------------------------------------------------------------------------------------+
//| Checks conditions for liquidity sweep entries                                                 |
//+-----------------------------------------------------------------------------------------------+
void CheckForSweepEntry()
{
   double body = MathAbs(Price[1].close - Price[1].open);
   double range = Price[1].high - Price[1].low;
   if(range == 0 || (MinRangePoints > 0 && range < MinRangePoints * _Point)) return;
   double bodyPercent = body / range;
   if(bodyPercent < MinBodyPercent) return;

   //---Bearish Liquidity Sweep (Short Setup)                                               |
   
   if(Price[1].high > asiaHigh && Price[1].close < asiaHigh && TradeShort)
   {
      double entry = (Price[1].high + Price[1].low)/2.0;
      double sl = Price[1].high;
      double risk = sl - entry;
      double tp = entry - (risk * RR);

      if(trade.Sell(LotSize,_Symbol,entry,sl,tp,"SweepShort"))
      {
         tradesToday++;
         return; //--- avoid checking long on same bar
      }
   }
   
   //--- Bullish Liquidity Sweep (Long Setup)                                               |
   
   if(Price[1].low < asiaLow && Price[1].close > asiaLow && TradeLong)
   {
      double entry = (Price[1].high + Price[1].low)/2.0;
      double sl = Price[1].low;
      double risk = entry - sl;
      double tp = entry + (risk * RR);

      if(trade.Buy(LotSize,_Symbol,entry,sl,tp,"SweepLong"))
         tradesToday++;
   }
}

IsNewBar — детектор появления новой свечи

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

bool IsNewBar()
  {
    static datetime lastBar=0;

    MqlRates tmp[];
    ArraySetAsSeries(tmp,true);

    if(CopyRates(_Symbol,_Period,0,1,tmp)!= 1)
     return (false);
   
    if(tmp[0].time != lastBar)
   {
    lastBar = tmp[0].time;
      return (true);
   }
     return (false);
  }


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

Тестирование стратегии на советнике с PD-массивами

Эта стратегия лучше всего подходит прежде всего для золота благодаря своей основной логике, способности быстро адаптироваться к резким движениям и свингам золота, трендовой торговле и следованию рыночному сценарию. В стратегии используются концепции дисбалансов и PD-массивов для формирования торговых сетапов и работы в условиях высокой волатильности. Эти концепции полезны и важны для большинства торговых стратегий. Мы протестируем эту стратегию на инструменте GOLD на 60-минутном таймфрейме H1 за период с 1 января 2025 года по 15 февраля 2026 года. Ниже приведены параметры, выбранные для этой стратегии.

GOLD

Input settings


Input settings


Результаты Тестера стратегий

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

Результаты Тестера стратегий для советника с PD-массивами

График баланса/эквити

GOLD

График результатов Тестера стратегий


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

GOLD

Результаты стратегии


Итоги

Я написал эту статью, чтобы объяснить работу советника MetaTrader 5, специально адаптированного для трендовой торговли, поиска, определения и оценки PD-массивов и дисбалансов перед использованием и оптимизацией торговых сетапов. Советник также включает методы управления сделками и рисками, позволяющие системно снижать риск, экспозицию и влияние человеческих ошибок при выявлении и исполнении сетапов с высокой вероятностью успеха по GOLD. С помощью того же протокола управления сделками и рисками определяются возможные точки выхода.

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

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

Чтобы реализовать эту стратегию советника, настройте его входные параметры, как показано ниже, и оцените полученные результаты. Советник предназначен для поиска PD-массивов, дисбалансов и возможных точек входа на выбранном трейдером таймфрейме — от M15 до D1. Он обеспечивает согласованность потенциальных точек входа с трендом, скользящими средними и средним истинным диапазоном ATR, используемым для трейлинг-стопа. Заинтересованным трейдерам рекомендуется протестировать этот советник на исторических данных по GOLD на демо-счете. Он разработан прежде всего для GOLD, но также может применяться к GBPUSD, EURUSD и GBPJPY.

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

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


Заключение

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

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

Автоматизированный советник на MQL5 обеспечивает:

  • сделки с высокой вероятностью успеха по сетапам, возникающим из дисбалансов в текущих PD-массивах торгуемого актива;
  • защиту от новостной волатильности путем блокировки сделок вблизи публикаций новостей;
  • открытие сделок только по подтвержденным сигналам и проверенной логике входа с динамическими уровнями SL и TP;
  • адаптивное управление рисками — уменьшение размера лота во время серии убыточных сделок и увеличение во время серии прибыльных сделок;
  • логирование результатов для ведения учета и постоянной оптимизации стратегии;
  • строгое соблюдение принципа — сначала определить текущий рыночный сценарий и положение цены в PD-массиве, а затем искать дисбалансы;
  • исключение эмоциональных решений, импульсивной торговли и рискованных торговых практик;
  • автоматизированное управление сделками — SL, TP и частичные закрытия.

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

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

Имя файла Описание
PD Arrays EA.mq5 Файл, содержащий полный исходный код советника на основе PD-массивов.

Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/21246

Прикрепленные файлы |
pd_arrays.mq5 (4.26 KB)
Единый пайплайн валидации для защиты от переобучения бэктеста Единый пайплайн валидации для защиты от переобучения бэктеста
В статье объясняется, почему стандартный метод пошагового тестирования (walk-forward) и k-блочная кросс-валидация завышают результаты на финансовых данных, а затем показано, как это исправить. Валидация внутри валидации (V-in-V) обеспечивает строгое разбиение данных и пошаговое тестирование с фиксированным началом (anchored) между окнами. Комбинаторно очищенная кросс-валидация (CPCV) устраняет утечки данных с помощью очистки и эмбарго, одновременно агрегируя результативность на уровне траекторий бэктеста. Комбинаторно симметричная кросс-валидация (CSCV) измеряет вероятность переобучения бэктеста (PBO). Практикующие специалисты получают целостную систему для оценки устойчивости к рыночным режимам и надежности отбора кандидатов.
Использование Экономического календаря MQL5 для фильтрации новостей (Часть 2): Временное удаление и восстановление стоп-уровней во время выхода новостей Использование Экономического календаря MQL5 для фильтрации новостей (Часть 2): Временное удаление и восстановление стоп-уровней во время выхода новостей
Во второй части новостной фильтр расширяется для защиты открытых позиций во время новостных событий. Вместо закрытия сделок уровни стоп-лосса и тейк-профита временно снимаются и надежно сохраняются в памяти. После окончания новостного окна стоп-уровни восстанавливаются детерминированно и при необходимости корректируются, если цена уже пересекла исходные уровни. При этом соблюдаются правила брокера о минимальной дистанции. В результате получается механизм, который сохраняет исходную логику и структуру сделки, не вмешиваясь в логику открытия сделок, и оставляет управление за советником даже в период волатильности.
Разработка научно обоснованного сеточного советника в MQL5: Почему большинство сеточных советников терпят неудачу и что доказал Таранто Разработка научно обоснованного сеточного советника в MQL5: Почему большинство сеточных советников терпят неудачу и что доказал Таранто
В этой статье реализуется сеточный советник, адаптирующийся к режиму рынка и основанный на докторском исследовании Альдо Таранто. Представлен сеточный советник, адаптирующийся к режиму рынка и ограничивающий риск с помощью перезапускаемых циклов и защитных механизмов на основе эквити. Мы объясняем, почему наивные сетки терпят неудачу (из-за роста дисперсии и почти верного разорения), выводим выводим формулу убытка для расчета текущей экспозиции и реализуем фильтрацию запуска с учетом режима рынка, динамический шаг сетки на основе ATR и аварийный выключатель, работающий в реальном времени. Читатели получат математические инструменты и пригодные для рабочей эксплуатации подходы, необходимые для безопасной разработки, тестирования и эксплуатации сеточной стратегии с ограничениями.
Свинговые экстремумы и откаты в MQL5 (Часть 2): Автоматизация стратегии с помощью советника Свинговые экстремумы и откаты в MQL5 (Часть 2): Автоматизация стратегии с помощью советника
Индикатор свинговых экстремумов и откатов (Swing Extremes and Pullbacks) основан на рыночной структуре младшего таймфрейма и затем согласовывается со старшим таймфреймом. Он выявляет свинговые экстремумы, в которых цена становится статистически уязвимой к развороту. Он визуализирует зоны перерастяжения и отката, позволяя заранее оценить поведение цены при возврате к среднему.