Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1798

 

Bonjour à tous.

Je demande de l'aide pour cette question.

J'ai un terminal mt4 et un Expert Advisor (fait maison) qui génère des alertes pour les signaux de trading. Je veux que les alertes soient envoyées au terminal mobile. Je l'ai configuré, le test arrive, les changements dans les paramètres de l'ordre arrivent, mais les alertes de l'EA n'arrivent pas... Je ne sais pas quelle en est la raison, google ne m'a pas donné de réponse.

Les alertes se reflètent dans le terminal lui-même.
 
et pourtant c'est un endroit gênant pour discuter. Une sorte de canal stackoverflow et/ou discord serait bien.
 
Sergey Dymov changements dans les paramètres de l'ordre arrivent, mais les alertes de l'EA n'arrivent pas... Je ne sais pas quelle en est la raison, google ne m'a pas donné de réponse.
Vous devez voir le code...il n'y a pas de télépathes ici)
 
MakarFX #:
J'ai besoin de voir le code... pas de télépathes ici)

Tout est standard

if ((EURTP>=3)&&(JPYTP<=0)&&(z!=2))

{Alert("Acheter EURJPY. EUR=", EURTP, ", JPY=", JPYTP) ; z=2;} //

 
Sergey Dymov changements dans les paramètres de l'ordre arrivent, mais les alertes de l'EA n'arrivent pas... Je ne sais pas quelle est la raison, google ne m'a donné aucune réponse. Les alertes se reflètent dans le terminal lui-même.

https://www.mql5.com/ru/docs/network/sendnotification

https://docs.mql4.com/ru/common/sendnotification

Документация по MQL5: Сетевые функции / SendNotification
Документация по MQL5: Сетевые функции / SendNotification
  • www.mql5.com
SendNotification - Сетевые функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Sergey Dymov #:

Tout est standard

if ((EURTP>=3)&&(JPYTP<=0)&&(z!=2))

{Alert("Acheter EURJPY. EUR=", EURTP, ", JPY=", JPYTP) ; z=2;} //

if ((EURTP>=3)&&(JPYTP<=0)&&(z!=2))
    {
     Alert("Покупай EURJPY. EUR=", EURTP, ", JPY=", JPYTP); z=2;
     SendNotification(текст сообщения);
    } 
 
Merci, les gars ! Je ne l'oublierai jamais !
 

OK, j'ai créé et supprimé des lignes en cliquant uniquement, et la couleur et le nom changent avec l'emplacement du curseur et... rien n'a changé, mêmes problèmes. La ligne est créée en fonction de l'emplacement de la barre de boutons. Je l'ai en bas, donc par condition il est jaune (Sell Stop) mais ici il y a une occurrence dans la condition if(price > Ask) parce que quand je clique sur le bouton pour une connerie quelconque le prix est égal au prix le plus haut sur le graphique, qui est plus haut que Ask, donc à ce point price > Ask = vrai. Eh bien, merde, logiquement le prochain mouvement de la souris devrait tout arranger, mais non. Enregistrez un seul clic sur le bouton.

2021.12.07 03:05:56.888 test GBPUSD,M1: Buy Stop rename onto Buy Stop false error 0
2021.12.07 03:05:53.408 test GBPUSD,M1: Buy Stop rename onto Buy Stop false error 0
2021.12.07 03:05:53.408 test GBPUSD,M1: Stop Loss rename onto Buy Stop false error 0
2021.12.07 03:05:53.408 test GBPUSD,M1: Buy Stop rename onto Sell Stop true error 0
2021.12.07 03:05:53.408 test GBPUSD,M1: Sell Stop rename onto Buy Stop true error 0
2021.12.07 03:05:53.408 test GBPUSD,M1: Sell Stop create true error 4204

Je ne sais pas pourquoi 4204 (No Object), c'est peut-être une erreur passée.

Après avoir cliqué sur le bouton, vous pouvez voir une ligne verte au niveau de Bid, la ligne ne répond pas au déplacement du curseur de la souris. Si le curseur se déplace au-dessus de l'Asc, les messages sont continuellement déversés

