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

 
EVGENII SHELIPOV #:

Alexej, bitte vergrößern Sie das Bild.

Verkleinert. Ich habe genau das gesehen, was der Pfeil auf dem zweitniedrigsten Auftragspreis und auf dem Ticket des Auftrags zeigt, der nicht dem vorletzten Auftragskriterium entspricht. Führen Sie meinen Code aus und Sie werden das Ticket mit der niedrigsten Bestellung sehen. Sie können diese Funktion beenden, wenn Sie nicht die BUY-Bestellung, sondern die zweite von unten erhalten möchten.

 
Alexey Viktorov #:

Verkleinert. Was ich sah, war der Pfeil, der auf den zweitniedrigsten Bestellpreis und auf das Ticket der Bestellung zeigte, das das vorletzte Bestellkriterium nicht erfüllte. Wenn Sie meinen Code ausführen, sehen Sie das Ticket mit der niedrigsten Bestellung. Sie können diese Funktion weiterentwickeln, um nicht die unten stehende BUY-Bestellung, sondern die zweite zu erhalten.

Ich kann nur fragen, wo ein Fehler im Code für die vorletzte Bestellscheinermittlung liegt.

//+----------------------------------------------------------------------------+
//| Расчет тикета предпоследнего ордера в сетке                                |
//+----------------------------------------------------------------------------+
int GetTicketPenultimateOrder()
  {
   penultimate_ticket = 0;
     {
      for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
        {
         if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                  if(OrderTicket() > penultimate_ticket && penultimate_ticket != GetTicketMaxOrder())
                     penultimate_ticket = OrderTicket();
                 }
              }
           }
        }
     }
   return(penultimate_ticket);
  }
 
EVGENII SHELIPOV #:

Kann nur als meine Frage, wo ist der Fehler in den Code für die Bestimmung der Ticket der vorletzten Bestellung???

Der Fehler besteht darin, dass der Preis des Auftrags in keiner Weise berücksichtigt wird.

Irgendwo in Ihrem Dialog wird empfohlen, das Ganze in ein Array zu packen und es zu sortieren, um alle Tickets nach Anzahl zu erhalten. Aber als Antwort darauf verstehe ich nicht, wie man das macht.

Wie diese

//+------------------------------------------------------------------+
//| Расчет тикета второго снизу ордера BUY в сетке                   |
//+------------------------------------------------------------------+
int GetTicketMaxOrder()
 {
  int total = OrdersTotal(),
      arrSize = 0;
  double arr[][2];
  for(int cnt = 0; cnt < total; cnt++)
   {
    if(OrderSelect(cnt, SELECT_BY_POS) && OrderSymbol() == Symbol())// && OrderMagicNumber() == Magic)
     {
      if(OrderType() == OP_BUY)
       {
        arrSize = ArrayRange(arr, 0);
        ArrayResize(arr, arrSize+1);
        arr[arrSize][0] = OrderOpenPrice();
        arr[arrSize][1] = OrderTicket();
       }
     }
   }
  ArraySort(arr);
  return((int)arr[1][1]);
 }
/*****************************End program****************************/
 
EVGENII SHELIPOV #:

Ich kann nur meine Frage beantworten, wo der Fehler im Code liegt, der das Ticket der vorletzten Bestellung bestimmt.

//+----------------------------------------------------------------------------+
//| Расчет тикета предпоследнего ордера в сетке                                |
//+----------------------------------------------------------------------------+
int GetTicketPenultimateOrder()
  {
   penultimate_ticket = 0;
     {
      for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
        {
         if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                  if(OrderTicket() > penultimate_ticket && penultimate_ticket != GetTicketMaxOrder())
                     penultimate_ticket = OrderTicket();
                 }
              }
           }
        }
     }
   return(penultimate_ticket);
  }

Und ein weiterer grober Fehler ist, dass Sie, während Sie in der Schleife nach Aufträgen suchen, eine Funktion aufrufen, die ihrerseits ebenfalls nach Aufträgen sucht... Und wenn die Codeausführung zur Funktion zurückkehrt, ist bereits ein anderer Auftrag ausgewählt... Und OrderTicket() gibt etwas ganz anderes zurück als das, was Sie erwartet haben.

 
Alexey Viktorov #:

Der Fehler besteht darin, dass der Preis des Auftrags in keiner Weise berücksichtigt wird.

Irgendwo in Ihrem Dialog gibt es einen Hinweis, das Ganze in ein Array zu packen und es zu sortieren, um alle Tickets nach Anzahl zu erhalten. Aber als Antwort darauf verstehe ich nicht, wie man das macht.

Wie diese

Alexey, können Sie sich zu den Fehlern im Protokoll äußern?

2021.11.07 12:17:40.791 2020.01.02 06:00:00 eGriD2 EURUSD,M5: falsche Startposition 0 für ArraySort Funktion

2021.11.07 12:17:40.791 2020.01.02 06:00:00 eGriD2 EURUSD,M5: Array außerhalb des Bereichs in 'eGriD2.mq4' (664,18)

2021.11.07 12:17:40.792 2020.01.02 06:00:00 Testdurchlauf gestoppt aufgrund eines kritischen Fehlers im EA


 
EVGENII SHELIPOV # :

Alexey, können Sie sich zu den Fehlern im Protokoll äußern

2021.11.07 12:17:40.791 2020.01.02 06:00:00 eGriD2 EURUSD,M5: falsche Startposition 0 für ArraySort Funktion

2021.11.07 12:17:40.791 2020.01.02 06:00:00 eGriD2 EURUSD,M5: Array außerhalb des Bereichs in 'eGriD2.mq4' (664,18)

2021.11.07 12:17:40.792 2020.01.02 06:00:00 Testdurchlauf gestoppt aufgrund eines kritischen Fehlers im EA


Diese Fehler sind nicht mein Code. Ich spreche die Sprache nicht fließend, ich benutze den internen Übersetzer dieser Website. Die Übersetzung lautet folgendermaßen.

falsche Startposition 0 für die ArraySort Funktion - falsche Startposition 0 für die ArraySort Funktion

array out of range in 'eGriD2.mq4' (664,18) - array out of range in 'eGriD2.mq4' (664,18)

Testdurchlauf aufgrund eines kritischen Fehlers im EA gestoppt

Also der Code im Studio.

ps; Wenn Sie diese Funktion jedoch aufrufen, wenn es weniger als zwei Aufträge gibt, treten diese Fehler auf. Ich habe es nicht vor ......... geschützt, aber ich denke, das hätte ich tun sollen.

Das ist genau der Grund, warum ich absolut keine Lust habe, irgendjemandem zu helfen... Du rechnest mit einer durchdachten Anwendung meiner Tipps, aber .........

 
Guten Tag. Können Sie mir sagen, wie ich eine Minimum/Maximum-Suche für n Balken implementieren kann?
 
Snajper007 #:
Guten Tag. Können Sie mir sagen, wie man eine Minimum/Maximum-Suche für n Balken implementiert?
iHighest

iLowest

 
MakarFX

Hier ist eine weitere Frage. Es gibt einen Indikator, der ein Fraktal zeichnet. Wie prüfe ich, ob ein Signal in n Balken vorhanden ist?

 
Snajper007 #:

Hier ist eine weitere Frage. Es gibt einen Indikator, der ein Fraktal zeichnet. Wie prüfe ich, ob ein Signal in n Balken vorhanden ist?

Zunächst einmal hängt es von dem Indikator ab, der die Fraktale zeichnet
Grund der Beschwerde: