#chaos arrzzx2.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «#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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.