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

rsx (vidya) 1.2 mtf + arrows.mq5

Вы автор или правообладатель?

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

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

О программе

Данный индикатор предназначен для платформы MetaTrader 5 и выполняет расчёт аналитического показателя RSX с применением сглаживания Vidya. Он работает в отдельном окне графика и поддерживает многотаймфреймный режим, позволяя отображать данные с более высокого таймфрейма на текущем графике.

Индикатор отрисовывает три линии RSX в отдельном окне и рисует стрелки-маркеры при изменении направления наклона. Пользователь может выбирать из множества типов цен для расчёта, включая стандартные (Close, Open, High, Low) и цены Хейкин Аши. Доступна интерполяция значений при работе в многотаймфреймном режиме.

Система уведомлений поддерживает несколько каналов: всплывающие сообщения, звуковые сигналы, электронную почту и push-уведомления. Уведомления срабатывают при смене направления наклона показателя. Настройки позволяют гибко управлять периодами расчёта, внешним видом стрелок, цветами и поведением оповещений.

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

НастройкаОписание
TimeFrame Выбирает таймфрейм, на котором выполняется расчёт показателя.
RsxLength Задаёт период расчёта показателя RSX.
Price Выбирает тип цены, используемый для расчёта показателя (Close, Open, High, Low, Median, Typical, Weighted, Average, Heikin Ashi и другие).
VidyaPeriod Задаёт период расчёта Vidya.
VidyaSmooth Задаёт период сглаживания Vidya.
AlertsOn Включает или отключает систему уведомлений при смене направления наклона показателя.
AlertsOnCurrent Определяет, на какой свече отслеживать изменение направления: на текущей открытой или на следующей.
AlertsMessage Разрешает отображение всплывающих сообщений при смене направления наклона показателя.
AlertsSound Разрешает воспроизведение звукового сигнала при смене направления наклона показателя.
AlertsEmail Разрешает отправку уведомлений по электронной почте при смене направления наклона показателя.
AlertsPushNotif Разрешает отправку push-уведомлений при смене направления наклона показателя.
arrowsVisible Включает или отключает отображение стрелок-маркеров на графике.
arrowsOnNewest Определяет, рисовать ли стрелки на самой новой свече более высокого таймфрейма.
arrowsIdentifier Указывает уникальный идентификатор для объектов-стрелок на графике.
arrowsUpperGap Задаёт отступ стрелки вверх от цены в единицах ATR.
arrowsLowerGap Задаёт отступ стрелки вниз от цены в единицах ATR.
arrowsUpColor Задаёт цвет стрелки для восходящего направления.
arrowsDnColor Задаёт цвет стрелки для нисходящего направления.
arrowsUpCode Задаёт код стрелки для восходящего направления.
arrowsDnCode Задаёт код стрелки для нисходящего направления.
arrowsUpSize Задаёт размер стрелки для восходящего направления.
arrowsDnSize Задаёт размер стрелки для нисходящего направления.
Interpolate Включает интерполяцию значений при работе индикатора в многотаймфреймном режиме.
Получить полный код

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

#property indicator_separate_window
#property indicator_buffers    3
#property indicator_color1     clrLimeGreen
#property indicator_color2     clrOrange
#property indicator_color3     clrOrange
#property indicator_width1     2
#property indicator_width2     2
#property indicator_width3     2
#property indicator_minimum    -2
#property indicator_maximum    102
#property indicator_level1     70
#property indicator_level2     30
#property indicator_levelcolor clrDarkGray
#property indicator_levelstyle STYLE_DOT
#property strict

