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

past_regression_deviated_one_more_average_rsi_-_separate_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 общих тегов
Вы автор или правообладатель?

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

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

О программе

Это пользовательский индикатор для MetaTrader 4, отображающий аналитические данные в отдельном окне индикатора с использованием 8 буферов. Он вычисляет линейную регрессию за настраиваемый период и строит три пары каналов стандартных отклонений вокруг неё.

Индикатор включает RSI-подобный осциллятор, в котором стандартное сглаживание заменено адаптивным экспоненциальным скользящим средним (OMA). Значение осциллятора рассчитывается на основе изменений цены и их абсолютных величин, нормализовано в диапазон 0–100.

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

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

НастройкаОписание
TimeFrame Таймфрейм — Таймфрейм, на котором выполняется расчёт индикатора, или специальные значения calculateValue и returnBars
LRlength Длина регрессии — Период линейной регрессии, определяющий количество баров для расчёта линейной регрессии и стандартных отклонений
stdchannel1 Стандартное отклонение 1 — Множитель стандартного отклонения для первого пары каналов (верхний и нижний)
stdchannel2 Стандартное отклонение 2 — Множитель стандартного отклонения для второй пары каналов (верхний и нижний)
stdchannel3 Стандартное отклонение 3 — Множитель стандартного отклонения для третьей пары каналов (верхний и нижний)
RsiLength Период RSI — Период расчёта RSI-подобного осциллятора
OmaSpeed Скорость OMA — Константа скорости, влияющая на чувствительность адаптивного скользящего среднего OMA
OmaAdaptive Адаптивная OMA — Переключатель адаптивного режима скользящего среднего OMA, автоматически подстраивающего период под волатильность
Price Тип цены — Тип цены, используемый для расчётов индикатора (например, закрытие, открытие и т.д.)
UseSymbol Символ — Символ инструмента для анализа; если пуст — используется текущий символ графика
Interpolate Интерполяция — Включение или выключение интерполяции значений между барами при работе на разных таймфреймах
Получить полный код

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

#property indicator_separate_window
#property indicator_buffers 8
#property indicator_color1 DeepSkyBlue
#property indicator_color2 Yellow
#property indicator_color3 Olive
#property indicator_color4 Olive
#property indicator_color5 Orange
#property indicator_color6 Orange
#property indicator_color7 Gray
#property indicator_color8 Gray
#property indicator_width1 2

extern string TimeFrame    = "Current time frame";
extern int    LRlength     = 55;
extern double stdchannel1  =  1;
extern double stdchannel2  =  2;
extern double stdchannel3  =  3;
extern int    RsiLength    = 14;
extern double OmaSpeed     = 1.5;
extern bool   OmaAdaptive  = true;
extern int    Price        = PRICE_CLOSE;
extern string UseSymbol    = "";
extern bool   Interpolate  = true;

double lrBuffer[];
double upBuffer1[];
double dnBuffer1[];
double upBuffer2[];
double dnBuffer2[];
double upBuffer3[];
double dnBuffer3[];
double prices[];

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

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

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

   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
           limit=MathMin(Bars-counted_bars,Bars-1);
           if (returnBars) { prices[0] = limit+1; return(0); }
           if (iOpen(UseSymbol,0,0)==0)
                  symbol = Symbol();
           else   symbol = UseSymbol;

   if (calculateValue || timeFrame == Period())
   {
      for(i=limit; i>=0; i--)
      {
         prices[i] = iRsi(iMA(symbol,0,1,0,MODE_SMA,Price,i),RsiLength,OmaSpeed,OmaAdaptive,i);
         double slope;
         double value  = iLRValue(slope,LRlength,i);
         double stddev = 0;

            for(int k=0; k<LRlength; k++)
            {
               double diff = prices[i+k]-(value-k*slope);
                  stddev  += diff*diff;
            }
            stddev = MathSqrt(stddev/(LRlength-1.0));

         lrBuffer[i]  = value;
         upBuffer1[i] = lrBuffer[i]+(stdchannel1*stddev);
         dnBuffer1[i] = lrBuffer[i]-(stdchannel1*stddev);
         upBuffer2[i] = lrBuffer[i]+(stdchannel2*stddev);
         dnBuffer2[i] = lrBuffer[i]-(stdchannel2*stddev);
         upBuffer3[i] = lrBuffer[i]+(stdchannel3*stddev);
         dnBuffer3[i] = lrBuffer[i]-(stdchannel3*stddev);
      }
      if (!calculateValue) IndicatorShortName("prd "+symbol+" ("+LRlength+")");
      return(0);
   }

   limit = MathMax(limit,MathMin(Bars-1,iCustom(symbol,timeFrame,indicatorFileName,"returnBars",0,0)*timeFrame/Period()));
   for (i=limit;i>=0;i--)
   {
      int y = iBarShift(NULL,timeFrame,Time[i]);
         prices[i]    = iCustom(symbol,timeFrame,indicatorFileName,"calculateValue",LRlength,stdchannel1,stdchannel2,stdchannel3,RsiLength,OmaSpeed,OmaAdaptive,Price,0,y);
         lrBuffer[i]  = iCustom(symbol,timeFrame,indicatorFileName,"calculateValue",LRlength,stdchannel1,stdchannel2,stdchannel3,RsiLength,OmaSpeed,OmaAdaptive,Price,1,y);
         upBuffer1[i] = iCustom(symbol,timeFrame,indicatorFileName,"calculateValue",LRlength,stdchannel1,stdchannel2,stdchannel3,RsiLength,OmaSpeed,OmaAdaptive,Price,2,y);
         dnBuffer1[i] = iCustom(symbol,timeFrame,indicatorFileName,"calculateValue",LRlength,stdchannel1,stdchannel2,stdchannel3,RsiLength,OmaSpeed,OmaAdaptive,Price,3,y);
         upBuffer2[i] = iCustom(symbol,timeFrame,indicatorFileName,"calculateValue",LRlength,stdchannel1,stdchannel2,stdchannel3,RsiLength,OmaSpeed,OmaAdaptive,Price,4,y);
         dnBuffer2[i] = iCustom(symbol,timeFrame,indicatorFileName,"calculateValue",LRlength,stdchannel1,stdchannel2,stdchannel3,RsiLength,OmaSpeed,OmaAdaptive,Price,5,y);
         upBuffer3[i] = iCustom(symbol,timeFrame,indicatorFileName,"calculateValue",LRlength,stdchannel1,stdchannel2,stdchannel3,RsiLength,OmaSpeed,OmaAdaptive,Price,6,y);
         dnBuffer3[i] = iCustom(symbol,timeFrame,indicatorFileName,"calculateValue",LRlength,stdchannel1,stdchannel2,stdchannel3,RsiLength,OmaSpeed,OmaAdaptive,Price,7,y);

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

         datetime time = iTime(NULL,timeFrame,y);
            for(n = 1; i+n < Bars && Time[i+n] >= time; n++) continue;	
            for(k = 1; k < n; k++)
            {
               prices[i+k]    = prices[i]    + (prices[i+n]   -prices[i]   )*k/n;
               lrBuffer[i+k]  = lrBuffer[i]  + (l

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

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

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

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

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

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

Стоимость полного кода
797,10₽ ≈ $9.74