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
Tutto,
La questione qui è ottenere la marca temporale del tick, e non il tempo in cui il tick arriva al terminale usando GetTickCount() (cioè ogni volta che viene chiamata la funzione start()), come suggerito.
MarketInfo(Symbol(), MODE_TIME) restituisce la marca temporale del tick come inviata dal server del broker nel feed di dati.
Saluti
VS
Tutto,
La questione qui è ottenere la marca temporale del tick, e non il tempo in cui il tick arriva al terminale usando GetTickCount() (cioè ogni volta che viene chiamata la funzione start()), come suggerito.
MarketInfo(Symbol(), MODE_TIME) restituisce la marca temporale del tick come inviata dal server del broker nel feed di dati.
1) GetTickCount(), dovrebbe funzionare Live. Inutile sui dati storici.
2) Anche mt5_data non è salvato in millisecondi. Tuttavia, no_problem Live.
3) Non capisco dove vuoi arrivare. Se è lo stesso tempo in millisecondi allora avere i millisecondi non aiuterebbe. Se si tratta di tempi diversi in millisecondi che GetTickCount() potrebbe aiutare. Aiutare nel senso che il vostro codice elabora il tick corrente in meno di un millisecondo. Quanto sia importante tutto dipende da ciò che state cercando di realizzare... credo.
Grazie a tutti per le risposte. C'era un indicatore che è stato postato nel codebase, Rogue Tick Detector. Ma non è ancora approvato. Potete trovarlo qui per ora.
L'idea di base è che ci sono momenti in cui l'attuale tick tick0 arriverà con un timestamp successivo al precedente tick tick-1. Ma il prezzo non sarebbe più azionabile, ma l'EA o il trader umano non lo saprebbe fino a dopo il fatto. Questo causava l'attivazione di eventi basati sul prezzo in modo errato. Rogue tick detector era in grado di segnalare questi falsi tick e impedire all'EA di agire su di essi (aspettare il prossimo tick "buono")
Il metodo attuale per catturare i timestamp dei tick, MarketInfo(Symbol(), MODE_TIME), non restituisce timestamp al millisecondo. Così sono venuto qui a chiedere se c'erano alternative che stavamo trascurando.
Gli EAs che includono le funzioni di rilevamento dei tick disonesti girano tutti su VPS a New York con dischi SSD, windows 2008, e sono di solito <2ms dal server del broker. Nessun HFT o hyperscalping (i trade hanno un tempo medio di attesa di circa 1 ora)
Mi riporta a una delle mie domande originali: Come fa la piattaforma mt4 (e mt5) [stessa] a distinguere correttamente i tick che arrivano nello 'stesso momento'?
edit, grazie ankasoftware per il chiarimento.
Mi riporta a una delle mie domande originali: Quindi, come si suppone che la piattaforma mt4 (e mt5)[stessa] distingua correttamente i tick che arrivano nello 'stesso momento'?
Non puoi... il tuo Broker ti manda effettivamente tick multipli che avvengono nello stesso momento o semplicemente incrementano il conteggio di 2 e mandano il secondo tick? Come potresti sapere se l'hanno fatto? Sei consapevole che c'è un'enorme differenza nel conteggio dei tick tra i Broker?
Sì, sono consapevole che broker diversi hanno feed diversi e il conteggio dei tick può essere molto diverso. Ma si dà il caso che i rogue tick siano stati inviati in certi momenti, soprattutto quando i trade erano chiusi in profitto. Stava influenzando l'attivazione di closeall e ordini, quindi abbiamo trovato un modo per rilevarli e ignorarli al meglio. A un certo punto ho anche sospettato una manipolazione intenzionale del feed da parte di alcuni broker.
Ma forse dovremmo avere un rapporto di conteggio delle zecche, dove contiamo le zecche totali
Potrebbe benissimo non influenzare molte persone, ma ho pensato che il danno potenziale fosse sufficiente per giustificare ulteriori indagini.
Cosa avete in mente? In che modo sarebbe diverso dal Volume di mt4? Un rapporto di quali due numeri [ conteggio e ??? ].
Questo argomento diventa molto confuso molto velocemente. Io stesso incluso non so tutto sui tick, né come metaQuotes li elabora, né perché sarà molto critico per qualcuno. Permettetemi di riassumere alcune delle mie osservazioni.
1) metaQuotes dice: vuoi milli_secondi time_stamp, [ iniziano subito a pensare ai tick_data ], chi terrà questi tick_data il broker? Vuoi dire che dirti che ci sono 200 tick in quel minuto non ti basta? Vuoi davvero che salviamo 200 ingressi di dati perché OHLC+V non è abbastanza buono?
2) trader numero1 dice: Non ho bisogno che qualcuno salvi le informazioni, voglio solo la marca temporale in milli_secondi per determinare i vecchi dati.
3) trader numero2 dice: Non ho bisogno che tu mi salvi le informazioni, dammi solo la possibilità di importarle e otterrò i miei dati.
4) il trader numero3 dice: Non vedo perché sia così importante salvare e fornire dati in tick. Andiamo, i computer hanno più potenza e memoria al giorno d'oggi, sicuramente il mio broker può fornire i dati da qualche parte.
5) il broker dice: amico ho già difficoltà a darti i dati m1 per più di 3 mesi, cosa ti fa pensare che io sia capace o disposto a fornirti così tanti dati quando ti connetti o per i test.
6) trader number4: non ne abbiamo bisogno per i test e solo una piccola parte per i dati sarebbe sufficiente dal vivo, non mi lamento di m1 insufficiente ora quindi qual è il problema.
7) metaQuotes: ancora no-go, questo significa che dovremo facilitare le funzioni che restituiscono milli_secondi e indicatori e simili che distinguono i tick ... stai cercando di mandare in crash il terminale o qualcosa del genere?
8) trader numero5: vuoi dire che Volume non è market_depth ma un conteggio del numero di tick in un determinato time_frame :) . Vuoi dire che posso perdere tick? Vuoi dire che i tick possono perdersi o ritardare nel cyber_spazio? Vuoi dire che il tick_count differisce da un broker all'altro? Vuoi dire che i dati che il broker memorizza non sarebbero stati gli stessi di quelli che avrei ricevuto? Che cos'è tutto questo trambusto per i tick allora?
9) xxxxxxxxxxxx dice: il tick è top secret, quello che viene fornito è certamente abbastanza buono, ho aiutato a progettare il generatore di tick e ho molto poco interesse a fornire quel tipo di risoluzione. non accadrà.... punto.
10) trader numero6: ci sono limitazioni tecnologiche, a ciò che può essere fornito, come funziona il conteggio dei tick, cosa può essere ricevuto, ecc..ecc. Questo non è un problema di MetaTrader, piuttosto tutte le piattaforme retail hanno questo problema. Guarda al software istituzionale e sii pronto a sborsare un sacco di soldi.
Trader#3 a Trader#10: non sono d'accordo.
Ubzen dice: Non so più cosa dire.
Ps> quasi dimenticavo trader#7: bene, salverò i miei tick che arrivano al mio terminale e programmerò i miei indicatori e simili per elaborare questi dati... Questo è il modo in cui ho interpretato la domanda e quindi il motivo per cui ho consigliato il GetTickCount().
Ps> quasi dimenticavo trader#7: bene, salverò i miei tick che arrivano al mio terminale e programmerò i miei indicatori e simili per elaborare questi dati... Questo è il modo in cui ho interpretato la domanda e quindi il motivo per cui ho consigliato il GetTickCount().
Spero di rimanere in tema qui :). Detto questo, immaginate un broker che invia timeStamp millisecondi ad ogni tick. Ma, poi procede a non salvare queste informazioni sul suo_lato. Data tutta la sfiducia nei confronti dei broker in generale, questo broker aprirebbe un assalto di domande. Ma questa volta la gente ha la prova in millisecondi, ma il broker non ha nessun record con cui controbattere. Quindi, in un certo senso, chiedere tick_data | millisecondi o qualsiasi altra cosa che porta agli stessi argomenti è fondamentalmente chiedere al broker di salvare tick_data e che la piattaforma lo faciliti.
Su una seconda nota, considerate i back-test inversi che la maggior parte della gente fa. Dove si esegue una strategia_live per circa una settimana e poi si procede ad eseguire un back_test su quella settimana per verificare se si ottengono gli stessi risultati. Questa persona ha time_stamp millisecondi dal vivo e ritardi e pacchetti mancanti dal vivo. Naturalmente, come il poster originale, si ignorano i dati mancanti e/o si scartano i tick ritardati. Tuttavia, quando si esegue il back-test, ci sono tutti i dati del broker con timestamp corretti. Questo ovviamente genererà risultati diversi da quelli che hai appena ricevuto dal vivo.
Quindi dimmi, sei stato ingannato dal vivo o sei stato ingannato durante il Back_Test?
Sono comunque d'accordo con la tua affermazione di cui sopra. Imo, tutto questo crea una serie di paradossi che mi porta a stare lontano dai processi inter_minute all_together. La piattaforma ha dei limiti, semplicemente accetto e vado avanti.
...
Sono comunque d'accordo con la tua affermazione di cui sopra. Imo, tutto questo crea un insieme di paradossi che mi porta a stare lontano dai processi inter_minuti all_together. La piattaforma ha dei limiti, io accetto e vado avanti.
Timer, risoluzione del timer e sviluppo di codice efficiente
Risoluzione del timer di Windows: Megawatt sprecatiLink interessanti grazie, che mi hanno portato a Microsecond Resolution Time Services per Windows. Ho condotto alcuni test basati sulle informazioni di quelle pagine.
I miei test su un PC Win 7 e un VPS Windows 2012 indicano che GetTickCount() ha sempre una risoluzione di 15,6 msec (64 interrupt al secondo) indipendentemente dalle impostazioni del timer di sistema, mentre la risoluzione quando si ottiene il tempo in millisecondi chiamando le funzioni kernel32.dll GetSystemTime() [o GetLocalTime()] o GetSystemTimeAsFileTime() è influenzata dalle impostazioni del timer di sistema, e può dare fino a 0,5 msec di risoluzione su entrambe le macchine che ho provato.
Risoluzione di GetTickCount()
Ecco il codice di uno script per testare la risoluzione di GetTickCount():
Questo dà sempre 15 o 16 (cioè 15.6) su entrambe le macchine testate, indipendentemente dalle modifiche alla risoluzione del timer di sistema menzionate sotto per gli altri test.
Risoluzione GetSystemTime()
Ora le cose iniziano a farsi interessanti. Ecco il codice di uno script per testare la risoluzione di GetSystemTime():
Questo dà una risoluzione di 15/16 msec su un PC appena avviato senza altri software in esecuzione, ma 1 msec se Chrome è in esecuzione sul PC! Come spiega il secondo link di angevoyageur, Chrome imposta il timer di sistema alla risoluzione di 1 msec, così come alcuni altri software.
Ho trovato due piccole utility per impostare la risoluzione del timer di sistema, in modo che 1 msec (o anche 0.5 msec) possa essere ottenuto in modo controllato su una macchina avviata in modo pulito:
Strumento Windows System Timer: http://vvvv.org/contribution/windows-system-timer-tool
Timer-Resolution: http://www.lucashale.com/timer-resolution/
Preferisco il primo dei due, Windows System Timer Tool. Con questo potrei ottenere in modo affidabile la risoluzione di 1 msec tramite GetSystemTime(). Anche GetLocalTime() potrebbe essere usato in modo simile.
Btw il codice dello script qui sopra è un esempio di quanto il nuovo codice MT4 possa essere migliore grazie alle strutture. Nel vecchio MT4 accedere a GetSystemTime() richiedeva l'uso di un array di interi più un sacco di manipolazione di bit disordinata.
Risoluzione GetSystemTimeAsFileTime()
Infine, ho notato che Microsecond Resolution Time Services per Windows ha menzionato che GetSystemTimeAsFileTime() è una funzione più veloce per accedere al tempo di sistema, oltre a richiedere una struct più piccola e semplice. Quest'ultimo è certamente vero per il nuovo MT4, dato che la "struct" può essere ridotta a solo un ulong.
Ecco il codice di uno script per testare la risoluzione di GetSystemTimeAsFileTiime():
Se Windows System Timer Tool viene utilizzato per impostare una risoluzione del timer di sistema di 0.5secs quel piccolo script riporta una risoluzione di 5000 (o a volte 5001) 100 nsecs unità = 0.5 msecs.
L'uso di GetSystemTimeAsFileTiime() è infatti più semplice e può mostrare una risoluzione più fine.
Ecco alcune foto di questo in uso.
Dopo un avvio pulito:
Con Timer Tool usato per impostare la risoluzione del timer di sistema a 1 ms:
E con Timer Tool usato per impostare la risoluzione del timer di sistema a 0.5 ms:
ConclusioneLa migliore funzione da usare per ottenere le temporizzazioni in millisecondi in MT4 è GetSystemTimeAsFileTiime() chiamata come mostrato nello script di prova sopra, con una utility come Windows System Timer Tool usata per impostare la risoluzione del timer di sistema desiderata.