Добрый день!
К сожалению поиском не нашел то, что мне нужно.
Имеется стандартный индикатор в МТ5 Volumes для тиковых объёмов. Необходимо в него добавить возможность отправки уведомлений в телефон, либо в почту при достижении определённого уровня.
В стандартном меню создания алертов МТ5 есть параметр Volume, но он не работает, возможно под реальный объём заточен.
Индикатор объёма со звуковым уведомлением в терминале есть, но нужен именно для получения уведомлений в мобильном терминале.
Спасибо всем откликнувшимся
//+------------------------------------------------------------------+ //| Volumes.mq5 | //| Copyright 2000-2023, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2000-2023, MetaQuotes Ltd." #property link "https://www.mql5.com" //--- enum ENUM_ALERT_TYPE { ALERT_TYPE_ALERT, // Alert ALERT_TYPE_MAIL, // Mail ALERT_TYPE_NOTIFICATION // Notification }; //--- indicator settings #property indicator_separate_window #property indicator_buffers 2 #property indicator_plots 1 #property indicator_type1 DRAW_COLOR_HISTOGRAM #property indicator_color1 clrGreen,clrRed #property indicator_style1 0 #property indicator_width1 1 #property indicator_minimum 0.0 //--- input data input ENUM_APPLIED_VOLUME InpVolumeType = VOLUME_TICK; // Volumes input long InpVolumeValue = 3; // Volume value input ENUM_ALERT_TYPE InpAlertTipe = ALERT_TYPE_ALERT; // Alert type sinput string InpSubject = ""; // Subject sinput string InpMessage = ""; // Message //--- Global variables string subj; string mess; //--- indicator buffers double ExtVolumesBuffer[]; double ExtColorsBuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ void OnInit() { //--- buffers SetIndexBuffer(0,ExtVolumesBuffer,INDICATOR_DATA); SetIndexBuffer(1,ExtColorsBuffer,INDICATOR_COLOR_INDEX); //--- name for DataWindow and indicator subwindow label IndicatorSetString(INDICATOR_SHORTNAME,"Volumes with Alerts"); //--- indicator digits IndicatorSetInteger(INDICATOR_DIGITS,0); //--- subj=(InpSubject=="" ? MQLInfoString(MQL_PROGRAM_NAME) : InpSubject); mess=(InpMessage=="" ? "Volume >= "+(string)InpVolumeValue : InpMessage); } //+------------------------------------------------------------------+ //| Volumes | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { if(rates_total<2) return(0); //--- starting work int pos=prev_calculated-1; //--- correct position if(pos<1) { ExtVolumesBuffer[0]=0; pos=1; } //--- main cycle if(InpVolumeType==VOLUME_TICK) CalculateVolume(pos,rates_total,tick_volume); else CalculateVolume(pos,rates_total,volume); //Comment("ExtVolumesBuffer[0]=",ExtVolumesBuffer[0],"\nExtVolumesBuffer[",rates_total-1,"]=",ExtVolumesBuffer[rates_total-1]); static bool done=true; //--- New bar if(rates_total-prev_calculated>0) done=false; if(ExtVolumesBuffer[rates_total-1]>=InpVolumeValue) { if(!done) { SendMessage(InpAlertTipe,subj,mess+(InpMessage=="" ? " ("+(string)(long)ExtVolumesBuffer[rates_total-1]+")" : "")); done=true; } } //--- OnCalculate done. Return new prev_calculated. return(rates_total); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void CalculateVolume(const int pos,const int rates_total,const long& volume[]) { ExtVolumesBuffer[0]=(double)volume[0]; ExtColorsBuffer[0]=0.0; //--- for(int i=pos; i<rates_total && !IsStopped(); i++) { double curr_volume=(double)volume[i]; double prev_volume=(double)volume[i-1]; //--- calculate indicator ExtVolumesBuffer[i]=curr_volume; if(curr_volume>prev_volume) ExtColorsBuffer[i]=0.0; else ExtColorsBuffer[i]=1.0; } //--- } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool SendMessage(const ENUM_ALERT_TYPE alert_type,const string subject,const string message) { switch(alert_type) { case ALERT_TYPE_MAIL : return(SendToMail(message,subject)); case ALERT_TYPE_NOTIFICATION : return(SendPush(message)); //---ALERT_TYPE_ALERT default : Alert(StringFormat("%s: %s",subject,message)); return true; } } //+------------------------------------------------------------------+ //| Отправляет сообщение на почту | //+------------------------------------------------------------------+ bool SendToMail(const string message,const string subject=NULL) { //--- Если в терминале не разрешена отправка сообщений на почту if(!::TerminalInfoInteger(TERMINAL_EMAIL_ENABLED)) { //--- выведем об этом сообщение в журнал и вернём false Print(__FUNCTION__,": В терминале нет разрешения на отправку писем"); return false; } //--- Если не удалось отправить сообщение if(!::SendMail(subject==NULL ? ::MQLInfoString(MQL_PROGRAM_NAME) : subject,message)) { //--- выведем об этом сообщение в журнал и вернём false ::Print(__FUNCTION__,": Не удалось отправить сообщение на почту. Ошибка",(string)GetLastError()); return false; } //--- Успешно - возвращаем true return true; } //+------------------------------------------------------------------+ //| Отправляет Push-уведомления на мобильное устройство | //+------------------------------------------------------------------+ bool SendPush(const string message) { //--- Если в терминале не разрешена отправка Push-уведомлений if(!::TerminalInfoInteger(TERMINAL_NOTIFICATIONS_ENABLED)) { //--- выведем об этом сообщение в журнал и вернём false Print(__FUNCTION__,": В терминале нет разрешения на отправку Push-уведомлений"); return false; } //--- Если не удалось отправить сообщение if(!::SendNotification(message)) { //--- выведем об этом сообщение в журнал и вернём false ::Print(__FUNCTION__,": Не удалось отправить Push-уведомление. Ошибка",(string)GetLastError()); return false; } //--- Успешно - возвращаем true return true; } //+------------------------------------------------------------------+
Добрый день, Артём!
Спасибо огромное, то что надо, уведомления приходят, только индикатор не правильную цифру объёма в уведомлении отправляет. Отображает на графике правильно, соответственно считает правильно, а в уведомлении отправляет постоянно одно и тоже число как будто привязанное к таймфрейму. Например для М10 максимальное число которое отправляет 132. Если ставить в параметрах число меньше или равно 132, то уведомления приходят с цифрой 132. Если в параметрах задать больше, то всё, уведомлений нет. Видимо какойто счётчик заполняется и всё.
Фактически идея рабочая, а индикатор нет(
Может это как-то можно поправить?
Спасибо
Добрый день, Артём!
Спасибо огромное, то что надо, уведомления приходят, только индикатор не правильную цифру объёма в уведомлении отправляет. Отображает на графике правильно, соответственно считает правильно, а в уведомлении отправляет постоянно одно и тоже число как будто привязанное к таймфрейму. Например для М10 максимальное число которое отправляет 132. Если ставить в параметрах число меньше или равно 132, то уведомления приходят с цифрой 132. Если в параметрах задать больше, то всё, уведомлений нет. Видимо какойто счётчик заполняется и всё.
Фактически идея рабочая, а индикатор нет(
Может это как-то можно поправить?
Спасибо
Да, ошибся с индексацией массивов. Нужно брать данные с индекса rates_totral-1
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день!
К сожалению поиском не нашел то, что мне нужно.
Имеется стандартный индикатор в МТ5 Volumes для тиковых объёмов. Необходимо в него добавить возможность отправки уведомлений в телефон, либо в почту при достижении определённого уровня.
В стандартном меню создания алертов МТ5 есть параметр Volume, но он не работает, возможно под реальный объём заточен.
Индикатор объёма со звуковым уведомлением в терминале есть, но нужен именно для получения уведомлений в мобильном терминале.
Спасибо всем откликнувшимся