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

 
EVGENII SHELIPOV #:

Guten Tag meine Herren Programmierer!!!!

Ich werde noch einmal versuchen, meine Frage zu stellen, aber ich habe sie ein wenig umformuliert.

In einem Grid EA müssen wir das Ticket der vorletzten Bestellung finden. Ich denke, die Lösung -1 aus dem Ticket der maximalen Bestellung funktioniert nicht in der Strategie-Tester, aber es kann so auf der Demo und realen Konten sein, ist es schwierig zu sehen, warum.

Ich habe den Code der Funktion geschrieben, die den vorletzten Bestellschein ermittelt. Die Logik ist wie folgt: Wenn wir alle offenen Aufträge im Raster durchsehen, finden wir den maximalen Auftrag, der darauf folgt, und das wird das notwendige Auftragsticket sein.

Allerdings ist mein Programmierniveau nicht hoch genug, und es gibt einige Fehler im Code. Das Ergebnis dieser Funktion ist das Mindestticket. Diese beiden Funktionen maximales Ticket und vorletztes Ticket. Die Funktion, mit der das maximale Ticket definiert wird, funktioniert ohne Probleme.

Bitte teilen Sie uns mit, wo der Fehler liegt. Ich danke Ihnen.

Das zweite Bild zeigt, dass Sie weder ein maximales Ticket noch eine maximale Öffnungszeit benötigen, aber Sie müssen einen minimalen offenen Preis für Kaufaufträge und einen maximalen offenen Preis für Verkaufsaufträge wählen.
 
Alexey Viktorov #:
Dies ist das zweite Bild, das Ihnen sagt, dass Sie kein maximales Ticket oder eine maximale Eröffnungszeit benötigen, aber Sie müssen den minimalen Eröffnungspreis für Kaufaufträge und den maximalen Eröffnungspreis für Verkaufsaufträge auswählen.

Alexej, ich habe die Funktionen, die diese Preise bestimmen. Könnten Sie mir erklären, wie ich das gesuchte Ticket erreiche?

 
Alexey Viktorov #:
Das zweite Bild zeigt, dass Sie weder ein maximales Ticket noch eine maximale Öffnungszeit benötigen, aber Sie müssen einen minimalen offenen Preis für Kaufaufträge und einen maximalen offenen Preis für Verkaufsaufträge wählen.
//+----------------------------------------------------------------------------+
//| Определение цены открытия макс лота                                        |
//+----------------------------------------------------------------------------+
double PriceMaxOrder()
  {
   double max_price = 0 ;
   max_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() > max_ticket)
                    {
                     max_ticket = OrderTicket();
                     max_price = OrderOpenPrice();
                    }
                 }
              }
           }
        }
     }
   return(max_price);
  }
 
EVGENII SHELIPOV #:

Alexej, ich habe die Funktionen, die diese Preise bestimmen. Könnten Sie mir erklären, wie ich das gesuchte Ticket erreiche?

Zum Beispiel so.

//+------------------------------------------------------------------+
//| Расчет тикета нижнего ордера BUY в сетке                         |
//+------------------------------------------------------------------+
int GetTicketMaxOrder(int Magic)// int Magic вставлен только для компиляции без ошибок.
 {
  int total = OrdersTotal(),
      my_ticket = 0;
  double minPrice = DBL_MAX;
  for(int cnt = total; cnt-- > 0;)
   {
    if(OrderSelect(cnt, SELECT_BY_POS) && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
     {
      if(OrderType() == OP_BUY)
       {
        if(OrderOpenPrice() < minPrice)
          my_ticket = OrderTicket();
       }
     }
   }
  return(my_ticket);
 }
/*****************************End program****************************/
 
Alexey Viktorov #:

Wie diese

Alexey danke!!! Aber bevor ich auf den Kern der Funktion eingehe, wollte ich klären: Ist diese Funktion für die Auswahl des Tickets der vorletzten Bestellung?

 
EVGENII SHELIPOV #:

Alexey danke!!! Aber bevor ich auf den Kern der Funktion eingehe, wollte ich klären: ist diese Funktion, um das Ticket der vorletzten Bestellung auszuwählen?

Nein, es findet den BUY-Bestellschein mit dem niedrigsten Preis. Von nun an liegt es an mir oder Makar, mich üben zu lassen.

 
Alexey Viktorov #:

Nein, es findet den BUY-Bestellschein mit dem niedrigsten Preis. Von nun an liegt es an dir oder Makar, zu üben.

Schon den zweiten Tag fühle ich mich in Ihrer Gesellschaft unzulänglich. Ich habe Funktionen zum Berechnen von Min-/Max-Tickets, sie funktionieren ohne Probleme wie die Maschine von Kalaschnikow, ich habe sie noch nicht gefragt, aber am zweiten Tag haben sie mich in einen Trott gebracht!

//+----------------------------------------------------------------------------+
//| Расчет тикета максимального ордера в сетке                                 |
//+----------------------------------------------------------------------------+
int GetTicketMaxOrder()
  {
   max_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() > max_ticket)
                     max_ticket = OrderTicket();
                 }
              }
           }
        }
     }
   return(max_ticket);
  }
