Errori, bug, domande - pagina 2221

 

Strumento sintetico. Importo barre di minuti, ogni barra di minuti differisce di 1 punto (5 cifre).

Chiudo la finestra con i simboli, poi riapro questa finestra, chiedo le barre dei minuti del carico precedente, ottengo

I simboli sono gli stessi per ogni giorno intero. Qual è l'errore?

 
elibrarius:

Guardando il codice del pacchetto Alglib. È pieno di queste costruzioni, rendendo il codice più difficile da leggere:

Non è più semplice così?

Mi sembra che la velocità di esecuzione sarebbe ancora più alta.

Perché hanno reso il codice così complicato? O l'hanno semplicemente portato da un'altra lingua senza alcuna modifica? Ma mi chiedo ancora perché una tale complicazione nell'originale?

Questo è molto probabilmente fatto nel codice originale proprio per velocizzare le cose.

Se sarà più veloce in MQL deve essere misurato, "sembra" non funzionerà qui.

 
Koldun Zloy:

Questo èmolto probabilmente fatto nell'originale per l'accelerazione.

Se sarà più veloce in MQL deve essere misurato, "sembra" non funzionerà qui.

Anche "molto probabilmente" non funziona.
Come può un tale modulo funzionare più velocemente? Ma di che cosa stai parlando!

Due cicli extra e un array extra al posto di una variabile.

 

Nikolai Semko:

Due cicli extra e un array extra al posto di una variabile.

Un ragionamento così primitivo non è adatto ai processori moderni.

 
Koldun Zloy:

Un ragionamento così primitivo non è adatto ai processori moderni.

Lo sai bene. Hai più esperienza...

 


Koldun Zloy
:

Un ragionamento così primitivo non è adatto ai processori moderni.

In sostanza, mi dispiace, ma lei sta delirando.

Nessun processore esistente oggi potrà mai

for(i=0;i<=npoints-1;i++)

più veloce rispetto a...

for(i=0;i<npoints;i++)

e l'accesso a un array non sarà mai più veloce dell'accesso a una semplice variabile,

tre cicli identici non saranno mai più veloci di un ciclo combinato.


Non sono stato pigro e ho testato la velocità di due diverse varianti direttamente nell'ALGLIB originale per non essere infondato:

      e=0;
      double tmp1;
      ulong t=GetMicrosecondCount();
      for(i=0;i<npoints;i++)
        {
         v=0.0;
         for(i_=0;i_<nvars;i_++)
           {
            tmp1=xy[i][i_]-ct[xyc[i]][i_];
            v+=tmp1*tmp1;
           }
         e=e+v;
        }
      t=GetMicrosecondCount()-t;
      Print("fast = "+(string)t+" микросекунд, e = "+DoubleToString(e) + " , npoints = " + (string)npoints+" , nvars = " + (string)nvars );



      e=0;
      t=GetMicrosecondCount();
      for(i=0;i<=npoints-1;i++)
        {
         for(i_=0;i_<=nvars-1;i_++)
            tmp[i_]=xy[i][i_];
         for(i_=0;i_<=nvars-1;i_++)
            tmp[i_]=tmp[i_]-ct[xyc[i]][i_];
         //--- calculation
         v=0.0;
         for(i_=0;i_<=nvars-1;i_++)
            v+=tmp[i_]*tmp[i_];
         e=e+v;
        }
      t=GetMicrosecondCount()-t;
      Print("slow = "+(string)t+" микросекунд, e = "+DoubleToString(e) + " , npoints = " + (string)npoints+" , nvars = " + (string)nvars );

risultato:

