English Deutsch 日本語
preview
Оптимизация долгосрочных сделок: Свечи поглощения и стратегии работы с ликвидностью

Оптимизация долгосрочных сделок: Свечи поглощения и стратегии работы с ликвидностью

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

Введение

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

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

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

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

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

Красная линия MN показывает места входа в сделку для выноса ликвидности и последующей покупки.


Разбор торговли на старших таймфреймах

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

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

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

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

Места входа в сделку W1 для выноса ликвидности и последующей продажи


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

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

Можно считать это самой очевидной возможностью, поскольку это ближайшая зона реакции на основе таймфрейма графика (MN). Еще один интересный момент — разрывы справедливой стоимости (fair value gaps, FVG), поскольку их можно использовать в качестве зон фиксации прибыли, и наконец, ключевыми областями также являются относительно равные максимумы и минимумы, которые отображаются на графике.

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

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

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

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

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

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

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

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

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

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

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

красная линия показывает вынос ликвидности D1 для сделок на покупку


Направление, тренды и сценарии на более высоких таймфреймах

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

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

В качестве последнего варианта можно использовать дневные (D1) графики после пробития недавних минимумов/максимумов или максимумов/минимумов предыдущих дней и формирования свечей поглощения от этих минимумов либо на 4-часовом (H4), либо на дневном (D1) таймфрейме; это просто указывало бы на потенциальный бычий тренд дня, и при торговле на младших таймфреймах следует учитывать это. И завершающий ценный совет, который я приберег напоследок: для достижения оптимальных результатов и успеха трейдеру следует отдавать приоритет совершению сделок, когда оба или все три таймфрейма совпадают и характеризуются одинаковыми направленностью, сценарием и трендом. Когда таймфреймы W1, D1 и MN говорят на одном языке, это одни из самых простых торговых дней — очень быстрые, с минимальными просадками или коррекциями. 

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

красная линия показывает вынос ликвидности


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

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

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

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

Решения этого советника (определение ликвидности, определение свечи поглощения и исполнение сделок) основаны на следующей логике:

Исходный код советника HTF Engulfing King

Этот советник обнаруживает долгосрочные торговые сигналы на графиках более высоких таймфреймов D1, MN и W1 и ожидает появления свечей поглощения сразу после выноса ликвидности, интерпретируя их как точки входа в сделку. Кроме того, он использует простую скользящую среднюю для определения общего направления тренда и совершения сделок, а также применяет логику скользящего стоп-лосса для определения уровней стоп-лосса и защиты капитала при движении цены в его пользу. Он включает в себя и управление рисками (риск в размере 1% на сделку). 

Входные параметры: Настраиваемые параметры торговли

Входные параметры позволяют пользователям настраивать поведение советника для торговли валютными парами GBPJPY, GBPUSD и EURUSD без изменения основного кода. Параметр LotSize установлен на 0.1, что является консервативным значением, которое позволяет валютным парам с британским фунтом стерлингов ограничить риски при умеренной волатильности (100–300 пунктов в день). Параметр LookbackBars (3) задает окно для определения недавних максимумов/минимумов на таймфреймах H1/H4/D1, обеспечивая баланс между быстротой реакции и надежностью. Значения StopLossPips (150) и TakeProfitPips (600) скорректированы для GBPJPY и типичных диапазонов GBPUSD/EURUSD с целевым соотношением риска к прибыли 1:4 для извлечения выгоды из сильных трендов после выноса ликвидности. Параметр TrailingStopPips (100) гарантирует фиксацию прибыли во время резких колебаний GBPJPY. Параметр EngulfingMinBodyRatio (0.3) отфильтровывает слабые сигналы, гарантируя тем самым, что тело свечи поглощения будет значимым по сравнению с предыдущей свечой.

Параметры TradeTimeframe (H1) и ConfirmationTimeframe (M15) обеспечивают гибкое обнаружение выноса ликвидности и более быстрое подтверждение входа соответственно. Параметр MaxCandlesPostPurge (3) ограничивает окно для поглощения сигналов после выноса ликвидности, избегая поздних входов. Параметр VolumeThreshold (1.0) требует резкого скачка объема для подтверждения ликвидности, что критически важно для движения GBPUSD под влиянием новостей. Параметры UseTrendFilter (true) и SMAPeriod (50) позволяют использовать 50-периодную скользящую среднюю, чтобы гарантировать соответствие сделок более общему тренду, уменьшая количество ложных прорывов на нестабильных рынках GBP.

//+------------------------------------------------------------------+
//|                              FlexibleMultiTFEngulfingEA.mq5      |
//|                        Expert Advisor for MetaTrader 5           |
//| Description: Trades based on H1/H4/D1 highs/lows purges, waits   |
//| for engulfing candles on H1 or M15, with flexible execution.     |
//+------------------------------------------------------------------+
#property copyright "Eugene Mmene"
#property link      "https://EMcapital.com"
#property version   "1.06"

//--- Input Parameters
input double LotSize = 0.1;           // Lot size for trades
input int LookbackBars = 3;           // Number of bars to check for highs/lows
input double StopLossPips = 150.0;    // Stop loss in pips (adjusted for GBPUSD/GBPJPY)
input double TakeProfitPips = 600.0;  // Take profit in pips (adjusted for GBPUSD/GBPJPY)
input double TrailingStopPips = 100.0;// Trailing stop in pips
input double EngulfingMinBodyRatio = 0.3; // Min body ratio for engulfing candle
input ENUM_TIMEFRAMES TradeTimeframe = PERIOD_H1; // Primary timeframe for trading
input ENUM_TIMEFRAMES ConfirmationTimeframe = PERIOD_M15; // Lower timeframe for engulfing
input int MaxCandlesPostPurge = 3;    // Max H1 candles to wait for engulfing
input double VolumeThreshold = 1.0;   // Volume multiplier for liquidity confirmation
input bool UseTrendFilter = true;     // Use SMA trend filter
input int SMAPeriod = 50;             // SMA period for trend filter

Функция OnInit: Настройка и проверка для надежной торговли

Функция OnInit выполняется один раз при загрузке советника на график, обеспечивая правильную конфигурацию для торговли парами GBPUSD, GBPJPY и EURUSD. Она проверяет параметры TradeTimeframe (H1, H4 или D1) и ConfirmationTimeframe (M15 или M30), чтобы обеспечить совместимость со стратегией, где применяется несколько временных интервалов, и отклоняет недопустимые входные данные во избежание ошибок. Функция извлекает размер контракта по символу с помощью `SymbolInfoDouble`, что крайне важно для точного определения размера позиции в парах с GBP, где значения пунктов различаются (например, значение пункта для GBPJPY меньше из-за масштаба JPY).

Глобальные переменные, отслеживающие максимумы/минимумы (lastHighH1, lastLowH1 и т. д.), время формирования свечей и статус сделки, инициализируются нулем или значением false, что сбрасывает состояние советника. Проверка размера контракта обеспечивает советнику возможность правильно рассчитать размеры лотов, что особенно важно для пары GBPJPY, у которой высока чувствительность к стоимости пункта. Успешная инициализация регистрирует таймфрейм и размер контракта, подтверждая готовность к торговле. Такая конфигурация гарантирует надежность советника и его соответствие конкретной рыночной динамике пары EURUSD/GBPUSD/GBPJPY, в отличие от более широких колебаний цен на золото.

int OnInit()
{
   if(TradeTimeframe != PE    RIOD_H1 && TradeTimeframe != PERIOD_H4 && TradeTimeframe != PERIOD_D1)
   {
      Print("Invalid trade timeframe. Use H1, H4, or D1.");
      return(INIT_PARAMETERS_INCORRECT);
   }
   if(ConfirmationTimeframe != PERIOD_M15 && ConfirmationTimeframe != PERIOD_M30)
   {
      Print("Invalid confirmation timeframe. Use M15 or M30.");
      return(INIT_PARAMETERS_INCORRECT);
   }
   
   contractSize = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_CONTRACT_SIZE);
   if(contractSize == 0)
   {
      Print("Failed to get contract size for ", _Symbol);
      return(INIT_PARAMETERS_INCORRECT);
   }
   
   lastHighH1 = 0; lastLowH1 = 0;
   lastHighH4 = 0; lastLowH4 = 0;
   lastHighD1 = 0; lastLowD1 = 0;
   lastCandleTime = 0;
   tradePlaced = false;
   purgeDetected = false;
   lastPurgeTime = 0;
   
   Print("EA Initialized on ", EnumToString(TradeTimeframe), ", Confirmation TF: ", EnumToString(ConfirmationTimeframe), ", Contract Size: ", contractSize);
   return(INIT_SUCCEEDED);
}

Функция IsNewCandle: Логика запуска при появлении нового бара  

