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

 
MakarFX #:

Ich werde versuchen, sie beizufügen, danke. Nur eine Frage, wie man mit SELL-Aufträgen umgeht

 
EVGENII SHELIPOV #:

Ich werde versuchen, es zu tun, danke. Nur eine Frage, wie man mit SELL-Aufträgen umgeht

Semyon Semyonych...
   double GetBuyOrderSwap()
     {
      double order_swap = 0;
      for(int i = OrdersTotal()-1; i>=0; i--)
        {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if (OrderType() == OP_BUY)
                 {
                  order_swap += OrderSwap();
                 }
              }
           }
        }
      return(order_swap);
     }
   double GetSellOrderSwap()
     {
      double order_swap = 0;
      for(int i = OrdersTotal()-1; i>=0; i--)
        {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if (OrderType() == OP_SELL)
                 {
                  order_swap += OrderSwap();
                 }
              }
           }
        }
      return(order_swap);
     }
 
MakarFX #:
Semyon Semyonych...

Makar, warum ist es so kompliziert, alles in eine Funktion zu packen? Oder gibt es etwas, das ich nicht verstehe?

 
int GetMagic(Order &order)
{
  int magic = 0;
  
  if(order.cmd == OP_SELLSTOP || order.cmd == OP_BUYSTOP)
    if(OrdersTotal() >= 1)
      for(;;){
        magic++;
        for(int i = OrdersTotal(); i > 0 ; i --)
          if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) != false)
            if(magic != OrderMagicNumber())
              return magic;
            
      }
    else if (OrdersTotal() == 0)
      return (magic + 1);
  return magic;
}
Das Ersetzen durch == hilft nicht weiter. In beiden Fällen geht kein Faden dorthin (ich habe es mit Print überprüft)
 
Nerd Trader #:
Im Kommentar steht, dass die Majic an das Write-Array gesendet wird. Lassen Sie sich davon nicht irreführen, solange die Majic an das Retorn zurückgeht.

Ich verstehe die allgemeine Logik nicht ganz, ich versuche, die Funktionen zu trennen

  if(order.cmd == OP_SELLSTOP || order.cmd == OP_BUYSTOP)
  int order_magic = GetMagic(order);

  if(order.is_init == true)
  {
    int order_send = OrderSend(Symbol(), order.cmd, 0.01, order.open_price, 10, 
    order.sl_price, order.tp_price, "", order_magic, 0, order.arrow_color);

    if(order_send == -1){
      Print(order.error_text," | ",GetLastError()," db_last.third ",db_last.third,
        " | db_last.size_open_to_low ",db_last.size_open_to_low," | order.sl_price: ",
        order.sl_price," | order.cmd ",order.cmd);
      ResetLastError();
      return;
    }
  }
   //+---
   int GetMagic(Order &order)
   {
     int magic = 0;
     for(int i = OrdersTotal(); i > 0 ; i --)
      {
       if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         {
          if(magic == OrderMagicNumber()) magic+=1;
          else magic=0;
         }
      }
     return (magic);
   }
 
EVGENII SHELIPOV #:

Makar, warum ist es so kompliziert, alles in eine Funktion zu packen? Oder gibt es etwas, das ich nicht verstehe?

   double GetOrderSwap(int ot=-1)// 0-Buy; 1-Sell
     {
      double order_swap = 0;
      for(int i = OrdersTotal()-1; i>=0; i--)
        {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType()==ot||ot<0)
                 {
                  order_swap += OrderSwap();
                 }
              }
           }
        }
      return(order_swap);
     }
 
MakarFX #:

Makar, du benimmst dich mir gegenüber wie ein Baby.

Danke, Makar, ich habe die Funktion ein wenig geändert, und es funktioniert.

 
MakarFX #:

Ich verstehe die allgemeine Logik nicht ganz, ich versuche, die Funktionen zu trennen

Jetzt sollte GetMagic eine eindeutige Magie zum Zeitpunkt des Absendens einer ausstehenden Bestellung generieren und diese per Retorn zurückgeben. In Ihrer Version gibt es nur eine Schleife, d.h. wenn die Bestellung abgeschlossen ist, wird else trotzdem ausgeführt, und magic == OrderMagicNumber() wird immer wahr sein. Ich möchte, dass magic != OrderMagicNumber(), wenn es nicht wahr ist, bedeutet dies, dass magic einzigartig ist und es wird durch sich selbst in der ersten for(;;) erhöht.
 
Nerd Trader #:

Überprüfen Sie Ihre persönliche Nachricht.

 
Hallo, ich stehe vor folgendem Problem: EA hat eine Pending Order eröffnet, aber das Terminal verfolgt sie nicht und sie ist nicht in der Trade History vorhanden. Bitte teilen Sie uns mit, ob jemand mit einem solchen Problem konfrontiert wurde.