Bug MQL5 quando si lavora con accesso alle serie temporali iClose/iOpen, ecc. - pagina 2

 
Stanislav Dray:

Allora dimmi perché il congelamento avviene nel mio caso? Ho il congelamento dei dati in OnTick prima della funzione di polling dell'indicatore, cioè l'aggiornamento di CopyTime da parte di M1 funge da trigger per avviare altre elaborazioni in OnTick, e prima di CopyTime nessuna funzione o polling dell'indicatore.

E perché non c'erano questi problemi prima della 30a build e da ottobre 2017 tutto funzionava bene?

Fate come vi ho consigliato, per favore.

Altrimenti è necessario il materiale completo per una riproduzione al 100%.
 

Perché gli sviluppatori non scrivono una funzione che garantisca un array di dati sincronizzato (attraverso diversi strumenti) in modo che la gente non si preoccupi e perda il suo tempo invano?

dopo tutto MT5 è posizionato come uno strumento fresco e pratico, giusto?

molto impaziente...

 
Vladimir Karputov:

Inoltre è sempre stato raccomandato che se state lavorando con il timeframe di qualcun altro - dovreste ottenere OHLC da quel timeframe una volta al minuto (qualsiasi funzione CopyXXXX). Questo è sempre stato il caso.

Slava diceva una volta ogni due minuti. Sono pigro a cercarlo, ma me lo ricordo esattamente.

 
transcendreamer:

Perché gli sviluppatori non scrivono una funzione che garantisca un array di dati sincronizzato (attraverso diversi strumenti) in modo che la gente non si preoccupi e perda il suo tempo invano?

dopo tutto MT5 è posizionato come uno strumento fresco e conveniente, giusto?

stiamo aspettando...

Sì. OnCalculate costruttore per il numero richiesto di simboli e timeframes. Oppure, oltre a OnCalculate, introdurre un nuovo oggetto, per esempio "MainCalculate" per un massimo di 255 OnCalculate, in cui vivono gli oggetti OnCalculate - chi non ne ha bisogno, usa il vecchio OnCalculate, chi ha bisogno di mtf e simboli diversi usa "MainCalculate". Il primo e l'ultimo tick della barra è lo stesso per tutti i simboli e i timeframe coincidenti. Poiché OnCalculate è già stato sviluppato e stabilito, è logico che tutte le chiamate a simboli e timeframes di terze parti passino attraverso l'aggregazione OnCalculate senza altre funzioni che mediano verso timeframes e simboli.

 

Pensate a dove saranno disponibili i dati (specialmente i dati garantiti) quando i vostri indicatori sono insopportabilmente lenti, impiegando centinaia di millisecondi o addirittura secondi per ricevere/disporre i tick per tick. Di conseguenza, nessuna CPU è sufficiente in tempo per elaborare i tick, il che si traduce in un deficit che si accumula e un corrispondente stallo nella storia del grafico.

Quando si chiede di "dare garantito", è molto probabilmente una richiesta di "non voglio sapere nulla, voglio continuare a scrivere come voglio, non voglio pensare a prestazioni e serrature, basta dare"?


Quando hai a disposizione milioni di barre, pensa al rendimento dei tuoi indicatori e di quelli degli altri. Un indicatore mal scritto e costoso può facilmente rallentare l'aggiornamento dei grafici dei suoi simboli.

Per cominciare, iniziate a misurare il tempo di risposta di OnCalculate in microsecondi. Poi dividete 1 secondo per il tempo medio di risposta dei tick per ottenere la massima ripartizione dell'indicatore in tick al secondo.

Questo fa immediatamente riflettere.

 
Artyom Trishkin:

Ogni due minuti, ha detto Slava. Sono troppo pigro per cercarlo, ma lo ricordo esattamente.

Mi ricordo, ma uso sempre un intervallo di 1 minuto. In questo modo è più affidabile.

 
Farkhat Guzairov:

Scusatemi, ma in questo caso la profondità della storia su timeframe M15 era di 120 barre e cosa, è già critica per MQL5?

Non hai fornito alcun materiale riproducibile.

Ho spiegatoperché le funzioni di accesso ai dati altrui saranno ritardate quando ci sono indicatori di ritardo sui loro simboli. Stai parlando del tuo caso particolare di chiamata, ignorando completamente la presenza di altri indicatori sui grafici. E sono quelli con cui avresti dovuto iniziare, soprattutto perché è chiaro che ne scrivo.

Non fare demagogia e dichiarazioni comparative con una completa mancanza di atti tecnici e liste di indicatori con esperti.

Datemi il codice per riprodurre, per favore.

 
Farkhat Guzairov:

***

Quindi come si fa a riprodurlo? Per favore, datemi i dati per la riproduzione.

 
Farkhat Guzairov:

Naturalmente non posso mettere tutto il codice qui, ma ho già indicato la parte in cui si verifica il problema, quindi lo farò di nuovo:

O tutto il codice o non dire nulla. Senza il codice completo, è solo un sacco di aria.

 
Renat Fatkhullin:

Pensate a dove saranno disponibili i dati (tanto più garantiti), quando i vostri indicatori saranno insopportabilmente lenti nel ricevere/applicare i tick, spendendo centinaia di millisecondi o addirittura secondi per un tick. Di conseguenza, nessuna CPU è sufficiente in tempo per elaborare i tick, il che si traduce in un deficit che si accumula e un corrispondente stallo nella storia del grafico.

Quando si chiede di "dare garantito", è molto probabilmente una richiesta di "non voglio sapere nulla, voglio continuare a scrivere come voglio, non voglio pensare a prestazioni e serrature, basta dare"?


Quando hai a disposizione milioni di barre, pensa al rendimento dei tuoi indicatori e di quelli degli altri. Un indicatore mal scritto e costoso può facilmente bloccare gli aggiornamenti del grafico del suo simbolo.

Iniziate a misurare il tempo di risposta di OnCalculate in microsecondi. Poi dividete 1 secondo per il tempo medio di risposta dei tick per ottenere il massimo flusso di tick dell'indicatore in tick al secondo.

Questo fa immediatamente riflettere.


Non hai sempre bisogno della super velocità, l'usabilità è molto importante, al giorno d'oggi il processo di scrivere indicatori multivaluta è come "tramontare a mano", anche in MT4 era più facile, perché lì puoi sempre ottenerlo attraverso le i-funzioni, anche se lentamente, ma puoi ottenerlo, ma in MT5 i dati o ci sono o non ci sono, e devi creare un codice speciale da solo.


Inoltre, si dovrebbe tenere a mente che non tutti gli utenti sono programmatori di alta classe, alcune persone hanno solo bisogno di uno strumento comodo e affidabile, anche se non è supersonico, e tale velocità non è di solito necessaria per i sistemi di portafoglio, e il throughput massimo non è critico in questo caso, l'importante è che funzioni garantito e facile, infatti, questo è il fattore per rendere il prodotto più popolare e accessibile.


La comparsa delle i-funzioni in mt5 ha migliorato un po' la situazione, ma non ha risolto il problema, non c'è la possibilità di ottenere facilmente e semplicemente un array sincronizzato per diversi strumenti, forse non è necessario per tutti, forse non è nemmeno una priorità, lo posso capire, ma tuttavia esiste un tale compito.


Funzione: GetSyncData

Input: elenco di simboli, timeframe, intervallo di barre e/o intervallo di date

Output: array con elementi MqlRates in modo che gli indici di tutti i simboli corrispondano allo stesso tempo

Motivazione: