Задержка отправки писем из МТ4 - страница 2

 

Можно передавать текст сразу в Push уведомлениях.

Меню Сервис>>Настройки>>Уведомления

Для отправки служит функция SendNotificationText»).

(Нужно будет установить приложение на телефон.)

 
Putnik #:

Можно передавать текст сразу в Push уведомлениях.

Меню Сервис>>Настройки>>Уведомления

Для отправки служит функция SendNotificationText»).

(Нужно будет установить приложение на телефон.)

Инфа из справочника MT4

"Существует ограничение на количество отсылаемых сообщений: не более 1 сообщения в 0,5 секунды и не более 10 сообщений в минуту"

10 уведомлений может и не будет отправлено за минуту. А вот 2 шт. в один и тот же момент - могут быть отправлены легко!
Например с двух инструментов, по одному уведомлению, ну или при других "накладках". Причём это двойное уведомление может быть отправлено 1 раз за день, и произойдёт блокировка ПУШ. И вы даже об этом не узнаете...
По этому ПУШ это не самый надёжный инструмент уведомлений.
 
halk2009 #:

10 уведомлений может и не будет отправлено за минуту. А вот 2 шт. в один и тот же момент - могут быть отправлены легко!
Например с двух инструментов, по одному уведомлению, ну или при других "накладках". Причём это двойное уведомление может быть отправлено 1 раз за день, и произойдёт блокировка ПУШ. И вы даже об этом не узнаете...

В моем варианте, один советник мониторит по нескольким каналам. Потом данные(обработанные) со всех направлений отправляются одним общим сообщением.

 

Продолжу мысль.

Работает полуавтомат. Посылает сообщения. По сообщениям я смотрю, и в ручном режиме корректирую ход дела.

Для связи, с телефона, выставляю ордер с заведомо большой ценой. Такой ордер воспринимается как "управляющий".  Значение лота(Noviy) это указание для советника, по какому сценарию ему дальше работать.

void Svyaz(void) //Связь
{
int iS,perS;
static datetime PamS=0;
string NameS,NameS2,NameS3;
bool bS;
static int PamNoviy=Noviy;

   //Поиск управляющего ордера
for(iS=OrdersTotal()-1;iS>=0;iS--)
   {
   BigRezultat=SelectOrder("Svyaz#1134",iS,SELECT_BY_POS,MODE_TRADES);
   if(BigRezultat && CenaOrdera>3.0)
      {
      Noviy=(int)MathRound( OrderLots()*1000 );
      
      BigRezultat=OrderDelete(OrderTicket());
      if(BigRezultat==false)
         { Sleep(3000); BigRezultat=OrderDelete(OrderTicket());
           if(BigRezultat==false)SendNotification("AutoDelete сбой");
         }
      break;
   }  }

   //Установлено в ручную или через ордер.
   //Однократный вывод.
if(PamNoviy!=Noviy)
   {
   PamNoviy=Noviy; Print("Смена, Noviy=",Noviy);
   }

   //Для блокировки всех сообщений.
if(Noviy==990){InfoMail=false; Print( "Svyaz#1155 InfoMail=false KK=",KK," Noviy=",Noviy ); }
  else {InfoMail=true; Print( "Svyaz#1157 InfoMail=true KK=",KK," Noviy=",Noviy,VivodTime("T-C",TimeCurrent()) ); }


if(FlagNoviy)NameS2=" News"; else NameS2=" No news";

for(iS=0,perS=0;iS<=Zhivch;iS++)perS+=Stat[summa][iS];

if(perS>Zhiv){ FlagZhiv=true; NameS3=" Бегом";}
  else {FlagZhiv=false; NameS3="";}


   //Посылка майла
if(InfoMail)
   {
   bS=false;
   
   perS=MathMin(PlusiSO,MinusiSO);
   if( perS<KK )bS=true;//Отправить из-за KK
   
   if(FlagNoviy)bS=true;//Отправить из-за Noviy
   
   if(FlagZhiv)bS=true;//Отправить
   
   if(bS)
      {  //if(TimeCurrent()-PamS > 1800)//Когда отправлять один раз в полчаса.
            { PamS=TimeCurrent();
              
               //Формировать строку в письмо.
              NameS=StringConcatenate(IntegerToString(PlusiSO,3)," -",IntegerToString(MinusiSO,3)
                                     ," ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS)
                                     ,NameS2 ,IntegerToString(Noviy,4)
                                     ,NameS3
                                     );
//              BigRezultat=SendMail( IntegerToString(KK), NameS ); //На почту
              BigRezultat=SendNotification(NameS);                  //Уведомление
              
               //Формировать строку сообщения в log файл
              NameS=StringConcatenate(IntegerToString(PlusiSO,3)," -",IntegerToString(MinusiSO,3)
                                     ,VivodTime("",TimeCurrent())
                                     ,NameS2 ,NameS3);
              
                   //---Уведомление
              if(BigRezultat){Print("Svyaz#1199 Сообщение отправлено: ",NameS);
                              PlaySound("email.wav");
                             }
                else Print("Svyaz#1202 Сбой отправки сообщений. GetLastError=",GetLastError()," ",NameS);
              
              if(BigRezultat)FlagNoviy=false; //Сбросить флаг новизны после отправки
   }  }     }


return;
}
 
Putnik #:

В моем варианте, один советник мониторит по нескольким каналам. Потом данные(обработанные) со всех направлений отправляются одним общим сообщением.

Я не программист, но спасибо за совет! Попробую поковыряться с Локальным почтовым сервером, а если не получится, тогда пойду на фриланс
 
halk2009 #:
Я не программист, но спасибо за совет! Попробую поковыряться с Локальным почтовым сервером, а если не получится, тогда пойду на фриланс

Это работа не программиста, а системного администратора (он не программист). Программист зачастую может выполнить работу сисадмина, но, в основном, для себя. Для других ему это будет не очень интересно.

 
Ihor Herasko #:
Программист зачастую может выполнить работу сисадмина

Как показывает практика, зачастую в этих случаях программист справляется так себе, в частности, совершенно не думает о безопасности и надёжности )

 
JRandomTrader #:

Как показывает практика, зачастую в этих случаях программист справляется так себе, в частности, совершенно не думает о безопасности и надёжности )

Да, контекст примерно такой ))

Причина обращения: