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

dynamic_zones_absolutestrength_of_averages_diff_2.mq5

Вы автор или правообладатель?

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

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

О программе

Индикатор для MetaTrader 4, рассчитывающий разность сглаженных бычьей и медвежьей силы ценовых данных с использованием динамических зон. Поддерживает два режима расчёта моментума: на основе ценового диапазона за заданный период или на основе RSI-анализа. Для определения уровней перекупленности и перепроданности используется внешняя библиотека dynamicZone.dll. Результат отображается в отдельном окне в виде цветной линии с градиентной заливкой, а также позволяет визуализировать свечной график с цветовой индикацией направления силы. Индикатор предоставляет обнаружение классических и обратных дивергенций между ценой и значениями индикатора, а также систему оповещений через всплывающие сообщения, звуковые сигналы, email и push-уведомления. Доступен выбор из 20 методов скользящих средних для сглаживания, поддержка мультитаймфрейм-режима и настройка внешнего вида линий, свечей и объектов дивергенций.

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

НастройкаОписание
TimeFrame Таймфрейм — Выбор таймфрейма для расчётов или специальный режим возврата количества баров
UseRsi Использовать RSI — Переключает расчёт моментума на RSI-основу вместо ценового диапазона
Length Длина периода — Период расчёта ценового диапазона или RSI
Signal Сигнал — Параметр сигнальной линии, передаваемый при мультитаймфрейм-расчётах
Smooth Сглаживание — Период дополнительного сглаживания рассчитанных средних значений
Price Тип цены — Источник цены для расчёта: стандартная цена, среднее Open/Close или среднее всех четырёх цен
MaMethod Метод скользящей средней — Индекс выбранного метода сглаживания из доступного набора
DzLookBackBars Баров динамической зоны — Количество баров для расчёта динамических зон
DzStartBuyProbability Вероятность покупки — Начальная вероятность для расчёта динамической зоны покупки
DzStartSellProbability Вероятность продажи — Начальная вероятность для расчёта динамической зоны продажи
ColorUp Цвет вверх — Цвет отображения при положительных значениях индикатора
ColorDown Цвет вниз — Цвет отображения при отрицательных значениях индикатора
ColorUniqueID Идентификатор цвета — Уникальный идентификатор для объектов раскраски линий на графике
ColorWidth Толщина цвета — Толщина линий раскраски значений индикатора
ColorBars Баров цвета — Максимальное количество баров, для которых применяется раскраска
divergenceVisible Дивергенции видимы — Включает обнаружение и отображение дивергенций
divergenceOnValuesVisible Дивергенции на значениях — Отображает линии тренда дивергенций на графике значений индикатора
divergenceOnChartVisible Дивергенции на графике — Отображает линии тренда дивергенций на ценовом графике
divergenceBullishColor Цвет бычьей дивергенции — Цвет линий бычьих дивергенций
divergenceBearishColor Цвет медвежьей дивергенции — Цвет линий медвежьих дивергенций
divergenceUniqueID Идентификатор дивергенций — Уникальный идентификатор для объектов дивергенций на графике
divergenceAlert Оповещение о дивергенции — Включает оповещения при обнаружении дивергенций
divergenceAlertsMessage Сообщение о дивергенции — Отображает всплывающее сообщение при обнаружении дивергенции
divergenceAlertsSound Звук дивергенции — Воспроизводит звуковой сигнал при обнаружении дивергенции
divergenceAlertsEmail Email дивергенции — Отправляет email-уведомление при обнаружении дивергенции
divergenceAlertsNotify Уведомление дивергенции — Отправляет push-уведомление при обнаружении дивергенции
divergenceAlertsSoundName Файл звука дивергенции — Имя звукового файла для оповещений о дивергенциях
barsVisible Свечи видимы — Отображает цветные свечи на графике в соответствии с направлением силы
widthWick Толщина теней — Толщина теней свечей при режиме отображения баров
widthBody Толщина тел — Толщина тел свечей при режиме отображения баров
drawInBackgound Рисовать на фоне — Рисует свечи на заднем плане графика
_ Разделитель оповещений — Текстовый разделитель группы настроек оповещений
alertsOn Оповещения включены — Включает систему оповещений индикатора
alertsOnobLineCross Пересечение зоны продаж — Срабатывает при пересечении линии динамической зоны продаж
alertsOnosLineCross Пересечение зоны покупки — Срабатывает при пересечении линии динамической зоны покупки
alertsOnzeroLineCross Пересечение нуля — Срабатывает при пересечении нулевой линии индикатора
alertsOnCurrent На текущем баре — Использует текущий бар для проверки условий оповещений
alertsMessage Сообщения оповещений — Включает всплывающие сообщения в системе оповещений
alertsSound Звук оповещений — Включает звуковые сигналы в системе оповещений
alertsEmail Email оповещений — Включает отправку email в системе оповещений
alertsNotify Уведомления оповещений — Включает push-уведомления в системе оповещений
MaMethods Методы скользящих — Группа выбора метода скользящей средней
__0 Метод 0 — Название первого метода скользящей средней (SMA)
__1 Метод 1 — Название второго метода скользящей средней (EMA)
__2 Метод 2 — Название третьего метода скользящей средней
__3 Метод 3 — Название четвёртого метода скользящей средней (DEMA)
__4 Метод 4 — Название пятого метода скользящей средней (TEMA)
__5 Метод 5 — Название шестого метода скользящей средней
__6 Метод 6 — Название седьмого метода скользящей средней
__7 Метод 7 — Название восьмого метода скользящей средней
__8 Метод 8 — Название девятого метода скользящей средней
__9 Метод 9 — Название десятого метода скользящей средней
__10 Метод 10 — Название одиннадцатого метода скользящей средней (Hull MA)
__11 Метод 11 — Название двенадцатого метода скользящей средней
__12 Метод 12 — Название тринадцатого метода скользящей средней
__13 Метод 13 — Название четырнадцатого метода скользящей средней (Linear regression)
__14 Метод 14 — Название пятнадцатого метода скользящей средней (IE/2)
__15 Метод 15 — Название шестнадцатого метода скользящей средней (NonLag MA)
__16 Метод 16 — Название семнадцатого метода скользящей средней (Zero lag EMA)
__17 Метод 17 — Название восемнадцатого метода скользящей средней (Leader EMA)
__18 Метод 18 — Название девятнадцатого метода скользящей средней (Super smoother)
__19 Метод 19 — Название двадцатого метода скользящей средней (Smoother)
Получить полный код

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

