Errori, bug, domande - pagina 712

 
Salve,

Grazie per la tua risposta, aiuta a risolvere il problema della dichiarazione.

A proposito, ho trovato forse un bug relativo al debug:

Quando state eseguendo il debug di un indicatore, essendo in modalità breakpoint, premete elenco indicatori in MetaTrader.
L'applicazione si blocca e viene fermata solo dal task manager (kill)


Si prega di prendere nota.
 
speedy:


Si prega di prendere nota.
Preso nota, grazie.
 

La funzione OnTimer() nel tester della strategia, rallenta molto l'esecuzione, quando viene richiesta ogni secondo. void OnInit() { EventKillTimer(); EventSetTimer(1); } void OnTimer() { } Expert Advisor, con due indicatori esterni e in esecuzione attraverso tutti i tick, sta eseguendo la 2012.04.11 14:32:07 Core 1 EURUSD,H1: 8083516 ticks (4557 barre) generati entro 70418 ms (barre totali nella storia 6270, tempo totale 70528 ms) Se OnTimer() è commentato, l'esecuzione è notevolmente accelerata 2012.04.11 14:36:22 Core 1 EURUSD,H1: 8083516 ticks (4557 barre) generati entro 22730 ms (barre totali nella storia 6270, tempo totale 22870 ms) Questi ritardi sono causati dal tester, o possiamo accelerarlo in qualche modo?

P.S. Un'anteprima del messaggio sarebbe stata implementata(

 
sion:

La funzione OnTimer() nel tester della strategia, rallenta molto l'esecuzione, quando viene richiesta ogni secondo. void OnInit() { EventKillTimer(); EventSetTimer(1); } void OnTimer() { } Expert Advisor, con due indicatori esterni e in esecuzione attraverso tutti i tick, sta eseguendo la 2012.04.11 14:32:07 Core 1 EURUSD,H1: 8083516 ticks (4557 barre) generati entro 70418 ms (barre totali nella storia 6270, tempo totale 70528 ms) Se OnTimer() è commentato, l'esecuzione è notevolmente accelerata 2012.04.11 14:36:22 Core 1 EURUSD,H1: 8083516 ticks (4557 barre) generati entro 22730 ms (barre totali nella storia 6270, tempo totale 22870 ms) Questi ritardi sono causati dal tester, o possiamo accelerarlo in qualche modo?

P.S. Un'anteprima del messaggio sarebbe stata implementata(

È meglio inserire il codice attraverso il pulsante "SRC" nel pannello dell'editor.
 
papaklass:

Cosa significa questa voce nel tester?

È un messaggio di sistema sulla paginazione della storia.
 

Non è divertente.

struct Test
  {
   double      data[];
   int         size;
   void        Init(int Size) {size=Size; ArrayResize(data,fmin(size,Max));}
   double &operator[] (int i) {return &data[i];} // ERROR :  '&' - reference cannot be used

private:
   static int  Max;
  };
//+------------------------------------------------------------------+

int Test::Max=1024;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   Test t;  
   t.Init(16);
   for(int i=0;i<t.size;i++)
     {
      t[i]=i*i; // ERROR :'=' - l-value required
     }
  }

Capisco che i link nel caso generale in mql5 non vengono restituiti dalle funzioni (a proposito, perché no?), ma allora è necessario fare qualcosa per rendere possibili gli indicizzatori di valore l. Per esempio, fare un'eccezione di sintassi alla regola generale per gli indicizzatori di sinistra. O una parola chiave di qualche tipo.

La zoppia ovviamente non fa sembrare mql5.... bello.

 
MetaDriver:

Limp chiaramente non fa apparire bene mql5....

Non insultate mql5, è ancora "piccolo", ma matura molto rapidamente da una build all'altra.
 
MetaDriver:

La zoppia chiaramente non fa apparire bene mql5....

Devi costruire dei link completi per questo :)

ZS: sta perdendo :)

 

Bug?


Il codice che segue genera una sorta di ciclo perpetuo nel compilatore. Facendo clic su Annulla

non funziona immediatamente, ma quando lo fa, riprende il controllo dell'editor.

Il pulsante Annulla stesso non scompare, ma non è nemmeno accessibile.

Il pulsante Compile è perso per sempre (bisogna ricaricare l'editor per riaverlo)


#include <Object.mqh>.

classe B;

classe A: B {
void a();
};

classe B: A {

CObject* a;
void b();
};
 
MetaDriver:

Non è divertente.

Come mi piace capire che i collegamenti nel caso generale nelle funzioni mql5 non ritornano (a proposito, perché non possono?), ma dovrei fare qualcosa per rendere possibili invece gli indicizzatori di l-valore, per esempio fare un'eccezione di sintassi alla regola generale per gli indicizzatori di sinistra. O una parola chiave di qualche tipo.

La zoppia chiaramente non fa sembrare mql5.... bello.

"Passare all'esterno" elementi interni non di classe base (e in questo esempio non l'attributo stesso, ma solo un elemento dell'array!) specialmente con la possibilità di cambiarne il valore non è sicuro.

Inoltre, contraddice lo "spirito" della programmazione orientata agli oggetti: tutto il lavoro con i dati degli oggetti dovrebbe essere eseguito all'interno dell'oggetto, dai suoi propri metodi...


Che ne dite di usare semplicemente Setter per l'attributo dei dati?

Il codice vincerebbe in leggibilità. Alla fine, questa "semplicità" con l'indicizzatore l-value farà sì che nessuno capisca come funziona questo codice...

Passerete più tempo a cercare gli errori che a scrivere Setter.

Ecco un esempio:

Se puoi sostituire il codice come while ((double)date[++i -1] < 10) con qualcosa di più lungo ma digeribile, è meglio farlo così...

struct Test

{

doppio dati[];

int size;

void Init(int Size) {size=Size; ArrayResize(data,fmin(size,Max));}

void setDataElement (int index, double value)

{

dati[indice] = valore;

}


privato:

int statico Max;

};

//+------------------------------------------------------------------+


int Test::Max=1024;

//+------------------------------------------------------------------+

//| funzione di avvio del programma script |

//+------------------------------------------------------------------+

void OnStart()

{

Test t;

t.Init(16);

for(int i=0;i<t.size;i++)

{

//t[i]=i*i; // ERROR :'=' - l-valore richiesto

t.setDataElement(i, i*i);

}

}