Demandez ! - page 38

 

Ian,

Vérifiez l'expert de Straddle&Trail. Vous pouvez le trouver ici https://www.mql5.com/en/forum/general.

 

Bonjour à tous,

Je veux fermer tous mes ordres en même temps mais je n'y arrive pas.

J'ai essayé ce code mais ça n'a pas marché :

''''''''''''''''''''''''''''''''''''''''

total = OrdersTotal() ;

for(i=0;i < total;i++)

{

if(OrderSelect(i, SELECT_BY_POS)==true)

{

OrderClose(OrderTicket(),OrderLots(),Ask,80,CLR_NONE) ;

OrderClose(OrderTicket(),OrderLots(),Bid,80,CLR_NONE) ;

}

}

''''''''''''''''''''''''''''''''''''''''

Quelqu'un peut-il m'aider ?

Je vous serais très reconnaissant si vous pouviez m'aider.

 

Mehdi,

Mettez ce code (procédure) en dehors de la section start() et lorsque vous si la condition est remplie pour fermer toutes les transactions, appelez simplement la procédure comme ça :

int start()

{ // votre code ici .....

Si (votre condition ici) ShutDownAllTrades() ;

}

void ShutDownAllTrades

{ int Retry ;

While (OrdersTotal()>0)

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

{ OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) ;

si (OrderType()==OP_BUY)

{ Retry=0 ; while (Retry<5 && !IsTradeAllowed()) { Retry++ ; Sleep(1000) ; }

RefreshRates() ;

OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Yellow) ;

Sleep(1000) ;

}

sinon si (OrderType()==OP_SELL)

{ Retry=0 ; while (Retry<5 && !IsTradeAllowed()) { Retry++ ; Sleep(1000) ; }

RefreshRates() ;

OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Yellow) ;

Sleep(1000) ;

}

else

{ Retry=0 ; while (Retry<5 && !IsTradeAllowed()) { Retry++ ; Sleep(1000) ; }

OrderDelete(OrderTicket()) ;

Sleep(1000) ;

}

}

}

}

HTH

Yannis

 

Cher Yannis,

Merci pour votre aide.

Je vous souhaite le meilleur.

 
Yannis:
Mehdi,

Mettez ce code (procédure) à l'extérieur de la section start() et quand vous si la condition est remplie pour fermer toutes les transactions, appelez simplement la procédure comme ça :

int start()

{ // votre code ici .....

Si (votre condition ici) ShutDownAllTrades() ;

}

void ShutDownAllTrades

{ int Retry ;

While (OrdersTotal()>0)

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

{ OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) ;

si (OrderType()==OP_BUY)

{ Retry=0 ; while (Retry<5 && !IsTradeAllowed()) { Retry++ ; Sleep(1000) ; }

RefreshRates() ;

OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Yellow) ;

Sleep(1000) ;

}

sinon si (OrderType()==OP_SELL)

{ Retry=0 ; while (Retry<5 && !IsTradeAllowed()) { Retry++ ; Sleep(1000) ; }

RefreshRates() ;

OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Yellow) ;

Sleep(1000) ;

}

else

{ Retry=0 ; while (Retry<5 && !IsTradeAllowed()) { Retry++ ; Sleep(1000) ; }

OrderDelete(OrderTicket()) ;

Sleep(1000) ;

}

}

}

}

HTH

Yannis

Cher Yannis,

J'ai ajouté votre procédure entre " int deinit() { } " (out of start) comme vous l'avez dit mais il y a un problème lors de la compilation après void ShutDownAllTrades { : '{' virgule ou point-virgule attendu.

Je suis impatient d'avoir de vos nouvelles.

Merci beaucoup

 

Oups, désolé.

Ce qui manque est le () après void ShutDownAllTrades().

Faites également attention à la variable nommée 'Slippage' dans la fonction orderclose.

Vous devrez peut-être la remplacer par celle que vous utilisez lorsque vous passez vos ordres.

Yannis

 
Yannis:
Oups, désolé.

Ce qui manque, c'est le () après void ShutDownAllTrades().

Faites également attention à la variable nommée 'Slippage' dans la fonction orderclose.

Vous devrez peut-être la remplacer par celle que vous utilisez lorsque vous passez vos ordres.

Yannis

Cela fonctionne très bien !

Merci encore

 

J'utilise l'indicateur CCI MTF du fil des indicateurs Multi Time Frame, il s'agit d'une ligne jaune en escalier, voir l'image ci-jointe.

Lorsque la ligne est au-dessus du niveau 100 (surachat), le prix baisse et lorsqu'elle est en dessous de -100 (survente), le prix monte.

Le seul problème est qu'il ne se rafraîchit pas toujours, je dois le faire manuellement en faisant un clic droit sur le graphique et en sélectionnant "Rafraîchir".

Une question aux programmeurs : Y a-t-il une fonction dans MQ4 pour faire ce genre de rafraîchissement automatiquement à chaque tick?

J'apprécierais un conseil.

euro pean

Dossiers :
mtf_cci.jpg  37 kb
 

Essayez ceci :

void ObjectsRedraw()

Redessine tous les objets du graphique

Exemple

ObjectsRedraw() ;

Il se peut que vous deviez d'abord utiliser ObjectCreate.

 
richx7:
Essayez ceci :

void ObjectsRedraw()

Redessine tous les objets du graphique

Exemple

ObjectsRedraw() ;

Vous devrez peut-être d'abord utiliser ObjectCreate.

Merci de votre réponse.

Pour autant que je sache, ObjectsRedraw() rafraîchit les objets qui viennent d'être 'créés' et 'définis'.

J'ai besoin de rafraîchir un indicateur qui n'est pas dans la liste des objets, donc ObjectsRedraw() ne fonctionne pas.

Ou peut-être savez-vous comment faire référence à un indicateur existant ?