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

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

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

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

О программе

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

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

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

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

НастройкаОписание
TimeFrame Таймфрейм, на котором рассчитывается индикатор. Допускается выбор из M1, M5, M15, M30, H1, H4, D1, W1, MN или специальное значение Current time frame.
RsiPeriod Период расчёта индикатора RSI, определяющий количество баров для усреднения.
RsiPrice Тип цены, используемый для расчёта RSI: 0 — Close, 1 — Open, 2 — High, 3 — Low, 4 — Typical, 5 — Median, 6 — Weighted Close, 7 — среднее Open/Close, 8 — среднее OHLC.
_rsimethods Справочная строка, описывающая доступные методы расчёта RSI: 0 — rsi, 1 — wilder rsi, 2 — rsx, 3 — cuttler rsi.
RsiMethod Метод расчёта индикатора RSI: 0 — стандартный RSI, 1 — RSI Уилдера, 2 — RSX, 3 — RSI Каттлера.
SmoothLength Длина сглаживающей скользящей средней, применяемой к значениям RSI.
SmoothPhase Фазовый сдвиг сглаживающей средней, влияющий на форму кривой (значение от -100 до 100).
SmoothDouble Включает двойное сглаживание: применение сглаживания дважды с длиной, равной квадратному корню от исходной длины.
PaFilter Параметр фильтра, влияющий на расчёт фазы и определение периода в преобразовании Гильберта.
PaCycles Количество циклов, необходимых для достижения заданной фазы в расчёте периода через преобразование Гильберта.
DzStartBuyProbability Начальная вероятность для расчёта нижней динамической зоны (зона покупки), определяющая порог срабатывания сигнала.
DzStartSellProbability Начальная вероятность для расчёта верхней динамической зоны (зона продажи), определяющая порог срабатывания сигнала.
Interpolate Включает или отключает интерполяцию значений индикатора между барами для более плавного отображения.
alertsOn Главный переключатель, включающий или отключающий всю систему уведомлений.
alertsOnLeavingOsOb Включает уведомления при выходе из зоны перекупленности или перепроданности.
alertsOnEnteringOsOb Включает уведомления при входе в зону перекупленности или перепроданности.
alertsOnZeroLineCross Включает уведомления при пересечении нулевой линии индикатора.
alertsOnUpLevel1Cross Включает уведомления при пересечении верхнего уровня 1 вверх или вниз.
alertsOnDnLevel1Cross Включает уведомления при пересечении нижнего уровня 1 вверх или вниз.
alertsOnCurrent При включении уведомления проверяются на текущем баре, при выключении — на предыдущем завершённом баре.
alertsMessage Включает или отключает всплывающие оконные сообщения при срабатывании событий.
alertsSound Включает или отключает звуковые уведомления при срабатывании событий.
alertsEmail Включает или отключает отправку email-уведомлений при срабатывании событий.
arrowsVisible Управляет видимостью стрелок на графике.
arrowsIdentifier Идентификатор объектов стрелок на графике, используемый для их управления и удаления.
arrowsDisplacement Отступ стрелок от цены в единицах среднего истинного диапазона (ATR с периодом 20).
arrowsUpColor Цвет стрелок, указывающих направление вверх.
arrowsDnColor Цвет стрелок, указывающих направление вниз.
arrowsOnLeavingOsOb Включает отображение стрелок при выходе из зоны перекупленности или перепроданности.
arrowsOnEnteringOsOb Включает отображение стрелок при входе в зону перекупленности или перепроданности.
arrowsOnZeroLineCross Включает отображение стрелок при пересечении нулевой линии.
arrowsOnUpLevel1Cross Включает отображение стрелок при пересечении верхнего уровня 1.
arrowsOnDnLevel1Cross Включает отображение стрелок при пересечении нижнего уровня 1.
LinesVisible Управляет видимостью вертикальных линий, отображаемых при наступлении сигналов.
verticalLinesID Идентификатор объектов вертикальных линий на графике, используемый для их управления и удаления.
verticalLinesUpColor Цвет вертикальных линий, рисуемых вверх.
verticalLinesDnColor Цвет вертикальных линий, рисуемых вниз.
verticalLinesStyle Стиль отображения вертикальных линий (например, пунктир, точка и т.д.).
verticalLinesWidth Толщина вертикальных линий в пикселях.
linesOnLeavingOsOb Включает отображение вертикальных линий при выходе из зоны перекупленности или перепроданности.
linesOnEnteringOsOb Включает отображение вертикальных линий при входе в зону перекупленности или перепроданности.
linesOnZeroLineCross Включает отображение вертикальных линий при пересечении нулевой линии.
linesOnUpLevel1Cross Включает отображение вертикальных линий при пересечении верхнего уровня 1.
linesOnDnLevel1Cross Включает отображение вертикальных линий при пересечении нижнего уровня 1.
Получить полный код

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