Функция IsNewCandle проверяет, сформировалась ли новая свеча на основном торговом таймфрейме (по умолчанию H1), сравнивая метку времени текущей свечи (iTime) с временем последней зарегистрированной свечи (lastCandleTime). При обнаружении новой свечи обновляется значение lastCandleTime, и функция возвращает true, запуская основную логику торговли в OnTick. Это гарантирует, что советник оценивает торговые условия только один раз для каждой свечи H1, снижая накладные расходы на обработку и предотвращая избыточные проверки во время волатильных внутрибаровых движений пары GBPUSD/GBPJPY. Сконцентрировавшись на новых барах, советник согласуется со стратегией, основанной на использовании полных данных свечей для выявления выноса ликвидности и моделей поглощения, что имеет решающее значение при фиксации значительных ценовых движений на трендовых рынках валютных пар, включающих фунт стерлингов. Эта функция проста, но крайне важна для поддержания эффективности и точности работы советника.

bool IsNewCandle()
{
   datetime currentCandleTime = iTime(_Symbol, TradeTimeframe, 0);
   if(currentCandleTime != lastCandleTime)
   {
      lastCandleTime = currentCandleTime;
      return true;
   }
   return false;
}

Функция UpdateHighsLows: Мониторинг уровней выноса ликвидности

Функция UpdateHighsLows отслеживает самые высокие максимумы и самые низкие минимумы за последние LookbackBars баров (по умолчанию 3) на таймфреймах H1, H4 и D1, сохраняя их в глобальных переменных (lastHighH1, lastLowH1 и т. д.). Для получения исторических данных о ценах используется функция CopyRates, а параметр ArraySetAsSeries гарантирует, что самая последняя свеча находится в индексе 0. Для каждого таймфрейма она инициализирует значение максимума/минимума значениями первой свечи, а затем обновляется путем итерации по периоду ретроспективного анализа, фиксируя крайние ценовые точки.

Эта функция имеет решающее значение для обнаружения выноса ликвидности — когда текущая свеча на H1 пробивает предыдущий максимум или минимум на любом таймфрейме, сигнализируя о потенциальном развороте или продолжении тренда в EURUSD, GBPUSD/GBPJPY. Подход с использованием нескольких таймфреймов гарантирует, что советник улавливает значительные колебания ликвидности, вызванные, например, срабатываниями стоп-лоссов во время неустойчивых движений GBPJPY. Обработка ошибок регистрирует сбои при загрузке данных, обеспечивая надежность работы системы. Эта функция закладывает основу для логики входа в рамках основанной на выносе ликвидности стратегии, адаптированной к чувствительности валютных пар, содержащих GBP, к ключевым уровням поддержки/сопротивления.

void UpdateHighsLows()
{
   // H1
   MqlRates ratesH1[];
   ArraySetAsSeries(ratesH1, true);
   if(CopyRates(_Symbol, PERIOD_H1, 1, LookbackBars, ratesH1) >= LookbackBars)
   {
      lastHighH1 = ratesH1[0].high;
      lastLowH1 = ratesH1[0].low;
      for(int i = 1; i < LookbackBars; i++)
      {
         if(ratesH1[i].high > lastHighH1) lastHighH1 = ratesH1[i].high;
         if(ratesH1[i].low < lastLowH1) lastLowH1 = ratesH1[i].low;
      }
   }
   else Print("Failed to load H1 rates");
   
   // H4
   MqlRates ratesH4[];
   ArraySetAsSeries(ratesH4, true);
   if(CopyRates(_Symbol, PERIOD_H4, 1, LookbackBars, ratesH4) >= LookbackBars)
   {
      lastHighH4 = ratesH4[0].high;
      lastLowH4 = ratesH4[0].low;
      for(int i = 1; i < LookbackBars; i++)
      {
         if(ratesH4[i].high > lastHighH4) lastHighH4 = ratesH4[i].high;
         if(ratesH4[i].low < lastLowH4) lastLowH4 = ratesH4[i].low;
      }
   }
   else Print("Failed to load H4 rates");
   
   // D1
   MqlRates ratesD1[];
   ArraySetAsSeries(ratesD1, true);
   if(CopyRates(_Symbol, PERIOD_D1, 1, LookbackBars, ratesD1) >= LookbackBars)
   {
      lastHighD1 = ratesD1[0].high;
      lastLowD1 = ratesD1[0].low;
      for(int i = 1; i < LookbackBars; i++)
      {
         if(ratesD1[i].high > lastHighD1) lastHighD1 = ratesD1[i].high;
         if(ratesD1[i].low < lastLowD1) lastLowD1 = ratesD1[i].low;
      }
   }
   else Print("Failed to load D1 rates");
}

Функция IsVolumeSpike: Проверка ликвидности сделки

