Erreurs, bugs, questions - page 2324

 
Le graphique recommence à se déplacer, comme lorsque l'on appuie sur le bouton "Home" - aucun motif n'a été détecté, aucun problème pendant environ six mois et maintenant c'est de retour... construire 1940.
 
Un bug de pointeur
class A {};

void OnStart()
{
  A* a = NULL;
  
  if (true && a) // '&&' - illegal operation use
    ;
    
  if (a) // OK
    ;
}
 
Vladimir Pastushak:

Ce comportement est-il normal ? Si c'est le cas, comment peut-on réduire ce temps ? L'historique a été préchargé

Résultat :

Symbole ARSA 16 544 647

AVAN 16 506 592

Symbole AVAZ 16 553 408

Symbole AVAZP 16 511 019

Symbole ASSB 16 521 310


Ce comportement apparaît sur CFD


Le comportement apparaît sur tous les

Voici le script, il faut 16 secondes pour demander le prix, à ce moment-là le programme se bloque sur place...

void OnStart()
  {
   int     all_symbols = SymbolsTotal(false);
   string  sym_name    = "";
   MqlRates   mas[];
   Print("Symbols all ",all_symbols);
   ulong time_=GetMicrosecondCount();
   
   for(int i=0;i<all_symbols;i++)
      if((sym_name=SymbolName(i,false))!="")
        {
         SymbolSelect(sym_name,true);
         ArrayResize(mas,i+1,100000);

         time_=GetMicrosecondCount();

         CopyRates(sym_name,PERIOD_D1,0,1,mas);

         Print("Copy   N ",(i+1)," Name ",sym_name," time = ",(GetMicrosecondCount()-time_));

        }

   for(int i=0;i<all_symbols;i++)
      if((sym_name=SymbolName(i,false))!="")
        {
         SymbolSelect(sym_name,true);
         ArrayResize(mas,i+1,100000);

         time_=GetMicrosecondCount();

         double rez = iOpen(sym_name,PERIOD_D1,0);

         Print("iOpen   N ",(i+1)," Name ",sym_name," time = ",(GetMicrosecondCount()-time_));

        }
  }

Voici un journal partiel

DJ 0 12:18:33.507 TestCopy (EURUSD,H1) Copy N 63 Nom SGDJPY time = 46076

OP 0 12:18:33.552 TestCopy (EURUSD,H1) Copy N 64 Nom USDEUR_BASKET time = 44995

IG 0 12:18:33.597 TestCopy (EURUSD,H1) Copy N 65 Nom EURRUB_TOD time = 44863

LI 0 12:18:33.642 TestCopy (EURUSD,H1) Copy N 66 Nom EURRUB_TOM time = 45040

GS 0 12:18:33.698 TestCopy (EURUSD,H1) Copy N 67 Nom USDRUB_TOD time = 56006

CF 0 12:18:33.743 TestCopy (EURUSD,H1) Copy N 68 Nom USDRUB_TOM time = 44925

CI 0 12:18:33.787 TestCopy (EURUSD,H1) Copy N 69 Nom CNYRUB_TOD time = 44820

ES 0 12:18:33.833 TestCopy (EURUSD,H1) Copy N 70 Nom CNYRUB_TOM time = 45086

CF 0 12:18:50.336 TestCopy (EURUSD,H1) Copie N 71 Nom ABRD time = 16503669

KL 0 12:19:06.836 TestCopy (EURUSD,H1) Copie N 72 Nom AESL temps = 16499892

FF 0 12:19:06.881 TestCopy (EURUSD,H1) Copy N 73 Name AFKS time = 44842

CH 0 12:19:06.926 TestCopy (EURUSD,H1) Copy N 74 Name AFLT time = 44963

DP 0 12:19:23.429 TestCopy (EURUSD,H1) Copy N 75 Name AKRN time = 16502943

CG 0 12:19:39.929 TestCopy (EURUSD,H1) Copie N 76 Nom ALBK time = 16499755

