Как подключить индикатор Price Range к торговому советнику (EA)
Мой клиент спросил меня, как подключить индикатор 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
Удачи в трейдинге!




