Rustam Bikbulatov: Bonjour à tous. Veuillez me dire comment modifier ce code for(int i=OrdersTotal()-1;i>=0;i--){
Pour l'instant, il ferme ceux qui ont été ouverts le plus récemment. Vous voulez qu'il ferme les premiers en premier !
for( int i = 0; i < OrdersTotal(); i++ ) { if( /*Функция закрытия. Если вернула истину*/ ) i--; }
Essayez de cette façon. Au lieu des commentaires, vous devez utiliser la fonction pour clôturer l'ordre. Je n'ai pas vérifié sa fonctionnalité. Et là, je pense que nous devrons appeler la fonction qui calcule le montant des commandes à chaque fois, puisque le nombre de commandes va diminuer.
Nous pouvons également essayer une telle variante :
Rustam Bikbulatov: Bonjour à tous. Pouvez-vous me dire comment modifier ce code for(int i=OrdersTotal()-1;i>=0;i--){
Pour l'instant, il ferme ceux qui ont été ouverts le plus récemment. Je veux qu'il ferme d'abord les premiers!
//+------------------------------------------------------------------+ //| Закрыть все позиции начиная с первых | //+------------------------------------------------------------------+
double CloseOrders()
{ for(int i=0; i<OrdersTotal(); ) { if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if (OrderMagicNumber() != mn) break;
int type = OrderType();
bool result = false;
switch(type) { //Close opened long positions caseOP_BUY : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), Slippage, CloseColor ); break;
//Close opened short positions caseOP_SELL : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), Slippage, CloseColor ); break; }
Rustam Bikbulatov: Il se ferme de manière maladroite).
L'option que j'ai suggérée est généralement incongrue pour la fermeture.
Si vous parlez de fermeture de l'ancien au nouveau, alors vous fermez la grille. Ayant une certaine expérience des grilles, tout ce que je peux dire avec certitude, c'est qu'il ne faut pas choisir en fonction de l'âge de la position, mais en fonction de son lot, et qu'il faut fermer d'un grand lot à un petit. Si la grille est à lot unique, il n'y a pas de différence dans l'ordre de fermeture. Utilisez des fonctions prêtes à l'emploi pour fermer, et n'inventez pas quelque chose qui a déjà été inventé)
L'option que j'ai suggérée est généralement incongrue pour la fermeture.
Si vous parlez de fermeture de l'ancien au nouveau, alors vous fermez la grille. Ayant une certaine expérience des grilles, tout ce que je peux dire avec certitude, c'est qu'il ne faut pas choisir en fonction de l'âge de la position, mais en fonction de son lot, et qu'il faut fermer d'un grand lot à un petit. Si la grille est à lot unique, il n'y a pas de différence dans l'ordre de fermeture. Utilisez des fonctions prêtes à l'emploi pour la fermeture, et n'inventez pas quelque chose qui a déjà été inventé).
Messieurs les développeurs ! Bonne journée à tous. Je suis intéressé par une question sur la façon de créer un modèle de conseiller expert (script) lors de sa création. Peut-on modifier cette information quelque part et comment le faire ?
Bonjour à tous. Pouvez-vous me dire comment modifier ce code for(int i=OrdersTotal()-1;i>=0;i--){
Bonjour à tous. Veuillez me dire comment modifier ce code for(int i=OrdersTotal()-1;i>=0;i--){
{
if( /*Функция закрытия. Если вернула истину*/ )
i--;
}
Essayez de cette façon. Au lieu des commentaires, vous devez utiliser la fonction pour clôturer l'ordre. Je n'ai pas vérifié sa fonctionnalité. Et là, je pense que nous devrons appeler la fonction qui calcule le montant des commandes à chaque fois, puisque le nombre de commandes va diminuer.
Nous pouvons également essayer une telle variante :
/*Функция закрытия ордера*/
il se ferme de manière maladroite)
n'est pas correcte, mais pour l'instant (jusqu'à un certain build) elle fonctionne : à la fermeture réussie de i--
Bonjour à tous. Pouvez-vous me dire comment modifier ce code for(int i=OrdersTotal()-1;i>=0;i--){
//| Закрыть все позиции начиная с первых |
//+------------------------------------------------------------------+
double CloseOrders()
{
for(int i=0; i<OrdersTotal(); )
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
break;
if (OrderMagicNumber() != mn)
break;
int type = OrderType();
bool result = false;
switch(type)
{
//Close opened long positions
case OP_BUY : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), Slippage, CloseColor );
break;
//Close opened short positions
case OP_SELL : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), Slippage, CloseColor );
break;
}
if(result == false)
{
Print("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
i++;
}
}
return (True);
}
// End
Il se ferme de manière maladroite).