Errori, bug, domande - pagina 2324

 

1. perché la sezione "applicazioni"? in poche parole, non capisco.

2. dov'è la sezione servicedesk? voglio che mandino qualcuno a questo thread:

https://www.mql5.com/ru/forum/290284

grazie

 
Il grafico inizia a spostarsi di nuovo, come quando si preme il pulsante "Home" - nessun modello rilevato, nessun problema per circa mezzo anno e ora è tornato... costruire 1940.
 
Un bug del puntatore
class A {};

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

È un comportamento normale della funzione? Se sì, come si può ridurre il tempo? La storia è stata precaricata

Risultato:

Simbolo ARSA 16 544 647

AVAN 16 506 592

Simbolo AVAZ 16 553 408

Simbolo AVAZP 16 511 019

Simbolo ASSB 16 521 310


Questo comportamento appare su CFD


Il comportamento appare su tutti i

Ecco lo script, ci vogliono 16 secondi per richiedere il prezzo, a questo punto il programma si blocca sul posto...

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_));

        }
  }

Ecco un registro parziale

DJ 0 12:18:33.507 TestCopy (EURUSD,H1) Copia N 63 Nome SGDJPY tempo = 46076

OP 0 12:18:33.552 TestCopy (EURUSD,H1) Copia N 64 Nome USDEUR_BASKET tempo = 44995

IG 0 12:18:33.597 TestCopy (EURUSD,H1) Copia N 65 Nome EURRUB_TOD tempo = 44863

LI 0 12:18:33.642 TestCopy (EURUSD,H1) Copia N 66 Nome EURRUB_TOM tempo = 45040

GS 0 12:18:33.698 TestCopy (EURUSD,H1) Copia N 67 Nome USDRUB_TOD tempo = 56006

CF 0 12:18:33.743 TestCopy (EURUSD,H1) Copia N 68 Nome USDRUB_TOM tempo = 44925

CI 0 12:18:33.787 TestCopy (EURUSD,H1) Copia N 69 Nome CNYRUB_TOD tempo = 44820

ES 0 12:18:33.833 TestCopy (EURUSD,H1) Copia N 70 Nome CNYRUB_TOM tempo = 45086

CF 0 12:18:50.336 TestCopy (EURUSD,H1) Copia N 71 Nome ABRD tempo = 16503669

KL 0 12:19:06.836 TestCopy (EURUSD,H1) Copia N 72 Nome AESL tempo = 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) Copia N 75 Nome AKRN tempo = 16502943

CG 0 12:19:39.929 TestCopy (EURUSD,H1) Copia N 76 Nome ALBK tempo = 16499755

RL 0 12:19:56.433 TestCopy (EURUSD,H1) Copia N 77 Nome ALNU tempo = 16503651

EG 0 12:19:56.478 TestCopy (EURUSD,H1) Copia N 78 Nome ALRS tempo = 44989

OK 0 12:20:12.978 TestCopy (EURUSD,H1) Copia N 79 Nome AMEZ tempo = 16500788

QS 0 12:20:13.034 TestCopy (EURUSD,H1) Copia N 80 Nome APTK tempo = 55954

GF 0 12:20:29.541 TestCopy (EURUSD,H1) Copia N 81 Nome ARMD tempo = 16506946

HM 0 12:20:46.051 TestCopy (EURUSD,H1) Copia N 82 Nome ARSA tempo = 16509620

DD 0 12:21:02.553 TestCopy (EURUSD,H1) Copia N 83 Nome ASSB tempo = 16501809

GK 0 12:21:19.083 TestCopy (EURUSD,H1) Copia N 84 Nome AVAN tempo = 16529765

HP 0 12:21:35.586 TestCopy (EURUSD,H1) Copia N 85 Nome AVAZ tempo = 16502812

HK 0 12:21:52.085 TestCopy (EURUSD,H1) Copia N 86 Nome AVAZP tempo = 16499796

NO 0 12:21:52.130 TestCopy (EURUSD,H1) Copia N 87 Nome BANE tempo = 44973


Registro completo in basso.

File:
20181120.log  196 kb
 
fxsaber:
Un bug del puntatore

Qual è la differenza?

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Bug, bug, domande

fxsaber, 2018.09.17 14:17

È un bug?
class A {};

A* a = NULL;

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

 
A100:

Qual è la differenza con questo?

Ho una pessima memoria. Alcune "biciclette" le reinvento più volte.

 
Penso che ci sia una ragione per questo errore, perché (se ci fosse una conversione implicita libera del puntatore a bool) non è chiaro come interpretare
class A {
public:
        bool operator&&( bool a ) { return a; }
};
void OnStart()
{
        A *a, *b;
        if (a && b);
}

se o non

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

o come

        if ((*a).operator&&((bool)b));//(2)
 
A100:
Penso che questo errore sia lì per una ragione, perché (se ci fosse la conversione implicita libera del puntatore a bool) non è chiaro come interpretare

Sì, c'è ambiguità nel suo caso. In senso buono, ci dovrebbe essere almeno un avvertimento del compilatore per questo tipo di cose.

Nel mio caso, che è molto più semplice, tutto è chiaro. Credo che anche C++ sia d'accordo con questo.

 

fxsaber:
Это баг?

class A {};

A* a = NULL;

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

Come soluzione temporanea, usate l'operatore '! (logico non)

class A {};

A* a = NULL;

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


Penseremo alla soluzione (possiamo cambiare il comportamento ora, quando c'è molto codice?)
È possibile che per un puntatore, un'operazione di conversione bool sia un'operazione sul puntatore e non sull'oggetto a cui punta.

In questo caso, per eseguire l'operazione sull'oggetto, dovremo scrivere il codice come questo

class A {};

A* a = NULL;

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

Anche gli operatori di conversione vogliamo aggiungere, ma questo compito è (molto) a bassa priorità
 
Ilyas:

Come soluzione temporanea, usate l'operatore '! (logico non)

Il compilatore ottimizza la doppia negazione?