Aide : Pourquoi l'EA ne ferme pas une transaction - page 2

 
crossy:


Merci onewithzachy,

D'abord je pense que vous avez une petite erreur avec :

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

Vous devez ajouter la correction en vert et en gras.

Mais, je ne comprends pas comment la ligne suivante peut nous aider ?

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

Merci, Y.

Vous avez raison pour le compte, mais si nous l'écrivons comme je l'ai fait, la fonction OrderSelect() retournera false, et la boucle for continuera au compte suivant.

Cet include imprimera l'erreur dans ce code ...

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

... afin que nous sachions pourquoi votre EA ne ferme aucun ordre :(.

Vous pouvez aussi écrire cet include comme ceci ...

#include <stdlib.mqh>

Il y a un exemple dans le dossier script de MetaEditor intitulé trade.mq4.


Je suppose que vous savez où mettre l'include, n'est-ce pas ? Mettez-le en haut de votre EA (comme une variable globale ou comme trade.mq4).

Le fichier stdlib.mq4 se trouve dans MetaEditor > Fenêtre du navigateur (Ctrl + D) > onglet fichiers > dossier bibliothèques > stdlib.mq4.

Wow, j'espère que cela ne vous dérange pas que je sois allé dans les détails, parce que je ne sais pas si vous le savez déjà ou si vous ne le savez pas :)

 
onewithzachy:

Vous avez raison avec le compte, cependant, si nous l'écrivons comme je l'ai écrit, le OrderSelect() retournera false, et la boucle for continuera au prochain compte.

Cet include imprimera l'erreur dans ce code ...

... afin que nous sachions pourquoi votre EA ne ferme aucun ordre :(.

Vous pouvez aussi écrire cet include comme ceci ...

Il y a un exemple dans le dossier script de MetaEditor intitulé trade.mq4.


Je suppose que vous savez où mettre l'include, n'est-ce pas ? Mettez-le au sommet de votre EA (comme une variable globale ou comme trade.mq4).

Le fichier stdlib.mq4 se trouve dans MetaEditor > Fenêtre du navigateur (Ctrl + D) > onglet fichiers > dossier bibliothèques > stdlib.mq4.

Wow, j'espère que cela ne vous dérange pas que je sois allé dans les détails, parce que je ne sais pas si vous le savez déjà ou si vous ne le savez pas :).


Merci onewithzachy,

J'ai fait comme vous l'avez suggéré, et j'attends une réponse correcte. Je vais mettre à jour.

 
crossy:


Merci onewithzachy,

J'ai fait comme vous l'avez suggéré, et j'attends la stuation correcte. Je vais mettre à jour.

Mmm...., je ne suis pas un grand fan du backtesting, cependant, RaptorUK suggère dans un autre fil(cliquez ici), que nous pouvons déboguer notre code en utilisant le backtesting.
 
onewithzachy:
Mmm...., je ne suis pas un grand fan du backtesting, cependant, RaptorUK suggère dans un autre fil(cliquez ici), que nous pouvons déboguer notre code en utilisant le backtesting.


L'EA est multi-paires, donc le backtesting est impossible.

En tout cas, je peux obtenir la situation pertinente très rapidement. Et j'ai déjà des résultats. Je vais mettre à jour...

Merci

 
crossy:


L'EA est multi-paires, donc le backtesting est impossible.

Pas de backtesting... de débogage... même avec un EA basé sur un portefeuille, le débogage est toujours possible.
 

Merci Raptor,

Je remarque que le ORDERSELECT est une variable bool, et parfois le MT4 ne réussit pas à le faire.

à le faire. Pour cette raison, onewithzachy a recommandé de le faire :

for(int cnt=0 ; cnt<OrdersTotal() ; cnt++)
{
si(OrderSelect (cnt,SELECT_BY_POS,MODE_TRADES) == true &&
OrderSymbol()==Pair &&
OrderType()==OP_BUY)
{
// code pour fermer
}
}

Ma question est la suivante : si le ORDERSELECT est faux, comment puis-je refaire la LOOP "cnt", sans manquer... ?

J'espère que vous me comprenez.

Y.

 
crossy:

Merci Raptor,

J'ai remarqué que le ORDERSELECT est une variable bool, et parfois le MT4 ne parvient pas à

à le faire. Pour cette raison, onewithzachy a recommandé de le faire :

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

Ma question est la suivante : si le ORDERSELECT est faux, comment puis-je refaire la LOOP "cnt", sans manquer... ?

J'espère que vous me comprenez.

Y.

Si vous fermez les commandes, vous devez compter vers le bas... PAS vers le haut.
 
RaptorUK:
Si vous fermez les commandes, vous devez compter vers le bas... PAS vers le haut.


Désolé Raptor, j'ai juste fait un copier/coller d'un post précédent, mais je l'ai changé dans mon code.

Bref, avez-vous une idée de ma question préalable ?

 
crossy:


Désolé Raptor, j'ai juste fait un copier-coller d'un post précédent, mais je l'ai changé dans mon code.

Quoi qu'il en soit, avez-vous une idée sur ma question préalable ?

Montre ton code et je pourrai donner mon avis.
 
RaptorUK:
Montrez votre code et je peux donner une opinion.


Rap, Il s'agit de 4016 lignes de code....

Quoi qu'il en soit, ma question est d'ordre technique. J'ai appris une fois le FORTRAN, et là vous aviez des numéros pour les lignes de code souhaitées, donc vous pouviez faire

"GO to 120", et le code revenait à cette ligne.

Ici, si Orderselect est FAUX, comment l'EA peut revenir à la ligne de code : for(int cnt=OrdersTotal() ; cnt > 0 ; cnt-- )

? ??

Raison: