Errori, bug, domande - pagina 2723
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
Puoi dirmi cosa c'è che non va e come accelerare l'aggiornamento del grafico? La funzione ChartRedraw è chiamata dall'Expert Advisor, ma c'è ancora un paio di minuti di ritardo.
ChartRedraw è necessario solo per il disegno (aggiornamento) di oggetti grafici, non abbiamo bisogno di ChartRedraw per un normale indicatore che disegna da buffer di indicatori
Penso che dovresti cercare il problema nell'indicatore, forse il calcolo dei buffer su ogni tick non è corretto, ci sono "autori" che calcolano l'intera storia ogni tick
ZZY: non posso confermare, ma forse ChartRedraw aggiorna l'intero grafico con la storia sincronizzata, se è così, si riavvia effettivamente l'indicatore con un calcolo completo di tutta la storia ogni volta
UPD: prova a limitare la cronologia sul grafico a un numero minore di barre 10 000 è sufficiente, in MT4 c'è stato un caso in cui un indicatore pesante "ingoiava" tutta la memoria e poi cercava il motivo per cui l'EA non funzionava correttamente (funzionava poi non). Anche se in MT5 è improbabile che tutta la memoria sia stata utilizzata.... ma succede
ChartRedraw è necessario solo per il disegno (aggiornamento) di oggetti grafici, non avete bisogno di ChartRedraw per un normale indicatore che disegna da buffer di indicatori
Penso che dovresti cercare il problema nell'indicatore, forse il calcolo dei buffer su ogni tick non è corretto, ci sono "autori" che calcolano l'intera storia ogni tick
ZZY: non posso confermare, ma forse ChartRedraw aggiorna l'intero grafico con la storia sincronizzata, se è così, si riavvia effettivamente l'indicatore con un calcolo completo di tutta la storia ogni volta
UPD: prova a limitare la cronologia sul grafico a un numero minore di barre 10 000 è sufficiente, in MT4 c'è stato un caso in cui un indicatore pesante "ingoiava" tutta la memoria e poi cercava il motivo per cui l'EA non funzionava correttamente (funzionava poi non). Anche se in MT5 è improbabile che tutta la memoria sia usata.... ma può succedere.
Ho cercato di ottimizzare il calcolo e ho testato la versione precedente dell'indicatore. Ho calcolato ogni 1000 barre prima e ora sto aspettando che si apra una nuova barra.
Se questa è la ragione, dovrei essere ancora molto sorpreso. 1k barre di calcoli non molto forti rallentano il disegno del grafico per 2 minuti?
Se questa è la ragione, vale comunque la pena di fare una grande sorpresa. 1 barra di calcoli non molto forte rallenta il disegno del grafico per 2 minuti?
non può essere, a mio parere, il terminale scaricherà tale indicatore con un messaggio che dice " calcolo troppo lungo in xxx indicatore ".
il tempo di esecuzione di MT (4/5) è molto veloce, naturalmente è possibile calcolare gli stessi dati più volte, ma imho, bisogna provarlo duramente
Penso che l'autore dell'indicatore non ha familiarità con il calcolo economico dei buffer degli indicatori, e si dimentica di calcolare correttamente le ultime barre... vai su QB a studiare come sono scritti gli indicatori ;)
Questi due programmi sono nello stesso terminale o in due terminali diversi?
Il codice per riprodurre il problema è postato qui. https://www.mql5.com/en/forum/332849
Per riprodurlo, è necessario eseguire il codice almeno 2 volte.
Non è affatto necessario. Perché C? E C#? - È più vicino a C# in termini di significato.
Probabilmente perché µl c++ è simile, e le strutture sono arrivate lì da c.
Tutti i discorsi sulle strutture passive sono tutte nozioni arcaiche, imho.
Se avete bisogno di costruttori, usate le classi o andate su Sharp. Perché dovremmo privare le strutture di questa connotazione? Questo renderà i programmi più espressivi. Posso prendere il codice di qualcuno e vedere che ha una struttura invece di una classe e ottenere molte informazioni da una sola parola. Non otterrete nulla, studierete diligentemente il codice sorgente per ottenere lo stesso risultato, che ho ottenuto in un batter d'occhio. Nella mia esperienza - questa convenzione di strutture è rispettata, bene forse una specie di marginalità nichilista a vento.
Credo che, come minimo, ogni tipo dovrebbe avere un costruttore. I campi non inizializzati sono malvagi e dovrebbero essere evitati.
Non c'è male, ti sembra. Vaughn ha anche trascinato nello standard: la lettura di unsigned char non inizializzati e std::byte non è un comportamento indefinito. Potete usare l'inizializzazione aggregata per POD. E non dimenticate - tutta questa inizializzazione non è gratuita, è un vero consumo di risorse (CPU, memoria, dimensione di un eseguibile). Se non ve ne frega un cazzo con il vostro scribacchino di numeri, nel caso di qualche microcontrollore può essere importante. Dopotutto, il C/C++ non è solo un rimescolamento di Windows come Sharp.
L'inizializzazione di una sola variabile ha aumentato la dimensione delle istruzioni del 30%.In un terminale. L'esperto scrive i dati, l'indicatore legge i dati. Appesi a grafici diversi, ma ovviamente potrebbero essere sullo stesso (se questo conta). Costruire 2380.
L'Expert Advisor che legge il file deve tenere questo file chiuso.
La particolarità dell'implementazione dei file in MQL5 è che mantengono i dati dei file nei propri buffer al massimo. Se la quantità di informazioni è così grande che non entra nel buffer, allora il tuo trucco di spostare il puntatore all'inizio e poi alla fine del file può funzionare.
Quindi, a questo punto, aprite il file, controllate il contenuto, poi chiudetelo di nuovo
Un Expert Advisor che legge un file deve tenere questo file chiuso.
La particolarità dell'implementazione dei file in MQL5 è che mantengono i dati dei file nei propri buffer il più possibile. Se la quantità di informazioni è così grande che non entra nel buffer, allora il tuo trucco di spostare il puntatore all'inizio e poi alla fine del file può funzionare.
Quindi, a questo punto, aprite il file, controllate il contenuto, poi chiudetelo di nuovo
Quindi FileFlush () è inutile?
No. FileFlush deve essere fatto se si vuole che qualcun altro possa leggere il file modificato
Il problema è che il programma MQL5 legge il file nel proprio buffer quando lo apre. Non saprà nulla dei cambiamenti nel file finché non lo leggerà di nuovo. Il file può essere letto di nuovo solo chiudendo e poi aprendo il file
No. FileFlush deve essere fatto se si vuole che qualcun altro possa leggere il file modificato
Anche se si chiude il file?
Anche se si chiude il file?
È esattamente quello di cui sto parlando. Chiudere, poi riaprire
O intendete FileFlush prima di chiudere il file?