Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1798

 

Hallo zusammen.

Ich bitte um Hilfe bei dieser Frage.

Ich habe ein mt4-Terminal und einen Expert Advisor (selbstgemacht), der Alarme für Handelssignale generiert. Ich möchte, dass die Warnmeldungen an das mobile Endgerät gesendet werden. Ich habe es konfiguriert, der Test kommt, Änderungen in der Reihenfolge Parameter kommen, aber die Alarme aus dem EA nicht kommen... Ich weiß nicht, was der Grund dafür ist, Google hat mir keine Antworten gegeben.

Die Warnungen werden auf dem Terminal selbst angezeigt.
 
und doch ist es ein unangenehmer Ort zum Plaudern. Eine Art Stackoverflow- und/oder Discord-Kanal wäre schön.
 
Sergey Dymov Änderungen in der Reihenfolge Parameter kommen, aber die Alarme aus dem EA nicht kommen... Ich weiß nicht, was der Grund dafür ist, Google hat mir keine Antworten gegeben.
Sie müssen den Code sehen... es gibt hier keine Telepathen)
 
MakarFX #:
Ich muss den Code sehen... keine Telepathen hier)

Alles ist Standard

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

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

 
Sergey Dymov Änderungen in der Reihenfolge Parameter kommen, aber die Alarme aus dem EA nicht kommen... Ich weiß nicht, woran das liegt, Google hat mir keine Antwort gegeben. Die Warnungen werden auf dem Terminal selbst angezeigt.

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 #:

Alles ist Standard

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

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

if ((EURTP>=3)&&(JPYTP<=0)&&(z!=2))
    {
     Alert("Покупай EURJPY. EUR=", EURTP, ", JPY=", JPYTP); z=2;
     SendNotification(текст сообщения);
    } 
 
Danke, Leute! Ich werde es nie vergessen!
 

OK, ich habe Zeilen nur durch Klicken erstellt und gelöscht, und die Farbe und der Name ändern sich mit der Position des Cursors und... nichts hat sich geändert, dieselben Probleme. Die Zeile wird in Abhängigkeit von der Position der Schaltflächenleiste erstellt. Ich habe es an der Unterseite, so dass durch die Bedingung ist es gelb (Sell Stop), aber hier gibt es ein Vorkommen in Bedingung if(Preis > Ask), weil, wenn ich auf die Schaltfläche für einige Mist Preis ist gleich dem höchsten Preis auf dem Chart, das ist höher als Ask, so dass an dieser Stelle Preis > Ask = true. Nun, scheiß drauf, logischerweise sollte die nächste Mausbewegung alles in Ordnung bringen, aber nein. Protokollieren Sie nur einen Klick auf die Schaltfläche.

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

Ich weiß nicht, warum 4204 (No Object), vielleicht ist es ein Fehler aus der Vergangenheit.

Nach einem Klick auf die Schaltfläche sehen Sie eine grüne Linie auf der Bid-Ebene, die nicht auf eine Verschiebung des Mauszeigers reagiert. Bewegt sich der Cursor über den Asc, werden die Meldungen kontinuierlich ausgegeben

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 #:


Mein Rat an Sie als unerfahrenen Programmierer. Lernen Sie, wie man Debugging (ein sehr leistungsfähiges Werkzeug) einsetzt. Und finden Sie es selbst heraus. Das ist interessant. Wenn es kompliziert wird (was unwahrscheinlich ist), beginnen Sie mit einer einfachen Aufgabe. Mit Debug können Sie herausfinden, wie Ihre Anwendung im Detail funktioniert.

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

Mein Rat an Sie als Programmieranfänger. Lernen Sie, wie man Debugging (ein sehr leistungsfähiges Werkzeug) einsetzt. Und finden Sie es selbst heraus. Das ist interessant. Wenn es kompliziert wird (was unwahrscheinlich ist), beginnen Sie mit einer einfachen Aufgabe. Debuggen soll Ihnen helfen, die Funktionsweise Ihrer Anwendung bis ins kleinste Detail zu verstehen.

Normalerweise brauche ich es nicht, weil es im Tester nicht funktioniert, aber in diesem Fall funktioniert es mit echten Daten und Sie sollten es ausprobieren. Soweit ich weiß, unterscheidet sich die Version dieses Codes mit der Umbenennung von Objekten nicht vom letzten Mal, als Objekte mit Farbänderung neu erstellt wurden, denn die Umbenennung bewirkt das Gleiche: Sie erstellt ein Objekt mit neuem Namen und löscht das alte.


UPD

Die Schaltflächen, mit denen ich in mql4 im Debug-Modus Linien erstellen kann, sind im Diagramm nicht vorhanden

Grund der Beschwerde: