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

Color RSI

rsi color v1.01.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 общих тегов
Вы автор или правообладатель?

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

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

О программе

Данный файл является пользовательским индикатором для MetaTrader 5, написанным на языке MQL5. Он отображает осциллятор RSI в отдельном окне, выделяя цветом области перекупленности и перепроданности, а также может подавать звуковые, почтовые и всплывающие уведомления при пересечении заданных уровней. Индикатор поддерживает работу на выбранном таймфрейме, отличном от текущего, и позволяет включить отрисовку стрелок на графике цены в моменты пересечения уровней.

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

Индикатор использует стандартные функции MetaTrader 5 для получения данных RSI и отрисовки объектов на графике. Все настройки задаются через внешние переменные, что позволяет гибко адаптировать индикатор под различные торговые стратегии без изменения кода.

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

НастройкаОписание
RSIPeriod Период RSI — Количество баров, используемых для расчёта индикатора RSI.
PriceType Тип цены — Тип цены, используемый для расчёта RSI. Значение 5 соответствует типичной цене (Typical).
timeFrame Таймфрейм — Таймфрейм, на котором рассчитывается RSI. Можно указать "Current time frame" для текущего таймфрейма.
showArrows Показывать стрелки — Отображать стрелки на графике цены в точках пересечения уровней RSI.
alertsOn Включить уведомления — Включает или отключает все уведомления о пересечении уровней RSI.
alertsMessage Всплывающее сообщение — Показывать всплывающее окно с сообщением о пересечении уровней.
alertsSound Звуковое уведомление — Проигрывать звуковой сигнал при пересечении уровней.
alertsEmail Уведомление по email — Отправлять уведомление о пересечении уровней на электронную почту.
repaintSignalStep Шаг перерисовки сигнала — Шаг в пунктах для перерисовки предыдущего сигнала. Значение 0 отключает перерисовку.
repaintSignalPrice Цена для перерисовки сигнала — Параметр для корректировки цены стрелки при повторном сигнале. Значение 0 означает отсутствие коррекции.
Получить полный код

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

#property indicator_separate_window
#property indicator_buffers   3
#property indicator_minimum   0
#property indicator_maximum 100
#property indicator_color1 MidnightBlue
#property indicator_color2 White
#property indicator_color3 White
#property indicator_width2 2
#property indicator_width3 2
#define SignalName "RSISignal"

extern int       RSIPeriod          = 14;
extern int       PriceType          =  5;
extern string    timeFrame          = "Current time frame";
extern double    overBought         = 90,
                 overSold           = 10;
extern bool      showArrows         = true;
extern bool      alertsOn           = true;
extern bool      alertsMessage      = true;
extern bool      alertsSound        = true;
extern bool      alertsEmail        = false;
extern int       repaintSignalStep  =  0;
extern int       repaintSignalPrice =  0;

double   RSIBuffer[];
double   Upper[];
double   Lower[];
double   Prices[];

int      TimeFrame;
datetime TimeArray[];
int      maxArrows;
int      SignalGap;
string   prevSignal;
int      prevBar;

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

int deinit()
{
   DeleteArrows();
   return(0);
}

int start()
{
      // код доступен только после оплаты
   }
   int    counted_bars=IndicatorCounted();
   int    limit;
   int    i,y;

   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
         limit=MathMax(Bars-counted_bars,TimeFrame/Period());
         ArrayCopySeries(TimeArray ,MODE_TIME ,NULL,TimeFrame);

   for(i=0,y=0; i<limit; i++)
      {
            if(Time[i]<TimeArray[y]) y++;
               RSIBuffer[i] = iRSI(NULL,TimeFrame,RSIPeriod,PriceType,y);
      }
   for(i=limit; i>=0; i--)
      {
            if (RSIBuffer[i] > overBought) { Upper[i] = RSIBuffer[i]; Upper[i+1] = RSIBuffer[i+1]; }
            else                           { Upper[i] = EMPTY_VALUE;
                                           if (Upper[i+2] == EMPTY_VALUE)
                                               Upper[i+1]  = EMPTY_VALUE; }
            if (RSIBuffer[i] < overSold)   { Lower[i] = RSIBuffer[i]; Lower[i+1] = RSIBuffer[i+1]; }
            else                           { Lower[i] = EMPTY_VALUE;
                                           if (Lower[i+2] == EMPTY_VALUE)
                                               Lower[i+1]  = EMPTY_VALUE; }
      }

   DeleteArrows();
   if (showArrows)
      {
         SignalGap = MathCeil(iATR(NULL,0,50,0)/Point);
         for (i=WindowBarsPerChart(); i>=0 ;i--)
            {
               if (RSIBuffer[i]>overBought && RSIBuffer[i+1]<overBought) DrawArrow(i,"up");
               if (RSIBuffer[i]<overSold   && RSIBuffer[i+1]>overSold)   DrawArrow(i,"down");

               if ((TimeFrame==Period()) && (repaintSignalStep>0))
               if (prevBar==i+1)
               {
                  double currPrice = iMA(NULL,0,1,0,MODE_SMA,repaintSignalPrice,i);
                  double prevPrice = iMA(NULL,0,1,0,MODE_SMA,repaintSignalPrice,i+1);

                  if (prevSignal == "down")
                     if (RSIBuffer[i]<overSold)
                     if ((prevPrice-currPrice)/Point >= repaintSignalStep)
                        {
                           ObjectSet(StringConcatenate(SignalName,maxArrows),OBJPROP_TIME1,Time[i]);
                           ObjectSet(StringConcatenate(SignalName,maxArrows),OBJPROP_PRICE1,Low[i] -(SignalGap*Point));
                        }
                  if (prevSignal == "up")
                     if (RSIBuffer[i]>overBought)
                     if ((currPrice-prevP

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

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

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

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

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

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

Стоимость полного кода
559,80₽ ≈ $6.84