#property indicator_separate_window
#property indicator_buffers   8
#property indicator_color1    DarkGray
#property indicator_color2    Red
#property indicator_color3    Red
#property indicator_color4    LimeGreen
#property indicator_color5    LimeGreen
#property indicator_color6    LimeGreen
#property indicator_color7    Red
#property indicator_color8    DimGray
#property indicator_width1    2
#property indicator_width2    3
#property indicator_width3    3
#property indicator_width4    3
#property indicator_width5    3
#property indicator_style8    STYLE_DASH

#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 string _rsimethods            = "0=rsi,1=wilder rsi,2=rsx,3=cuttler rsi ";
extern int    RsiMethod              = 0;
extern double SmoothLength           = 9;
extern double SmoothPhase            = 0;
extern bool   SmoothDouble           = false;
extern double PaFilter               = 1.0;
extern double PaCycles               = 2.0;
extern double DzStartBuyProbability  = 0.10;
extern double DzStartSellProbability = 0.10;
extern bool   Interpolate            = true;

extern bool   alertsOn               = true;
extern bool   alertsOnLeavingOsOb    = true;
extern bool   alertsOnEnteringOsOb   = true;
extern bool   alertsOnZeroLineCross  = true;
extern bool   alertsOnUpLevel1Cross  = true;
extern bool   alertsOnDnLevel1Cross  = true;
extern bool   alertsOnCurrent        = true;
extern bool   alertsMessage          = true;
extern bool   alertsSound            = false;
extern bool   alertsEmail            = false;

extern bool   arrowsVisible          = true;
extern string arrowsIdentifier       = "Dzift Arrows1";
extern double arrowsDisplacement     = 1.0;
extern color  arrowsUpColor          = LimeGreen;
extern color  arrowsDnColor          = Red;
extern bool   arrowsOnLeavingOsOb    = true;
extern bool   arrowsOnEnteringOsOb   = true;
extern bool   arrowsOnZeroLineCross  = true;
extern bool   arrowsOnUpLevel1Cross  = true;
extern bool   arrowsOnDnLevel1Cross  = true;

extern bool   LinesVisible           = false;
extern string verticalLinesID        = "DzIft lines1";
extern color  verticalLinesUpColor   = DeepSkyBlue;
extern color  verticalLinesDnColor   = PaleVioletRed;
extern int    verticalLinesStyle     = STYLE_DOT;
extern int    verticalLinesWidth     = 0;
extern bool   linesOnLeavingOsOb     = true;
extern bool   linesOnEnteringOsOb    = true;
extern bool   linesOnZeroLineCross   = true;
extern bool   linesOnUpLevel1Cross   = true;
extern bool   linesOnDnLevel1Cross  = true;

double ifishua[];
double ifishub[];
double ifishda[];
double ifishdb[];
double ifisher[];
double sli[];
double bli[];
double zli[];
double trends[][5];
#define _tup1 0
#define _tup2 1
#define _tdn1 2
#define _tdn2 3
#define _tmi1 4

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

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

   if (!calculateValue && LinesVisible)  deleteLines();
   if (!calculateValue && arrowsVisible) deleteArrows();

return(0);
}

double trend[];

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

double workHil[][9];
#define _price      0
#define _smooth     1
#define _detrender  2
#define _period     3
#define _instPeriod 4
#define _phase      5
#define _deltaPhase 6
#define _Q1         7
#define _I1         8

#define Pi 3.14159265358979323846264338327950288

