← К каталогу
Исходный код · ID 2108

rsi_jurik_slope_mtf_nmc.mq5

Похожие материалы по тегам

ares_indicator.pineTradingView · 1 общих теговgold_trend_revers.mq5MQL5 / MetaTrader 5 · 1 общих тегов!!!-mt4 x-xardg-rsi.mq5MQL5 / MetaTrader 5 · 1 общих тегов! cycle-identifier.mq5MQL5 / MetaTrader 5 · 1 общих тегов!!! rsi ma simple+arrows 1.2 (mtf).mq5MQL5 / MetaTrader 5 · 1 общих теговprecisionflowea.mq5MQL5 / MetaTrader 5 · 1 общих тегов
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

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

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

В качестве уровней используются два пользовательских параметра — верхний и нижний, по умолчанию установленные на 30 и -30 соответственно. Индикатор рисует горизонтальные уровни в окне и ограничивает масштаб от -55 до +55. Деактивация расчёта или возврат количества баров возможны через специальное значение параметра таймфрейма.

Настройки программы

НастройкаОписание
TimeFrame TimeFrame — Таймфрейм для расчёта индикатора. Специальные значения "calculateValue" и "returnBars" активируют режимы внутреннего вызова.
RsiPeriod RsiPeriod — Период расчёта RSI, задаётся числовым значением по умолчанию 25.
RsiPrice RsiPrice — Тип цены для расчёта RSI, целочисленный параметр (по умолчанию PRICE_CLOSE).
RsiPhase RsiPhase — Фазовый параметр сглаживания, числовой тип, по умолчанию 0.
RsiDouble RsiDouble — Переключатель двойной сглаживающей обработки, логический тип, по умолчанию false.
LevelUp LevelUp — Верхний уровень для отображения горизонтальной линии, числовой тип, по умолчанию 30.
LevelDown LevelDown — Нижний уровень для отображения горизонтальной линии, числовой тип, по умолчанию -30.
Interpolate Interpolate — Переключатель интерполяции значений между барами старшего таймфрейма, логический тип, по умолчанию true.
Получить полный код

Поиск по коду файла

#property indicator_separate_window
#property indicator_buffers 5
#property indicator_color1  LimeGreen
#property indicator_color2  LimeGreen
#property indicator_color3  PaleVioletRed
#property indicator_color4  PaleVioletRed
#property indicator_color5  DarkGray
#property indicator_width1  2
#property indicator_width3  2
#property indicator_width5  2
#property indicator_minimum -55
#property indicator_maximum +55
#property indicator_levelcolor DarkGray

extern string TimeFrame   = "Current time frame";
extern double RsiPeriod   = 25;
extern int    RsiPrice    = PRICE_CLOSE;
extern double RsiPhase    = 0;
extern bool   RsiDouble   = false;
extern double LevelUp     =  30;
extern double LevelDown   = -30;
extern bool   Interpolate = true;

double rsi[];
double rsihuu[];
double rsihud[];
double rsihdu[];
double rsihdd[];
double slope[];

int    timeFrame;
string indicatorFileName;
bool   returnBars;
bool   calculateValue;

int init()
{
      // код доступен только после оплаты
   }
int deinit() { return(0); }

int start()
{
      // код доступен только после оплаты
   }
   int counted_bars=IndicatorCounted();
      if(counted_bars < 0) return(-1);
      if(counted_bars>0) counted_bars--;
         int limit = MathMin(Bars-counted_bars,Bars-1);
         if (returnBars) { rsihuu[0] = limit+1; return(0); }

   if (calculateValue || timeFrame == Period())
   {
      for(int i = limit; i >= 0; i--)
      {
         rsi[i] = iRsi(iMA(NULL,0,1,0,MODE_SMA,RsiPrice,i),RsiPeriod,RsiPhase,RsiDouble,i);
         rsihuu[i] = EMPTY_VALUE;
         rsihud[i] = EMPTY_VALUE;
         rsihdd[i] = EMPTY_VALUE;
         rsihdu[i] = EMPTY_VALUE;

         slope[i] = slope[i+1];
            if (rsi[i] > rsi[i+1]) slope[i] =  1;
            if (rsi[i] < rsi[i+1]) slope[i] = -1;
            if (rsi[i]>0)
            if (slope[i]==1)
                  rsihuu[i] = rsi[i];
            else  rsihud[i] = rsi[i];
            if (rsi[i]<0)
            if (slope[i]==1)
                  rsihdu[i] = rsi[i];
            else  rsihdd[i] = rsi[i];
      }      
      return(0);
   }

   limit = MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,indicatorFileName,"returnBars",0,0)*timeFrame/Period()));
   for(i=limit; i>=0; i--)
   {
      int y = iBarShift(NULL,timeFrame,Time[i]);
         rsihuu[i] = EMPTY_VALUE;
         rsihud[i] = EMPTY_VALUE;
         rsihdd[i] = EMPTY_VALUE;
         rsihdu[i] = EMPTY_VALUE;
         rsi[i]    = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",RsiPeriod,RsiPrice,RsiPhase,RsiDouble,4,y);
         slope[i]  = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",RsiPeriod,RsiPrice,RsiPhase,RsiDouble,5,y);
            if (rsi[i]>0)
               if (slope[i]==1)
                     rsihuu[i] = rsi[i];
               else  rsihud[i] = rsi[i];
            if (rsi[i]<0)
               if (slope[i]==1)
                     rsihdu[i] = rsi[i];
               else  rsihdd[i] = rsi[i];

         if (!Interpolate || y==iBarShift(NULL,timeFrame,Time[i-1])) continue;

         datetime time = iTime(NULL,timeFrame,y);
            for(int n = 1; i+n < Bars && Time[i+n] >= time; n++) continue;	
            for(int k = 1; k < n; k++)
            {
               rsi[i+k] = rsi[i] + (rsi[i+n]-rsi[i])*k/n;
               if (rsihuu[i]!=EMPTY_VALUE) rsihuu[i+k]= rsi[i+k];
               if (rsihud[i]!=EMPTY_VALUE) rsihud[i+k]= rsi[i+k];
               if (rsihdu[i]!=EMPTY_VALUE) rsihdu[i+k]= rsi[i+k];
               if (rsihdd[i]!=EMPTY_VALUE) rsih

Показано первые 50% кода (символов: 6353)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
635,30₽ ≈ $7.76