Erreurs, bugs, questions - page 1914

 
nys2000:

Pourriez-vous être plus précis ?

for(i=1 ; i <=OrdersTotal() ; i++) Les ordres de cette liste sont numérotés de zéro à OrdersTotal()-1 inclus (que Artem Trishkin m'excuse, je viens de raccourcir l'attente de nys2000).
 
Aleksei Beliakov:

partir de zéro


Il s'agit de deux options équivalentes. Si pour (i=1...) alors OrderSelect(i-1,...), si pour (i=0,...) - OrderSelect(i,...)

 
Vladimir:
for(i=1 ; i <=OrdersTotal() ; i++) Les ordres de cette liste sont numérotés de zéro à OrdersTotal()-1 inclus (que Artem Trishkin m'excuse, je viens de raccourcir l'attente de nys2000).

Merci, mais la numérotation des commandes de 0 à OrdersTotal()-1 est prise en compte dans OrderSelect(i-1,...)

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

      bool select=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol() && OrderType()==_type)
        {
           _total++;
        }
     }
   return(_total);
  }
 
nys2000:

Merci, mais la numérotation des commandes de 0 à OrdersTotal()-1 est prise en compte dans OrderSelect(i-1,...)


Faites l'ordre inverse de la recherche...

 
nys2000:

Voici un code simple comme celui-ci :

Au moment où la fonction est lancée, deux positions d'achat sont ouvertes. La fonction imprime deux fois la présence de deux commandes : Passage 1, Passage 2.

Nous supprimons les commentaires et exécutons à nouveau la fonction. Il exécute vigoureusement un ordre d'achat, déclare "Passage #1" et quitte la boucle. Le message "Passage #2" n'apparaît pas.

Quelle est la magie ?


1. i=1, nous avons calculé les ordres ... la condition 1<= 2 a été vérifiée ? oui. Sélectionné et fermé la commande.

2. i++ (i=2)

3. OrdersTotal()=1 <---------- en fermant l'ordre à l'intérieur de la boucle a effectivement changé la condition pour sortir de la boucle.

4. 2<=1 ? non <----------- ici votre "magie" et en conséquence sortir de la boucle

void CloseAllOrders()
{
bool Ans;
int total=OrdersTotal();
   for(int i=1; i <=total; i++)     
      {      
      Print("Проход № ", i);      
      if (OrderSelect(i-1,SELECT_BY_POS)==true) 
         {  
         if (OrderSymbol() != Symbol())
            continue;
         if (OrderType()==0)
             {
//            Ans=OrderClose(OrderTicket(),OrderLots(), NormalizeDouble(Bid,Digits),25);
             }           
         if (OrderType()==1)
             {
//            Ans=OrderClose(OrderTicket(),OrderLots(), NormalizeDouble(Ask,Digits),25);
             } 
         }
      }      
         
return;
   
}
 

pourquoi y a-t-il un ID de graphique supplémentaireCHART_WINDOW_HANDLE, à quoi sert-il ?

 
Konstantin:

pourquoi y a-t-il un ID de graphique supplémentaireCHART_WINDOW_HANDLE, à quoi sert-il ?

Je suppose que le chart ID est pour l'environnement mql et que HWND est pour winapi.
 

Erreur pendant l'exécution

int f( int t )
{
union U {
        U( int t ) : t1( t ) {}
        int t2;
        int t1;
};
	U u( t );
        return u.t2;
}
void OnStart()
{
        Print( f( 3 ));
}

Résultat : un nombre aléatoire (certainement pas 3)
 

L'illusion que le code est correct

#property library
#define  MACRO1(X)               (X)
//#define MACRO2
int f()
{
        return MACRO1( 1
#ifdef  MACRO2
                + 1
#endif
                - 1 );
}
Aucun message d'erreur