RL 0 12:19:56.433 TestCopy (EURUSD,H1) Copie N 77 Nom ALNU temps = 16503651

EG 0 12:19:56.478 TestCopy (EURUSD,H1) Copie N 78 Nom ALRS temps = 44989

OK 0 12:20:12.978 TestCopy (EURUSD,H1) Copie N 79 Nom AMEZ time = 16500788

QS 0 12:20:13.034 TestCopy (EURUSD,H1) Copie N 80 Nom APTK temps = 55954

GF 0 12:20:29.541 TestCopy (EURUSD,H1) Copie N 81 Nom ARMD temps = 16506946

HM 0 12:20:46.051 TestCopy (EURUSD,H1) Copie N 82 Nom ARSA temps = 16509620

DD 0 12:21:02.553 TestCopy (EURUSD,H1) Copie N 83 Nom ASSB time = 16501809

GK 0 12:21:19.083 TestCopy (EURUSD,H1) Copy N 84 Nom AVAN time = 16529765

HP 0 12:21:35.586 TestCopy (EURUSD,H1) Copie N 85 Nom AVAZ time = 16502812

HK 0 12:21:52.085 TestCopy (EURUSD,H1) Copie N 86 Nom AVAZP time = 16499796

NO 0 12:21:52.130 TestCopy (EURUSD,H1) Copie N 87 Nom BANE time = 44973


Journal complet en bas de page.

Dossiers :
20181120.log  196 kb
 
fxsaber:
Un bug de pointeur

Quelle est la différence ?

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

Bugs, bugs, questions

fxsaber, 2018.09.17 14:17

C'est un bug ?
class A {};

A* a = NULL;

bool b1 = a && true; // OK
bool b2 = true && a; // '&&' - illegal operation use

 
A100:

Quelle est la différence avec ça ?

J'ai une très mauvaise mémoire. Certains "vélos", je les réinvente plusieurs fois.

 
Je pense qu'il y a une raison à cette erreur, car (s'il y avait une conversion implicite de pointeur libre en bool) il n'est pas clair comment interpréter
class A {
public:
        bool operator&&( bool a ) { return a; }
};
void OnStart()
{
        A *a, *b;
        if (a && b);
}

que ce soit ou non

        if ((bool)a &&(bool)b);       //(1)

ou comme

        if ((*a).operator&&((bool)b));//(2)
 
A100:
Je pense que cette erreur est là pour une raison, parce que (s'il y avait une conversion implicite de pointeur libre en bool) il n'est pas clair comment interpréter

Oui, il y a une ambiguïté dans votre cas. Dans le bon sens du terme, il devrait y avoir au moins un avertissement du compilateur pour ce genre de choses.

Dans mon cas, qui est beaucoup plus simple, tout est clair. Je pense que C++ est d'accord avec ça aussi.

 

fxsaber:
Это баг?

class A {};

A* a = NULL;

bool b1 = a && true; // OK
bool b2 = true && a; // '&&' - illegal operation use

Comme solution temporaire, utilisez l'opérateur " !". (logique non)

class A {};

A* a = NULL;

bool b1 = !!a && true;
bool b2 = true && !!a;


Nous allons réfléchir à la solution (pouvons-nous changer le comportement maintenant, alors qu'il y a beaucoup de code ?)
Il est possible que pour un pointeur, une opération de conversion bool soit une opération sur le pointeur et non sur l'objet vers lequel il pointe.

Dans ce cas, pour effectuer l'opération sur l'objet, nous devrons écrire le code comme ceci

class A {};

A* a = NULL;

bool b1 = *a && true;
bool b2 = true && *a;

Les opérateurs de conversion, aussi, nous voulons les ajouter, mais cette tâche est (très) peu prioritaire.
 
Ilyas:

Comme solution temporaire, utilisez l'opérateur " !". (logique non)

Le compilateur optimise-t-il la double négation ?

 
Ilyas:
Y avait-il de bonnes raisons d'abandonner l'opérateur -> ?