Функция IsVolumeSpike подтверждает торговые сетапы, проверяя, превышает ли объем тиков текущей свечи средний объем за LookbackBars баров (3) на коэффициент VolumeThreshold (1.0). Она использует функцию CopyRates для получения последних свечей на торговом таймфрейме (H1), вычисляя средний объем действительных баров (тех, у которых объем > 1, чтобы избежать проблем с данными). Если действительных баров нет, она пропускает проверку, чтобы предотвратить зависание, и в журнал записывается предупреждение для отладки. Для пар EURUSD, GBPUSD и GBPJPY большой объем торгов часто сопровождает значительные ценовые движения, такие как прорывы после новостей или массовые изъятия ликвидности, что делает этот фильтр крайне важным для подтверждения выноса ликвидности. Для обеспечения прозрачности функция регистрирует текущий и средний объемы. Благодаря подтверждению объема, советник избегает сетапов с низкой ликвидностью, которые приводят к ложным сигналам в парах с британским фунтом стерлингов, повышая качество торговли и прибыльность на трендовых рынках, таких как GBPJPY.

bool IsVolumeSpike(long currentVolume)
{
   double avgVolume = 0;
   MqlRates rates[];
   ArraySetAsSeries(rates, true);
   if(CopyRates(_Symbol, TradeTimeframe, 1, LookbackBars, rates) < LookbackBars)
   {
      Print("Failed to load rates for volume check");
      return true;
   }
   
   int validBars = 0;
   for(int i = 0; i < LookbackBars; i++)
   {
      if(rates[i].tick_volume > 1)
      {
         avgVolume += rates[i].tick_volume;
         validBars++;
      }
   }
   if(validBars == 0)
   {
      Print("Warning: No valid volume data. Average volume is 0. Bypassing volume check.");
      return true;
   }
   avgVolume /= validBars;
   
   Print("Current volume: ", currentVolume, ", Average volume: ", avgVolume, ", Valid bars: ", validBars);
   return currentVolume >= VolumeThreshold * avgVolume;
}

Функция IsBullishTrend: Обеспечение соответствия тренду

Функция IsBullishTrend использует 50-периодную простую скользящую среднюю (SMA) на торговом таймфрейме (H1) для определения направления тренда рынка. Она создает хэндл SMA с помощью функции iMA, получает последнее значение SMA с помощью функции CopyBuffer и сравнивает его с текущей ценой закрытия (iClose). Если цена находится выше уровня SMA, функция возвращает true, указывая на бычий тренд; в противном случае она считает, что тренд медвежий или нейтральный.

Если параметр UseTrendFilter включен (по умолчанию true), эта функция обеспечивает совершение сделок на покупку только в условиях бычьего тренда, а сделки на продажу — только в условиях медвежьего тренда, что соответствует тенденции EURUSD и GBPUSD/GBPJPY следовать устойчивым трендам во время лондонской и нью-йоркской торговых сессий. Обработка ошибок регистрирует ошибки данных SMA, обеспечивая надежность. Этот фильтр уменьшает количество ложных пробоев на нестабильных рынках, что является распространенной проблемой для пар, в состав которых входит фунт стерлингов, подтверждая более широкий рыночный контекст перед открытием сделок после выноса ликвидности.

bool IsBullishTrend()
{
   double sma[];
   ArraySetAsSeries(sma, true);
   int smaHandle = iMA(_Symbol, TradeTimeframe, SMAPeriod, 0, MODE_SMA, PRICE_CLOSE);
   if(CopyBuffer(smaHandle, 0, 0, 1, sma) < 1)
   {
      Print("Failed to load SMA data");
      return false;
   }
   double currentPrice = iClose(_Symbol, TradeTimeframe, 0);
   Print("Current price: ", currentPrice, ", SMA: ", sma[0]);
   return currentPrice > sma[0];
}

Функции IsBullishEngulfing и IsBearishEngulfing: Подтверждение разворота тренда

Эти функции обнаруживают бычьи и медвежьи свечи поглощения — ключевые модели разворота, с помощью которых подтверждается вход после выноса ликвидности. Функция IsBullishEngulfing проверяет, является ли текущая свеча бычьей (цена закрытия превышает цену открытия), является ли предыдущая свеча медвежьей (цена закрытия ниже цены открытия), поглощает ли текущая свеча предыдущую (цена открытия меньше или равна цене закрытия предыдущей свечи, цена закрытия больше или равна цене открытия предыдущей свечи) и превышает ли тело текущей свечи как минимум в EngulfingMinBodyRatio (0.3) раз тело предыдущей свечи. Функция IsBearishEngulfing применяет обратную логику для медвежьих сетапов. Для пар EURUSD, GBPUSD и GBPJPY свечи поглощения на 15-минутном или 1-часовом графике после выноса ликвидности часто сигнализируют о сильных разворотах или продолжении тренда, особенно после выноса ликвидности на ключевых уровнях.

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

