Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 417

 
evillive:



Donc j'ai besoin d'un nombre entier...
 

Les amis, nous avons besoin d'aide. La fonction doit fermer la moitié des ordres en commençant nécessairement par le plus ancien. Dans le premier cas, les ordres sont fermés un par un pour une raison quelconque, et dans le second, ils commencent à se fermer dans le mauvais ordre.

void CloseHalfOrders (int otype)// ф-ция закрытия половины ордеров сетки
{
  int count = 0; double CTbuy = CountTrades(OP_BUY); double CTsell = CountTrades(OP_SELL); 
  for (int i = 0; i<=OrdersTotal;i++)
  {
    if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
    {
       if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType() == otype)
       {
         if (otype == OP_BUY)
         { 
           if (count<CTbuy/2 && CTbuy>3 )
           
             OrderClose(OrderTicket(),OrderLots(),Bid,0,Black);
             count++;
             Sleep(1000);
           
         }
       
       
         else if (otype == OP_SELL)
         {
           if (count<CTsell/2 && CTsell>3)
           
           OrderClose(OrderTicket(),OrderLots(),Ask,0,Black);
           count++;
           Sleep(1000);
           
         }
       }
     }
   }
   
 }
 for (int i = OrdersTotal()-1; i>=0; i--)
 
vadynik:

Donc j'ai besoin d'un nombre entier...
MathRound
 
evillive:
MathRound


donc c'est un arrondi, le nombre ne devient pas int, il reste double
 
vadynik:

donc c'est un arrondi, le nombre ne devient pas int, mais reste double

Et alors ? Y a-t-il une différence fondamentale entre 1 et 1.0 pour les calculs ? Bien sûr, le format est double, mais la valeur est entière.


Une variante particulièrement perverse ensuite : DoubleToStr puis StringToInteger

 
vadynik:

Veuillez me dire comment supprimer l'avertissement dans le nouveau compilateur.

perte éventuelle de données due à la conversion de type

int    SizeB      =MathAbs(Open[1]-Close[1])/Point;

Так помогает 

int    SizeB      =(int) ( MathAbs(Open[1]-Close[1])/Point );

 
Zhunko:



Merci, donc pas d'avertissement préalable, il est déjà en train de manger mon œil)
 

Bonjour, j'ai cherché chez Kim, mais je ne trouve rien qui me permette de savoir : De quel ordre (en attente) a été ouverte la position? D'un ordre à cours limité ou d'un ordre stop ?

J'ai essayé de comparer les prix de la dernière commande ouverte

if(MathAbs(GetOrderOpenPrice()-LastPrice) <= slip)

avec une position ouverte dessus mais toute la logique est cassée. Peut-être y a-t-il quelque chose de plus approprié ? Merci !

 
Trader7777:

Les amis, nous avons besoin d'aide. La fonction doit fermer la moitié des ordres en commençant nécessairement par le plus ancien. Dans le premier cas, les ordres sont fermés un par un pour une raison quelconque, et dans le second, ils commencent à se fermer dans le mauvais ordre.


Il y avait une question comme celle-ci, comment fermer les ordres en commençant par le plus ancien, quelques pages plus loin il y a une réponse et le code correct.


https://www.mql5.com/ru/forum/145455/page406

 
borilunad:

Bonjour, j'ai cherché chez Kim, mais je ne trouve rien qui me permette de savoir : De quel ordre (en attente) a été ouverte la position ? D'un ordre à cours limité ou d'un ordre stop ?

J'ai essayé de comparer les prix de la dernière commande ouverte

avec une position ouverte dessus mais toute la logique est cassée. Peut-être y a-t-il quelque chose de plus approprié ? Merci !

Boris. Essayez d'écrire le commentaire des ordres - limite à limite, stop à stop. Ensuite, à partir de ces commentaires sur les positions ouvertes, vous saurez de quoi les jambes sont issues. Seule une fermeture partielle de ces commentaires les effacera. Peut-être que quelque chose d'autre peut tuer les commentaires. Seules les positions supprimées sont enregistrées dans l'historique. Ceux qui ont marché ne sont pas là. Vous devez passer par... vous comprenez ce que vous devez traverser...