Код RSI в MQL4: как получить и проверить значение

Обложка статьи «Код RSI в MQL4: как получить и проверить значение»: выделенная закрытая свеча связана с вызовом iRSI: проверяем значение одного и того же бара

Как получить число RSI через iRSI в MQL4

Передайте в iRSI инструмент, таймфрейм, период, тип цены и индекс свечи; результат сохраните в переменную double. В справке MetaQuotes для MQL4 функция возвращает само значение индикатора.

В примере NULL означает инструмент открытого графика, следующий 0 - его таймфрейм. Число 14 задаёт период RSI, PRICE_CLOSE выбирает цены закрытия, последний аргумент 1 указывает на предыдущую свечу. Два нуля в вызовах с shift=0 выполняют разные задачи: один выбирает таймфрейм, другой - бар.

Сохраните пример как скрипт .mq4 в MetaEditor, скомпилируйте и запустите на нужном графике MetaTrader 4. В журнале «Эксперты» появятся инструмент, интервал, время открытия проверяемой свечи и RSI. Скрипт только читает данные и печатает строку.

mql4
#property strict

void OnStart()
{
   int shift = 1;
   ResetLastError();
   datetime barTime = iTime(NULL, 0, shift);
   double rsi = iRSI(NULL, 0, 14, PRICE_CLOSE, shift);
   int error = GetLastError();

   if(error != 0 || barTime == 0 ||
      barTime != iTime(NULL, 0, shift))
   {
      Print("Check history or changed bar. Error: ", error);
      return;
   }

   Print("Symbol=", Symbol(), " TF=", Period(),
         " Bar=", TimeToString(barTime),
         " RSI=", DoubleToString(rsi, 5));
}

Проверка времени отсеивает запуск, во время которого сменился бар. Сообщение об ошибке не заменяет загрузку истории: сначала дождитесь данных и линии RSI на графике, затем повторите запуск. Нулевое число RSI само по себе не доказывает сбой. Если интересует арифметика показателя, она отдельно разобрана в ручном расчёте RSI.

Почему shift 0 и shift 1 дают разные значения

shift=0 читает формирующуюся свечу, а shift=1 - последнюю закрытую, поэтому сравнение этих значений проверяет разные бары. Они могут совпасть, но не обязаны.

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

Какой бар выбирает shift

учебная схема · не котировка и не сигнал

Свечи слева направо по времени

Свечи слева направо по времени210
  1. 2Более ранняя закрытая свеча.
  2. 1Последняя закрытая: её выбирает пример.
  3. 0Текущая: цена и RSI ещё могут меняться.
Учебная схема индексов, цены условные. После появления новой свечи индексы прежних баров увеличатся на один.

После открытия следующей свечи прежняя shift=1 станет shift=2. Если заново прочитать индекс 1, получится уже другой бар. Записывайте время свечи вместе с числом индикатора: без этого одинаковый код легко сравнить с другим участком графика.

Как сверить результат с RSI на графике

Сверяйте число из журнала со стандартным RSI на том же инструменте, интервале и баре при одинаковых периоде и цене расчёта. Откройте «Окно данных» и наведите курсор на свечу, время которой вывел скрипт.

Что сверитьВ примере кодаНа графике
Инструмент и данныеSymbol() текущего графикаТот же символ и брокерский поток
ИнтервалPeriod() текущего графикаТот же таймфрейм
Настройки RSIПериод 14, PRICE_CLOSEПериод 14, «Применить к: Close»
СвечаВремя из iTime(..., 1)Время открытия выбранного бара
Точность записи5 знаков после запятойСравнение после одинакового округления

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

Повторяя проверку после появления нового бара, найдите на графике сохранённое время. Для повторного чтения в коде сначала определите индекс этой же свечи; прежний индекс оставлять нельзя. Затем отдельно замените shift на 0: пока свеча открыта, повторные запуски могут давать разные значения, если приходят новые котировки.

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

Чем SVE RSI I-Fish и iRSI в MQL5 отличаются от этого примера

SVE RSI I-Fish рассчитывает преобразованный показатель, а iRSI в MQL5 возвращает дескриптор индикатора, поэтому ни то ни другое нельзя подставить вместо этого примера без изменений.

В публикации SVE RSI I-Fish из Code Base сначала сглаживается цена, затем рассчитанный RSI, после чего применяется обратное преобразование Фишера. Ожидать равенства со стандартным iRSI неправильно. Запрос с названием файла «SVE RSI I Fish v2 mq4» не подтверждает происхождение версии: в указанном первоисточнике файл называется SVE_RSI_I-Fish.mq4, без v2.

В MQL5 функция с тем же именем создаёт дескриптор. Значения из его буфера получают отдельно через CopyBuffer, проверяя успешность чтения. Копирование MQL4-вызова с пятым аргументом shift туда не переносит логику автоматически. Этот пример относится к стандартному RSI и языку MQL4.

Источники

График TradingView с сигналами Buy и Sell индикатора Midas
Midas multi-индикатор for TradingViewОдин из самых продвинутых индикаторов для трейдинга
  • Сигналы без перерисовки
  • Интерактивный теханализ
  • 7 стратегий на выбор
Midas multi-индикатор for TradingViewСигнал, стоп и 3 цели - прямо на графике
  • Сигнал фиксируется по закрытию свечи
  • Стоп и 3 цели строятся автоматически
  • План сделки виден до входа