bool IsBullishEngulfing(MqlRates &current, MqlRates &previous)
{
   double currentBody = MathAbs(current.close - current.open);
   double prevBody = MathAbs(previous.close - previous.open);
   
   if(current.close > current.open && 
      previous.close < previous.open && 
      current.open <= previous.close && 
      current.close >= previous.open && 
      currentBody >= EngulfingMinBodyRatio * prevBody)
   {
      return true;
   }
   return false;
}

bool IsBearishEngulfing(MqlRates &current, MqlRates &previous)
{
   double currentBody = MathAbs(current.close - current.open);
   double prevBody = MathAbs(previous.close - previous.open);
   
   if(current.close < current.open && 
      previous.close > previous.open && 
      current.open >= previous.close && 
      current.close <= previous.open && 
      currentBody >= EngulfingMinBodyRatio * prevBody)
   {
      return true;
   }
   return false;
}

Функция PlaceTrade: Исполнение рыночных ордеров с уровнями SL/TP

Функция PlaceTrade исполняет ордера на покупку или продажу при подтверждении действительного сигнала (вынос + поглощение + объем + тренд). Она формирует объект MqlTradeRequest с указанием символа, фиксированного размера лота LotSize (0.1), типа ордера (покупка/продажа) и цены входа. Стоп-лосс устанавливается на уровне 150 пунктов, а тейк-профит — на уровне 600 пунктов, скорректированных с учетом значения пунктов для EURUSD и GBPUSD/GBPJPY (_Point * 100) для учета масштабирования пунктов соответствующей пары. Параметр ORDER_FILLING_IOC (немедленное исполнение или отмена) обеспечивает быстрое исполнение, что крайне важно на быстро меняющемся рынке GBPJPY.

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

void PlaceTrade(ENUM_ORDER_TYPE orderType, double price)
{
   MqlTradeRequest request = {};
   MqlTradeResult result = {};
   
   request.action = TRADE_ACTION_DEAL;
   request.symbol = _Symbol;
   request.volume = LotSize;
   request.type = orderType;
   request.price = price;
   request.sl = (orderType == ORDER_TYPE_BUY) ? price - StopLossPips * _Point * 100 : price + StopLossPips * _Point * 100;
   request.tp = (orderType == ORDER_TYPE_BUY) ? price + TakeProfitPips * _Point * 100 : price - TakeProfitPips * _Point * 100;
   request.type_filling = ORDER_FILLING_IOC;
   
   if(OrderSend(request, result))
   {
      Print("Trade placed successfully: ", orderType == ORDER_TYPE_BUY ? "BUY" : "SELL", " at ", price, " SL: ", request.sl, " TP: ", request.tp);
      tradePlaced = true;
      purgeDetected = false; // Reset purge after trade
   }
   else
   {
      Print("Trade failed: ", result.retcode);
   }
}

Функция ManageTrailingStop: Защита прибыли с помощью трейлинг-стопов.

Функция ManageTrailingStop динамически корректирует стоп-лосс открытых позиций для фиксации прибыли при благоприятном движении цены. С помощью параметра PositionSelect она проверяет, существует ли позиция для данного символа. Для позиций на покупку рассчитывается новый стоп-лосс на уровне текущей цены bid за вычетом TrailingStopPips (100 пунктов), скорректированный с учетом стоимости пунктов для пар GBPUSD и EURUSD/GBPJPY. Новый стоп-лосс применяется только в том случае, если он выше уровня текущего стоп-лосса и выше цены открытия, что гарантирует безубыточность или прибыль. Для позиций на продажу стоп-лосс устанавливается выше текущей цены ask и применяется, если он ниже уровня текущего стоп-лосса (или если его нет) и ниже цены открытия.

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