#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1  DimGray
#property indicator_color2  DarkOrange
#property indicator_color3  LimeGreen
#property indicator_color4  LimeGreen
#property indicator_style1  STYLE_DOT
#property indicator_style2  STYLE_DOT
#property indicator_style3  STYLE_DOT
#property indicator_width4  2

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

extern string TimeFrame                 = "Current time frame";
extern bool   UseRsi                    = false;   
extern double Length                    = 10;  
extern double Signal                    = 5;  
extern double Smooth                    = 5; 
extern int    Price                     = 0; 
extern int    MaMethod                  = 2; 
extern int    DzLookBackBars            = 35;
extern double DzStartBuyProbability     = 0.05;
extern double DzStartSellProbability    = 0.05;
extern color  ColorUp                   = LimeGreen;
extern color  ColorDown                 = Red;
extern string ColorUniqueID             = "DZ AbsoluteStrength Diff color";
extern int    ColorWidth                = 2;
extern int    ColorBars                 = 1000;
extern bool   divergenceVisible         = false;
extern bool   divergenceOnValuesVisible = true;
extern bool   divergenceOnChartVisible  = true;
extern color  divergenceBullishColor    = LimeGreen;
extern color  divergenceBearishColor    = PaleVioletRed;
extern string divergenceUniqueID        = "DZ AbsoluteStrength Diff ";
extern bool   divergenceAlert           = true;
extern bool   divergenceAlertsMessage   = true;
extern bool   divergenceAlertsSound     = true;
extern bool   divergenceAlertsEmail     = false;
extern bool   divergenceAlertsNotify    = false;
extern string divergenceAlertsSoundName = "alert1.wav";
extern bool   barsVisible               = true;
extern int    widthWick                 = 0;
extern int    widthBody                 = 2;
extern bool   drawInBackgound           = false;
bool          Interpolate               = true;

