Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 713

 
7Konstantin7:

Danke, ich kann das nicht, ich dachte nur, vielleicht könnte jemand ein paar Zeilen in diese Funktion kritzeln oder eine Eule fallen lassen, die endgültige Version. Ich glaube nicht, dass es schwer ist, aber es ist unwahrscheinlich, dass jemand helfen wird.

Es gibt 4 Credits auf der Website mql5 geben könnte), wenn es möglich ist, zwischen den Teilnehmern zu übertragen.

1. Finden Sie die frühestmögliche offene Position in der Schleife und geben Sie deren Ticket zurück?

 
artmedia70:

1. Können Sie die früheste offene Position in der Schleife finden und sie in das Ticket zurückgeben?

Ich kann mir nicht vorstellen, wie es in den Code), aber irgendwie war ich in der Lage, um die EA Entfernen von schwebenden Aufträgen hinzufügen, ich bin nicht gut in Code, nur ein wenig.
 
7Konstantin7:
Ich kann mir nicht vorstellen, wie es in den Code), aber durch irgendein Wunder war ich in der Lage, die Entfernung von schwebenden Aufträgen, um die EA hinzufügen, ich bin nicht gut in Codes, nur ein wenig.

Nimm es einfach und sieh, wie es sich in einer Schleife schließt

1:

int i, total = OrdersTotal(); bool rez;

for(i = total-1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS) && другие нужные условия)
{
if(OrderType() < 2)
rez = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 40);
if(OrderType() > 1)
rez = OrderDelete(OrderTicket());
}
}

2:

//Всё тоже самое только поменяй направление цикла
for(i = 0; i < total; i++)
Dann werden Sie verstehen, in welcher Reihenfolge die Aufträge abgeschlossen werden. Ich kann das nicht mit Sicherheit sagen, weil ich es nicht überprüft habe. Ich brauche es nicht. Aber das ist ein anderes Thema, das hier schon mehr als einmal diskutiert wurde, und ich möchte es nicht noch einmal wiederholen.
 
AlexeyVik:

Nimm es einfach und schau, wie es sich in einer Schleife schließt

1:

2:

dann wissen Sie, in welcher Reihenfolge die Aufträge geschlossen werden. Das kann ich nicht sagen, weil ich es nicht überprüft habe. Ich brauche es nicht. Aber das ist ein anderes Thema, es wurde hier schon oft diskutiert und ich möchte nicht alles wiederholen.
Das Problem wurde bereits auf privater Ebene gelöst...
 
artmedia70:
Wir haben das schon unter vier Augen geklärt...
Nun, ich lese nicht deine privaten... Ich weiß nicht, was hier los ist.
 
AlexeyVik:
Nun, ich lese deine privaten Nachrichten nicht... und ich weiß nicht, was hier los ist.
Ja, er kann nicht lesen... Was ist mit meinen Hausschuhen passiert? ;)
 
artmedia70:
Ja, er kann nicht lesen... Wo sind meine Pantoffeln hin?!?!! ;)

Erinnern Sie sich daran, was Ioann Vassilievich aufgelistet hat, was er genommen hat, und was Shpak nicht genommen hat... Ich bin also deine Hausschuhe.


Auf Wiedersehen. Ich gehe jetzt ins Bett.

 
AlexeyVik:

Erinnern Sie sich daran, was Ioann Vassilievich aufgelistet hat, was er genommen hat, und was Shpak nicht genommen hat... Ich bin also deine Hausschuhe.


Auf Wiedersehen. Ich gehe jetzt ins Bett.

Ich werde die anderen nach den Hausschuhen fragen... Gute Nacht...
 
AlexeyVik:

Nimm es einfach und schau, wie es sich in einer Schleife schließt

1:

2:

Dann wissen Sie, in welcher Reihenfolge die Aufträge geschlossen werden. Das kann ich nicht sagen, weil ich es nicht überprüft habe. Ich habe es nicht überprüft, weil ich es nicht brauche. Aber es gibt einen Grund, die Schleife wie in der ersten Variante anzuordnen. Aber das ist ein anderes Thema, es wurde hier schon oft diskutiert und ich habe keine Lust, alles zu wiederholen.

Danke, ich habe das Problem bereits gelöst.

artmedia70:

Ich dachte, sie würden mich zum Klo schicken) Danke für die Hilfe.

 

Hallo zusammen, ich habe bereits eine ähnliche Frage auf Seite 711 gestellt, leider hat niemand geantwortet, vielleicht hat jetzt jemand...

