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

 
Maxim Kuznetsov #:

Ist das ein Scherz?

Sie haben es schwarz auf weiß für(;;)

Nun, ja, aber es gibt einen Ausweg: wenn Magie nicht gleich Bestellmagie ist.
 
Nerd Trader #:
Ja, aber es gibt einen Ausweg: wenn Magie nicht gleich Bestellmagie ist.

Versuchen Sie dies

int GetMagic(Order &order)
{
  int magic = 0;
  if(order.cmd == OP_SELLSTOP || order.cmd == OP_BUYSTOP)
  for(int i = OrdersTotal(); i > 0 ; i --)
   {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
       if(OrderType()==OP_SELLSTOP || OrderType()==OP_BUYSTOP)
         {
          if(magic == OrderMagicNumber()) magic+=1;
          else magic=0;
         }
      }
   }
  return (magic);
}
 
EVGENII SHELIPOV ausgewählten Bestellung zurückgibt.

Was ist, wenn es eine Reihe von Aufträgen gibt?

Hat jemand eine Funktion, mit der man die Summe aller Swaps eines Rasters von Aufträgen für einen magischen Auftrag und ein Finanzinstrument berechnen kann?

Danke für die Hilfe!!!

Wozu brauchen Sie es?
 
MakarFX #:
Wozu brauchen Sie es?

Bei der Schließung eines großen Netzes von Aufträgen mit einer langen Netzlaufzeit fressen die Auftragstauschgeschäfte die Gewinne auf und verzerren das Ergebnis erheblich.

Mit dieser Funktion möchte ich den Verlust bei Swaps kompensieren.

 
EVGENII SHELIPOV #:

Bei der Schließung eines großen Netzes von Aufträgen mit einer langen Netzlaufzeit fressen die Auftragstauschgeschäfte die Gewinne auf und verzerren das Ergebnis erheblich.

Mit dieser Funktion möchte ich den Verlust bei Swaps kompensieren.

Ist das Netz mit Gewinn oder kostendeckend geschlossen?
 
MakarFX #:

Versuchen Sie dies

int GetMagic(Order &order)
{
  int magic = 0;
  if(order.cmd == OP_SELLSTOP || order.cmd == OP_BUYSTOP)
  for(int i = OrdersTotal(); i > 0 ; i --)
   {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
       if(OrderType()==OP_SELLSTOP || OrderType()==OP_BUYSTOP)
         {
          if(magic == OrderMagicNumber()) magic+=1;
          else magic=0;
         }
      }
   }
  return (magic);
}
Das hat es behoben, ich hatte if (order.cmd == OP_SELLSTOP || OP_BUYSTOP) nur das Problem war nicht gelöst.
Aber es muss alle Aufträge durchlaufen. Der Magier selbst ist im Moment der Erschaffung nur auf den Stopper festgelegt. Wir können nicht verstehen, dass der Stopper von OrderType() erstellt wird, weil er noch nicht da war; dafür haben wir einen vorläufigen Eintrag der Auftragsart in order.cmd. Und hier brauchen wir zwei Schleifen: eine in der anderen verschachtelt, so dass eine Iteration der magischen Variable mit allen Bestellungen aus OrdersTotal() überprüft wird. Ich habe alles implementiert, nur gibt es eine Endlosschleife, ich weiß nicht, warum ...
 
MakarFX #:
Ist das Netz mit Gewinn oder mit Break-even geschlossen?

Ja, ab einer bestimmten Höhe der Inanspruchnahme gibt es einen Verlust von Null und bei keinem Verlust gibt es einen hässlichen Verlust aufgrund von Swaps

 
Nerd Trader #:
Das ist in Ordnung, ich hatte if (order.cmd == OP_SELLSTOP || OP_BUYSTOP)
Aber ich brauche alle Aufträge, um übergeben werden. Der Magier selbst wird eingestellt, wenn nur der Stopper erstellt wird. Wir können nicht wissen, dass der Stopper durch OrderType() erstellt wird, da er noch nicht vorhanden ist, wir müssen den Auftragstyp vorher in order.cmd schreiben. Und hier brauchen wir zwei Schleifen: eine in der anderen verschachtelt, so dass eine Iteration der magischen Variable mit allen Bestellungen aus OrdersTotal() überprüft wird
Zeigen Sie mir, wo Sie GetMagic(...) verwenden
 
void OpenOrder(int db = -1){

  if(db == -1){
    Print("'db' должен иметь корректное значение");
    return;
  }

  Order order;

  //Если бид в границах ДБ (его хай/лоу) то инициализируем ордер для селстопа или байстопа
  if(Bid > db_last.low && Bid < db_last.hight){
    if(db == BEAR) order.InitForSell(SELLSTOP);
    if(db == BULL) order.InitForBuy(BUYSTOP);
  }

 ...

  if(order.is_init == true)
  {
    int order_send = OrderSend(Symbol(), order.cmd, 0.01, order.open_price, 10, 
    order.sl_price, order.tp_price, "", GetMagic(order), 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;
  //Если должен быть открыт стопордер и если есть уже открытые или отложенные 
  //ордера, то возможно некоторые с маджиком, это надо проверить и сгенерировать 
  //для нашего ордера уникальный маджик и отправить его на запись в массив
  if(order.cmd == OP_SELLSTOP || 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;
}


Im Kommentar steht, dass die Majic an das Write-Array gesendet wird, also lassen Sie sich davon nicht beirren, solange die Majic an das Retorn zurückgeht.
 
EVGENII SHELIPOV #:

Ja, ab einer bestimmten Höhe der Inanspruchnahme gibt es einen Verlust von Null und bei keinem Verlust gibt es einen hässlichen Verlust aufgrund von Swaps

   double GetOrderSwap()
     {
      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);
     }
Grund der Beschwerde: