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

#chaos arrzzx2.mq5

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

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

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

О программе

Данный продукт представляет собой пользовательский индикатор для MetaTrader 5, написанный на языке MQL5. Индикатор отображается в окне графика и использует восемь буферов, шесть из которых являются видимыми. Он предназначен для анализа ценовых данных и построения аналитических сигналов на основе внутренних расчётов, включая сглаженные значения и зигзагообразные структуры. В коде реализованы механизмы оповещения пользователя о событиях: всплывающие сообщения, push-уведомления, электронная почта и звуковой сигнал. Индикатор поддерживает настройку параметров через входные переменные, включая пороговые значения и опции уведомлений. Все расчёты выполняются в обработчике OnCalculate, а инициализация и освобождение ресурсов происходят в OnInit и OnDeinit соответственно. Продукт не является торговым советником и не выполняет торговых операций; его основная функция — визуализация и оповещение.

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

НастройкаОписание
SRZZ Целочисленный параметр, задающий размер окна для поиска экстремумов при расчёте зигзагообразных структур. Должен быть больше внутреннего параметра SR.
AlertsSection Разделитель в списке параметров, обозначающий начало группы настроек оповещений.
Popup_Alert Включает или отключает всплывающее окно с сообщением при появлении сигнала.
Notification_Alert Включает или отключает отправку push-уведомлений на мобильные устройства при появлении сигнала.
Email_Alert Включает или отключает отправку уведомлений по электронной почте при появлении сигнала.
Play_Sound Включает или отключает воспроизведение звукового файла при появлении сигнала.
Sound_File Путь к звуковому файлу, который воспроизводится при включённой опции Play_Sound.
Advanced_Alert Включает или отключает расширенные оповещения через внешнюю библиотеку. Доступно только при определённой конфигурации сборки.
Comment2 Информационный комментарий, отображаемый в окне параметров. Содержит текст подсказки, не влияет на работу индикатора.
Comment3 Информационный комментарий, отображаемый в окне параметров. Содержит текст подсказки, не влияет на работу индикатора.
Comment4 Информационный комментарий, отображаемый в окне параметров. Содержит текст подсказки, не влияет на работу индикатора.
Получить полный код

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

#property version   "1.0"

#property indicator_chart_window
#property indicator_buffers 8
#property indicator_plots   6
#property indicator_color1  clrWhite
#property indicator_type1   DRAW_ARROW
#property indicator_width1  5
#property indicator_color2  clrLime
#property indicator_width2  2
#property indicator_color3  clrBlue //C'0,128,255'
#property indicator_width3  7
#property indicator_type3   DRAW_ARROW
#property indicator_color4  clrRed //C'192,0,192'
#property indicator_width4  7
#property indicator_type4   DRAW_ARROW
#property indicator_color5  clrDodgerBlue //C'0,128,255'
#property indicator_width5  3
#property indicator_type5   DRAW_ARROW
#property indicator_color6  clrMediumVioletRed //C'192,0,192'
#property indicator_width6  3
#property indicator_type6   DRAW_ARROW

int    SR         = 1;  // = 3..4   Xard settings (3, 21, 20, 21, 3, false, 0)

input int      SRZZ           = 20;
input string   AlertsSection  = ""; // == Alerts ==
input bool     Popup_Alert              = false; // Popup message
input bool     Notification_Alert       = false; // Push notification
input bool     Email_Alert              = false; // Email
input bool     Play_Sound               = false; // Play sound on alert
input string   Sound_File               = ""; // Sound file
#ifdef ADVANCED_ALERTS
input bool     Advanced_Alert           = false; // Advanced alert
input string   Advanced_Key             = ""; // Advanced alert key
input string   Comment2                 = "- You can get a key via @profit_robots_bot Telegram Bot. Visit ProfitRobots.com for discord/other platform keys -";
input string   Comment3                 = "- Allow use of dll in the indicator parameters window -";
input string   Comment4                 = "- Install AdvancedNotificationsLib using ProfitRobots installer -";
#endif

int    MainRZZ    = 54; // 20, 12..20..54..20
int    FP         = 45;
int    SMF        = 1; // 1..5
bool   DrawZZ     = false;

ENUM_APPLIED_PRICE PriceConst = PRICE_CLOSE;

double Lmt[];
double LZZ[];
double SA[];
double SM[];
double Up[];
double Dn[];
double pUp[];
double pDn[];

