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

Inverse Fisher Transform of RSI

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

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

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

О программе

Индикатор «Inverse Fisher Transform of RSI» рассчитывает сглаженную версию индикатора RSI и применяет к ней обратное преобразование Фишера для отображения аналитических данных в отдельном окне графика MetaTrader 5. В основе расчёта лежит определение фазы и периода через преобразование Гильберта, а также динамические зоны вероятности покупки и продажи, полученные из внешней библиотеки dynamicZone.dll.

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

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

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

НастройкаОписание
TimeFrame Таймфрейм, на котором работает индикатор (текстовое значение: M1, M5, H1, D1 и др.)
RsiPeriod Период расчёта индикатора RSI
RsiPrice Тип цены для расчёта RSI (числовой код цены: PRICE_CLOSE и др.)
_rsimethods Справочный список методов расчёта RSI: 0 — rsi, 1 — wilder rsi, 2 — rsx, 3 — cuttler rsi
RsiMethod Метод расчёта RSI: 0 — RSI, 1 — Wilder RSI, 2 — RSX, 3 — Cuttler RSI
SmoothLength Длина сглаживающей скользящей средней для RSI
SmoothPhase Фаза сглаживающей скользящей средней для RSI
SmoothDouble Переключатель двойного сглаживания с использованием корня из длины сглаживания
PaFilter Параметр фильтра для расчёта фазы преобразования Гильберта
PaCycles Количество циклов для расчёта фазы преобразования Гильберта
DzStartBuyProbability Начальная вероятность зоны покупки для расчёта динамической зоны через внешнюю библиотеку dynamicZone.dll
DzStartSellProbability Начальная вероятность зоны продажи для расчёта динамической зоны через внешнюю библиотеку dynamicZone.dll
Interpolate Переключатель интерполяции значений индикатора между барами на разных таймфреймах
alertsOn Включение общей системы уведомлений индикатора
alertsOnUpDnLevelCross Срабатывание уведомлений при пересечении верхнего и нижнего уровней тренда
alertsOnCurrent Уведомления на текущем баре (без задержки на один бар)
alertsMessage Отображение всплывающих сообщений при смене направления тренда
alertsSound Воспроизведение звукового сигнала при смене направления тренда
alertsEmail Отправка уведомлений по электронной почте при смене направления тренда
arrowsVisible Отображение стрелок тренда на графике
arrowsIdentifier Идентификатор объектов стрелок на графике для их удаления и управления
arrowsDisplacement Смещение стрелок тренда относительно цены в единицах ATR(20)
arrowsUpColor Цвет стрелок восходящего тренда
arrowsDnColor Цвет стрелок нисходящего тренда
arrowsOnUpDnLevelCross Отображение стрелок при пересечении верхнего и нижнего уровней тренда
LinesVisible Отображение вертикальных линий при смене направления тренда
verticalLinesID Идентификатор объектов вертикальных линий на графике для их удаления и управления
verticalLinesUpColor Цвет вертикальных линий восходящего тренда
verticalLinesDnColor Цвет вертикальных линий нисходящего тренда
verticalLinesStyle Стиль вертикальных линий (целочисленный код стиля линии)
verticalLinesWidth Толщина вертикальных линий в пикселях
linesOnUpDnLevelCross Отображение вертикальных линий при пересечении верхнего и нижнего уровней тренда
Получить полный код

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

#property indicator_separate_window
#property indicator_buffers   8
#property indicator_color1    Goldenrod
#property indicator_color2    LimeGreen
#property indicator_color3    LimeGreen
#property indicator_color4    Red
#property indicator_color5    Red
#property indicator_color6    DeepSkyBlue
#property indicator_color7    PaleVioletRed
#property indicator_color8    DimGray
#property indicator_width1    2
#property indicator_width2    2
#property indicator_width3    2
#property indicator_width4    2
#property indicator_width5    2
#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   alertsOnUpDnLevelCross = true;
extern bool   alertsOnCurrent        = true;
extern bool   alertsMessage          = true;
extern bool   alertsSound            = false;
extern bool   alertsEmail            = false;

extern bool   arrowsVisible          = true;
extern string arrowsIdentifier       = "DXIFT Arrows1";
extern double arrowsDisplacement     = 1.0;
extern color  arrowsUpColor          = LimeGreen;
extern color  arrowsDnColor          = Red;
extern bool   arrowsOnUpDnLevelCross = 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   linesOnUpDnLevelCross  = true;

double ifishua[];
double ifishub[];
double ifishda[];
double ifishdb[];
double ifisher[];
double sli[];
double bli[];
double zli[];
double trends[][1];
#define _tup1 0

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;
      }
}

d

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

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

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

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

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

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

Стоимость полного кода
1 713,60₽ ≈ $20.95