enum enPrices
{
   pr_close,      // Close
   pr_open,       // Open
   pr_high,       // High
   pr_low,        // Low
   pr_median,     // Median
   pr_typical,    // Typical
   pr_weighted,   // Weighted
   pr_average,    // Average (high+low+open+close)/4
   pr_medianb,    // Average median body (open+close)/2
   pr_tbiased,    // Trend biased price
   pr_tbiased2,   // Trend biased (extreme) price
   pr_haclose,    // Heiken ashi close
   pr_haopen ,    // Heiken ashi open
   pr_hahigh,     // Heiken ashi high
   pr_halow,      // Heiken ashi low
   pr_hamedian,   // Heiken ashi median
   pr_hatypical,  // Heiken ashi typical
   pr_haweighted, // Heiken ashi weighted
   pr_haaverage,  // Heiken ashi average
   pr_hamedianb,  // Heiken ashi median body
   pr_hatbiased,  // Heiken ashi trend biased price
   pr_hatbiased2, // Heiken ashi trend biased (extreme) price
   pr_habclose,   // Heiken ashi (better formula) close
   pr_habopen ,   // Heiken ashi (better formula) open
   pr_habhigh,    // Heiken ashi (better formula) high
   pr_hablow,     // Heiken ashi (better formula) low
   pr_habmedian,  // Heiken ashi (better formula) median
   pr_habtypical, // Heiken ashi (better formula) typical
   pr_habweighted,// Heiken ashi (better formula) weighted
   pr_habaverage, // Heiken ashi (better formula) average
   pr_habmedianb, // Heiken ashi (better formula) median body
   pr_habtbiased, // Heiken ashi (better formula) trend biased price
   pr_habtbiased2 // Heiken ashi (better formula) trend biased (extreme) price
};

extern ENUM_TIMEFRAMES TimeFrame          = PERIOD_CURRENT;  // Time frame
extern int             RsxLength          = 14;              // RSX period
extern enPrices        Price              = pr_close;        // Price to use
extern int             VidyaPeriod        = 10;              // Vidya period
extern int             VidyaSmooth        = 5;               // Vidya period
extern bool            AlertsOn           = false;           // Turn alerts on?
extern bool            AlertsOnCurrent    = true;            // Alerts on still opened bar?
extern bool            AlertsMessage      = true;            // Alerts should show popup message?
extern bool            AlertsSound        = false;           // Alerts should play a sound?
extern bool            AlertsEmail        = false;           // Alerts should send email?
extern bool            AlertsPushNotif    = false;           // Alerts should send notification?
input bool             arrowsVisible      = false;           // Arrows visible on/off?
input bool             arrowsOnNewest     = true;            // Arrows drawn on newest bar of higher time frame bar on/off?
input string           arrowsIdentifier   = "rsx Arrows1";   // Unique ID for arrows
input double           arrowsUpperGap     = 0.5;             // Upper arrow gap
input double           arrowsLowerGap     = 0.5;             // Lower arrow gap
input color            arrowsUpColor      = clrLimeGreen;    // Up arrow color
input color            arrowsDnColor      = clrOrange;       // Down arrow color
input int              arrowsUpCode       = 221;             // Up arrow code
input int              arrowsDnCode       = 222;             // Down arrow code
input int              arrowsUpSize       = 2;               // Up arrow size
input int              arrowsDnSize       = 2;               // Down arrow size
extern bool            Interpolate        = true;            // Interpolate in mtf mode

double rsx[],rsxDa[],rsxDb[],slope[],wrkBuffer[][13],count[];
string indicatorFileName;
#define _mtfCall(_buff,_ind) iCustom(NULL,TimeFrame,indicatorFileName,PERIOD_CURRENT,RsxLength,Price,VidyaPeriod,VidyaSmooth,AlertsOn,AlertsOnCurrent,AlertsMessage,AlertsSound,AlertsEmail,AlertsPushNotif,arrowsVisible,arrowsOnNewest,arrowsIdentifier,arrowsUpperGap,arrowsLowerGap,arrowsUpColor,arrowsDnColor,arrowsUpCode,arrowsDnCode,arrowsUpSize,arrowsDnSize,_buff,_ind)

int OnInit()
{
      // код доступен только после оплаты
   }
