Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 49
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
Se premi TAB subito dopo le parole if, else, while, for, do, c'è una piccola costruzione extra...
f*cking hell... grande, dopo 5 anni di conoscenza di mql - l'ho scoperto.
Conclusioni di una conversazione nella SD su un problema sollevato.
Si scopre che assegnare un valore a una variabile stringa è un'operazione MOLTO costosa.
Così costoso che è auspicabile evitarlo il più possibile finché gli sviluppatori non migliorano questo punto nel compilatore, il che sembra essere molto lontano.
Come esempio, se si esegue una corsa in tick reale per un mese su FIBO, sarebbe circa 1 milione di tick. Se si ottiene il valore di PositionGetString ad ogni tick e lo si confronta con qualcosa, la performance sarebbe accettabile, ma se si assegna prima il risultato della funzione ad una variabile stringa prima di confrontarlo, allora la durata dell'esecuzione aumenterebbe di circa un secondo.
Se sembra una piccola cosa, è una visione sbagliata. Quando un tale EA viene eseguito in modalità di ottimizzazione per diverse migliaia di passaggi, quel secondo in più si traduce in ore aggiuntive di tempo di attesa. Cioè un'innocua assegnazione di stringhe può causare ore di attesa aggiuntive durante l'ottimizzazione. Fate attenzione e tenete conto di questa sfumatura.
In kodobase, c'è un piccolo strumento che permette di rilevare tali fallimenti in diverse implementazioni della stessa logica di trading. Scrivere codice veloce.
Conclusioni di una conversazione nella SD su un problema sollevato.
Si scopre che assegnare un valore a una variabile stringa è un'operazione MOLTO costosa.
Così costoso che è auspicabile evitarlo se possibile finché gli sviluppatori non migliorano questo punto nel compilatore, il che non sembra accadere presto.
Come esempio, se si esegue una corsa in tick reale per un mese su FIBO, sarebbe circa 1 milione di tick. Se si ottiene il valore di PositionGetString ad ogni tick e lo si confronta con qualcosa, la performance sarebbe accettabile, ma se si assegna prima il risultato della funzione ad una variabile stringa prima di confrontarlo, allora la durata dell'esecuzione aumenterebbe di circa un secondo.
Se sembra una piccola cosa, è una visione sbagliata. Quando un tale EA viene eseguito in modalità di ottimizzazione per diverse migliaia di passaggi, quel secondo in più si traduce in ore aggiuntive di tempo di attesa. Cioè un'innocua assegnazione di stringhe può causare ore di attesa aggiuntive durante l'ottimizzazione. Fate attenzione e tenete conto di questa sfumatura.
In kodobase, c'è un piccolo strumento che permette di rilevare tali fallimenti in diverse implementazioni della stessa logica di trading. Scrivere un codice veloce.
Grazie, non pensavo fosse possibile. Ne terrò conto nei futuri sviluppi
Un semplice indovinello da letto, perché i risultati gialli?
Un semplice indovinello da letto, perché i risultati gialli?
Poiché la struttura è impacchettata con zeri, non il costruttore, quindi la struttura dell'array è inizializzata in modo errato, arrayresize non ama tali array, il mio codice è andato in crash su tale ridimensionamento a tutti.
È un bene che tutti lo sappiano.
Si riferisce a GetMicrosecondCount. Non c'è un modo preciso per dire se sta rallentando il server. Può avere un effetto indiretto. Pertanto, è meglio usare il nativo GetTickCount del sistema
GetMicrosecondCount è usato per misurare brevi periodi di esecuzione del codice. Per misurare un gran numero di esecuzioni OnTick, è meglio usare GetTickCount.
Prova a usare GetMicrosecondsCount invece di GetTickCount quando ottieni risultati stabili. Me ne parlerai qui. Forse mi sto preoccupando troppo.
Conclusioni di una conversazione nella SD su un problema sollevato.
Si scopre che assegnare un valore a una variabile stringa è un'operazione MOLTO costosa.
Così costoso che è auspicabile evitarlo se possibile finché gli sviluppatori non migliorano questo punto nel compilatore, il che non sembra accadere presto.
Come esempio, se si esegue una corsa in tick reale per un mese su FIBO, sarebbe circa 1 milione di tick. Se si ottiene il valore di PositionGetString ad ogni tick e lo si confronta con qualcosa, la performance sarebbe accettabile, ma se si assegna prima il risultato della funzione ad una variabile stringa prima di confrontarlo, allora la durata dell'esecuzione aumenterebbe di circa un secondo.
Se sembra una piccola cosa, è una visione sbagliata. Quando un tale EA viene eseguito in modalità di ottimizzazione per diverse migliaia di passaggi, quel secondo in più si traduce in ore aggiuntive di tempo di attesa. Cioè un'innocua assegnazione di stringhe può causare ore di attesa aggiuntive durante l'ottimizzazione. Fate attenzione e tenete conto di questa sfumatura.
In kodobase, c'è un piccolo strumento che permette di rilevare tali fallimenti in diverse implementazioni della stessa logica di trading. Scrivere un codice veloce.
Si scopre che assegnare un valore a una variabile stringa è un'operazione MOLTO costosa.
...
Se si assegna prima il risultato di una funzione a una variabile stringa prima del confronto, e poi lo si confronta, il tempo di esecuzione aumenterà di circa un secondo.
Per come la vedo io, il problema non è tanto nell'assegnazione costosa, ma nel fatto che il compilatore non taglia questa assegnazione non necessaria dal codice per qualche motivo, anche se dovrebbe. Cioè il codice compilato dovrebbe essere lo stesso in entrambi i casi.
Questo è un problema minore. Sì, l'ottimizzatore del compilatore non sa ancora come ottimizzare tali momenti di stringa. Ma è l'assegnazione delle stringhe dove si trova il problema del rallentamento.
Scrivere codice che non può essere ottimizzato dal compilatore e allo stesso tempo fare assegnazioni in esso. E vedrete cos'è un rallentamento.
L'esempio della lettura di un campo stringa di una struttura attraverso una funzione è esattamente il modo in cui la lettura delle proprietà di posizione è implementata in MT4/5.
In MT4, lo stesso OrderSymbol() è frenato se è implementato in MT5. Gli stessi sviluppatori cercano di passare alle loro funzioni delle stringhe tramite link.
Pertanto, se si scrive qualcosa come questo
è sempre meglio mettere la condizione OrderSymbol() alla fine della condizione generale.
Ho notato un apparente rallentamento su superfici apparentemente lisce quando uso TesterBench.