Errori, bug, domande - pagina 1562

 

Faccio passare il tester attraverso due personaggi contemporaneamente in modalità "tick reali". La sincronizzazione è precisa al millisecondo. Pertanto, a volte sembra che ci sia una mancata corrispondenza delle sequenze di tick. Ci possono essere diversi tick in 1ms su due personaggi contemporaneamente. Dimmi, qual è l'algoritmo per alimentare le zecche in queste situazioni?

E come, senza IndicatorRelease, gestire in modo ottimale la cattura di ogni tick nel tester (il timer in 1 ms salta i tick), quando c'è un passaggio su diversi simboli contemporaneamente?

 
Anton Zverev:

Faccio passare il tester attraverso due personaggi contemporaneamente in modalità "tick reali". La sincronizzazione è precisa al millisecondo. Pertanto, a volte sembra che ci sia una mancata corrispondenza delle sequenze di tick. Ci possono essere diversi tick in 1ms su due personaggi contemporaneamente. Dimmi, qual è l'algoritmo per alimentare le zecche in queste situazioni?

E come è ottimale catturare ogni tick nel tester senza IndicatorRelease (il timer perde i tick in 1 ms), quando ci sono diversi simboli che passano contemporaneamente?

Nel tester, il quantum minimo di tempo è 1 secondo. Quindi è inutile far funzionare il timer a 1ms.

Ci possono essere più zecche in uno stesso secondo. E da strumenti diversi. L'algoritmo di alimentazione dei tick è tale che al momento del tempo di tick per lo strumento in prova, tutti i tick di altri strumenti per lo stesso secondo sono già presentati.

 
Slawa:

Nel tester, il quantum minimo di tempo è 1 secondo. È quindi inutile far partire il timer a 1ms.

Ci possono essere diversi tic nello stesso secondo. E da diversi strumenti. L'algoritmo di alimentazione dei tick è tale che al momento del tempo di tick per lo strumento in prova, tutti i tick di altri strumenti per lo stesso secondo sono già presentati.

Prendereste in considerazione la soluzione normale di chiamare l'EA su ogni tick nel tester?
 
Anton Zverev:
Prendereste in considerazione la soluzione normale di chiamare l'EA su ogni tick nel tester?
Nel tester, l'EA è chiamato su ogni tick dello strumento in prova
 
Slawa:
Nel tester, l'Expert Advisor è chiamato ad ogni tick del simbolo testato

Sai esattamente cosa ti sto chiedendo. Eseguo due simboli, non riesco a prendere i tic del secondo. La gente ha suggerito a lungo l'unica soluzione - attraverso IndicatorRelease. Ma da sola sembra una stampella.

Ho visto vari tester multisimbolo. Ho affrontato un tale problema solo in cinque. Come sia possibile che non l'abbiate previsto è un mistero.

Per favore, pensate a come migliorare MQL per eliminare questo anello debole e rendere il prodotto completo. Ho proposto la mia variante, ma la tua è al 100% più ragionevole.

 
Anton Zverev:

Sai esattamente cosa ti sto chiedendo. Eseguo due simboli, non riesco a prendere i tic del secondo. La gente ha suggerito a lungo l'unica soluzione - attraverso IndicatorRelease. Ma da sola sembra una stampella.

Ho visto vari tester multisimbolo. Ho affrontato un tale problema solo in cinque. Come sia possibile che non l'abbiate previsto è un mistero.

Per favore, pensate a come migliorare MQL in modo che questo anello debole venga rimosso e il prodotto sia davvero completo. Ho proposto la mia variante, ma la tua è al 100% più ragionevole.

Questa è un'altra domanda.

Cos'è "catturare la seconda zecca"?

Come fai a prendere i tick del secondo strumento quando esegui l'EA normalmente?

 
Slawa:

Questa è un'altra domanda.

Cos'è "catturare i ticchettii del secondo"?

Perché l'EA sia chiamato ad ogni tick del secondo simbolo.

Come si catturano i tick del secondo simbolo quando l'EA viene lanciato normalmente?

Posto l'indicatore attraverso IndicatorRelease sul secondo simbolo. Ad ogni tick del suo simbolo crea l'evento ChartEvent. L'Expert Advisor, rispettivamente, cattura questo evento.

Questa povera soluzione è stata suggerita molti anni fa, secondo i risultati della ricerca. Non ho trovato un'altra soluzione funzionante. Se il test deve essere condotto su 10 simboli, allora vengono lanciati 9 indicatori.

Supponiamo di avere un Expert Advisor che aumenta il contatore ad ogni tick.

Lo sto eseguendo su un simbolo nel tester, dove è 1 milione di tick. Il contatore mostra 1 milione.

Ho anche raggiunto un altro simbolo e mostra 1 milione.

L'ho fatto passare attraverso due simboli contemporaneamente. Non riesce a mostrare 2 milioni.

È chiaro ora?

 
Anton Zverev:

Per favore, pensate a come migliorare il MQL in modo che questo anello debole scompaia e il prodotto diventi davvero completo. Ho suggerito la mia variante, ma la tua è al 100% più riflessiva.

In effetti, il cambiamento che deve essere implementato è abbastanza semplice - l'evento OnBookEvent dovrebbe essere chiamato non solo al cambio della put, ma quando arriva un nuovo tick sullo strumento da firmare. Grazie a questo evento è già possibile catturare l'arrivo di nuovi tick da altri simboli su FORTS (dove c'è il mercato).

Se siamo su FOREX e non ci sono tick, OnBookEvent viene chiamato all'arrivo di un nuovo tick. Se siamo alla borsa - OnBookEvent viene chiamato quando il tasso di mercato cambia. Questo è tutto.

 

Sarebbe molto più comodo se per ogni simbolo, il terminale tenesse un contatore di tick (dal momento della connessione). E ogni Expert Advisor, quando chiamato, otterrebbe il numero del tick su cui è stato chiamato.

Questo permetterebbe di stimare le zecche mancate.

In questo momento, ogni EA deve essere attivato su un grafico. BookEvent è la prima rondine, dicendo che non sono necessari grafici per eseguire gli EA.

 
Anton Zverev:

Voglio che l'EA sia chiamato su ogni tick del secondo simbolo.

Sto usando IndicatorRelease sul secondo simbolo. Crea l'evento ChartEvent su ogni tick del suo simbolo. L'Expert Advisor, rispettivamente, cattura questo evento.

Questa povera soluzione è stata suggerita molti anni fa, secondo i risultati della ricerca. Non ho trovato un'altra soluzione funzionante. Se il test deve essere condotto su 10 simboli, allora vengono lanciati 9 indicatori.

Supponiamo di avere un Expert Advisor che aumenta il contatore ad ogni tick.

Lo sto eseguendo su un simbolo nel tester, dove è 1 milione di tick. Il contatore mostra 1 milione.

Ho anche raggiunto un altro simbolo e mostra 1 milione.

L'ho fatto passare attraverso due simboli contemporaneamente. Non riesce a mostrare 2 milioni.

È chiaro ora?

L'Expert Advisor sarà chiamato su ogni tick del secondo simbolo solo se questo EA è collegato al grafico del secondo simbolo.

Non c'è bisogno di preoccuparsi di alcun grafico-evento. Tutto è già stato fatto prima di te, devi solo guardarti intorno.

1. Per esempio, si fa un timer di 1 secondo.

2. Si organizza un ciclo da zero a 100 in OnTimer con Sleep(10) e si controlla che non venga eseguito più di 1 secondo.

3. Analizza tutti gli strumenti che vuoi usando le query di SymbolInfoTick.

Questa costruzione funzionerà anche nel tester.

PS è meglio fare il timer per un periodo più lungo, per esempio per 3600 secondi.

E il ciclo deve essere organizzato non per un secondo, ma per meno di un'ora. Con controllo obbligatorio IsStopped()

Il sonno, a proposito, è obbligatorio. Altrimenti si blocca il tester. Bene, le risorse del sistema saranno consumate durante il lavoro abituale dell'Expert Advisor.