Как подключить индикатор Price Range к торговому советнику (EA)

Как подключить индикатор Price Range к торговому советнику (EA)

27 февраля 2026, 05:00
Vladimir Toropov
0
15

Мой клиент спросил меня, как подключить индикатор Price Range к его торговому советнику. И действительно, такое присоединение позволяет использовать индикатор по своему усмотрению, пробовать различные значения Стоп Лосс и Тейк Профит, а также внедрять разнообразную торговую логику.

Если вы новичок в использовании этого мощного индикатора, вы можете прочитать о нем подробнее здесь: Индикатор Price Range MT5 - Будьте в курсе движений цен.

Подробную информацию об эффективном использовании этого индикатора вы также можете найти здесь: Стратегии трейдинга для индикатора Price Range MT5.


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

Индикатор разработан с учетом удобства для разработчиков и полностью поддерживает автоматизацию. Он выводит сигналы непосредственно в буферы индикатора (INDICATOR_DATA), поэтому вы можете легко получить их, используя функции iCustom() и CopyBuffer() в MQL5.

Как подключить индикатор Price Range к торговому советнику: карта буферов для разработчика

  • Buffer 0: Сигнал ВВЕРХ (Новый восходящий тренд). Содержит минимальную цену соответствующего бара при появлении сигнала, в противном случае — EMPTY_VALUE.
  • Buffer 1: Сигнал ВНИЗ (Новый нисходящий тренд). Содержит максимальную цену соответствующего бара при появлении сигнала, в противном случае — EMPTY_VALUE.

Дополнительные буферы, доступные для расширенной логики вашей торговой стратегии:

  • Buffer 2: Уровень сопротивления
  • Buffer 3: Уровень поддержки
  • Buffer 4: Стоп Лосс для коротких позиций
  • Buffer 5: Стоп Лосс для длинных позиций

Все пустые значения возвращаются как EMPTY_VALUE.

Вот краткое руководство по подключению индикатора Price Range к торговому советнику:

1. После покупки через MQL5 Market индикатор Price Range находится в папке "Market". Мы учтем это при вызове функции  iCustom().

2. При получении хэндла индикатора через функцию iCustom() укажите точное имя файла индикатора (без ".ex5"):

int Handle = iCustom(
	_Symbol,           // Торговый символ
      	_Period,           // Таймфрейм
      	"Market\\Price Range MT5", // Точный путь к индикатору
       	"Market layout:",
       	IN_MinRangeWeight, // Минимальный боковик, точек разворота (int)
      	IN_MinStrongLevel, // Минимальный ценовой уровень, касаний цены (int)
       	"Chart appearance:",
      	IN_DrawRanges,     // Отображать ценовые коридоры     (bool)
      	IN_DrawStrongs,    // Отображать ценовые уровни       (bool)
      	IN_DrawSLs,        // Отображать уровни Стоп Лосс     (bool)
      	IN_DrawTrends,     // Показывать начало новых трендов (bool)
     	"Send notifications when:",
       	IN_NewRange,       // Оповещать о начале боковика (bool)
       	IN_NewLevel,       // Оповещать о новых уровнях   (bool)
      	IN_NewTrend,       // Оповещать о начале трендов  (bool)
      	IN_AlwaysReport,   // Всегда сообщать о проблемах (bool)
      	"Preferences:",
    	IN_Lang,           // Язык уведомлений  (int)(0 - 11)
       	IN_NewRangeLag,    // Лаг при определении боковиков (int)
       	IN_NewLevelLag,    // Лаг при определении уровней   (int)
      	IN_NewTrendLag     // Лаг при определении трендов   (int)
       	);

⚠️ ВАЖНО: Необходимо передать ВСЕ параметры. Они должны быть перечислены в ТОМ ЖЕ ПОРЯДКЕ, в котором они указаны в списке входных параметров индикатора.

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

4. Получаем цены с графика. Нам нужны минимальная и максимальная цены того же бара, с которого мы взяли сигнал (первый бар):

double barLow  = iLow(_Symbol, _Period, 1);
double barHigh = iHigh(_Symbol, _Period, 1);

5. Установим точность (эпсилон). Давайте используем _Point - цену одного пункта (например, 0,00001). Мы считаем числа равными, если разница между ними меньше половины точки.

double epsilon = _Point * 0.5;

6. Получим данные для первого бара (крайнего закрытого):

if (CopyBuffer(Handle, 0, 1, 1, bufferBuy) < 0 || CopyBuffer(Handle, 1, 1, 1, bufferSell) < 0) return;

7. Подготовим значения для проверки сигнала:

double buyValue  = bufferBuy[0];
double sellValue = bufferSell[0];

8. Проверяем сигнал на покупку (растущий тренд). Индикатор записывает Low[i] в ​​буфер. Проверяем:

  • Значение не пустое (меньше DBL_MAX),
  • Значение в буфере почти равно цене Low.

    bool isBuySignal = (buyValue < DBL_MAX) && (MathAbs(buyValue - barLow) < epsilon);

    9. Проверяем сигнал на продажу (падающий тренд). Индикатор записывает High[i] в ​​буфер. Проверяем:

    • Значение не пустое (меньше DBL_MAX),
    • Значение в буфере почти равно цене High.

      bool isSellSignal = (sellValue < DBL_MAX) && (MathAbs(sellValue - barHigh) < epsilon);

      Ну вот и всё!

      Индикатор Price Range можно использовать и без подключения к торговому роботу

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

      Индикатор доступен здесь: https://www.mql5.com/ru/market/product/133246

      Удачи в трейдинге!

      Владимир Торопов