Hilfe! Warum der EA einen Handel nicht schließt - Seite 6

 
RaptorUK:

Sie brauchen die Funktion überhaupt nicht ... ... werden Sie sie los.



Hallo Raptor,

ich brauche diese Funktion, da der EA recht komplex ist, und ich diese Funktion mit vielen Versionen von Schlussbedingungen verwende.

Ich hoffe du verstehst mich.

Y.

 
onewithzachy:

Lassen Sie uns es wieder tun Teil 2 :(


Danke onewithzachy, aber wie ich schon sagte, brauche ich diese Funktion für das Schließen mit vielen Versionen von Bedingungen, also ist es zu komplex, die schließenden Code-Befehle innerhalb jeder Bedingung zu setzen, vor allem, dass es nicht ein Code-Befehl ist.

Vielen Dank!

Y.

 
RaptorUK:

Tun Sie dies . . . ( wiederholt von hier: https://www.mql5.com/en/forum/139543 )

. . und Sie brauchen die Funktion überhaupt nicht mehr.


Raptor, ich brauche diese Funktion, um REQUATE-Situationen zu überwinden, wie Sie sehen können.

Y.

 
onewithzachy:

@ RaptorUK, ich überlege, einen Sturzhelm zu tragen, damit ich wenigstens weiter vorausdenken kann, als ich es jetzt tue. Ist es nicht so, dass diese Fahrer weit voraus denken? :D


@ skaboy, ich bitte Sie höflich, wenn es Ihnen nichts ausmacht, würden Sie bitte den SRC-Button benutzen, um Ihren Code zu posten. Wir haben das allein in diesem Thread schon zu oft gefragt.

@ crossy, es ist fast eine Woche seit deinem ersten Beitrag vergangen. Sicherlich kann ich verstehen, dass du jetzt bei 4000 Zeilen keinen klaren Kopf mehr hast, ich selbst habe meinen jetzt auch hier. Wenn du es immer noch nicht verstehst, - ehm - kannst du uns bitten, den Close-Code für dich zu schreiben. Allerdings müssen Sie den Code auch nur ein wenig schreiben - und uns zeigen :D, RaptorUK's Code gerade oben ist direkter als meiner, denken Sie darüber nach und dann können Sie mit Ihrem EA weitermachen.

Mit der Art, wie Sie Code hier schreiben - zu viele unnötige wiederholte Code - Sie sollten ein wenig Sorge mit Ihrem 4000 Zeilen Code haben, dass es Ihre EA verlangsamen kann und macht Ihre EA einen Tick verpassen. Es ist in Ordnung, ein paar Punkte zu verpassen, aber was passiert, wenn Sie wie 10 Pips weg verpassen? und wahrscheinlich Ihre 4000 Zeilen können noch auf nur 400 Zeilen reduziert werden. Wer weiß, Ihr EA, werden mehr leichter und schneller :D


Vielen Dank onewithzachy,

Mein EA hat diesen kleinen Fehler, der ist:

1) Er schließt das relevante Ticket und sucht es auch.

2) Dieser Fehler tritt nicht bei jedem geschlossenen Auftrag auf, und manchmal funktioniert er gut.

aboy die anderen 3.950 Code-Zeilen - sie arbeiten sehr gut.

Ich füge die relevanten Codezeilen wieder bei.

Y.