double iHilbertPhase(double price, double filter, double cyclesToReach, int i, int s=0)
{
   if (ArrayRange(workHil,0)!=Bars) ArrayResize(workHil,Bars);
   int r = Bars-i-1; s = s*9;

      workHil[r][s+_price]      = price;
      workHil[r][s+_smooth]     = (4.0*workHil[r][s+_price]+3.0*workHil[r-1][s+_price]+2.0*workHil[r-2][s+_price]+workHil[r-3][s+_price])/10.0;
      workHil[r][s+_detrender]  = calcComp(r,_smooth,s);
      workHil[r][s+_Q1]         = 0.15*calcComp(r,_detrender,s)  +0.85*workHil[r-1][s+_Q1];
      workHil[r][s+_I1]         = 0.15*workHil[r-3][s+_detrender]+0.85*workHil[r-1][s+_I1];
      workHil[r][s+_phase]      = workHil[r-1][s+_phase];
      workHil[r][s+_instPeriod] = workHil[r-1][s+_instPeriod];

         if (MathAbs(workHil[r][s+_I1])>0)
                     workHil[r][s+_phase] = 180.0/Pi*MathArctan(MathAbs(workHil[r][s+_Q1]/workHil[r][s+_I1]));

         if (workHil[r][s+_I1]<0 && workHil[r][s+_Q1]>0) workHil[r][s+_phase] = 180.0-workHil[r][s+_phase];
         if (workHil[r][s+_I1]<0 && workHil[r][s+_Q1]<0) workHil[r][s+_phase] = 180.0+workHil[r][s+_phase];
         if (workHil[r][s+_I1]>0 && workHil[r][s+_Q1]<0) workHil[r][s+_phase] = 360.0-workHil[r][s+_phase];

      workHil[r][s+_deltaPhase] = workHil[r-1][s+_phase]-workHil[r][s+_phase];

         if (workHil[r-1][s+_phase]<90.0 && workHil[r][s+_phase]>270.0)
             workHil[r][s+_deltaPhase] = 360.0+workHil[r-1][s+_phase]-workHil[r][s+_phase];
             workHil[r][s+_deltaPhase] = MathMax(MathMin(workHil[r][s+_deltaPhase],60),7);

            double alpha    = 2.0/(1.0+MathMax(filter,1));
            double phaseSum = 0; for (int k=0; phaseSum<cyclesToReach*360.0 && (r-k)>0; k++) phaseSum += workHil[r-k][s+_deltaPhase];

               if (k>0) workHil[r][s+_instPeriod]= k;
                  workHil[r][s+_period] = workHil[r-1][s+_period]+alpha*(workHil[r][s+_instPeriod]-workHil[r-1][s+_period]);
   return (workHil[r][s+_period]);
}

double calcComp(int r, int from, int s)
{
   return((0.0962*workHil[r  ][s+from] + 
           0.5769*workHil[r-2][s+from] - 
           0.5769*workHil[r-4][s+from] - 
           0.0962*workHil[r-6][s+from]) * (0.075*workHil[r-1][s+_period] + 0.54));
}

void CleanPoint(int i,double& first[],double& second[])
{
   if ((second[i]  != EMPTY_VALUE) && (second[i+1] != EMPTY_VALUE))
        second[i+1] = EMPTY_VALUE;
   else
      if ((first[i] != EMPTY_VALUE) && (first[i+1] != EMPTY_VALUE) && (first[i+2] == EMPTY_VALUE))
          first[i+1] = EMPTY_VALUE;
}

void PlotPoint(int i,double& first[],double& second[],double& from[])
{
   if (first[i+1] == EMPTY_VALUE)
      {
         if (first[i+2] == EMPTY_VALUE) {
                first[i]   = from[i];
                first[i+1] = from[i+1];
                second[i]  = EMPTY_VALUE;
            }
         else {
                second[i]   =  from[i];
                second[i+1] =  from[i+1];
                first[i]    = EMPTY_VALUE;
            }
      }
   else
      {
         first[i]  = from[i];
         second[i] = EMPTY_VALUE;
      }
}

double getPrice(int type, int i)
{
   switch (type)
   {
      case 7:     return((Open[i]+Close[i])/2.0);
      case 8:     return((Open[i]+High[i]+Low[i]+Close[i])/4.0);
      default :   return(iMA(NULL,0,1,0,MODE_SMA,type,i));
   }      
}

string rsiMethodNames[] = {"rsi","wilders rsi","rsx","cuttler rsi"};
string getRsiName(int& method)
{
   int max = ArraySize(rsiMethodNames)-1;
      method=MathMax(MathMin(method,max),0); return(rsiMethodNames[method]);
}

double workRsi[][13];
#define _tprice  0
#define _change 1
#define _changa 2

double iRsi(double price, double period, int i, int instanceNo=0, int rsiMode=0)
{
   if (ArrayRange(workRsi,0)!=Bars) ArrayResize(workRsi,Bars);
      int z = instanceNo*13; 
      int r = Bars-i-1;

   workRsi[r][z+_tprice] = price;
   switch (rsiMode)
   {
      case 0:
         double alpha = 1.0/period; 
         if (r<period)
            {
               int k; double sum = 0; for (k=0; k<period && (r-k-1)>=0; k++) sum += MathAbs(workRsi[r-k][z+_tprice]-workRsi[r-k-1][z+_tprice]);
                  workRsi[r][z+_change] = (workRsi[r][z+_tprice]-workRsi[0][z+_tprice])/MathMax(k,1);
                  workRsi[r][z+_changa] =                                         sum/MathMax(k,1);
            }
         else
            {
               double change = workRsi[r

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

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

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

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

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

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

Стоимость полного кода
2 017,80₽ ≈ $24.66