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

dynamic zone - inverse fisher transform of rsi smoothed.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 с последующим применением пользовательской функции сглаживания и обратного преобразования Фишера.

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

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

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

НастройкаОписание
TimeFrame TimeFrame — Выбор таймфрейма для расчёта индикатора. Поддерживается задача переключения между таймфреймами и специальное значение для возврата количества баров.
RSIPeriod RSIPeriod — Период расчёта индикатора RSI, используемый в качестве исходных данных для дальнейшей обработки.
RSIPrice RSIPrice — Тип цены, применяемый при расчёте RSI (например, закрытие).
SmoothLength SmoothLength — Длина сглаживания, определяющая глубину фильтрации исходного сигнала RSI перед преобразованием.
SmoothPhase SmoothPhase — Фаза сглаживания, влияющая на скорость реакции фильтра на изменение цены.
SmoothDouble SmoothDouble — Переключатель двойного сглаживания. При активации применяется два последовательных этапа фильтрации.
DzLookBackBars DzLookBackBars — Количество баров назад, используемое для расчёта динамических зон вероятности.
DzStartBuyProbability DzStartBuyProbability — Начальное значение вероятности для расчёта зоны покупки (нижней границы).
DzStartSellProbability DzStartSellProbability — Начальное значение вероятности для расчёта зоны продажи (верхней границы).
Interpolate Interpolate — Переключатель интерполяции значений между барами при работе на разных таймфреймах.
Получить полный код

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

#property indicator_separate_window
#property indicator_buffers   8
#property indicator_color1    DimGray
#property indicator_color2    PaleVioletRed
#property indicator_color3    PaleVioletRed
#property indicator_color4    DeepSkyBlue
#property indicator_color5    DeepSkyBlue
#property indicator_color6    PaleVioletRed
#property indicator_color7    DeepSkyBlue
#property indicator_color8    DimGray
#property indicator_width2    2
#property indicator_width3    2
#property indicator_width4    2
#property indicator_width5    2
#property indicator_style8    STYLE_DOT
#property indicator_maximum   1
#property indicator_minimum  -1

#import "dynamicZone.dll"
   double dzBuy(double& sourceArray[],double probabiltyValue, int lookBack, int bars, int i);
   double dzSell(double& sourceArray[],double probabiltyValue, int lookBack, int bars, int i);
#import

extern string TimeFrame              = "Current time frame";
extern int    RSIPeriod              =  5;
extern int    RSIPrice               =  PRICE_CLOSE;
extern double SmoothLength           = 9;
extern double SmoothPhase            = 0;
extern bool   SmoothDouble           = false;
extern int    DzLookBackBars         = 70;
extern double DzStartBuyProbability  = 0.15;
extern double DzStartSellProbability = 0.15;
extern bool   Interpolate            = true;

double ifishua[];
double ifishub[];
double ifishda[];
double ifishdb[];
double ifisher[];
double sli[];
double bli[];
double zli[];

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

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

double trend[];

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

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

   if (calculateValue || timeFrame==Period())
   {
      if (ArraySize(trend)!=Bars) ArrayResize(trend,Bars);
      if (!calculateValue) if (trend[Bars-limit-1]== 1) CleanPoint(limit,ifishua,ifishub);
      if (!calculateValue) if (trend[Bars-limit-1]==-1) CleanPoint(limit,ifishda,ifishdb);

      for(i=limit, r=Bars-i-1; i>=0; i--,r++)
      {
         double avgRsi = iDSmooth(0.1*(iRSI(NULL,0,RSIPeriod,RSIPrice,i)-50),SmoothLength,SmoothPhase,i);
            ifisher[i] = (MathExp(2*avgRsi)-1)/(MathExp(2*avgRsi)+1);
            bli[i]     = dzBuy (ifisher, DzStartBuyProbability,  DzLookBackBars, Bars, i);
            sli[i]     = dzSell(ifisher, DzStartSellProbability, DzLookBackBars, Bars, i);
            zli[i]     = dzSell(ifisher, 0.5,                    DzLookBackBars, Bars, i);
            if (calculateValue) continue;

            trend[r]   = trend[r-1];
               if (ifisher[i] < sli[i] && ifisher[i] > bli[i]) trend[r] =  0;
               if (ifisher[i] > sli[i])                        trend[r] =  1;
               if (ifisher[i] < bli[i])                        trend[r] = -1;
            ifishda[i] = EMPTY_VALUE; ifishdb[i] = EMPTY_VALUE;         
            ifishua[i] = EMPTY_VALUE; ifishub[i] = EMPTY_VALUE;         
               if (trend[r]== 1) PlotPoint(i,ifishua,ifishub,ifisher);
               if (trend[r]==-1) PlotPoint(i,ifishda,ifishdb,ifisher);
      }
      return(0);
   }      

   limit = MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,indicatorFileName,"returnBars",0,0)*timeFrame/Period()));

   if (ArraySize(trend)!=Bars) ArrayResize(trend,Bars);
   if (trend[Bars-limit-1]== 1) CleanPoint(limit,ifishua,ifishub);
   if (trend[Bars-limit-1]==-1) CleanPoint(limit,ifishda,ifishdb);
   for(i=limit, r=Bars-i-1; i>=0; i--,r++)
   {
      int y = iBarShift(NULL,timeFrame,Time[i]);
         ifishda[i] = EMPTY_VALUE; 
         ifishdb[i] = EMPTY_VALUE;         
         ifishua[i] = EMPTY_VALUE; 
         ifishub[i] = EMPTY_VALUE;         
         ifisher[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",RSIPeriod,RSIPrice,SmoothLength,SmoothPhase,SmoothDouble,DzLookBackBars,DzStartBuyProbability,DzStartSellProbability,0,y);
         bli[i]     = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",RSIPeriod,RSIPrice,SmoothLength,SmoothPhase,SmoothDouble,DzLookBackBars,DzStartBuyProbability,DzStartSellProbability,5,y);
         sli[i]     = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",RSIPeriod,RSIPrice,SmoothLength,SmoothPhase,SmoothDouble,DzLookBackBars,DzStartBuyProbability,DzStartSellProbability,6,y);
         zli[i]     = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",RSIPeriod,RSIPrice,SmoothLength,SmoothPhase,SmoothDouble,DzLookBackBars,DzStartBuyProbability,DzStartSellProbability,7,y);
            if (ifisher[i] < sli[i] && ifisher[i] > bli[i]) trend[r] =  0;

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

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

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

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

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

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

Стоимость полного кода
809,70₽ ≈ $9.90