Quel modèle est correct ? - page 6

 
valenok2003:
Dans le code while , seulement pour retarder pendant que le thread est occupé.

Ensuite, vous devez rafraîchir les taux : RefreshRates(). Sinon, vous utiliserez les anciennes valeurs d'ascension et d'enchère. Ou demandez l'asc\bid par MarketInfo.
 
VladislavVG:

Ensuite, vous devez rafraîchir les taux : RefreshRates(). Sinon, vous utiliserez les anciennes valeurs Ask et Bid. Ou demandez sur MarketInfo.

C'est donc là que le chien est au travail.

Cette conception a fonctionné :

//+------------------------------------------------------------------+
//|                                           CloseThisSymbolAll.mq4 |
//+------------------------------------------------------------------+
int start()
{
//----
  for (int trade = OrdersTotal()-1; trade >= 0; trade--) 
  {
    OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol()) 
    { 
      while (!IsTradeAllowed()) Sleep(1000);
      RefreshRates();
      if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), 5, CLR_NONE);
      if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), 5, CLR_NONE);
    }
  }
//----
   return(0);
}
//+------------------------------------------------------------------+

Au moins, ça a bien marché la première fois.

Merci !

 
VladislavVG:

Ensuite, vous devez rafraîchir les taux : RefreshRates(). Sinon, vous utiliserez les anciennes valeurs d'ascension et d'enchère. Ou demandez à voir asc\bid sur MarketInfo.

Merci !

Je vais aussi le corriger dans mon EA.

 
valenok2003:



Donc c'est là que le chien se trouve.

C'est la conception qui fait que ça marche.

Au moins, ça a bien marché la première fois.


Presque - une condition de plus doit être corrigée :


  for (int trade = OrdersTotal()-1; trade >= 0; trade--) 
  {
    if(!OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) break;
    ...........................
Si l'ordre n'est pas passé, il n'y a rien à faire.

Bonne chance avec ça.

 
VladislavVG:


Presque - une condition de plus doit être corrigée :

Si le mandat ne sort pas, il n'y a rien à faire.

Oui, c'est logique. C'est un oubli de la boucle
while(OrdersTotal()>0)
 
valenok2003:
cinq
Là, vous aviez un glissement = 5, et ce n'est pas suffisant pour des cotations à cinq chiffres.
 

Donc en résumé :


//+------------------------------------------------------------------+
//|                                           CloseThisSymbolAll.mq4 |
//+------------------------------------------------------------------+
int start()
{
//----
  for (int trade = OrdersTotal()-1; trade >= 0; trade--) 
  {
    if(!OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) break;
    if (OrderSymbol() == Symbol()) 
    { 
      while (!IsTradeAllowed()) Sleep(1000);
      RefreshRates();
      if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), slippage, CLR_NONE);
      if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), slippage, CLR_NONE);
    }
  }
//----
   return(0);
}
//+------------------------------------------------------------------+

ou y aura-t-il d'autres commentaires ?

 
khorosh:
Là, vous aviez un glissement = 5, et ce n'est pas suffisant pour des cotations à cinq chiffres.
Dans un marché relativement calme, 5 est tout à fait suffisant IMHO.
 
A un moment donné, le codebase a publié son propre ensemble pour fermer les différents types.
Dossiers :
 
https://www.mql5.com/ru/code/mt4