![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Vedere Dichiarazioni in avanti per le classi
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(
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(
Cosa significa questa voce nel tester?
Non è divertente.
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.
Limp chiaramente non fa apparire bene mql5....
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)
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);
}
}