extern string _                         = "Alerts Settings";
extern bool   alertsOn                  = true;
extern bool   alertsOnobLineCross       = true;
extern bool   alertsOnosLineCross       = true;
extern bool   alertsOnzeroLineCross     = true;
extern bool   alertsOnCurrent           = false;
extern bool   alertsMessage             = true;
extern bool   alertsSound               = true;
extern bool   alertsEmail               = false;
extern bool   alertsNotify              = true;  

extern string MaMethods                 = "";
extern string __0                       = "SMA";
extern string __1                       = "EMA";
extern string __2                       = "Double smoothed EMA";
extern string __3                       = "Double EMA (DEMA)";
extern string __4                       = "Triple EMA (TEMA)";
extern string __5                       = "Smoothed MA";
extern string __6                       = "Linear weighted MA";
extern string __7                       = "Parabolic weighted MA";
extern string __8                       = "Alexander MA";
extern string __9                       = "Volume weghted MA";
extern string __10                      = "Hull MA";
extern string __11                      = "Triangular MA";
extern string __12                      = "Sine weighted MA";
extern string __13                      = "Linear regression";
extern string __14                      = "IE/2";
extern string __15                      = "NonLag MA";
extern string __16                      = "Zero lag EMA";
extern string __17                      = "Leader EMA";
extern string __18                      = "Super smoother";
extern string __19                      = "Smoother";   

double obLine[];
double osLine[];
double zeroLine[];
double SmthBulls[];
double SmthBears[];
double diff[];
double ratios[];

double trends[][3];
#define _tob 0
#define _tos 1
#define _tzl 2

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

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

int deinit()
{
   int lookForLength = StringLen(divergenceUniqueID);
      for (int i=ObjectsTotal()-1; i>=0; i--) 
      {
         string name = ObjectName(i);  if (StringSubstr(name,0,lookForLength) == divergenceUniqueID) ObjectDelete(name);
      }
   lookForLength = StringLen(ColorUniqueID);
      for (i=ObjectsTotal()-1; i>=0; i--) 
      {
         name = ObjectName(i);  if (StringSubstr(name,0,lookForLength) == ColorUniqueID) ObjectDelete(name);
      }
   return(0); 
}

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

void interpolate(double& target[], int ttimeFrame, int i)
{
   int t = iBarShift(NULL,ttimeFrame,Time[i]); 
      double y0 = target[i];
      double y1 = target[iBarShift(NULL,0,iTime(NULL,ttimeFrame,t+0))+1];
      double y2 = target[iBarShift(NULL,0,iTime(NULL,ttimeFrame,t+1))+1];

      datetime time = iTime(NULL,ttimeFrame,t);
         for(int n = 1; i+n < Bars && Time[i+n] >= time; n++) continue;
         for(int k = 1; k < n; k++)
            target[i+k] = target[i] + (target[i+n] - target[i])*k/n;
}