void ManageTrailingStop()
{
   if(!PositionSelect(_Symbol)) return;
   
   double currentPrice = (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) ? 
                         SymbolInfoDouble(_Symbol, SYMBOL_BID) : 
                         SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double openPrice = PositionGetDouble(POSITION_PRICE_OPEN);
   double currentSL = PositionGetDouble(POSITION_SL);
   
   double newSL = 0;
   if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)
   {
      newSL = currentPrice - TrailingStopPips * _Point * 100;
      if(newSL > currentSL && newSL > openPrice)
      {
         MqlTradeRequest request = {};
         MqlTradeResult result = {};
         request.action = TRADE_ACTION_SLTP;
         request.position = PositionGetInteger(POSITION_TICKET);
         request.symbol = _Symbol;
         request.sl = newSL;
         request.tp = PositionGetDouble(POSITION_TP);
         if(OrderSend(request, result))
            Print("Trailing stop updated for BUY: ", newSL);
         else
            Print("Failed to update trailing stop: ", result.retcode);
      }
   }
   else // POSITION_TYPE_SELL
   {
      newSL = currentPrice + TrailingStopPips * _Point * 100;
      if((newSL < currentSL || currentSL == 0) && newSL < openPrice)
      {
         MqlTradeRequest request = {};
         MqlTradeResult result = {};
         request.action = TRADE_ACTION_SLTP;
         request.position = PositionGetInteger(POSITION_TICKET);
         request.symbol = _Symbol;
         request.sl = newSL;
         request.tp = PositionGetDouble(POSITION_TP);
         if(OrderSend(request, result))
            Print("Trailing stop updated for SELL: ", newSL);
         else
            Print("Failed to update trailing stop: ", result.retcode);
      }
   }
}

Функция OnTick: Основная торговая логика для выноса ликвидности и поглощения

Функция OnTick является основным центром принятия решений советника, она выполняется при каждом изменении цены, но обрабатывает данные только для новых свечей на графике H1 с помощью функции IsNewCandle. Она сбрасывает значение tradePlaced, если нет открытых позиций, обеспечивая одну сделку за цикл выноса ликвидности. Управление трейлинг-стопами для открытых позиций осуществляется с помощью функции ManageTrailingStop. Функция загружает данные свечей для графиков H1 и M15 с помощью функции CopyRates, сравнивая текущую свечу H1 с предыдущими максимумами/минимумами (обновленными с помощью функции UpdateHighsLows) для обнаружения выносов ликвидности — пробития ценой максимумов или минимумов на графике H1, H4 или D1, что сигнализирует об обширном снятии ликвидности, характерном для EURUSD и GBPUSD/GBPJPY во время ключевых торговых сессий. При обнаружении выноса ликвидности устанавливается параметр purgeDetected, а параметр lastPurgeTime отслеживает временной интервал (до 3 свечей на графике H1).

Объем проверяется с помощью IsVolumeSpike, а тренд — с помощью IsBullishTrend (если эта функция включена). Модели поглощения определяются как на графике H1, так и на графике M15, что обеспечивает гибкое подтверждение. покупка открывается, если после снятия ликвидности выше максимумов формируется бычье поглощение (на графике H1 или M15), большой объем и бычий тренд; сделка на продажу требует выноса ликвидности ниже минимумов, медвежьего поглощения, повышенного объема и медвежьего тренда. Расширенная регистрация событий обеспечивает необходимую для отладки прозрачность. Такая логика обеспечивает высокую вероятность успешных сделок в парах с фунтом стерлингов за счет сочетания корректировок на нескольких таймфреймах с надежными подтверждающими сигналами, оптимизированными с учетом их склонности к следованию за трендом.