Ich habe ein Problem mit dem Abschluss von Gegenaufträgen bei einem fünfstelligen Auftrag. Der Punkt ist, dass ich z.B. 20 Kaufaufträge und 33 Verkaufsaufträge schließen muss, wenn der Gesamtgewinn erreicht ist. Und ich möchte 20 Kauf- und 20 Verkaufsaufträge mit der Funktion OrderCloseBy() schließen und die restlichen 13 Verkaufsaufträge mit der Funktion OrderClose() schließen.

Wenn wir eine feste Spanne von 4 Zeichen haben, haben wir kein Problem mit dem Schließen der Spanne und wir können die Spanne speichern, wenn wir die Funktion OrderCloseBy() verwenden. Wenn wir einen 5-stelligen Spread haben, ist der Spread fließend und das ist der Grund, warum ich denke, dass die Aufträge nicht geschlossen werden, wenn der Gesamtgewinn erreicht ist und das Protokoll OrderCloseBy() sagt. Wenn wir es jedoch im Prüfgerät laufen lassen, ist alles normal geschlossen.

Aufträge in eine Richtung werden bei Erreichen des Gesamtgewinns ohne Probleme geschlossen.

Wer ist schon einmal auf ein solches Problem gestoßen und welche Möglichkeiten gibt es, es zu lösen?

Ich werde Ihnen die Funktion zum Schließen der Aufträge geben.

Funktioniert die Funktion OrderCloseBy() auch bei einer fünfstelligen Bestellung?

  //-----------------------------------------------------------------------
  // функция подсчета открытых ордеров
  //-----------------------------------------------------------------------

  void OrderOpen()
   {
     Orders_BUY=0; Orders_SELL=0;
     for(int a=0; a<=OrdersTotal(); a++)
     {
      if(OrderSelect(a,SELECT_BY_POS,MODE_TRADES) == true && OrderType()==OP_BUY && OrderMagicNumber() == Magic) Orders_BUY=Orders_BUY+1;
      if(OrderSelect(a,SELECT_BY_POS,MODE_TRADES) == true && OrderType()==OP_SELL && OrderMagicNumber() == Magic) Orders_SELL=Orders_SELL+1;

      //if(OrderSelect(a,SELECT_BY_POS,MODE_TRADES) && OrderType()==OP_BUY) Orders_BUY=Orders_BUY+1;
      //if(OrderSelect(a,SELECT_BY_POS,MODE_TRADES) && OrderType()==OP_SELL) Orders_SELL=Orders_SELL+1;
      ProfitAll=ProfitAll+OrderProfit()+OrderSwap()+OrderCommission();
     }
   }
  
  //-----------------------------------------------------------------------
  // функция закрытия ордеров сначала разнонаправленных
  //-----------------------------------------------------------------------
  void ClosePos()
   {
   int ticket_1=0, ticket_2=0;
    
     for (int a=0; a<=OrdersTotal(); a++)
       {
         if(OrderSelect(a,SELECT_BY_POS,MODE_TRADES) == true) 
            {
            if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) // проверка по символу и магику
               {
                if(OrderType() == OP_BUY) ticket_1 = OrderTicket();
                if(OrderType() == OP_SELL) ticket_2= OrderTicket();   
               } 
            }
        }    
      if(ticket_1 != 0 && ticket_2 != 0) {          // если найдены разнонаправленные ордера
      res = OrderCloseBy(ticket_1,ticket_2,clrRed); }   // закроем их
       
      if(ticket_1 == 0 && ticket_2 != 0) {  CloseOrder_by_type(OP_SELL,Symbol());  }
      if(ticket_1 != 0 && ticket_2 == 0) {  CloseOrder_by_type(OP_BUY,Symbol());  }
    
    }

//---- Закрытие ордера по типу и комментарию ----//
void CloseOrder_by_type(int type, string sym)
{
   for(int k= OrdersTotal()-1;k>=0;k--)
   {
    
      if(OrderSelect(k,SELECT_BY_POS,MODE_TRADES)==true)
       {
           
      if(type == OrderType() && sym==OrderSymbol()&& OrderMagicNumber()==Magic)
         if(OrderType()<=1){ res = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),350);}
         else { res = OrderDelete(OrderTicket());}
         if(!res)
               Print("Ошибка закрытия ордера. Код ошибки=",GetLastError());
            else
               Print("ордер успешно закрыт.");   
           
       }
   }
}