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

Rwma Smoothed Rsi T3 Inverse Fisher Transform

rwma_smooth_rsi_t3_inverse_fisher_transform_signal_line_alerts_mtf.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 4 рассчитывает аналитический показатель на основе сглаженного RSI с применением алгоритма T3 и обратного преобразования Фишера. Входные данные цены проходят через многослойное скользящее среднее (RWMA) с настраиваемой глубиной сглаживания, после чего вычисляется RSI-подобный показатель, сглаженный по T3, и преобразуется обратным преобразованием Фишера в диапазон от 0 до 100.

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

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

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

НастройкаОписание
TimeFrame Таймфрейм — Таймфрейм, на котором рассчитывается индикатор. Поддерживается выбор из стандартных периодов (M1, M5, M15, M30, H1, H4, D1, W1, MN), а также специальных режимов «returnBars» и «calculateValue».
Length Период RSI — Период расчёта RSI-подобного показателя, определяет количество баров для анализа изменения цены.
Hot Параметр T3 Hot — Параметр сглаживания алгоритма T3, влияет на степень инерционности фильтра. Принимает дробное значение.
OriginalT3 Оригинальный T3 — Переключатель выбора формулы расчёта коэффициентов T3: оригинальная или альтернативная версия.
UseFilteredPrice Использовать сглаженную цену — Переключатель, определяющий, используется ли предварительно сглаженная цена (через RWMA) или простая скользящая средняя SMA для расчёта RSI.
EmaPeriod Период EMA — Период экспоненциального сглаживания для расчёта сигнальной линии и промежуточных вычислений.
SignalPeriod Период сигнальной линии — Период сглаживания для расчёта сигнальной линии на основе значений обратного преобразования Фишера.
RwmaLength Длина RWMA — Длина окна для расчёта взвешенного скользящего среднего (RWMA), минимальное значение — 2.
Depth Глубина RWMA — Глубина многослойного скользящего среднего (RWMA), определяет количество проходов сглаживания входных данных цены. Значение ограничивается от 2 до 50.
Price Тип цены — Тип цены, используемый для расчётов (например, цена закрытия). Принимает целочисленный код типа цены.
Interpolate Интерполяция — Переключатель интерполяции значений индикатора между барами при работе на старших таймфреймах.
MultiColor Многоцветный режим — Переключатель многоцветного отображения индикатора: при изменении направления тренда цвета линий меняются.
alertsOn Уведомления включены — Главный переключатель включения/отключения всей системы уведомлений индикатора.
alertsOnCurrent Уведомления на текущем баре — Переключатель, определяющий, отслеживаются ли события на текущем баре (true) или на предыдущем завершённом баре (false).
alertsMessage Текстовые уведомления — Переключатель отправки всплывающих текстовых уведомлений об изменениях тренда и пересечениях сигнальной линии.
alertsSound Звуковые уведомления — Переключатель воспроизведения звукового сигнала при срабатывании уведомлений.
alertsEmail Уведомления по email — Переключатель отправки уведомлений об изменениях тренда и пересечениях сигнальной линии по электронной почте.
Получить полный код

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

#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1  DeepSkyBlue
#property indicator_color2  PaleVioletRed
#property indicator_color3  PaleVioletRed
#property indicator_color4  Gold
#property indicator_width1  2
#property indicator_width2  2
#property indicator_width3  2
#property indicator_minimum -5
#property indicator_maximum 105
#property indicator_level1  12
#property indicator_level2  88
#property indicator_levelcolor DimGray

extern string TimeFrame        = "Current time frame";
extern int    Length           = 32;
extern double Hot              = 0.7;
extern bool   OriginalT3       = false;
extern bool   UseFilteredPrice = false;
extern int    EmaPeriod        = 4;
extern int    SignalPeriod     = 5;
extern int    RwmaLength       = 2;
extern int    Depth            = 10;
extern int    Price            = PRICE_CLOSE;
extern bool   Interpolate      = true;
extern bool   MultiColor       = true;

extern bool   alertsOn        = false;
extern bool   alertsOnCurrent = false;
extern bool   alertsMessage   = true;
extern bool   alertsSound     = false;
extern bool   alertsEmail     = false;

#define MAX_depth 50
double  inv[];
double  invUa[];
double  invUb[];
double  rwm[];
double  rsx[];
double  trend[];
double  trends[];
double  signal[];
double  pBuffer[][MAX_depth];

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

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