#ifdef ADVANCED_ALERTS

#import "AdvancedNotificationsLib.dll"
void AdvancedAlert(string key, string text, string instrument, string timeframe);
#import
#endif

class Signaler
{
   string _symbol;
   ENUM_TIMEFRAMES _timeframe;
   string _prefix;
   bool _popupAlert;
   bool _emailAlert;
   bool _playSound;
   string _soundFile;
   bool _notificationAlert;
   bool _advancedAlert;
   string _advancedKey;
public:
   Signaler(const string symbol, ENUM_TIMEFRAMES timeframe)
   {
      _symbol = symbol;
      _timeframe = timeframe;
      _popupAlert = false;
      _emailAlert = false;
      _playSound = false;
      _notificationAlert = false;
      _advancedAlert = false;
   }

   void SetPopupAlert(bool isEnabled) { _popupAlert = isEnabled; }
   void SetEmailAlert(bool isEnabled) { _emailAlert = isEnabled; }
   void SetPlaySound(bool isEnabled, string fileName) 
   { 
      _playSound = isEnabled;
      _soundFile = fileName;
   }
   void SetNotificationAlert(bool isEnabled) { _notificationAlert = isEnabled; }
   void SetAdvancedAlert(bool isEnabled, string key)
   {
      _advancedAlert = isEnabled;
      _advancedKey = key;
   }

   void SendNotifications(string message, string subject = NULL, string symbol = NULL, string timeframe = NULL)
   {
      if (subject == NULL)
         subject = message;

      if (_prefix != "" && _prefix != NULL)
         message = _prefix + message;
      if (symbol == NULL)
         symbol = _symbol;
      if (timeframe == NULL)
         timeframe = GetTimeframeStr();

      if (_popupAlert)
         Alert(message);
      if (_emailAlert)
         SendMail(subject, message);
      if (_playSound)
         PlaySound(_soundFile);
      if (_notificationAlert)
         SendNotification(message);
#ifdef ADVANCED_ALERTS
      if (_advancedAlert && _advancedKey != "")
         AdvancedAlert(_advancedKey, message, symbol, timeframe);
#endif
   }

   void SetMessagePrefix(string prefix)
   {
      _prefix = prefix;
   }

   string GetSymbol()
   {
      return _symbol;
   }

   ENUM_TIMEFRAMES GetTimeframe()
   {
      return _timeframe;
   }

   string GetTimeframeStr()
   {
      switch (_timeframe)
      {
         case PERIOD_M1: return  "M1";
         case PERIOD_M2: return  "M2";
         case PERIOD_M3: return  "M3";
         case PERIOD_M4: return  "M4";
         case PERIOD_M5: return  "M5";
         case PERIOD_M6: return  "M6";
         case PERIOD_M10: return "M10";
         case PERIOD_M12: return "M12";
         case PERIOD_M15: return "M15";
         case PERIOD_M20: return "M20";
         case PERIOD_M30: return "M30";
         case PERIOD_D1: return  "D1";
         case PERIOD_H1: return  "H1";
         case PERIOD_H2: return  "H2";
         case PERIOD_H3: return  "H3";
         case PERIOD_H4: return  "H4";
         case PERIOD_H6: return  "H6";
         case PERIOD_H8: return  "H8";
         case PERIOD_H12: return "H12";
         case PERIOD_MN1: return "MN1";
         case PERIOD_W1: return  "W1";
      }
      return "M1";
   }
};

int LTF[6] = {0, 0, 0, 0, 0, 0}, STF[5] = {0, 0, 0, 0, 0};
int MaxBar, nSBZZ, nLBZZ, SBZZ, LBZZ;
bool First = true;
int prevBars = 0;
int handle_ma;

void MainCalculation(const int Pos, const int bars, const double& Open[], const double& High[], const double& Low[], const double& Close[])
{
   if ((bars - Pos) > (SR + 1)) SACalc(Pos, Open, High, Low, Close);
   else SA[Pos] = 0;

   if ((bars - Pos) > (FP + SR + 2)) SMCalc(Pos);
   else SM[Pos] = 0;
}

