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

rsi_of_nma_2_mtf__alerts.mq5

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

!!!-mt4 x-xardg-rsi.mq5MQL5 / MetaTrader 5 · 2 общих тегов!!! rsi ma simple+arrows 1.2 (mtf).mq5MQL5 / MetaTrader 5 · 2 общих теговea robofibo source v.11.2.mq4MQL4 / MetaTrader 4 · 2 общих теговsureforexhedingvonepointoneone.mq4MQL4 / MetaTrader 4 · 2 общих теговsureforexhedging 1.10 optimized.mq4MQL4 / MetaTrader 4 · 2 общих теговsureforexhedging 1.09 a (2).mq4MQL4 / MetaTrader 4 · 2 общих тегов
Вы автор или правообладатель?

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

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

О программе

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

Индикатор использует два уровня (верхний и нижний) для определения трендовых условий. При пересечении уровней система может отправлять уведомления через различные каналы: всплывающие сообщения, звуковые сигналы, push-уведомления и электронную почту. Доступна настройка срабатывания алертов на текущем баре или на следующем.

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

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

НастройкаОписание
TimeFrame Таймфрейм, на котором рассчитывается индикатор (вариант настройки).
Length Период расчёта индикатора RSI (целое число).
Price Тип цены, используемой для расчёта индикатора (вариант настройки).
LevelUp Верхний уровень для определения разворотных условий тренда (числовое значение).
LevelDown Нижний уровень для определения разворотных условий тренда (числовое значение).
NmaLength Длина расчёта нормализованной скользящей средней (NMA), используемой для формирования входных данных RSI (целое число).
PreSmooth Параметр предварительного сглаживания ценовой серии (числовое значение).
PreSmoothPhase Фазовый параметр предварительного сглаживания (числовое значение).
PosSmooth Параметр последующего сглаживания ценовой серии перед расчётом RSI (числовое значение).
PosSmoothPhase Фазовый параметр последующего сглаживания (числовое значение).
alertsOn Включает или отключает систему алертов в целом (переключатель).
alertsOnCurrent Определяет, будут ли алерты срабатывать на текущем баре или на следующем (переключатель).
alertsMessage Включает или отключает всплывающие сообщения об алертах (переключатель).
alertsSound Включает или отключает звуковые сигналы об алертах (переключатель).
alertsNotify Включает или отключает push-уведомления об алертах (переключатель).
alertsEmail Включает или отключает отправку уведомлений об алертах по электронной почте (переключатель).
Interpolate Включает или отключает интерполяцию значений индикатора между барами при работе на межтаймфреймах.
Получить полный код

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

#property indicator_separate_window
#property indicator_buffers  5
#property indicator_color1   Gray
#property indicator_color2   LimeGreen
#property indicator_color3   LimeGreen
#property indicator_color4   Orange
#property indicator_color5   Orange
#property indicator_width2   3
#property indicator_width3   3
#property indicator_width4   3
#property indicator_width5   3
#property indicator_minimum  -5
#property indicator_maximum  +105

extern ENUM_TIMEFRAMES    TimeFrame       = PERIOD_CURRENT;
extern int                Length          = 14;
extern ENUM_APPLIED_PRICE Price           = PRICE_CLOSE;
extern double             LevelUp         = 80;
extern double             LevelDown       = 20;
extern int                NmaLength       = 14;
extern double             PreSmooth       =  0;
extern double             PreSmoothPhase  =  0;
extern double             PosSmooth       = 10;
extern double             PosSmoothPhase  = 100;
extern bool               alertsOn        = true;
extern bool               alertsOnCurrent = false;
extern bool               alertsMessage   = true;
extern bool               alertsSound     = false;
extern bool               alertsNotify    = true;
extern bool               alertsEmail     = true;
extern bool               Interpolate     = true;

double rsi[];
double rsiUa[];
double rsiUb[];
double rsiDa[];
double rsiDb[];
double prc[];
double trend[];
string indicatorFileName;
bool   returnBars;

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

int deinit(){ return(0); }

double tBuffer[][2];
#define iPrc 0
#define iMom 1
int start()
{
      // код доступен только после оплаты
   }
   int countedBars = IndicatorCounted();
      if(countedBars<0) return(-1);
      if(countedBars>0) countedBars--;
         int i,r,limit = MathMin(Bars-countedBars,Bars-1);
            if (returnBars) { rsi[0] = limit+1; return(0); }
            if (TimeFrame!=Period())
            {
               limit = MathMax(limit,MathMin(Bars,iCustom(NULL,TimeFrame,indicatorFileName,-99,0,0)*TimeFrame/Period()));
               if (trend[limit]== 1) CleanPoint(limit,rsiUa,rsiUb);
               if (trend[limit]==-1) CleanPoint(limit,rsiDa,rsiDb);
                  for(i=limit; i>=0; i--)
                  {
                     int y = iBarShift(NULL,TimeFrame,Time[i]);
                     rsi[i]   = iCustom(NULL,TimeFrame,indicatorFileName,PERIOD_CURRENT,Length,Price,LevelUp,LevelDown,NmaLength,PreSmooth,PreSmoothPhase,PosSmooth,PosSmoothPhase,alertsOn,alertsOnCurrent,alertsMessage,alertsSound,alertsNotify,alertsEmail,0,y);
                     trend[i] = iCustom(NULL,TimeFrame,indicatorFileName,PERIOD_CURRENT,Length,Price,LevelUp,LevelDown,NmaLength,PreSmooth,PreSmoothPhase,PosSmooth,PosSmoothPhase,alertsOn,alertsOnCurrent,alertsMessage,alertsSound,alertsNotify,alertsEmail,6,y);
                     rsiUa[i] = EMPTY_VALUE;
                     rsiUb[i] = EMPTY_VALUE;
                     rsiDa[i] = EMPTY_VALUE;
                     rsiDb[i] = EMPTY_VALUE;

                     if (!Interpolate || (i>0 && 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 l = 1; l < n && (i+l<Bars) && (i+n)<Bars; l++)
                           rsi[i+l]  = rsi[i]  + (rsi[i+n] - rsi[i])*l/n;
                  }                           
                  for(i=limit; i>=0; i--)
                  {
                     if (trend[i] ==  1) PlotPoint(i,rsiUa,rsiUb,rsi);
                     if (trend[i] == -1) PlotPoint(i,rsiDa,rsiDb,rsi);
                  }                              
         return(0);
      }

      if (ArrayRange(tBuffer,0) != Bars) ArrayResize(tBuffer,Bars);
      if (trend[limit]== 1) CleanPoint(limit,rsiUa,rsiUb);
      if (trend[limit]==-1) CleanPoint(limit,rsiDa,rsiDb);
      for(i=limit, r=Bars-i-1; i >= 0; i--,r++)
      {
         double rawPrice = iMA(NULL,0,1,0,MODE_SMA,Price,i);
         tBuffer[r][iPrc] = iSmooth(rawPrice,PreSmooth,PreSmoothPhase,i,0);
         tBuffer[r][iMom] = tBuffer[r][iPrc]-tBuffer[r-1][iPrc];

            double momRatio = 0.00;
            double sumMomen = 0.00;
            double ratio    = 0.00;

            for (int k = 0; k<NmaLength; k++)
            {
               sumMomen += MathAbs(tBuffer[r-k][iMom]);
               momRatio +=         tBuffer[r-k][iMom]*(MathSq

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

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

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

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

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

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

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