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
Non ci saranno più tick con l'ultimo tempo noto.
L'OnTimer in millisecondi garantisce che tutti i tick siano trascorsi PRIMA di questo evento del timer. In altre parole, i tick sono aggiornati per tutti i simboli.
Se si intende che l’indicatore spia possa, per qualche motivo tecnico, ritardare il “vecchio” tick e inviarlo dopo uno più recente relativo a un altro strumento, allora probabilmente ciò potrebbe accadere. Altrimenti non vedo problemi direttamente nel codice.
Non credo che il timer garantisca in misura maggiore che tutti i tick siano trascorsi PRIMA del nuovo “evento” (conteggio di un’unità di tempo). Il timer funziona in base all’ora locale, mentre i timestamp nei tick contengono l’ora del server. Pertanto, è meglio non fare affidamento sul timer per la sincronizzazione degli strumenti.
Va bene, per i tick va bene così, vista la complessità della sincronizzazione, anche se potremmo impostare un intervallo di tempo in millisecondi e allineare i tick nel tempo.
Ma lo stesso vale anche per i prezzi di apertura, sebbene l’orario di apertura sia lo stesso per tutti i simboli.
E a causa di questo comportamento, è impossibile testare correttamente una serie di sistemi.
Esempio del problema.
Nello screenshot sono riportati tutti i dati necessari per riprodurre il fenomeno su MetaQuotes-Demo. Si vede chiaramente che tramite OnTick i tick non sono sincronizzati, mentre tramite OnTimer (estremamente lento) lo sono.
tramite OnTick i tick non sono sincronizzati, mentre tramite OnTimer (che rallenta terribilmente il sistema) sono sincronizzati.
Sembra che l'unico modo per velocizzare i calcoli in modalità sincronizzata sia la modalità matematica simile a EAToMath.
Oppure salvare in anticipo in un file questi dati relativi a un singolo passaggio.
E nel proprio sistema automatico utilizzare i dati di questo file per la sincronizzazione in OnTick. Funzionerà in modo veloce e corretto.
Esemplificazione del problema.
Nello screenshot sono riportati tutti i dati necessari per riprodurre il problema su MetaQuotes-Demo. Si vede chiaramente che tramite OnTick i tick non sono sincronizzati, mentre tramite OnTimer (che rallenta terribilmente il sistema) lo sono.
Beh, avete utilizzato il vostro codice con una condizione di ingresso nell’operazione basata su ==. Ho scritto sopra che la condizione deve essere rigorosamente >, senza l’uguaglianza. Per effettuare operazioni sincronizzate sugli ultimi prezzi noti fino al 01/10/2025 alle 01:00:00.081 su tutti gli strumenti, devi iniziare a monitorare i tick prima di tale orario, ovvero utilizzare come costante di dimostrazione, ad esempio, >1759280400080. Per ogni algoritmo è necessario modificare la logica: non basterà semplicemente sostituire un tipo di gestore con un altro.
PS. Per sincronizzazione intendo il trading in base agli ultimi prezzi noti. Per la sincronizzazione basata sulla corrispondenza dei millisecondi sono ovviamente necessarie ulteriori verifiche, ma la probabilità che si verifichino tali situazioni (coincidenza dei tick in millisecondi di strumenti diversi) è bassa, il che comporta la perdita di potenziali segnali. Non sono sicuro che tale sincronizzazione abbia un interesse pratico.
Per effettuare operazioni sincronizzate agli ultimi prezzi disponibili fino alle 01:00:00 del 01/10/2025.081 su tutti gli strumenti, è necessario iniziare a monitorare i tick prima di tale orario, ovvero utilizzare come costante di riferimento, ad esempio, >1759280400080.
Il modo più semplice per sincronizzare è creare un insieme composto dai tempi di tick dei simboli utilizzati.
È difficile effettuare la sincronizzazione al volo, in un unico passaggio.
La difficoltà sta nell'incertezza del ritardo. Non si sa quale simbolo sarà quello di riferimento.
Sono pronto a dare un'occhiata alla tua versione nel codice.
Per un test case completo, mi servirebbe capire il problema pratico: si fa trading solo sui tick il cui tempo coincide con una precisione al millisecondo?
Per un esempio artificiale con una sola operazione in un momento noto in anticipo, con tick sincronizzati su tutti gli strumenti, si potrebbe ideare un algoritmo ottimale artificiale, ma a che scopo?
Ma i prezzi di apertura sono gli stessi, anche se l'orario di apertura è identico per tutti i titoli.
Bisognerebbe precisare meglio il problema. Per quanto riguarda i prezzi di apertura, se l’algoritmo richiede la presenza di barre per tutti i simboli, si attende che iTime(,,0) coincida per tutti i simboli. Per le barre, in questo approccio, di solito non ci sono problemi logici, perché le barre (anche M1) raramente mancano, mentre per i secondi e gli intervalli di tempo più piccoli le lacune nella sincronizzazione possono essere frequenti. Cosa fare in questi casi?
Ritengo che, nella pratica, come criterio di sincronizzazione si debba considerare la presenza di qualsiasi prezzo non più vecchio di un determinato timeout, piuttosto che la rigorosa corrispondenza dei timestamp dei tick.
Bisognerebbe precisare meglio il problema. Per quanto riguarda i prezzi di apertura, se l’algoritmo richiede la presenza di barre per tutti i simboli, si attende che iTime(,,0) coincida per tutti i simboli. Per le barre, in questo approccio, di solito non ci sono problemi logici, poiché le barre (anche quelle M1) raramente mancano
Ci si riferisce alla modalità tester basata sui prezzi di apertura.
per i secondi e gli intervalli di tempo ancora più brevi, i problemi di sincronizzazione possono essere frequenti. Cosa fare in questi casi?
Utilizzare l’ultimo valore noto.