2021.12.07 03:14:00.993 test GBPUSD,M1: Buy Stop rename onto Buy Stop false error 0
2021.12.07 03:13:59.563 test GBPUSD,M1: Buy Stop rename onto Buy Stop false error 0
2021.12.07 03:13:57.363 test GBPUSD,M1: Buy Stop rename onto Buy Stop false error 0
2021.12.07 03:13:57.253 test GBPUSD,M1: Buy Stop rename onto Buy Stop false error 0
2021.12.07 03:13:57.223 test GBPUSD,M1: Buy Stop rename onto Buy Stop false error 0
2021.12.07 03:13:57.223 test GBPUSD,M1: Buy Stop rename onto Buy Stop false error 0
2021.12.07 03:13:57.193 test GBPUSD,M1: Buy Stop rename onto Buy Stop false error 0
2021.12.07 03:13:57.153 test GBPUSD,M1: Buy Stop rename onto Buy Stop false error 0
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
    datetime static dt          = 0;
    double   static price       = 0;
    int      static window      = 0;
    double   static sl          = 0;
    string   static line_name;
    double static price2 = 0;
    double static price3 = 0;
    double static price4 = 0;


  if(id==CHARTEVENT_OBJECT_CLICK){
    //Нажатие на SO в зависимоти от расположения панели создаёт линию
    if(sparam=="Button Stop Order"){
      if(panel_position == 1 || panel_position == 2){
        line_name = "Buy Stop";
        CreateLine(line_name, clrGreen);
      }
      if(panel_position == 3 || panel_position == 4){
        line_name = "Sell Stop";
        CreateLine(line_name, clrYellow);
      }
    }
    //Нажатие на линию меняет цвет на красный
    if(sparam=="Buy Stop" || sparam=="Sell Stop") {
      ObjectSetString(0,line_name,OBJPROP_NAME,"Stop Loss");
      line_name = "Stop Loss";
      Print(line_name, " onto red ",ObjectSetInteger(0, line_name, OBJPROP_COLOR, clrRed));
    }
    //Нажатие на красной линии удаляет её и отжимает кнопку
    if(sparam=="Stop Loss"){
      ObjectDelete(line_name);
      button_name = "Button Stop Order";
      ms=GetMicrosecondCount();
    }
  }
  //Если кнопка SO нажата, то линия будет следовать за курсором
  if(ObjectGetInteger(0,"Button Stop Order",OBJPROP_STATE)){
    int x = (int)lparam;
    int y = (int)dparam;
    //Переведём координаты X, Y в дату и время
    if(ChartXYToTimePrice(window,x,y,window,dt,price)){
      Comment(StringFormat("CURSOR PRICE %.5f \nIF PRICE > ASK %.5f\nIF PRICE < BID %.5f\nIF PRICE IN SPREAD ZONE %.5f",
                            price,price2,price4,price3));
      //Линия меняет цвет с зелёного на желтый
      if(price < Bid){
        price4 = price;
        if(ObjectExist(0,"Buy Stop") || ObjectExist(0,"Not Allowed")){
          Print(line_name," rename onto Sell Stop ", ObjectSetString(0,line_name,OBJPROP_NAME,"Sell Stop")," error ", GetLastError());
          line_name = "Stop Loss";
          ObjectSetInteger(0, line_name, OBJPROP_COLOR, clrYellow);
        }
      }
      //Линия меняет цвет с желтого на зелёный
      if(price > Ask){
        price2 = price;
        if(ObjectExist(0,"Sell Stop") || ObjectExist(0,"Not Allowed")){
          Print(line_name," rename onto Buy Stop ", ObjectSetString(0,line_name,OBJPROP_NAME,"Buy Stop")," error ", GetLastError());
          line_name = "Buy Stop";
          ObjectSetInteger(0, line_name, OBJPROP_COLOR, clrGreen);
        }
      }
      //Линия меняет цвет на серый если в зоне спреда
      if(price > Bid && price < Ask){
        price3 = price;
        if(ObjectExist(0,"Sell Stop") || ObjectExist(0,"Buy Stop")){
          Print(line_name," rename onto Not Allowed ", ObjectSetString(0,line_name,OBJPROP_NAME,"Not Allowed")," error ", GetLastError());
          line_name = "Not Allowed";
          ObjectSetInteger(0, line_name, OBJPROP_COLOR, clrGray);
        }
      }
      //Прикрепляем линию к курсору
      if(id == CHARTEVENT_MOUSE_MOVE)
        if(ObjectMove(line_name,0,0,price))
          ChartRedraw(0);
    }
  }else if(ObjectExist(0,line_name)) Print(line_name," delete ",ObjectDelete(line_name)," error ", GetLastError());
  //Если нажать Esc то удалится линия и кнопка отожмется
  if(id == CHARTEVENT_KEYDOWN && lparam == 27){
      button_name = "Button Stop Order";
      ms=GetMicrosecondCount();
  }
}
//----------------------------------------------------------------------
void CreateLine(const string name, const color clr)
{
  Print(name," create ",ObjectCreate(0, name, OBJ_HLINE, 0,TimeCurrent(),Bid)," error ", GetLastError());
  ObjectSetInteger(0, name, OBJPROP_COLOR, clr);
  ObjectSetInteger(0, name, OBJPROP_STYLE, 3); 
}
bool ObjectExist(const long _chartID, const string _name) { return(ObjectFind(_chartID, _name) >= 0); }
 
Nerd Trader #:


Mon conseil pour vous, en tant que programmeur débutant. Apprenez à utiliser le débogage ( un outil très puissant). Et découvrez-le par vous-même. C'est intéressant. Si cela se complique (ce qui est peu probable), commencez par une solution facile. Debug vous aidera à comprendre le fonctionnement de votre application dans les moindres détails.

Отладка программ на MQL5
Отладка программ на MQL5
  • www.mql5.com
Эта статья ориентирована в первую очередь на программистов, которые уже изучили язык, но еще недостаточно освоились в разработке программ. Статья раскрывает практические приемы отладки программ и является объединенным опытом, не только моим, но и многих программистов, на опыте которых я учился.
 
Mihail Matkovskij #:

Mon conseil pour vous, en tant que programmeur débutant. Apprenez à utiliser le débogage ( un outil très puissant). Et découvrez-le par vous-même. C'est intéressant. Si cela se complique (ce qui est peu probable), commencez par une solution facile. Le débogage doit vous aider à comprendre le fonctionnement de votre application jusque dans les moindres détails.

En général, je n'en ai pas besoin parce qu'il ne fonctionne pas dans le testeur, mais dans ce cas, il fonctionne avec des données réelles et vous devriez l'essayer. D'après ce que je comprends, la version de ce code avec renommage de l'objet n'est pas différente de la dernière fois, lorsque les objets ont été recréés avec un changement de couleur, car le renommage fait la même chose : il crée l'objet avec le nouveau nom et supprime l'ancien.


UPD

Les boutons que j'utilise pour créer des lignes dans mql4 en mode débogage sont absents du graphique.