Как получить число RSI через iRSI в MQL4
Передайте в iRSI инструмент, таймфрейм, период, тип цены и индекс свечи; результат сохраните в переменную double. В справке MetaQuotes для MQL4 функция возвращает само значение индикатора.
В примере NULL означает инструмент открытого графика, следующий 0 - его таймфрейм. Число 14 задаёт период RSI, PRICE_CLOSE выбирает цены закрытия, последний аргумент 1 указывает на предыдущую свечу. Два нуля в вызовах с shift=0 выполняют разные задачи: один выбирает таймфрейм, другой - бар.
Сохраните пример как скрипт .mq4 в MetaEditor, скомпилируйте и запустите на нужном графике MetaTrader 4. В журнале «Эксперты» появятся инструмент, интервал, время открытия проверяемой свечи и RSI. Скрипт только читает данные и печатает строку.
#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
учебная схема · не котировка и не сигнал
Свечи слева направо по времени
- 2Более ранняя закрытая свеча.
- 1Последняя закрытая: её выбирает пример.
- 0Текущая: цена и RSI ещё могут меняться.
После открытия следующей свечи прежняя shift=1 станет shift=2. Если заново прочитать индекс 1, получится уже другой бар. Записывайте время свечи вместе с числом индикатора: без этого одинаковый код легко сравнить с другим участком графика.
Как сверить результат с RSI на графике
Сверяйте число из журнала со стандартным RSI на том же инструменте, интервале и баре при одинаковых периоде и цене расчёта. Откройте «Окно данных» и наведите курсор на свечу, время которой вывел скрипт.
Устали от индикаторов, которые перерисовывают сигналы? Индикатор Midas не перерисовывает - проверьте на истории до 10 лет.
| Что сверить | В примере кода | На графике |
|---|---|---|
| Инструмент и данные | 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.
Код проверяет чтение индикатора, а не условия входа в сделку. RSI не гарантирует прибыль; торговля связана с риском потери капитала. Прошлые результаты не обещают будущих. Материал носит учебный характер и не является инвестиционной рекомендацией.





