Bug e suggerimenti per migliorare CopyTicks() e CopyTicksRange() dopo la build 1485. - pagina 3

 
MetaQuotes Software Corp.:
Grazie per il messaggio, il bug è stato risolto - ora funziona anche negli indicatori. Un aggiornamento sarà rilasciato presto.
Per favore, ditemi se la velocità di ottenere i tick tramite CopyTicksRange() sarà aumentata?
 
Build 1491 - documentazione della lingua in ME non aggiornata. Le informazioni su CopyTicksRange() sono disponibili solo attraverso il sito web!
 
Nel tester, i tick del "pacchetto" (che hanno lo stesso tempo di msec) al momento (build 1495) sono dati uno alla volta. E il tester calcola ciascuno separatamente. In realtà non può essere così.
 

Penso di essere venuto nel posto giusto. Cari membri del forum, sto lottando con questo problema da solo da molto tempo, ma non riesco a risolverlo. Spero che tu possa aiutare.

La situazione è la seguente: broker Finam (Whotrades), conto MMA. Lavoro con 26 titoli russi, cioè ho 26 finestre aperte e ho una copia del mio Expert Advisor appesa in ogni finestra. Usano la libreria C++ comune, che ha una finestra comune per gestire e visualizzare le informazioni di debug.

Alcuni parametri della strategia dipendono direttamente dal nastro di tick, quindi è molto importante che tutti i tick passino attraverso l'algoritmo. Naturalmente, è stata una sorpresa imparare che OnTick() non funziona su ogni tick, e non sempre, anche sul tick. Di conseguenza, sono arrivato alla necessità di usare le funzioni CopyTicks e CopyTicksRange per timer. Grazie a grandi sforzi (e non è scritto da nessuna parte) ho scoperto che datetime*1000 è esattamente il numero di millisecondi dal 1970, ma non è questo il punto.
Il risultato finale di ciò che abbiamo ora è un blocco di codice che, onTimer, dalle 10AM inizia a richiedere gli ultimi dati di tick.

Il problema è che, per qualche ragione importante, il primo giorno dopo il riavvio di metatrader, per alcuni titoli, i dati tick iniziano ad arrivare solo alle 11 del mattino (più o meno), il giorno dopo - tutto è normale, inizia alle 10 del mattino. La lista di questi titoli non è fissata in alcun modo, in alcuni primi giorni i tick potrebbero non arrivare per alcuni titoli, in alcuni giorni - per altri.
Pensavo che il problema fosse il caching dei tick. Ho pensato che fosse un problema di temporizzazione errata, ma questo si è rivelato non essere il caso. Inoltre, sembra che se CopyTicks(Range) non potesse restituire i dati, potrebbe restituire un errore (-1) e tutto avrebbe senso. Ma restituisce 0, l'array è anche zero e GetLastError restituisce ERR_SUCCESS. Cioè è come se queste spunte non esistessero, il che è strano perché sono presenti nel nastro della finestra.

Sono in perdita. Spero che tu possa dirmi cosa fare, o almeno la direzione in cui muovermi.

Se hai bisogno di fornire il codice, io, con il prossimo commento, lo ripulisco dai comandi "extra" e lo pubblico.

Grazie!

 
antru:

Sì, un codice è auspicabile. È un conto reale o demo? Qual è la costruzione del terminale?

Onestamente, non so se qualcuno qui lavora con il tuo broker. Se nessuno qui reagisce al tuo post - scrivi a ServiceDesk, puoi collegarti direttamente al tuo post. Dovranno anche fornire un codice.

 
antru:
È meglio che tu vada direttamente al service desk con il codice per riprodurlo.
 
Alexey Kozitsyn:

Sì, un codice è auspicabile. È un conto reale o demo? Qual è la costruzione del terminale?

Onestamente, non so se qualcuno qui lavora con il tuo broker. Se nessuno qui reagisce al tuo post - scrivi a ServiceDesk, puoi collegarti direttamente al tuo post. Dovranno anche fornire un codice.