void OnDeinit(const int reason)
{ 
    string lookFor       = arrowsIdentifier+":";
    int    lookForLength = StringLen(lookFor);
    for (int i=ObjectsTotal()-1; i>=0; i--)
    {
       string objectName = ObjectName(i);
       if (StringSubstr(objectName,0,lookForLength) == lookFor) ObjectDelete(objectName);
    }
}

int start()
{
      // код доступен только после оплаты
   }
   int i,r,counted_bars=IndicatorCounted();
      if(counted_bars<0) return(-1);
      if(counted_bars>0) counted_bars--;
         int limit=fmin(Bars-counted_bars,Bars-1); count[0] = limit;
         if (TimeFrame!=_Period)
         {
            limit = (int)fmax(limit,fmin(Bars-1,_mtfCall(4,0)*TimeFrame/Period()));
            if (slope[limit]==-1) CleanPoint(limit,rsxDa,rsxDb);
            for (i=limit;i>=0;i--)
            {
               int y = iBarShift(NULL,TimeFrame,Time[i]);
               rsx[i]   = _mtfCall(0,y); 
               rsxDa[i] = rsxDb[i] = EMPTY_VALUE;
               slope[i] = _mtfCall(3,y); 

               if (!Interpolate || (i>0 && y==iBarShift(NULL,TimeFrame,Time[i-1]))) continue;
               #define _interpolate(buff) buff[i+k] = buff[i]+(buff[i+n]-buff[i])*k/n
               int n,k; datetime time = iTime(NULL,TimeFrame,y);
                  for(n = 1; (i+n)<Bars && Time[i+n] >= time; n++) continue;	
                  for(k = 1; k<n && (i+n)<Bars && (i+k)<Bars; k++) _interpolate(rsx);                                
            }
            for (i=limit; i >= 0; i--) if (slope[i]==-1) PlotPoint(i,rsxDa,rsxDb,rsx);
   return(0);
   }

   double Kg = (3.0)/(2.0+RsxLength);
   double Hg = 1.0-Kg;
   if (ArrayRange(wrkBuffer,0) != Bars) ArrayResize(wrkBuffer,Bars);
   if (slope[limit]==-1) CleanPoint(limit,rsxDa,rsxDb);
   for(i=limit, r=Bars-i-1; i>=0; i--, r++)
   {
      double price = getPrice(Price,Open,Close,High,Low,i,Bars);
      wrkBuffer[r][12] = iVidya(price,price,VidyaPeriod,VidyaSmooth,i,Bars);

      if (i==(Bars-1)) for (int c=0; c<12; c++) wrkBuffer[r][c] = 0;

      double roc = (r>0) ? wrkBuffer[r][12]-wrkBuffer[r-1][12] : 0;
      double roa = fabs(roc);
      for (int k=0; k<3 && r>0; k++)
      {
         int kk = k*2;
            wrkBuffer[r][kk+0] = Kg*roc                + Hg*wrkBuffer[r-1][kk+0];
            wrkBuffer[r][kk+1] = Kg*wrkBuffer[r][kk+0] + Hg*wrkBuffer[r-1][kk+1]; roc = 1.5*wrkBuffer[r][kk+0] - 0.5 * wrkBuffer[r][kk+1];
            wrkBuffer[r][kk+6] = Kg*roa                + Hg*wrkBuffer[r-1][kk+6];
            wrkBuffer[r][kk+7] = Kg*wrkBuffer[r][kk+6] + Hg*wrkBuffer[r-1][kk+7]; roa = 1.5*wrkBuffer[r][kk+6] - 0.5 * wrkBuffer[r][kk+7];
      }
      rsx[i] = (roa != 0) ? fmax(fmin((roc/roa+1.0)*50.0,100.00),0.00) : 50; 
      rsxDa[i] = rsxDb[i] = EMPTY_VALUE;
      slope[i] = (i<Bars-1) ? (rsx[i]>rsx[i+1]) ? 1 : (rsx[i]<rsx[i+1])? -1 : slope[i+1] : 0;
         if (slope[i

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

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

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

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

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

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

Стоимость полного кода
1 150,20₽ ≈ $14.06