//+----------------------------------------------------------------------------+
//| Расчет тикета минимального ордера в сетке                                  |
//+----------------------------------------------------------------------------+
int GetTicketMinOrder()
  {
   min_ticket=INT_MAX;
     {
      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() < min_ticket)
                     min_ticket = OrderTicket();

                 }
              }
           }
        }
     }
   return(min_ticket);
  }

Wie auch immer, danke für die Vorwarnung.

 
EVGENII SHELIPOV #:

Ja Alexey ich fühle mich den zweiten Tag unter Ihnen nicht ganz angemessen Person. Funktionen zur Berechnung der min/max Ticket funktioniert reibungslos wie eine automatische Kalaschnikow Ich habe nicht für sie jemand fragen, aber am zweiten Tag bekomme ich auf einen Haken gedreht!!!

Wie auch immer, danke für den Tipp.

Ist dieses Bild nicht

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Alle Fragen von Neulingen zu MQL4 und MQL5, Hilfe und Diskussion von Algorithmen und Codes

EVGENII SHELIPOV, 2021.11.07 06:43

Guten Tag meine Herren Programmierer!!!!

Ich werde noch einmal versuchen, meine Frage zu stellen, aber etwas umformuliert.

In einem Grid EA muss ich das Ticket der vorletzten Bestellung finden. Eine Lösung von -1 aus dem Ticket der maximalen Bestellung funktioniert nicht in der Strategie-Tester, vielleicht, aber es wird nicht auf einem Demo oder realen Konto zu arbeiten, habe ich ein Bild beigefügt, wird es klar sein, warum.

Ich habe den Code der Funktion geschrieben, die den vorletzten Bestellschein ermittelt. Die Logik ist wie folgt: Wenn wir alle offenen Aufträge im Raster durchsehen, finden wir den maximalen Auftrag, der darauf folgt, und das wird das notwendige Auftragsticket sein.

Allerdings ist mein Programmierniveau nicht hoch genug, und es gibt einige Fehler im Code. Das Ergebnis dieser Funktion ist das Mindestticket. Diese beiden Funktionen maximales Ticket und vorletztes Ticket. Die Funktion, mit der das maximale Ticket definiert wird, funktioniert ohne Probleme.

//+----------------------------------------------------------------------------+
//| Расчет тикета предпоследнего ордера в сетке                                |
//+----------------------------------------------------------------------------+
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);
  }
//+----------------------------------------------------------------------------+
//| Расчет тикета максимального ордера в сетке                                 |
//+----------------------------------------------------------------------------+
int GetTicketMaxOrder()
  {
   max_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() > max_ticket)
                     max_ticket = OrderTicket();
                 }
              }
           }
        }
     }
   return(max_ticket);
  }

Bitte teilen Sie uns mit, wo der Fehler liegt. Ich danke Ihnen.


Zeigen die Pfeile das maximale Ticket an? Ich sehe hier Pfeile, die auf den zweitniedrigsten Bestellpreis hinweisen. Was ist los?
 
Alexey Viktorov #:

Ist dieses Bild


die Pfeile das maximale Ticket anzeigen? Ich sehe hier Pfeile, die auf den zweitniedrigsten Bestellpreis hinweisen. Was ist los?

Alexej, kannst du das Bild bitte vergrößern?

 
EVGENII SHELIPOV #:

Alexej, kannst du das Bild bitte vergrößern?

Dies istdie VORAUSSICHTLICHE Reihenfolge

Grund der Beschwerde: