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

 
crossy:


Hier, wenn Orderselect FALSE ist, wie der EA zurück zur Codezeile gehen kann: for(int cnt=OrdersTotal(); cnt > 0; cnt-- )

???

Sie können mit continue zum nächsten Wert in der Schleife gehen . ... oder die Schleife mit break verlassen ... Klicken Sie auf die Links, um die jeweilige Dokumentation zu lesen.
 
crossy:

Hier, wenn Orderselect FALSE ist, wie der EA zur Codezeile zurückkehren kann: for(int cnt=OrdersTotal(); cnt > 0; cnt-- )


???

Dieser Code ist falsch......

cnt muss bei OrdersTotal() - 1 beginnen und bis cnt >= 0 dekrementiert werden . . . der erste Eintrag ist 0 und nicht 1

Deshalb habe ich darum gebeten, den Code zu sehen. . und Sie haben genug gezeigt, um das Problem zu identifizieren ... wahrscheinlich ;-)

 
RaptorUK:

Dieser Code ist falsch ... .

cnt muss bei OrdersTotal() - 1 beginnen und bis zu cnt >= 0 dekrementieren . . . der erste Eintrag ist 0 und nicht 1

Deshalb habe ich darum gebeten, den Code zu sehen. . und Sie haben genug gezeigt, um das Problem zu identifizieren ... wahrscheinlich ;-)


Sehr zutreffend. Danke, Wizeman!
 
crossy:

Sehr richtig. Danke, Wizeman!


Und noch eine Idee:

Wenn ich viele Bedingungen habe, können Sie schreiben:

If( X>b && B>S && NB<F......)

{

BBB= 5;

}f.e.

Hier muss der EA jede Bedingung innerhalb der Klammer berechnen.

Aber wenn es um Effizienz geht (4.000 Codezeilen...), ziehe ich das vor:

If ( X>b )

{

while (B>S)

{

While (NB<F..)

{

BBB=5;

}

break;

}

break;

}

Sind die 2 Varianten identisch?

Y.

 

crossy, wenn du den Code schreibst, benutze bitte die SRC-Schaltfläche, dann ist er viel besser lesbar

Es wird also wie folgt angezeigt

   //--- first code
   If(X>b && B>S && NB<F......)
     {
      BBB=5;
     }
   
   // --- second code
   If(X>b)
     {
      while(B>S)
        {
         while(NB<F..)
           {
            BBB=5;
           }
         break;
         }
      break;
     }

Hier die Erklärung zu "if, while und for" Schleifen in mql4 https://book.mql4.com/operators/assign

Beim zweiten Code ist es OK, da Sie break verwenden, aber das ist ein langer Weg, nur um BBB = 5 zu bekommen, ich bevorzuge den ersten Code, er verbraucht weniger Ressourcen

 
crossy:


Und eine andere Idee:

Wenn ich viele Bedingungen habe, können Sie schreiben:

If( X>b && B>S && NB<F......)

{

BBB= 5;

}f.e.

Hier muss der EA jede Bedingung innerhalb der Klammer berechnen.

Aber wenn es um Effizienz geht (4.000 Codezeilen...), ziehe ich das vor:

Wenn Sie while auf diese Weise verwenden, können Sie sich in einer Endlosschleife wiederfinden.
 
Ich danke Ihnen beiden!.
 
onewithzachy:

Verwenden Sie bitte die SRC-Schaltfläche, um Ihren Code zum besseren Lesen anzuzeigen :)

Ihr OrderSelect() ist falsch kodiert. Vergleichen Sie Ihren Code mit diesem. Dann schreiben Sie zurück, ob Sie das Problem noch haben oder nicht :)


Besonderen Dank an onewithzachy,

Ich wusste nicht, dass die ORDERSELECT nicht fangen, so dass Sie unbekannte Fehler haben können.

Mein Code, der 4016 Zeilen lang war, wurde zu fast 4500 Zeilen - aber ohne Fehler.

Vielen Dank an alle, Freunde.

Y.

 

Hallo Freunde,

Nach einer langen Zeit hier, hatte ich einen guten Fortschritt mit meinem EA, aber ich habe ein weiteres Problem, wie folgt:

Ich habe die folgende Codezeile:

CLOSE_Single_P(Pair1, "LONG",OrderT,OrderL);

as:

Pair1 ist das Symbol,

"LONG" ist ein Zeichen für einen Long-Handel,

OrderT ist die Ticketnummer der Order,

OrderL ist die Losgröße der Order.

Die Funktion lautet wie folgt:

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;
}
for ( int vvv = OrdersTotal()-1; vvv >= 0; vvv-- )
{
if ( OrderSelect(vvv, SELECT_BY_POS, MODE_TRADES) )
{
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);
if ( Check )
break;
}
}
}
return;
}

Mein PROBLEM ist: Der EA schließt den Handel manchmal sehr gut ab, aber manchmal schließt der EA den Handel, ABER er sucht weiterhin nach dem Ticket, um ihn zu schließen, obwohl er bereits geschlossen wurde.

(Ich erhalte die Fehlermeldung: "Unknown ticket number.." .

Ich glaube, ich habe einen logischen Fehler.

Vielen Dank für Ihre freundliche Hilfe.

Y

 

Bitte . . . . .


Grund der Beschwerde: