![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
Yedelkin:
Spiegazione. Se un Expert Advisor non elabora tick per un simbolo a cui è collegato a un grafico, la generazione continua di eventiNewTick per questo simbolo porterà a un overflow della coda di eventi elaborati da questo EA.
Cosa vuoi dire?
Non c'è OnTick() nell'Expert Advisor, ma gli eventi NewTick vengono accodati?
Come fate a sapere cosa ha analizzato la coda? )
Non ho trovato un modo per disabilitare il flusso di tick( eventoNewTick) per il simbolo con l'Expert Advisor collegato al grafico, se necessario.
Mi sembra di aver lavorato dalla domenica al venerdì senza alcun riposo... :))
Cosa vuoi dire?
Come sapevi che...?
L'ho imparato in due modi. Prima ho fatto conoscenza con la combinazione EventChartCustom - OnChartEvent sull'esempio di un semplice Expert Advisor che raccoglie segnali di indicatori da simboli stranieri. Allo stesso tempo, l'Expert Advisor non lavorava con i tick del proprio simbolo, la funzione Ontick() nel codice dell'Expert Advisor era commentata. Quando si esegue l'EA nel tester, ho scoperto che il tempo di percorrenza differisce a seconda di quale simbolo è collegato all'EA. Vedi, per esempio, l'esempio qui sotto. Con gli stessi parametri di ottimizzazione i tempi di esecuzione sono notevolmente diversi.
Expert Advisor non ha OnTick(), mentre gli eventi NewTick sono in coda?
Per verificare la risposta a questa domanda (il secondo metodo), ho modificato il codice dell'Expert Advisor nel modo seguente
Cioè ho inserito una linea con sfondo giallo per rilevare il fatto di nuovi tick ricevuti dal simbolo. I risultati mostrano che i tick per il simbolo a cui è collegato l'Expert Advisor vengono ricevuti regolarmente:Beh, dato che il manuale dice " l'evento NewTick è generato quando un nuovo tick viene ricevuto da un simbolo, al cui grafico è collegato l'Expert Advisor", il fatto che vengano ricevuti nuovi tick dovrebbe causare la generazione dell'eventoNewTick.
A giudicare dalla tua domanda, pensi che nessun evento NewTick sia generato quando OnTick() è disabilitato? Ma non ho trovato tali informazioni nel manuale.
Sembra che tu abbia lavorato da domenica a venerdì senza riposo... :))
Cioè ho inserito una linea evidenziata in sfondo giallo per rilevare il fatto di nuovi tick in arrivo per simbolo. Dai risultati si può vedere che i tick di
al simbolo a cui è collegato l'Expert Advisor vengono ricevuti regolarmente:
Hai controllato quale evento causa la chiamata di OnChartEvent prima di chiamare quello personalizzato?
-------------
se
Se metti un semplice EA e lo fai girare nel tester, non si attiva.
avete altre funzioni che chiamano OnChartEvent?
avete altre funzioni che chiamano OnChartEvent.
Sì, certo. Poiché Expert Advisor raccoglie i segnali degli indicatori da simboli di terze parti utilizzando il binding EventChartCustom - OnChartEvent, ogni indicatore ha la propria istanza della funzione EventChartCustom(). Il primo parametro di ogni istanza della funzione EventChartCustom() contiene un identificatore di grafico, al quale il nostro EA è collegato; il secondo parametro è zero.
Se inserito in qualsiasi Expert Advisor, non sarà attivato.
Questa è solo una parte del codice, - dall'Expert Advisor che raccoglie i segnali degli indicatori da altri simboli. Se non ci sono indicatori, questa parte del codice (la funzione OnChartEvent) non elaborerà gli eventi personalizzati a causa della loro assenza.
avete controllato quale evento causa la chiamata di OnChartEvent prima di chiamare l'evento personalizzato?
No, un po' sbagliato. Volevo vedere se i tick vengono ricevuti dal simbolo, al cui grafico è collegato l'Expert Advisor, quando la funzione OnChartEvent() elabora gli eventi personalizzati provenienti dagli indicatori di altri simboli. Si può vedere che i tick EURGBP sono ricevuti. In base al riferimento, concludo che quando arrivano nuovi tick per il simbolo, viene generato l'evento NewTick.
Non è possibile capire quale delle vostre funzioni utilizzate ha portato a risultati di tempistica diversi. Senza un codice completo, è solo indovinare dai fondi di caffè.
NewTick non è direttamente collegato a OnChartEvent in alcun modo. Ecco perché il meccanismo di tracciamento delle code che suggerisci è piuttosto artificiale. Non sono sicuro che sia corretto.
In questo caso non pretenderei che sia NewTick a creare i ritardi del test. E penso che la colpa sia dei meccanismi dei vostri legami, non dell'evento in sé.
Non è possibile capire quale delle vostre funzioni che avete usato ha portato a risultati di tempistica diversi. Senza un codice completo, è solo indovinare dai fondi di caffè.
NewTick non è direttamente collegato a OnChartEvent in alcun modo. Ecco perché il meccanismo di tracciamento delle code che suggerisci è piuttosto artificiale. Non sono sicuro che sia corretto.
In questo caso non pretenderei che sia NewTick a creare i ritardi del test. E penso che la colpa sia dei vostri meccanismi di binding, non dell'evento in sé.
La questione non era quella che intendevo fin dall'inizio. Nel mio primo messaggio, ho detto che non avevo trovato un modo per disabilitare gli eventi tick per un simbolo con un Expert Advisor collegato al suo grafico. Avete reagito a questa frase, ma non avete fornito un modo per disabilitare il flusso di tick per il simbolo richiesto, se necessario. Concludo che non solo io, ma anche voi non conoscete un tale modo. Quindi il mio suggerimento è ancora valido: introdurre una funzione toggle che permetta di disabilitare programmaticamente la generazione di eventi NewTickper il simbolo che ha un Expert Advisor collegato al suo grafico.
Per quanto riguarda i commenti su "indovinare da gee" e "artificiosità dei meccanismi di tracciamento delle code" - non mi sono offerto di guardare nel codice fin dall'inizio e cercare una risposta alla domanda "perché succede così? Come potete vedere dal mio suggerimento, ho già trovato la risposta per me stesso. Ma consideriamo il problema da un punto di vista più astratto, senza focalizzare la nostra attenzione sul codice di un particolare Expert Advisor.
NewTick non è in alcun modo collegato direttamente con OnChartEvent.
Ok, supponiamo che sia così. Quindi, NewTick èindirettamente legato a OnChartEvent, ma è collegato. L'ho già detto nella spiegazione ma lo ripeterò ancora una volta. Sapete meglio di me che c'è una qualche "coda comune di eventi" dove sono ammassati tutti gli eventi che si verificano, sia predefiniti che definiti dall'utente. Questi eventi sono gestiti uno per uno, nell'ordine in cui vengono ricevuti. Poiché la coda ha una certa dimensione limitata, quando è piena, i vecchi eventi vengono rimossi senza essere elaborati. È giusto?
Così, si scopre che se Expert Advisor non prevede la gestione degli eventi NewTick, ma questi eventi sono ancora generati, allora la mia coda generale di eventi sarà semplicemente intasata da eventi NewTick non necessari, e ci sarà il rischio di non gestire eventi utente obsoleti che devono essere gestiti da Expert Advisor. Spero che tu sia d'accordo con questa conclusione. Ecco perché ho fatto il suggerimento di cui sopra.
Naturalmente, non conosco tutte le sottigliezze di come funziona la coda degli eventi e l'evento NewTick. Pertanto, potrei sbagliarmi in alcune conclusioni e considererò con interesse qualsiasi spiegazione.
In questo caso non pretenderei che sia NewTick a creare ritardi nei test. E penso che la colpa sia dei meccanismi dei vostri legami, non dell'evento in sé.
Per riferimento. L'Expert Advisor incardina le istanze di uno stesso indicatore con gli stessi parametri e con lo stesso "meccanismo di legame" sui simboli adiacenti, su uno stesso intervallo di tempo. Il binding è lo stesso: EventChartCustom - OnChartEvent.
Ho capito bene che sei d'accordo con l'affermazione che "se non c'è OnTick() in un Expert Advisor, gli eventi NewTick non vengono accodati affatto"?
Perché tirare a indovinare e fare ipotesi?
la vostra richiesta di"introdurre una funzione di commutazione che permette di disattivare programmaticamente la generazione di eventi NewTickper il simbolo a cui l'Expert Advisor è collegato al grafico. "è chiaro.
Scrivete a servicedesk.
Tutto il resto è lotta contro i mulini a vento.
Perché tirare a indovinare e inventare ipotesi?
Tutto il resto è una lotta contro i mulini a vento.
Non mi dire :) Alcuni sono abituati a lavorare alla cieca, mentre altri cercano di imparare di più sul fenomeno da arginare. Le ipotesi nascono in assenza di questa o quella informazione. Grazie per aver partecipato alla discussione.
Ho scritto alla SD. Non sapevo che i suggerimenti potessero essere indirizzati lì.