void SACalc(const int Pos, const double& Open[], const double& High[], const double& Low[], const double& Close[])
{
   int sw, i, w, ww, Shift;
   double sum;

   double MA[1];
   CopyBuffer(handle_ma, 0, Pos, 1, MA);
   SA[Pos] = MA[0];

   for (Shift = Pos + SR + 2; Shift > Pos; Shift--)
   {
      sum = 0.0;
      sw = 0;
      i = 0;
      w = Shift + SR;
      ww = Shift - SR;
      if (ww < Pos) ww = Pos;
      while (w >= Shift)
      {
         i++;
         sum = sum + i * SnakePrice(w, Open, High, Low, Close);
         sw = sw + i;
         w--;
      }
      while(w >= ww)
      {
         i--;
         sum = sum + i * SnakePrice(w, Open, High, Low, Close);
         sw = sw + i;
         w--;
      }
      SA[Shift] = sum / sw;
   }
}

double SnakePrice(const int Shift, const double& Open[], const double& High[], const double& Low[], const double& Close[])
{
   switch(PriceConst)
   {
   case PRICE_CLOSE:
      return(Close[Shift]);
   case PRICE_OPEN:
      return(Open[Shift]);
   case PRICE_HIGH:
      return(High[Shift]);
   case PRICE_LOW:
      return(Low[Shift]);
   case PRICE_MEDIAN:
      return((High[Shift] + Low[Shift]) / 2);
   case PRICE_TYPICAL:
      return((Close[Shift] + High[Shift] + Low[Shift]) / 3);
   case PRICE_WEIGHTED:
      return((2 * Close[Shift] + High[Shift] + Low[Shift]) / 4);
   default:
      return(Open[Shift]);
   }
}

void SMCalc(const int i)
{
   double t, b;
   for (int Shift = i + SR + 2; Shift >= i; Shift--)
   {
      t = SA[ArrayMaximum(SA, Shift, FP)];
      b = SA[ArrayMinimum(SA, Shift, FP)];
      SM[Shift] = (2 * (2 + SMF) * SA[Shift] - (t + b)) / 2 / (1 + SMF);
   }
}

void LZZCalc(const int Pos, const int bars)
{
   int i, RBar, LBar, ZZ = 0, NZZ, NZig, NZag;
   i = Pos - 1;
   NZig = 0;
   NZag = 0;
   while ((i < MaxBar) && (ZZ == 0))
   {
      i++;
      LZZ[i] = 0;
      RBar = i - MainRZZ;
      if (RBar < Pos) RBar = Pos;
      LBar = i + MainRZZ;
      if (i == ArrayMinimum(SM, RBar, LBar - RBar + 1))
      {
         ZZ = -1;
         NZig = i;
      }
      if(i == ArrayMaximum(SM, RBar, LBar - RBar + 1))
      {
         ZZ = 1;
         NZag = i;
      }
   }

   if (ZZ == 0) return;

   NZZ = 0;
   if (i > Pos)
   {
      if (SM[i] > SM[Pos])
      {
         if (ZZ == 1)
         {
            if ((i >= Pos + MainRZZ) && (NZZ < 5))
            {
               NZZ++;
               LTF[NZZ] = i;
            }
            NZag = i;
            LZZ[i] = SM[i];
         }
      }
      else
      {
         if (ZZ == -1)
         {
            if ((i >= Pos + MainRZZ) && (NZZ < 5))
            {
               NZZ++;
               LTF[NZZ] = i;
            }
            NZig = i;
            LZZ[i] = SM[i];
         }
      }
   }

   while ((i < LBZZ) || (NZZ < 5))
   {
      LZZ[i] = 0;
      RBar = i - MainRZZ;
      if (RBar < Pos) RBar = Pos;
      LBar = i + MainRZZ;
      if (i == ArrayMinimum(SM, RBar, LBar - RBar + 1))
      {
         if ((ZZ == -1) && (SM[i] < SM[NZig]))
         {
            if ((i >= Pos + MainRZZ) && (NZZ < 5)) LTF[NZZ] = i;
            LZZ[NZig] = 0;
            LZZ[i] = SM[i];
            NZig = i;
         }
         if (ZZ == 1)
         {
            if ((i >= Pos + MainRZZ) && (NZZ < 5))
            {
               NZZ++;
               LTF[NZZ] = i;
            }
            LZZ[i] = SM[i];
            ZZ = -1;
            NZig = i;
         }
      }
      if (i == ArrayMaximum(SM, RBar, LBar - RBar + 1))
      {
         if ((ZZ == 1) && (SM[i] > SM[NZag]))
         {
            if ((i >= Pos + MainRZZ) && (

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

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

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

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

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

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

Стоимость полного кода
1 169,30₽ ≈ $14.57