Fermetures ordres en MQL4

Certaines stratégies nécessitent de fermer l'ensembles des ordres ouverts ou en attente simultanément, par exemple le vendredi soir avant la fermeture du week-end.

Le code pour réaliser cette fonction est assez simple mais contient néanmoins un point important à considérer pour que le code soit exécuté correctement.

Le point délicat est l'ordre dans lequel la fermeture des ordres est exécutée car ce point n'est pas anodin.

Si par exemple on défini une boucle sur l'ensemble des ordres de la façon suivante :

for(int i=0;i

Voir notre avis sur le test du broker AvaTrade qui propose la plateforme MT4

et que l'indice i est utilisé pour sélectionner les ordres par leur position alors il est possible que tous les ordres ne soient pas fermés correctement. En effet il est possible d'avoir la configuration suivante: si on ferme d'abord l'ordre en position 0, alors l'ordre en position 1 deviendra l'ordre en position 0 mais la boucle passera ensuite à la position 1 et ne fermera pas l'ordre en position 0. Ainsi il se peut que seulement la moitié des ordres soit fermée.

Pour éviter ceci il faut commencer la fermeture des ordres par la dernière position

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

Fermeture des ordres

Le code pour la fermeture de tous les ordres est le suivant :

for(int i= OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS);
int type = OrderType();

bool result = false;

switch(type)
{
//Fermeture des positions d'achat
case OP_BUY : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );
break;

// Fermeture des positions de vente
case OP_SELL : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );
break;

//Fermeture des ordres en attente
case OP_BUYLIMIT :
case OP_BUYSTOP :
case OP_SELLLIMIT :
case OP_SELLSTOP : result = OrderDelete( OrderTicket() );
}

if(result == false)
{
Alert("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
Sleep(3000);
}
}

return(0);
}

Plus d'information sur le même thème

Photo of Arnaud Jeulin

Arnaud Jeulin Responsable de la publication, Trader

Après un diplôme d'ingénieur, Arnaud a commencé une carrière de développeur. Il a travaillé avec des traders et des services de back office pour mettre en place des prototypes et des outils de trading. Il a ensuite créé sa propre entreprise en 2003.

Il a été responsable du webmarketing pour la Banque en ligne Suisse Synthesis, depuis rachetée par Saxo Bank. Il a aussi fait des audits pour différents brokers et participé à plusieurs salons professionnels pour les courtiers à Londres, Paris et Chypre.

Depuis 21 ans Arnaud a approfondi sa connaissance des brokers et des marchés, il utilise son expérience pour améliorer Mataf afin d'éviter d'orienter les visiteurs vers des brokers malhonnêtes ou des stratégies de trading dangeureuses.

Vous pouvez le joindre via les réseaux sociaux suivants ou par email :

.
  Se connecter