double work[][2];
#define _ema1 0
#define _ema2 1

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

   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
           limit=Bars-counted_bars;
           if (returnBars) { inv[0] = limit+1; return(0); }

   if (calculateValue || timeFrame == Period())
   {
      if (ArrayRange(pBuffer,0) != Bars) { ArrayResize(pBuffer,Bars); ArrayResize(work,Bars); }
      if (MultiColor && !calculateValue && trend[limit]==-1) CleanPoint(limit,invUa,invUb);
      double weight = (RwmaLength+1.0)*RwmaLength*0.5;

      for(i=limit, r=Bars-limit-1; i>=0; i--,r++)
      {
         double price = iMA(NULL,0,1,0,MODE_SMA,Price,i);

         double coeff  = 5;
         double sum    = 0;
         double sumc   = 0;
         for (int s=0; s<Depth; s++)
         {
            pBuffer[r][s] = price;
            if (r>RwmaLength)
            {
               for (l=0, price=0; l<RwmaLength; l++) price += (RwmaLength-l)*pBuffer[r-l][s];
                                                     price /= weight;
            }
            sum  += coeff*price;
            sumc += coeff;
            coeff = MathMax(coeff-1,1);
         }
         rwm[i] = sum/sumc;
      }

      double alpha  = 2.0 / (1.0+EmaPeriod);
      double alphas = 2.0 / (1.0+SignalPeriod);
      double Kg     = (3.0)/(2.0+Length); 
      double Hg     = 1.0-Kg;
      for(i=limit, r=Bars-i-1; i>=0; i--, r++)
      {
         if (UseFilteredPrice)
               rsx[i] = 0.1 * iRsi(rwm[i]                          ,Length,Hot,OriginalT3,i);
         else  rsx[i] = 0.1 * iRsi(iMA(NULL,0,1,0,MODE_SMA,Price,i),Length,Hot,OriginalT3,i);
                work[r][_ema1] = work[r-1][_ema1]+alpha*(rsx[i]        -work[r-1][_ema1]);
                work[r][_ema2] = work[r-1][_ema2]+alpha*(work[r][_ema1]-work[r-1][_ema1]);
         double zlema          = 2.0*work[r][_ema1]-work[r][_ema2];
                inv[i]         = 50.0*(1+(MathExp(2*zlema)-1)/(MathExp(2*zlema)+1));
                signal[i]      = signal[i+1]+alphas*(inv[i]-signal[i+1]);
                invUa[i]       = EMPTY_VALUE;
                invUb[i]       = EMPTY_VALUE;
                trend[i]       = trend[i+1];
                trends[i]      = trends[i+1];

               if (inv[i] > inv[i+1])  trend[i] = 1;
               if (inv[i] < inv[i+1])  trend[i] =-1;
               if (inv[i] > signal[i]) trends[i]= 1;
               if (inv[i] < signal[i]) trends[i]=-1;
               if (MultiColor && !calculateValue && trend[i]==-1) PlotPoint(i,invUa,invUb,inv);
      }      

      manageAlerts();      
      return(0);
   }

   limit = MathMax(limit,MathMin(Bars,iCustom(NULL,timeFrame,indicatorFileName,"returnBars",0,0)*timeFrame/Period()));
   if (MultiColor && trend[limit]==-1) CleanPoint(limit,invUa,invUb);
   for (i=limit;i>=0; i--)
   {
      int y     = iBarShift(NULL,timeFrame,Time[i]);
      inv[i]    = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",Length,Hot,OriginalT3,UseFilteredPrice,EmaPeriod,SignalPeriod,RwmaLength,Depth,Price,0,y);
      signal[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",Length,Hot,OriginalT3,UseFilteredPrice,EmaPeriod,SignalPeriod,RwmaLength,Depth,Price,3,y);
      invUa[i]  = EMPTY_VALUE;
      invUb[i]  = EMPTY_VALUE;
      trend[i]  = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",Length,Hot,OriginalT3,UseFilteredPrice,EmaPeriod,SignalPeriod,RwmaLength,Depth,Price,6,y);
      trends[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",Length,Hot,OriginalT3,UseFilteredPrice,EmaPeriod,SignalPeriod,RwmaLength,Depth,Price,7,y);

      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;	
         double factor = 1.0 / n;
         for(int j = 1; j < n; j++)
         {
     	      inv[i+j]    = j*factor*inv[i+n]    + (1.0-j*factor)*inv[i];
     	      signal[i+j] = j*factor*signal[i+n] + (1.0-j*factor)*signal[i];
         }     	      

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

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

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

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

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

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

Стоимость полного кода
945₽ ≈ $11.55