Errori, bug, domande - pagina 1547

 
Комбинатор:
Ora fate attenzione alla domanda - come fare in modo che il terminale ridisegni immediatamente i dati che sono stati calcolati in questo modo?

Estrae dati da buffer che non sono in OnCalculate

OnCalculate ha un tempo di estrazione minimo di 1 minuto

Gli indicatori Tick disegnano ogni tick

 
comp:
Sembra che non sia così.

ChartRedraw farà il 100% del lavoro in quattro, però.

E si è rivelato ok anche in cinque.

Quindi ChartRedraw funzionerà bene su entrambe le piattaforme.

 

Quando arriva CHARTEVENT_CHART_CHANGE, faccio un calcolo che a volte dura un secondo/sera. Se durante il calcolo, per esempio, un grafico viene spostato, allora dopo il calcolo CHARTEVENT_CHART_CHANGE viene chiamato di nuovo dalla coda.

È possibile sapere durante il calcolo che c'è qualcosa nella coda degli eventi? Allora non potrebbe fare un calcolo che non è più rilevante, interromperlo e iniziare un nuovo calcolo?

Per esempio, se anche una parte di calcolo molto pesante ha un controllo per IsStopped(), allora la chiusura dell'Expert Advisor sarebbe istantanea, senza aspettare il calcolo.

Qui sarebbe qualcosa di simile, ma non con l'evento di chiusura, ma con ChartEvent.

 
comp:

Quando arriva CHARTEVENT_CHART_CHANGE, faccio un calcolo che a volte dura un secondo/sera. Se durante il calcolo, per esempio, un grafico viene spostato, allora dopo il calcolo CHARTEVENT_CHART_CHANGE viene chiamato di nuovo dalla coda.

È possibile sapere durante il calcolo che c'è qualcosa nella coda degli eventi? Allora non potrebbe fare un calcolo che non è più rilevante, interromperlo e iniziare un nuovo calcolo?

Per esempio, se anche una parte di calcolo molto pesante ha un controllo per IsStopped(), allora la chiusura dell'Expert Advisor sarebbe istantanea, senza aspettare il calcolo.

Qui sarebbe qualcosa di simile, ma non con l'evento di chiusura, ma con ChartEvent.


fare un secondo thread di elaborazione (sotto forma di un timer ms, per esempio)

ed esattamente lì per eseguire il calcolo, a condizione che sia impostato il flag del contatore==XXX, incrementato a CHARTEVENT_CHART_CHANGE.

Così, si recupera rapidamente l'intera coda di ChartEvent, si imposta un flag e in parallelo a questo, il timer controlla questo flag e lo calcola.

---

Allo stesso timer, controllate il valore del flag-counter. È possibile fermare il calcolo se il valore corrente del contatore è più alto del valore al quale il calcolo è stato iniziato. Questo è un tipo di IsNewChanged

 
o_O:

così si rastrella molto rapidamente l'intera coda di ChartEvent, si imposta un flag, e in parallelo il timer estrae quel flag e lo calcola.

Stai dicendo che gli eventi ChartEvent e Timer funzionano in parallelo?
 

Service Desk ha fatto questa dichiarazione

SetIndexBuffer делается однократно на вызове OnInit

Qualcuno usa SetIndexBuffer non in OnInit e/o ripetutamente? In MT4 lo uso sempre. In MT5 non si può fare questo, purtroppo.

 
comp:
Stai dicendo che gli eventi ChartEvent e Timer funzionano in parallelo?

anche se sono eseguiti in modo sequenziale - non vi viene impedito di usare almeno questo.

si toglie istantaneamente l'intero ChartEvent e si mette solo un ordine.

---

sul parallelismo degli eventi del timer e del grafico è una domanda pertinente.

Chiedete alla servitù.

 
o_O:

anche se vengono eseguiti in modo sequenziale - non vi viene impedito di usare almeno questo.

si toglie istantaneamente l'intero ChartEvent e si mette solo un ordine.

---

sul parallelismo degli eventi del timer e del grafico è una domanda pertinente.

Chiedi al Service Desk.

Nessuno legge la documentazione...

Il terminale client invia gli eventi generati ai grafici aperti corrispondenti. Anche gli eventi possono essere generati dai grafici (eventi del grafico) o dai programmi mql5 (eventi personalizzati). La generazione di eventi di creazione e cancellazione di oggetti grafici in un grafico può essere abilitata o disabilitata impostando le proprietà CHART_EVENT_OBJECT_CREATE e CHART_EVENT_OBJECT_DELETE di un grafico. Ogni programma mql5 e ogni grafico ha la sua coda di eventi, dove vengono memorizzati tutti i nuovi eventi.

Il programma riceve eventi solo dal grafico su cui è in esecuzione. Tutti gli eventi sono processati uno per uno nell'ordine di ricezione. Se c'è già un evento NewTick nella coda o se questo evento è in stato di elaborazione, un nuovo evento NewTick non viene messo nella coda del programma mql5. Allo stesso modo, se la coda del programma mql5 contiene già l'evento ChartEvent o un tale evento è in corso di elaborazione, un nuovo evento di questo tipo non sarà accodato. Gli eventi Timer sono gestiti secondo lo stesso schema - se c'è un evento Timer nella coda o l'evento Timer è già gestito, un nuovo evento Timer non viene messo in coda.

 
Slawa:

Nessuno legge la documentazione...

Allora non c'è nessuna interruzione del calcolo basata sugli eventi.
 
Slawa:

Nessuno legge la documentazione...

È passato molto tempo