void OnTick()
{
   // Check if a new candle has formed on the trade timeframe
   if(!IsNewCandle()) return;
   
   // Reset tradePlaced if no open positions
   if(!PositionSelect(_Symbol)) tradePlaced = false;
   
   // Manage trailing stop for open positions
   ManageTrailingStop();
   
   // Get current and previous candle data for trade timeframe
   MqlRates ratesH1[];
   ArraySetAsSeries(ratesH1, true);
   if(CopyRates(_Symbol, TradeTimeframe, 0, 4, ratesH1) < 4)
   {
      Print("Failed to load H1 rates data");
      return;
   }
   
   // Get candle data for confirmation timeframe (M15)
   MqlRates ratesM15[];
   ArraySetAsSeries(ratesM15, true);
   if(CopyRates(_Symbol, ConfirmationTimeframe, 0, 4, ratesM15) < 4)
   {
      Print("Failed to load M15 rates data");
      return;
   }
   
   // Current H1 candle (index 0)
   double currentOpenH1 = ratesH1[0].open;
   double currentCloseH1 = ratesH1[0].close;
   double currentHighH1 = ratesH1[0].high;
   double currentLowH1 = ratesH1[0].low;
   long currentVolumeH1 = ratesH1[0].tick_volume;
   datetime currentTimeH1 = ratesH1[0].time;
   
   // Update highs and lows for all timeframes
   UpdateHighsLows();
   
   // Check for purge (liquidity sweep) on any timeframe
   bool highPurgedH1 = (currentHighH1 > lastHighH1 && lastHighH1 > 0);
   bool highPurgedH4 = (currentHighH1 > lastHighH4 && lastHighH4 > 0);
   bool highPurgedD1 = (currentHighH1 > lastHighD1 && lastHighD1 > 0);
   bool lowPurgedH1 = (currentLowH1 < lastLowH1 && lastLowH1 > 0);
   bool lowPurgedH4 = (currentLowH1 < lastLowH4 && lastLowH4 > 0);
   bool lowPurgedD1 = (currentLowH1 < lastLowD1 && lastLowD1 > 0);
   bool highPurged = highPurgedH1 || highPurgedH4 || highPurgedD1;
   bool lowPurged = lowPurgedH1 || lowPurgedH4 || lowPurgedD1;
   
   // Update purge status
   if(highPurged || lowPurged)
   {
      purgeDetected = true;
      lastPurgeTime = currentTimeH1;
      highPurge = highPurged;
   }
   
   // Check if within the post-purge window
   bool withinPurgeWindow = false;
   if(purgeDetected)
   {
      int candlesSincePurge = iBarShift(_Symbol, TradeTimeframe, lastPurgeTime, true);
      withinPurgeWindow = candlesSincePurge <= MaxCandlesPostPurge;
      if(!withinPurgeWindow)
      {
         purgeDetected = false; // Reset if window expires
         Print("Purge window expired: ", candlesSincePurge, " candles since last purge");
      }
   }
   
   // Check volume for liquidity confirmation
   bool volumeConfirmed = IsVolumeSpike(currentVolumeH1);
   if(currentVolumeH1 <= 1) 
   {
      Print("Warning: Tick volume is ", currentVolumeH1, ". Possible data issue. Bypassing volume check.");
      volumeConfirmed = true;
   }
   
   // Check trend with SMA
   bool isBullishTrend = UseTrendFilter ? IsBullishTrend() : true;
   
   // Check for engulfing candles on H1 (current + previous 2 candles)
   bool bullishEngulfingH1 = false, bearishEngulfingH1 = false;
   for(int i = 0; i < 3; i++)
   {
      if(IsBullishEngulfing(ratesH1[i], ratesH1[i+1]))
         bullishEngulfingH1 = true;
      if(IsBearishEngulfing(ratesH1[i], ratesH1[i+1]))
         bearishEngulfingH1 = true;
   }
   
   // Check for engulfing candles on M15 (current + previous 2 candles)
   bool bullishEngulfingM15 = false, bearishEngulfingM15 = false;
   for(int i = 0; i < 3; i++)
   {
      if(IsBullishEngulfing(ratesM15[i], ratesM15[i+1]))
         bullishEngulfingM15 = true;
      if(IsBearishEngulfing(ratesM15[i], ratesM15[i+1]))
         bearishEngulfingM15 = true;
   }
   
   // Trade logic
   if(purgeDetected && withinPurgeWindow && !tradePlaced)
   {
      if(highPurge && (bullishEngulfingH1 || bullishEngulfingM15) && volumeConfirmed && isBullishTrend)
      {
         Print("Buy signal: High purged, bullish engulfing on ", bullishEngulfingH1 ? "H1" : "M15", ", volume confirmed, bullish trend");
         PlaceTrade(ORDER_TYPE_BUY, currentCloseH1);
      }
      else if(!highPurge && (bearishEngulfingH1 || bearishEngulfingM15) && volumeConfirmed && !isBullishTrend)
      {
         Print("Sell signal: Low purged, bearish engulfing on ", bearishEngulfingH1 ? "H1" : "M15", ", volume confirmed, bearish trend");
         PlaceTrade(ORDER_TYPE_SELL, currentCloseH1);
      }
   }
}

Установка и тестирование на истории: Скомпилируйте в MetaEditor и прикрепите к графику. Тестирование на исторических данных для пар GBPUSD и EURUSD/GBPJPY на графике H1 (2025 г.) с риском 1%. 


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

Тестирование стратегии на советнике HTF Engulfing King

Стратегия очень эффективна на большинстве, если не на всех, валютных парах благодаря относительно быстрой адаптации к трендам, тому же принципу выноса ликвидности и высокой волатильности, что выгодно как для внутридневной, так и для долгосрочной торговли. Протестируем эту стратегию, торгуя парами EURUSD и GBPUSD с 1 января 2025 года по 27 октября 2025 года на 60-минутном (H1) таймфрейме. Вот параметры, которые я выбрал для этой стратегии. 