L'account è reale, ultima build, 1525. Ecco cosa fare. Creare il codice nudo di tick-taking senza l'algoritmo della strategia. Esegui. Se non funziona, dovreste chiamare il servizio di assistenza. Se funziona, forse si dovrebbero cercare gli errori nel proprio codice.

Grazie per aver menzionato il service desk, non sapevo fosse possibile. Ho guardato sul sito web di metaquotes, tutti i contatti sono numeri di telefono a Cipro e in Cina, non una singola e-mail.

 
Andrey Khatimlianskii:
Meglio andare direttamente al service-desk con il codice per riprodurlo.
Grazie!
 
antru:

L'account è reale, la build è l'ultima, 1525. Credo che questo sia ciò che dovremmo fare. Fate un codice di tick-taking nudo senza l'algoritmo della strategia. Esegui. Se non funziona, allora portatelo all'ufficio assistenza. Se funziona, forse si dovrebbero cercare gli errori nel proprio codice.

Grazie per aver menzionato il service desk, non sapevo fosse possibile. Ho guardato sul sito web di metaquotes, tutti i contatti sono numeri di telefono a Cipro e in Cina, non una singola e-mail.

Esattamente ciò di cui avete bisogno, la vostra strategia, in questo caso, non farà altro che ostacolare l'identificazione del problema. Quello che serve è un codice di come si richiedono le zecche.
 
antru:

Penso di essere venuto nel posto giusto. Cari membri del forum, ho lottato a lungo con questo problema da solo, ma non riesco a risolverlo. Spero che tu possa aiutare.

La situazione è la seguente: broker Finam (Whotrades), conto MMA. Lavoro con 26 titoli russi, cioè ho 26 finestre aperte e ho una copia del mio Expert Advisor appesa in ogni finestra. Usano la libreria C++ comune, che ha una finestra comune per gestire e visualizzare le informazioni di debug.

Alcuni parametri della strategia dipendono direttamente dal nastro di tick, quindi è molto importante che tutti i tick passino attraverso l'algoritmo. Naturalmente, è stata una sorpresa apprendere che OnTick() non funziona su ogni tick, e non sempre, anche su un tick. Di conseguenza, sono arrivato alla necessità di usare le funzioni CopyTicks e CopyTicksRange per timer. Grazie a grandi sforzi (e non è scritto da nessuna parte) ho scoperto che datetime*1000 è esattamente il numero di millisecondi dal 1970, ma non è questo il punto.
Il risultato finale di ciò che abbiamo ora è un blocco di codice che, onTimer, dalle 10AM inizia a richiedere gli ultimi dati di tick.

Il problema è che, per qualche ragione importante, il primo giorno dopo il riavvio di metatrader, per alcuni titoli, i dati tick iniziano ad arrivare solo alle 11 del mattino (più o meno), il giorno dopo - tutto è normale, inizia alle 10 del mattino. La lista di questi titoli non è fissata in alcun modo, in alcuni primi giorni i tick potrebbero non arrivare per alcuni titoli, in alcuni giorni - per altri.
Pensavo che il problema fosse il caching dei tick. Ho pensato che fosse un problema di temporizzazione errata, ma questo si è rivelato non essere il caso. Inoltre, sembra che se CopyTicks(Range) non potesse restituire i dati, potrebbe restituire un errore (-1) e tutto avrebbe senso. Ma restituisce 0, l'array è anche zero e GetLastError restituisce ERR_SUCCESS. Cioè è come se queste spunte non esistessero, il che è strano perché sono presenti nel nastro della finestra.

Sono in perdita. Spero che tu possa dirmi cosa fare, o almeno la direzione in cui muovermi.

Se hai bisogno di fornire il codice, io, con il prossimo commento, lo ripulisco dai comandi "extra" e lo pubblico.

Grazie!

Provate a usare tutti i modi possibili per ottenere tick e OnTisk e CopyTicks, e poi confrontate i risultati e usate quello più adeguato.