...
   for(int cnt = OrdersTotal()-1; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
      if ( OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         CodeY    = true;
         OrderS   = OrderSymbol();
         OrderT   = OrderTicket();
         OrderM   = OrderMagicNumber();
         OrderTyp = OrderType();
         OrderL   = OrderLots();
      }   
      if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
    
         CLOSE_Single_P(Pair1,"LONG",OrderT,OrderL);

//-----------------------------------------------+
void CLOSE_Single_P(string SYMB, string TREN, int TICKET, double LOTT)
{
   double PRC;
   bool Check = false;

   for ( int cntt=0; cntt<20000; cntt++ )
   {
      if ( Check )
      {
         Check_Ini();
         return;
      }
      Check = false;
      if ( TREN == "LONG" )
         PRC = MarketInfo(SYMB,MODE_BID);
      else
      if ( TREN == "SHORT" )
         PRC = MarketInfo(SYMB,MODE_ASK);
         
      Check = OrderClose(TICKET,LOTT,PRC,Slippage,Yellow);
   }
   return;
}
//-----------------------------------------------+
 
crossy:



Hallo Raptor,

Ich brauche diese Funktion, da der EA recht komplex ist, und ich diese Funktion mit vielen Versionen von Schlussbedingungen verwende.

Ich hoffe, Sie verstehen mich.

Y.

Ich glaube nicht, dass du den Code verstehst, den du von irgendwo anders kopiert und eingefügt hast ... und nein, er ist nicht für Requotes . ... Sie prüfen nicht einmal, ob ein Fehler, den Sie erhalten, ein Requote ist.
 
RaptorUK:
Ich glaube nicht, dass Sie die Kopie, die Sie von einem anderen Ort kopiert und eingefügt haben, verstehen ... und nein, es ist nicht für Requotes . . Sie überprüfen nicht einmal, ob ein Fehler, den Sie erhalten, eine Rückfrage ist.


Nein Raptor, der Fehler, den ich bekam, war: Die Ticketnummer wurde nicht gefunden. Und ich kann Ihnen sagen, dass die Antwort lautet: Das Ticket wurde bereits eine Sekunde vorher geschlossen.

Ich verstehe nicht, wie es das Ticket schließt und die Suche fortsetzt...

 
crossy:


Ich verstehe nicht, wie es das Ticket schließt und die Suche fortsetzt...

Das liegt an der Schleife in der Funktion, die du nicht brauchst.

"Warum haben Sie eine Schleife in der Close_Single_P Funktion ? " vom 3. Beitrag auf Seite 1

"warum die Schleife ?" ab Seite 4, 2. Beitrag

 

Liege ich falsch oder schließt diese Funktion niemals SHORT-Aufträge?

...
   for(int cnt = OrdersTotal()-1; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
      if ( OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         CodeY    = true;
         OrderS   = OrderSymbol();
         OrderT   = OrderTicket();
         OrderM   = OrderMagicNumber();
         OrderTyp = OrderType();
         OrderL   = OrderLots();
      }   
      if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
    
         CLOSE_Single_P(Pair1,"LONG",OrderT,OrderL);
                               ^^^^ - You always pass LONG to variable TREN, so variable PRC (below) is always equal taken from LONG, but NEVER from SHORT.

//-----------------------------------------------+
void CLOSE_Single_P(string SYMB, string TREN, int TICKET, double LOTT)
{
   double PRC;
   bool Check = false;

   for ( int cntt=0; cntt<20000; cntt++ )
   {
      if ( Check )
      {
         Check_Ini();
         return;
      }
      Check = false;
      if ( TREN == "LONG" )
         PRC = MarketInfo(SYMB,MODE_BID);
      else
      if ( TREN == "SHORT" )
         PRC = MarketInfo(SYMB,MODE_ASK);
         ^^^   Never executed
         
      Check = OrderClose(TICKET,LOTT,PRC,Slippage,Yellow);
   }
   return;
}
//-----------------------------------------------+
 
Waidas:

Irre ich mich oder schließt diese Funktion niemals SHORT-Aufträge ab?


Waidas, Sie haben Recht. Aber dies ist nur ein kleiner Teil des EA, der LONG und SHORT schließt.

Danke!

 
RaptorUK:

Das liegt an der Schleife in der Funktion, die du nicht brauchst.

"Warum haben Sie eine Schleife in der Close_Single_P Funktion ? " aus dem 3. Beitrag auf Seite 1

"warum die Schleife ?" ab Seite 4, 2. Beitrag


Raptor, Du hattest recht, und ich habe die Schleifen entfernt, so dass die Funktion jetzt ohne Schleife ist.

Ich hänge sie hier wieder an.

Y.

...
   for(int cnt = OrdersTotal()-1; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
      if ( OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         CodeY    = true;
         OrderS   = OrderSymbol();
         OrderT   = OrderTicket();
         OrderM   = OrderMagicNumber();
         OrderTyp = OrderType();
         OrderL   = OrderLots();
      }   
      if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
    
         CLOSE_Single_P(Pair1,"LONG",OrderT,OrderL);

//-----------------------------------------------+
void CLOSE_Single_P(string SYMB, string TREN, int TICKET, double LOTT)
{
   double PRC;
   bool Check = false;

   for ( int cntt=0; cntt<20000; cntt++ )
   {
      if ( Check )
      {
         Check_Ini();
         return;
      }
      if ( TREN == "LONG" )
         PRC = MarketInfo(SYMB,MODE_BID);
      else
      if ( TREN == "SHORT" )
         PRC = MarketInfo(SYMB,MODE_ASK);
         
      Check = OrderClose(TICKET,LOTT,PRC,Slippage,Yellow);
   }
   return;
}
//-----------------------------------------------+
Grund der Beschwerde: