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?
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.
OE 0 Tester 15:35:25 Experts\Ye00-01-0 Event.ex5 on USDRUR,M1 from2010.08.0100:00 to 2010.08.0900:00 CH 0 Tester 15:35:25 complete optimization started
LO 0 Core 115:35:25 agent process started
HK 0 Core 115:35:25 connecting to 127.0.0.1:3000
OK 0 Core 215:35:25 agent process started
DO 0 Core 215:35:25 connecting to 127.0.0.1:3001
DG 0 Core 215:35:26 connected
EK 0 Core 115:35:26 connected
NQ 0 Core 115:35:26 authorized (agent build 384)
QK 0 Core 215:35:26 authorized (agent build 384)
DI 0 Core 115:35:26 pass 0 started
LM 0 Core 215:35:26 pass 1 started
QK 0 Core 115:35:27 common synchronization completed
FD 0 Core 215:35:27 common synchronization completed
GR 0 Core 215:36:08 pass 1 returned result 10000.00in42 sec
RH 0 Core 215:36:08 pass 2 started
ON 0 Core 115:36:09 pass 0 returned result 10000.00in43 sec
ID 0 Core 115:36:09 pass 3 started
GK 0 Core 215:36:21 pass 2 returned result 10000.00in13 sec
QQ 0 Core 215:36:21 pass 4 started
PH 0 Core 115:36:21 pass 3 returned result 10000.00in12 sec
IR 0 Core 115:36:21 pass 5 started
ED 0 Core 215:36:34 pass 4 returned result 10000.00in13 sec
ON 0 Core 215:36:34 pass 6 started
MQ 0 Core 115:36:34 pass 5 returned result 10000.00in13 sec
GK 0 Core 115:36:34 pass 7 started
KN 0 Core 215:36:46 pass 6 returned result 10000.00in12 sec
ND 0 Core 215:36:46 pass 8 started
CJ 0 Core 115:36:47 pass 7 returned result 10000.00in13 sec
EP 0 Core 115:36:47 pass 9 started
PG 0 Core 215:36:59 pass 8 returned result 10000.00in13 sec
QO 0 Core 115:36:59 pass 9 returned result 10000.00in12 sec
MD 0 Tester 15:36:59 optimization finished, total passes 10
HS 0 Tester 15:36:59 optimization passed in1 minutes 34 seconds
CE 0 Core 115:36:59 connect closed
PI 0 Core 215:36:59 connect closed
ON 1 Tester 15:37:20 genetics turned off because 10 passes, to use genetics increase amount of optimized parameters
RQ 0 Tester 15:37:20 Experts\Ye00-01-0 Event.ex5 on EURGBP,M1 from2010.08.0100:00 to 2010.08.0900:00 FL 0 Tester 15:37:20 complete optimization started
QM 0 Core 115:37:20 connecting to 127.0.0.1:3000
MG 0 Core 215:37:20 connecting to 127.0.0.1:3001
MN 0 Core 115:37:20 connected
LR 0 Core 215:37:20 connected
FH 0 Core 115:37:20 authorized (agent build 384)
QR 0 Core 215:37:20 authorized (agent build 384)
DF 0 Core 115:37:20 pass 0 started
LJ 0 Core 215:37:20 pass 1 started
JR 0 Core 115:37:20 common synchronization completed
EK 0 Core 215:37:20 common synchronization completed
IK 0 Core 115:38:35 pass 0 returned result 10000.00in75 sec
KQ 0 Core 115:38:35 pass 2 started
QG 0 Core 215:38:36 pass 1 returned result 10000.00in76 sec
FM 0 Core 215:38:36 pass 3 started
JD 0 Core 115:39:16 pass 2 returned result 10000.00in41 sec
MN 0 Core 115:39:16 pass 4 started
QP 0 Core 215:39:17 pass 3 returned result 10000.00in41 sec
FJ 0 Core 215:39:17 pass 5 started
KM 0 Core 115:39:56 pass 4 returned result 10000.00in40 sec
CG 0 Core 115:39:56 pass 6 started
DJ 0 Core 215:39:57 pass 5 returned result 10000.00in40 sec
LP 0 Core 215:39:57 pass 7 started
IF 0 Core 115:40:37 pass 6 returned result 10000.00in41 sec
FL 0 Core 115:40:37 pass 8 started
DS 0 Core 215:40:38 pass 7 returned result 10000.00in41 sec
GI 0 Core 215:40:38 pass 9 started
KP 0 Core 115:41:18 pass 8 returned result 10000.00in41 sec
NH 0 Core 215:41:19 pass 9 returned result 10000.00in41 sec
MS 0 Tester 15:41:19 optimization finished, total passes 10
OJ 0 Tester 15:41:19 optimization passed in3 minutes 59 seconds
komposter:
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
voidOnChartEvent(constint id, // идентификатор события constlong& lparam, // параметр события типа longconstdouble& dparam, // параметр события типа doubleconststring& sparam // параметр события типа string
)
{
EventChartCustom(ChartID(),0,(long)SymbolInfoInteger(_Symbol,SYMBOL_TIME),0,_Symbol);
if(id==CHARTEVENT_CUSTOM) Print(__FILE__," ",__FUNCTION__,": ",sparam ," ",(datetime)lparam);
}
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.
Yedelkin: 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
voidOnChartEvent(constint id, // идентификатор события constlong& lparam, // параметр события типа longconstdouble& dparam, // параметр события типа doubleconststring& sparam // параметр события типа string
)
{
EventChartCustom(ChartID(),0,(long)SymbolInfoInteger(_Symbol,SYMBOL_TIME),0,_Symbol);
if(id==CHARTEVENT_CUSTOM) Print(__FILE__," ",__FUNCTION__,": ",sparam ," ",(datetime)lparam);
}
Se metti un semplice EA e lo fai girare nel tester, non si attiva.
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.
sergeev:
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.
sergeev:
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.
sergeev:
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.
sergeev:
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"?
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.
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ì.
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ì.