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

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

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

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

О программе

Данный индикатор рассчитывает значение RSI несколькими методами и отображает результаты анализа динамических зон на отдельном окне графика. Поддерживаются пять вариантов расчёта RSI: стандартный RSI, Wilders RSI, RSX, Cuttler RSI и T3 RSI. Для вычисления динамических зон используется внешняя библиотека dynamicZone.dll через механизм импорта.

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

В основе расчётов лежит собственная реализация алгоритмов сглаживания (SMMA и T3), применяемых при вычислении различных вариантов RSI. Параметры задаются через внешние переменные, позволяющие настраивать метод, период, тип цены и пороги вероятности для динамических зон.

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

НастройкаОписание
RsiMethod Rsi Method — Выбор метода расчёта RSI: 0 — RSI, 1 — Wilders RSI, 2 — RSX, 3 — Cuttler RSI, 4 — T3 RSI
RsiLength Rsi Length — Период расчёта RSI, используется как длина усреднения в различных методах расчёта
RsiPrice Rsi Price — Тип цены для расчёта RSI: 0 — Close, 1 — Open, 2 — High, 3 — Low, 4 — Median, 5 — Typical, 6 — Weighted
T3Hot T3 Hot — Параметр нагрева (hot) для алгоритма T3, влияет на коэффициенты сглаживания
T3Original T3 Original — Переключатель использования оригинальной формулы расчёта alpha в алгоритме T3
DzLookBackBars Dz Look Back Bars — Количество баров для анализа динамических зон, передаётся в функции dzBuy и dzSell из dynamicZone.dll
DzStartBuyProbability Dz Start Buy Probability — Начальное значение вероятности для расчёта линии покупок в динамической зоне
DzStartSellProbability Dz Start Sell Probability — Начальное значение вероятности для расчёта линии продаж в динамической зоне
Получить полный код

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

#property indicator_separate_window
#property indicator_buffers 6
#property indicator_color1  DarkOrange
#property indicator_color2  LimeGreen
#property indicator_color3  DarkGray
#property indicator_color4  LimeGreen
#property indicator_color5  DarkOrange
#property indicator_color6  DarkOrange
#property indicator_width4  2
#property indicator_width5  2
#property indicator_width6  2
#property indicator_style1  STYLE_DOT
#property indicator_style2  STYLE_DOT
#property indicator_style3  STYLE_DOT

#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 int    RsiMethod              = 4;
extern int    RsiLength              = 50;
extern int    RsiPrice               = PRICE_CLOSE;
extern double T3Hot                  = 0.8;
extern bool   T3Original             = false;
extern int    DzLookBackBars         = 70;
extern double DzStartBuyProbability  = 0.10;
extern double DzStartSellProbability = 0.10;

double rsi[];
double rsida[];
double rsidb[];
double bli[];
double sli[];
double zli[];
double state[];

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

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

void ClearPoint(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;
      }
}

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

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

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

   workRsi[r][z+_price] = 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+_price]-workRsi[r-k-1][z+_price]);
                  workRsi[r][z+_change] = (workRsi[r][z+_price]-workRsi[0][z+_price])/MathMax(k,1);
                  workRsi[r][z+_changa] =                                         sum/MathMax(k,1);
            }
         else
            {
               double change = workRsi[r][z+_price]-workRsi[r-1][z+_price];
                               workRsi[r][z+_change] = workRsi[r-1][z+_change] + alpha*(        change  - workRsi[r-1][z+_change]);
                             

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

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

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

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

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

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

Стоимость полного кода
778,50₽ ≈ $9.51