2018.06.27 04:36:50.265 TestClasses (GBPUSD,M6) fast = 571 микросекунд, e = 534.47773777 , npoints = 1500 , nvars = 40
2018.06.27 04:36:50.266 TestClasses (GBPUSD,M6) slow = 841 микросекунд, e = 534.47773777 , npoints = 1500 , nvars = 40
2018.06.27 04:36:50.630 TestClasses (GBPUSD,M6) fast = 577 микросекунд, e = 531.85904819 , npoints = 1500 , nvars = 40
2018.06.27 04:36:50.631 TestClasses (GBPUSD,M6) slow = 812 микросекунд, e = 531.85904819 , npoints = 1500 , nvars = 40
2018.06.27 04:36:51.143 TestClasses (GBPUSD,M6) fast = 599 микросекунд, e = 537.42685690 , npoints = 1500 , nvars = 40
2018.06.27 04:36:51.144 TestClasses (GBPUSD,M6) slow = 853 микросекунд, e = 537.42685690 , npoints = 1500 , nvars = 40
2018.06.27 04:36:51.955 TestClasses (GBPUSD,M6) fast = 600 микросекунд, e = 531.17444713 , npoints = 1500 , nvars = 40
2018.06.27 04:36:51.956 TestClasses (GBPUSD,M6) slow = 809 микросекунд, e = 531.17444713 , npoints = 1500 , nvars = 40
2018.06.27 04:36:52.344 TestClasses (GBPUSD,M6) fast = 567 микросекунд, e = 540.39509565 , npoints = 1500 , nvars = 40
2018.06.27 04:36:52.344 TestClasses (GBPUSD,M6) slow = 813 микросекунд, e = 540.39509565 , npoints = 1500 , nvars = 40
2018.06.27 04:36:52.857 TestClasses (GBPUSD,M6) fast = 690 микросекунд, e = 550.68494369 , npoints = 1500 , nvars = 40
2018.06.27 04:36:52.858 TestClasses (GBPUSD,M6) slow = 820 микросекунд, e = 550.68494369 , npoints = 1500 , nvars = 40
2018.06.27 04:36:53.229 TestClasses (GBPUSD,M6) fast = 585 микросекунд, e = 547.94313745 , npoints = 1500 , nvars = 40
2018.06.27 04:36:53.230 TestClasses (GBPUSD,M6) slow = 811 микросекунд, e = 547.94313745 , npoints = 1500 , nvars = 40
2018.06.27 04:36:53.736 TestClasses (GBPUSD,M6) fast = 560 микросекунд, e = 568.39404456 , npoints = 1500 , nvars = 40
2018.06.27 04:36:53.737 TestClasses (GBPUSD,M6) slow = 813 микросекунд, e = 568.39404456 , npoints = 1500 , nvars = 40

Cioè potete vedere che il guadagno di velocità è più del 40%.

File:
dataanalysis.mqh  1150 kb
TestClasses.mqh  2762 kb
 
Nikolai Semko:

Beh, in sostanza, mi dispiace, ma lei sta delirando.

Nessun processore esistente oggi potrà mai

più veloce rispetto a...

e l'accesso a un array non sarà mai più veloce dell'accesso a una semplice variabile,

tre cicli identici non saranno mai più veloci di un ciclo combinato.


Non sono stato pigro e ho testato la velocità di due diverse varianti direttamente nell'ALGLIB originale per non essere infondato:

risultato:

Cioè potete vedere che il guadagno di velocità è più del 40%.

Grazie per il test! Penso che funzionerà più velocemente non solo in MQL, ma in tutte le lingue.

Le ragioni a cui stavo pensando erano che il programmatore che l'ha scritto non è stato pagato solo perché il programma funzionasse, ma per il numero di linee. Un programma di 500 linee non è così impressionante per un cliente come un programma di 5000 linee. È un peccato che la velocità e la leggibilità del codice ne abbiano risentito.

 
elibrarius:
Penso che funzionerà più velocemente non solo in MQL ma in tutte le lingue.

Certo.

 
Ho notato che quando si accede a MQL c'è un errore e nello stato del browser c'è una lunga risposta (probabilmente di autorizzazione) di Facebook
 
SEM:

Strumento sintetico. Importo barre di minuti, ogni barra di minuti differisce di 1 punto (5 cifre).

Chiudo la finestra con i simboli, poi riapro questa finestra, chiedo le barre dei minuti dal carico precedente, ottengo

I simboli sono gli stessi per ogni giorno intero. Qual è l'errore?

Sta suonando costantemente? Quale costruzione?