EUR/USD – Евро/Доллар США

Входные параметры EURUSD 


Входные настройки для EURUSD

GBP/USD – Британский фунт/Доллар США

Входные параметры GBPUSD


Входные настройки GBPUSD


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

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

Результаты тестирования стратегии на советнике HTF Engulfing King

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

EUR/USD – Евро/Доллар США


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

GBP/USD – Британский фунт/Доллар США

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

Результаты тестирования на истории:

EUR/USD – Евро/Доллар США

Результаты тестирования EURUSD на истории


GBP/USD – Британский фунт/Доллар США

Результаты тестирования GBPUSD на истории


Выводы

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

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

Для реализации такой стратегии работы с экспертным советником настройте входные параметры советника, как показано ниже, чтобы получить желаемые результаты. Советник разработан для поиска потенциальных точек открытия сделок на старших таймфреймах, выбранных трейдером для просмотра (от D1 до MN), обеспечивая соответствие точек входа тренду, простой скользящей средней и логике трейлинг-стопа. Трейдерам, заинтересованным в торговле, следует протестировать этот советник на истории на своих демо-счетах с любым активом или валютной парой, но оптимально он работает с парами EURUSD и GBPUSD. Основная задача и цель этого экспертного советника заключались в его оптимизации для долгосрочной позиционной торговли и высоковероятных сетапов, возникающих на старших таймфреймах, а также в обеспечении управления рисками с помощью внедренных скользящих стоп-лоссов.

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


Заключение

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

Большинство опытных и начинающих трейдеров, а также некоторые трейдеры среднего уровня понятия не имеют, как ориентироваться в этом запутанном мире долгосрочной позиционной торговли, и даже разочаровываются в этом методе, поскольку не могут по-настоящему понять, что там происходит, или им не хватает проницательности, чтобы понять, как именно всегда движется цена и как эта стратегия использует знакомые паттерны или скользящие средние для открытия классических длинных позиций и исполнения таких сделок, которые могут быть прибыльными в долгосрочной перспективе, что происходит гораздо реже, чем в случае приверженцев краткосрочной торговли и скальпинга. Или, даже если они не совершают сделки на основе предоставленных советниками данных, трейдеры смогут подтвердить свои собственные торговые идеи, позиции и сетапы, а также тренд и направление, исходя из того, чем я поделился в этой статье, и им будет очень интересно узнать, какую важную роль может сыграть советник HTF Engulfing King («Король поглощения») в их торговле.

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

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

Название файла Описание
HTF Engulfing King EA.mq5 Файл, содержащий полный исходный код советника HTF Engulfing King.

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

Прикрепленные файлы |
Особенности написания Пользовательских Индикаторов Особенности написания Пользовательских Индикаторов
Написание пользовательских индикаторов в торговой системе MetaTrader 4
Двумерные копулы в MQL5 (Часть 3): Реализация и настройка смешанных моделей копул Двумерные копулы в MQL5 (Часть 3): Реализация и настройка смешанных моделей копул
В статье наш набор инструментов для работы с копулами расширяется смешанными копулами, реализованными непосредственно в MQL5. Мы строим смеси Клейтона–Франка–Гумбеля и Клейтона–Стьюдента-t–Гумбеля, оцениваем их с помощью EM и вводим управление разреженностью через SCAD с кросс-валидацией. Предоставленные скрипты настраивают гиперпараметры, сравнивают смеси с использованием информационных критериев и сохраняют обученные модели. Практики могут применять эти компоненты для учета асимметричной хвостовой зависимости и встраивать выбранную модель в индикаторы или советники.
Особенности написания экспертов Особенности написания экспертов
Написание и тестирование экспертов в торговой системе MetaTrader 4.
MetaTrader 5: конструируйте рынок под стратегию — Renko/Range/Volume, синтетика и стресс-тесты на пользовательских символах MetaTrader 5: конструируйте рынок под стратегию — Renko/Range/Volume, синтетика и стресс-тесты на пользовательских символах
Показываем, как с помощью API пользовательских символов MetaTrader 5 превратить терминал в конструктор данных: генерировать вне‑временные графики Renko, Range и Equal‑Volume и собирать синтетические инструменты. Разбираем агрегацию тиков и модификацию истории для стресс‑тестов (расширение спреда, изменение стоп‑уровней) с учетом ограничений платформы. Даем практику работы с CiCustomSymbol и маршрутизацией приказов на реальный символ через обертку CustomOrder, с готовыми фрагментами кода.