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.
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
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.." .
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
Hier, wenn Orderselect FALSE ist, wie der EA zurück zur Codezeile gehen kann: for(int cnt=OrdersTotal(); cnt > 0; cnt-- )
???
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 ;-)
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!
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
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
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:
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 . . . . .