void CatchBullishDivergence(double& values[], int i)
{
   i++;
            ObjectDelete(divergenceUniqueID+"l"+DoubleToStr(Time[i],0));
            ObjectDelete(divergenceUniqueID+"l"+"os" + DoubleToStr(Time[i],0));            
   if (!IsIndicatorLow(values,i)) return;  

   int currentLow = i;
   int lastLow    = GetIndicatorLastLow(values,i+1);
      if (values[currentLow] > values[lastLow] && Low[currentLow] < Low[lastLow])
      {
         if(divergenceOnChartVisible)  DrawPriceTrendLine("l",Time[currentLow],Time[lastLow],Low[currentLow],Low[lastLow],divergenceBullishColor,STYLE_SOLID);
         if(divergenceOnValuesVisible) DrawIndicatorTrendLine("l",Time[currentLow],Time[lastLow],values[currentLow],values[lastLow],divergenceBullishColor,STYLE_SOLID);
         if (divergenceAlert)          DisplayAlert("Classical bullish divergence",currentLow);  
      }
      if (values[currentLow] < values[lastLow] && Low[currentLow] > Low[lastLow])
      {
         if(divergenceOnChartVisible)  DrawPriceTrendLine("l",Time[currentLow],Time[lastLow],Low[currentLow],Low[lastLow], divergenceBullishColor, STYLE_DOT);
         if(divergenceOnValuesVisible) DrawIndicatorTrendLine("l",Time[currentLow],Time[lastLow],values[currentLow],values[lastLow], divergenceBullishColor, STYLE_DOT);
         if (divergenceAlert)          DisplayAlert("Reverse bullish divergence",currentLow); 
      }
}

void CatchBearishDivergence(double& values[], int i)
{
   i++; 
            ObjectDelete(divergenceUniqueID+"h"+DoubleToStr(Time[i],0));
            ObjectDelete(divergenceUniqueID+"h"+"os" + DoubleToStr(Time[i],0));            
   if (IsIndicatorPeak(values,i) == false) return;

   int currentPeak = i;
   int lastPeak = GetIndicatorLastPeak(values,i+1);
      if (values[currentPeak] < values[lastPeak] && High[currentPeak]>High[lastPeak])
      {
         if (divergenceOnChartVisible)  DrawPriceTrendLine("h",Time[currentPeak],Time[lastPeak],High[currentPeak],High[lastPeak],divergenceBearishColor,STYLE_SOLID);
         if (divergenceOnValuesVisible) DrawIndicatorTrendLine("h",Time[currentPeak],Time[lastPeak],values[currentPeak],values[lastPeak],divergenceBearishColor,STYLE_SOLID);
         if (divergenceAlert)           DisplayAlert("Classical bearish divergence",currentPeak);
      }
      if(values[currentPeak] > values[lastPeak] && High[currentPeak] < High[lastPeak])
      {
         if (divergenceOnChartVisible)  DrawPriceTrendLine("h",Time[currentPeak],Time[lastPeak],High[currentPeak],High[lastPeak], divergenceBearishColor, STYLE_DOT);
         if (divergenceOnValuesVisible) DrawIndicatorTrendLine("h",Time[currentPeak],Time[lastPeak],values[currentPeak],values[lastPeak], divergenceBearishColor, STYLE_DOT);
         if (divergenceAlert)           DisplayAlert("Reverse bearish divergence",currentPeak);
      }
}

bool IsIndicatorPeak(double& values[], int i) { return(values[i] >= values[i+1] && values[i] > values[i+2] && values[i] > values[i-1]); }
bool IsIndicatorLow( double& values[], int i) { return(values[i] <= values[i+1] && values[i] < values[i+2] && values[i] < values[i-1]); }

int GetIndicatorLastPeak(double& values[], int shift)
{
   for(int i = shift+5; i<Bars; i++)
         if (values[i] >= values[i+1] && values[i] > values[i+2] && values[i] >= values[i-1] && values[i] > values[i-2]) return(i);
   return(-1);
}
int GetIndicatorLastLow(double& values[], int shift)
{
   for(int i = shift+5; i<Bars; i++)
         if (values[i] <= values[i+1] && values[i] < values[i+2] && values[i] <= values[i-1] && values[i] < values[i-2]) return(i);
   return(-1);
}

void DrawPriceTrendLine(string first,datetime t1, datetime t2, double p1, double p2, color lineColor, double style)
{
   string   label = divergenceUniqueID+first+"os"+DoubleToStr(t1,0);

   ObjectDelete(label);
      ObjectCreate(label, OBJ_TREND, 0, t1+Period()*60-1, p1, t2, p2, 0, 0);
         ObjectSet(label, OBJPROP_RAY, false);
         ObjectSet(label, OBJPROP_COLOR, lineColor);
         ObjectSet(label, OBJPROP_STYLE, style);
}
void DrawIndicatorTrendLine(string first,datetime t1, datetime t2, double p1, double p2, color lineColor, double style)
{
   int indicatorWindow = WindowFind(shortName);
   if (indicatorWindow < 0) return;

   string label = divergenceUniqueID+first+DoubleToStr(t1,0);
   ObjectDelete(label);
      ObjectCreate(label, OBJ_TREND, indicatorWindow, t1+Period()*60-1, p1, t2, p2, 0, 0);
         ObjectSet(label, OBJPROP_RAY, false);
         ObjectSet(label, OBJPROP_COLOR, lineColor);
         ObjectSet(label, OBJPROP_STYLE, style);
}

void DisplayAlert(string doWhat, int shift)
{
    string dmessage;
    static datetime lastAlertTime;
    if(shift <= 2 && Time[0] != lastAlertTime)
    {
      dmessage =  StringConcatenate(Symbol()," ",timeFrameToString(Period())," at ",TimeToStr(TimeLocal(),TIME_SECONDS)," Dz Absolute Strength of Averages ",doWhat);
          if (divergenceAlertsMessage) Alert(dmessage);
          if (divergenceAlertsNotify)  SendNotification(dmessage);
          if (divergenceAlertsEmail)   SendMail(StringConcatenate(Symbol()," Dz Absolute Strength of Averages "),dmessage);
          if (divergenceAlertsSound)   PlaySound(divergenceAlertsSoundName); 
          lastAlertTime = Time[0];
    }
}

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 methodNames[] = {"SMA","EMA","Double smoothed EMA","Double EMA","Triple EMA","Smoothed MA","Linear weighted MA","Parabolic weighted MA","Alexander MA","Volume weghted MA","Hull MA","Triangular MA","Sine weighted MA","Linear regression","IE/2","NonLag MA","Zero lag EMA","Leader EMA","Super smoother","Smoothed"};
string getAverageName(int& method)
{
   int max = ArraySize(methodNames)-1;
      method=MathMax(MathMin(method,max),0); return(methodNames[method]);
}

#define _maWorkBufferx1 4
#define _maWorkBufferx2 8
#define _maWorkBufferx3 12
#define _maWorkBufferx5 20

double iCustomMa(int mode, double price, double length, int i, int instanceNo=0)
{
   int r = Bars-i-1;
   switch (mode)
   {
      case 0  : return(iSma(price,length,r,instanceNo));
      case 1  : return(iEma(price,length,r,instanceNo));
      case 2  : return(iDsema(price,length,r,instanceNo));
      case 3  : return(iDema(price,length,r,instanceNo));
      case 4  : return(iTema(price,length,r,instanceNo));
      case 5  : return(iSmma(price,length,r,instanceNo));
      case 6  : return(iLwma(price,length,r,instanceNo));
      case 7  : return(iLwmp(price,length,r,instanceNo));
      case 8  : return(iAlex(price,length,r,instanceNo));
      case 9  : return(iWwma(price,length,r,instanceNo));
      case 10 : return(iHull(price,length,r,instanceNo));
      case 11 : return(iTma(price,length,r,instanceNo));
      case 12 : return(iSineWMA(price,length,r,instanceNo));
      case 13 : return(iLinr(price,length,r,instanceNo));
      case 14 : return(iIe2(price,length,r,instanceNo));
      case 15 : return(iNonLagMa(price,length,r,instanceNo));
      case 16 : return(iZeroLag(price,length,r,instanceNo));
      case 17 : return(iLeader(price,length,r,instanceNo));
      case 18 : return(iSsm(price,length,r,instanceNo));
      case 19 : return(iSmooth(price,length,r,instanceNo));
      default : return(0);
   }
}

double workSma[][_maWorkBufferx2];
double iSma(double price, int period, int r, int instanceNo=0)
{
   if (ArrayRange(workSma,0)!= Bars) ArrayResize(workSma,Bars); instanceNo *= 

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

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

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

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

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

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

Стоимость полного кода
3 117,80₽ ≈ $38.11