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

 
crossy:


Danke onewithzachy,

Erstens denke ich, dass Sie einen kleinen Fehler mit haben:

for(int cnt = OrdersTotal() -1 ; cnt >= 0; cnt--)

Sie müssen die grüne und fette Korrektur hinzufügen.

Aber ich verstehe nicht, wie die folgende Zeile uns helfen kann?

#include "..\libraries\stdlib.mq4"

Danke, Y.

Du hast Recht mit der Zählung, aber wenn wir es so schreiben, wie ich es geschrieben habe, wird OrderSelect() false zurückgeben, und die for-Schleife fährt mit der nächsten Zählung fort.

Dieses Include wird den Fehler in diesem Code ausgeben ...

Print("failed to close buy position ", ErrorDescription(GetLastError())  ); 

... so dass wir wissen, warum Ihr EA keine Aufträge schließt :(.

Sie können das Include auch so schreiben ...

#include <stdlib.mqh>

Es gibt ein Beispiel im MetaEditor-Skriptordner mit dem Titel trade.mq4.


Ich nehme an, Sie wissen, wo Sie das Include einfügen müssen, richtig? Fügen Sie es oben in Ihren EA ein (wie eine globale Variable oder wie die trade.mq4).

Die stdlib.mq4 befindet sich unter MetaEditor > Navigatorfenster (Strg + D) > Registerkarte Dateien > Ordner Bibliotheken > stdlib.mq4.

Wow, ich hoffe, es stört dich nicht, dass ich hier ins Detail gegangen bin, denn ich weiß nicht, ob du es schon weißt oder nicht :)

 
onewithzachy:

Ihr Recht mit der Zählung, jedoch, wenn wir es schreiben, wie ich schrieb, die OrderSelect() wird false zurückgeben, und die for-Schleife weiter zur nächsten Zählung.

Das include wird den Fehler in diesem Code ausgeben ...

... so dass wir wissen, warum Ihr EA keine Aufträge schließt :(.

Sie können das Include auch so schreiben ...

Es gibt ein Beispiel im MetaEditor-Skriptordner mit dem Titel trade.mq4.


Ich nehme an, Sie wissen, wo Sie das Include einfügen müssen, richtig? Fügen Sie es oben in Ihren EA ein (wie eine globale Variable oder wie die trade.mq4).

Die stdlib.mq4 befindet sich unter MetaEditor > Navigatorfenster (Strg + D) > Registerkarte Dateien > Ordner Bibliotheken > stdlib.mq4.

Wow, ich hoffe, es stört dich nicht, dass ich hier ins Detail gehe, denn ich weiß nicht, ob du es schon weißt oder nicht :)


Danke onewithzachy,

Ich habe getan, was du vorgeschlagen hast, und warte auf die richtige Antwort. Ich werde aktualisieren.

 
crossy:


Danke onewithzachy,

Ich habe getan, was Sie vorgeschlagen haben, und ich warte auf die richtige Antwort. Ich werde aktualisieren.

Mmm...., ich bin kein großer Fan von Backtesting, aber RaptorUK schlagen in einem anderen Thread(hier klicken) vor, dass wir unseren Code mit Backtesting debuggen können.
 
onewithzachy:
Mmm...., ich bin kein großer Fan von Backtesting, aber RaptorUK hat in einem anderen Thread(hier klicken) vorgeschlagen, dass wir unseren Code mit Backtesting debuggen können.


Der EA ist Multipairs, so Backtesting ist unmöglich.

Wie auch immer, ich kann die entsprechende Situation sehr schnell ermitteln. Und ich habe bereits Ergebnisse. Ich werde sie aktualisieren.

Danke

 
crossy:


Der EA ist multipaarig, daher ist ein Backtesting nicht möglich.

Nicht Backtesting... Debugging ... selbst bei einem Portfolio-basierten EA kann Debugging noch möglich sein.
 

Danke Raptor,

Mir ist aufgefallen, dass ORDERSELECT eine boolsche Variable ist, und manchmal gelingt es dem MT4 nicht

es zu tun. Aus diesem Grund hat onewithzachy empfohlen, dies zu tun:

for(int cnt=0; cnt<OrdersTotal(); cnt++)
{
if(OrderSelect (cnt,SELECT_BY_POS,MODE_TRADES) == true &&
OrderSymbol()==Paar &&
OrderType()==OP_BUY)
{
// Code zum Schließen
}
}

Meine Frage ist: wenn die ORDERSELECT ist falsch, wie kann ich die "cnt" LOOP wieder, ohne fehlt...?

Ich hoffe, Sie verstehen mich.

Y.

 
crossy:

Danke Raptor,

Ich habe bemerkt, dass ORDERSELECT eine boolsche Variable ist, und manchmal gelingt es dem MT4 nicht

es zu tun. Aus diesem Grund hat onewithzachy empfohlen, dies zu tun:

for(int cnt=0; cnt<OrdersTotal(); cnt++ )

Meine Frage ist: wenn die ORDERSELECT ist falsch, wie kann ich die "cnt" LOOP wieder, ohne fehlt...?

Ich hoffe, Sie verstehen mich.

Y.

Wenn Sie Aufträge schließen, MÜSSEN Sie abwärts zählen. NICHT aufwärts.
 
RaptorUK:
Wenn Sie Befehle schließen, MÜSSEN Sie abwärts zählen. NICHT aufwärts.


Sorry Raptor, ich habe gerade ein Copy_paste aus einem früheren Beitrag gemacht, aber ich habe es in meinem Code geändert.

Wie auch immer, haben Sie eine Idee zu meiner vorherigen Frage?

 
crossy:


Sorry Raptor, ich habe gerade ein Copy_paste aus einem früheren Beitrag, aber ich änderte es in meinem Code.

Wie auch immer, haben Sie irgendeine Idee über meine Frage vor?

Zeigen Sie Ihren Code und ich kann eine Meinung abgeben.
 
RaptorUK:
Zeigen Sie Ihren Code und ich kann eine Meinung dazu abgeben.


Rap, Es sind 4016 Codezeilen....

Wie auch immer, meine Frage ist eine technische Frage. Ich habe mal FORTRAN gelernt, und da hatte man Nummern für gewünschte Codezeilen, also konnte man sagen

"GO to 120", und der Code ging wieder zu dieser Zeile.

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

???