Ho bisogno di un buon file di storia per EURUSd - pagina 4

 

schnappi, naturalmente la metodologia per identificare (ed eventualmente rimediare) ai cattivi tick e ai buchi nei dati è essa stessa un processo in evoluzione. Ho iniziato con l'approccio standard di filtri definiti esternamente (se il delta del prezzo > X allora abbiamo un bad tick, ecc) e il problema è che si costringe il set di dati a conformarsi alle proprie percezioni e aspettative su come dovrebbero essere i dati di prezzo, che possono o non possono essere rappresentativi delle caratteristiche statistiche intrinseche delle dinamiche di evoluzione del prezzo dello strumento finanziario.

Alla fine il mio metodo ha iterato fino al punto in cui richiedo semplicemente che i dati siano auto-consistenti con le caratteristiche intrinseche dello strumento finanziario stesso (coppia di valute in questa discussione, ma si applica su tutta la linea). Ciò significa in pratica che prendo un tratto di "dati di mercato noti e buoni" e ne caratterizzo in modo robusto gli attributi: gap temporali, gap di prezzo, ecc. Questo genera un profilo dell'evoluzione naturale/caratteristica dei prezzi per la coppia di valute (che sarà specifico del broker, poiché ogni broker ha i propri sottili algoritmi di "pompaggio e pulsazione" per mantenere "vivo" il feed dei prezzi).

Armato di questi dati di caratterizzazione, faccio poi iterare lo script attraverso i periodi di tempo più vecchi e discutibili, valutando ogni barra in base al merito se è statisticamente coerente con la natura intrinseca della coppia di valute. Per esempio, diciamo che osserviamo che il gap di prezzo che si verifica tra candele M1 successive per USDJPY è generalmente <3pips. Vale a dire che l'offerta di chiusura della candela N+1 è generalmente da -3 a +3 pip di distanza dall'offerta di apertura della candela N.

Questa è una metrica facile da generare per le statistiche, basta analizzare i dati close(i+1)-open(i) e generare un istogramma: (nota: escludo specificamente/intenzionalmente i gap di prezzo che provengono da coppie di candele che hanno esse stesse un gap temporale tra loro per questa fase della caratterizzazione)


Ora, se valutate i dati storici per un anno precedente, diciamo il 2003, e il vostro script osserva un gap di prezzo tra candele successive (nessun gap temporale) che è ben al di fuori dell'intervallo statisticamente coerente (per questo esempio diciamo che viene rilevato un gap di 50pip), allora il vostro script ha motivo di considerare i dati di prezzo in valutazione in quel momento come sospetti.

Quello che fai con le tue candele sospette (la fase di rimedio) è tutta un'altra questione, ma ecco un esempio:


Ci sono pericoli e trabocchetti da evitare nel rimediare ai dati, si può inconsapevolmente causare più danni che benefici se non si sta attenti a come si definisce la lista di sfratto delle candele cattive e le loro sostituzioni (considero anche la semplice cancellazione della candela dal record hst come una politica di sostituzione, sostituendo un cattivo gap di prezzo con un gap temporale artificiale in quel caso).

 
Phillip, questa è roba interessante, ma mi sembra troppo rischiosa e dispendiosa in termini di tempo. Preferisco usare fonti di cui mi posso fidare piuttosto che cercare di 'aggiustare' fonti che non posso...

Per quanto riguarda quelle candele 'sospette'. Molti broker hanno strani picchi di prezzo per varie ragioni. Nel tuo esempio sopra, come fai a sapere che si tratta di un ovvio "bad tick" di dati? Picchi del genere accadono...
 
gordon wrote >>
Phillip, questa è roba interessante, ma mi sembra troppo rischiosa e dispendiosa in termini di tempo. Preferisco usare fonti di cui mi posso fidare piuttosto che cercare di 'aggiustare' fonti che non posso...

Per quanto riguarda quelle candele 'sospette'. Molti broker hanno strani picchi di prezzo per varie ragioni. Nel tuo esempio sopra, come fai a sapere che si tratta di un ovvio "bad tick" di dati? Picchi del genere accadono...


Re: come fai a sapere che si tratta di un ovvio "bad tick" di dati... in questo caso con questo broker un'analisi dettagliata di oltre 3 anni di dati ha mostrato che un tale picco non si è mai verificato, nemmeno una volta, in oltre 1 milione di candele di dati. Rasoio di Occam... cosa è più probabile che sia successo alle 04:29 del 2 agosto 1999: il mercato ha avuto un picco di 60pips, la candela si è chiusa al massimo della candela e poi il tick successivo che segna il prezzo di apertura della candela successiva il mercato si è mosso di nuovo verso il basso di 50pips e l'attività di mercato successiva non ha avuto più volatilità delle candele precedenti al picco? O che questa particolare candela contiene un tick spuriamente cattivo che può essere legittimamente (con fiducia) eliminato?

Noterete dal primo grafico nel mio post sopra, per più di 3 anni di dati la frequenza di un gap close-to-open superiore a soli 4pips per questa coppia è pari a zero. In questo caso mi sono sentito a mio agio nel bollare l'outlier di 50pips come un outlier ovvio ed eliminarlo dalla mia copia del record storico di trading.

Per quanto riguarda le fonti affidabili rispetto ai fixing... dato che non ci si può fidare di nessun record storico per il prezzo di domanda quando si usa la piattaforma MT4, la nozione stessa di avere dati storici affidabili rispetto a quelli inaffidabili è davvero una questione di comodità personale, secondo me. Dipende dalla tua specifica strategia di trading, naturalmente, nel mio caso le specifiche esatte del record storico sono irrilevanti per il mio EA. Se una strategia di trading richiede precisione e accuratezza nei record storici per essere redditizia, allora probabilmente non sarà redditizia per posizioni corte in qualsiasi coppia di valute, poiché tutti i prezzi di domanda sono fabbricati nel backtesting assumendo uno spread fisso (che non è storicamente accurato o rappresentativo delle reali condizioni di mercato).

Quindi, se hai intenzione di creare un EA che sia abbastanza robusto da affrontare la realtà dei prezzi di domanda che sono inventati nel backtesting, allora probabilmente hai creato un EA che è in grado di trattare con dati di prezzo spuri/erronei nei record storici in ogni caso. Potrei sbagliarmi, non sarebbe la prima volta, ma il mio approccio ai dati storici è di usarli con lo scopo di rendere il mio EA agnostico ad essi.

 
1005phillip:


Re: come fai a sapere che si tratta di un ovvio "bad tick" di dati... in questo caso con questo broker un'analisi dettagliata di oltre 3 anni di dati ha mostrato che un tale picco non si è mai verificato, nemmeno una volta, in oltre 1 milione di candele di dati. Rasoio di Occam... cosa è più probabile che sia successo alle 04:29 del 2 agosto 1999: il mercato ha avuto un picco di 60pips, la candela si è chiusa al massimo della candela e poi il tick successivo che segna il prezzo di apertura della candela successiva il mercato si è mosso di nuovo verso il basso di 50pips e l'attività di mercato successiva non ha avuto più volatilità delle candele precedenti al picco? O che questa particolare candela contiene un tick spuriamente cattivo che può essere legittimamente (con fiducia) eliminato?

Ok, ma questo è un caso estremo. E se fosse ~30 pips e tu avessi 3 casi simili in tutti quegli anni di dati. Come fai a saperlo allora? Il mio punto è che ci saranno casi in cui non è ovvio e devi indovinare.


Re: fonti attendibili rispetto al fixing... dato che non ci si può fidare di nessun record storico per il prezzo di domanda quando si usa la piattaforma MT4, la nozione stessa di avere dati storici attendibili rispetto a quelli inaffidabili è davvero una questione di comodità personale a mio parere (...)

Ma non è questo il punto. Sto parlando di fonti affidabili che puoi usare così com'è e non passare attraverso tutti questi problemi. La mancanza del prezzo di Ask (spread fisso) in MT4 Tester non ha nulla a che fare con questo dato che riguarda sia le fonti cattive, sia quelle buone, sia quelle fisse... È un problema completamente separato.

 

Phillip: A mio parere questa è la strada da seguire. Penso che i bad tick possano essere identificati in modo abbastanza sicuro analizzando i salti di prezzo in combinazione con la volatilità seguente. Se il mercato mostra un picco e nessuna volatilità anomala proprio sulla prossima barra M1, allora si tratta di un cattivo tick con una probabilità molto alta. Lo screenshot che mostri sopra è un esempio del genere.

Hai già incontrato la questione più importante: definire i bad tick è una cosa - correggerli è un'altra. Secondo me ci sono 2 modi per farlo.

1°: identificare i cattivi tick e correggerli tirando a indovinare. Se è l'open che improvvisamente scatta a +50 pips allora rimettilo a +3 pips e così via. --> potrebbe non essere preciso ma facile da implementare
2°: identificare i cattivi tick e confrontare i prezzi con un altro flusso di dati. Questo sarebbe un modo più preciso - ma molto più difficile da implementare.

 

Gordon, evito di tirare a indovinare affidandomi alle statistiche stesse per far sì che i record storici siano autoconsistenti. Mi sembra di ricordare che in un altro post hai detto di essere un trader guidato dalle statistiche fondamentali, quindi capirai a cosa mi riferisco quando dico che la premessa è minimizzare la divergenza Kullback-Leibler tra il set di dati sospetto e il set di dati buono conosciuto (quello che tu etichetteresti come "fonte affidabile").

Solo nel caso del forex useremmo la distribuzione normale generalizzata invece delle normali distribuzioni gaussiane poiché la curtosi dei mercati finanziari è tipicamente più grande di zero. Dubito di dirvi qualcosa di nuovo, ma sto solo espandendo la premessa della mia metodologia per identificare ed eliminare i dati sospetti con fiducia (il tipo statistico, non il tipo machista ;)) così sapete che il mio criterio di selezione non è qualcosa di così semplicistico (e difettoso) come impostare filtri passa banda alti/bassi e far passare i dati.

Naturalmente ci sono ipotesi fatte riguardo alla stazionarietà dei dati di prezzo dello strumento finanziario nel periodo di tempo della "fonte attendibile" quando si tratta di un processo stocastico. Ma se sono disposto a richiedere ai miei codici EA di limitare la loro attività a periodi di stazionarietà equivalente nelle serie temporali future, allora l'autoconsistenza è inerente all'approccio. Poiché la lunghezza dei dati della "fonte attendibile" è finita, essa stabilisce un limite superiore all'intervallo di tempo in cui possiamo aspettarci che i processi ciclostazionari passati catturati nella nostra caratterizzazione siano rappresentati nelle serie temporali future.

Ma c'è un punto di più alto livello da rafforzare qui che penso che entrambi possiamo essere d'accordo che è che indipendentemente dalla "precisione storica" dei dati o dalla lunghezza nel tempo rappresentata dai dati, il valore che deriva dall'uso di dati storici e dal backtesting per "ottimizzare" una strategia di trading dipende interamente dalla persona seduta dietro la tastiera che conosce le domande a cui deve rispondere il backtesting. La quantità non ha la meglio sulla qualità, né la lunghezza dei dati storici né le ore passate a spremere un'ottimizzazione attraverso il backtesting iterativo risponderanno alle domande che devono essere risposte se la domanda non è stata ben definita in primo luogo. Quanto ci hai messo a capire che "quali parametri mi daranno i massimi profitti o il minimo drawdown?" NON era la domanda a cui cercare di dare una risposta con il backtesting :)

Schnappi, dipende da qual è il tuo obiettivo in termini di cosa stai cercando di ottenere. Vuoi un set di dati che rifletta maggiormente le sfumature di prezzo storicamente accurate o sei interessato al numero di serie temporali su cui vengono testati i tuoi trigger di trading e il tuo money management? Non c'è una risposta sbagliata, ognuno si avvicina al trading di mercato in modo diverso, ovviamente. Personalmente non uso i dati storici per testare le serie temporali lineari, so di non essere il solo in questo, ma riconosco liberamente che la maggior parte delle persone non lo fa. Uso i dati storici per estrarre la natura statistica grezza alla base delle caratteristiche di una coppia di valute (decomposizione Lévy-Itō) che poi uso per creare serie temporali statisticamente equivalenti ma non identiche di dati storici per mezzo di routine Monte Carlo. Poi faccio il backtest con queste serie storiche fabbricate.(questo non è materiale di lettura leggero, ma includo il link perché forse non ne siete già a conoscenza e volete leggerlo)

Proprio come le previsioni del tempo, non si prevede il tempo di domani concentrandosi sulla conoscenza degli aspetti meteorologici di oggi e di ieri a gradi sempre più alti di precisione e accuratezza, ma piuttosto si creano modelli che catturano le statistiche inerenti all'evoluzione delle metriche meteorologiche (temperatura, umidità, pressione, ecc.) e poi si alterano intenzionalmente le condizioni iniziali e si lascia correre il monte carlo in avanti nel tempo, si fa questo alcune migliaia di volte e si fa la media dei risultati (nello spirito, i dettagli reali sono più complicati naturalmente) e questo formula la base per la previsione di domani "minime a metà degli anni 30 e massime a metà degli anni 60".

Se ti stai avvicinando all'idea di filtrare i cattivi tick dai dati storici più vecchi perché vuoi semplicemente fare il backtest su 10 anni di dati invece che su 3, allora ti avverto che potresti cadere nell'errore "la quantità guida la qualità" in cui cadono molti backtester a un certo punto della loro carriera. C'ero anch'io una volta, e ci sono rimasto per un po'. Ero convinto che i miei codici perdenti sarebbero potuti diventare vincitori se solo avessi avuto dati storici più lunghi per ottimizzare il backtest. Forse per alcuni è vero e avere un backtest più lungo fa davvero la differenza per i loro profitti di forward-testing, ma per me si è rivelato essere solo oro colato (e un sacco di tempo sprecato).

Se volete record storici più lunghi perché state impiegando funzioni di autocorrelazione e simili, allora probabilmente vi conviene creare le vostre serie di dati di prezzo virtuali/sintetici per affinare le vostre chiusure e i blocchi di fase, perché così potete controllare direttamente la robustezza dei protocolli di chiusura attraverso il modo in cui fabbricate le serie temporali in primo luogo.

Non pretendo di avere le risposte giuste, dico solo che se non iniziamo con le domande giuste in primo luogo, allora non possiamo sperare che le risposte siano di qualche utilità per il nostro obiettivo generale (profitti, presumibilmente).

 
Sì, conosco questi termini, ma soprattutto a livello teorico. Il mio background è in realtà in Ingegneria Hardware e mi occupo di algoritmi statistici solo da un po' più di un anno. I miei progetti attuali sono fatti in collaborazione con un paio di matematici, quindi la maggior parte del lavoro teorico è fatto da loro. Sono sicuro che farebbero un lavoro migliore per discutere di questi argomenti con voi :). Comunque, roba affascinante. Ricordo che l'argomento della storia inventata è venuto fuori qualche mese fa, ma non l'abbiamo mai affrontato. Sto ancora testando la storia 'reale'... (da una fonte 'affidabile').
 
Phillip: Prima di tutto, grazie mille per questi approfondimenti.
Stai dicendo che estrai le caratteristiche statistiche di un mercato e poi crei dati di mercato sintetizzati ed esegui simulazioni monte-carlo su questi dati. Questo è estremamente interessante, ma purtroppo va oltre le mie competenze. Ho iniziato a leggere i due link che hai postato ma devo dire che non sono in grado di capirli. Ho una formazione universitaria, ma non in matematica o qualcosa di simile. Il mio approccio è un po' più, chiamiamolo "pratico" - almeno dal punto di vista di un trader discrezionale. Davvero triste. Probabilmente voi non offrite stage, vero?

Sono consapevole di questa che tu hai chiamato "quantità guiderà la qualità-fallacia" - dato che ho anche già perso molto tempo essendo bloccato a questo punto. Anche se non direi che avrei perso questo tempo, ma questo è un altro punto. No, il motivo per cui sono entrato in questa discussione è che al momento sto migliorando il mio processo di sviluppo stesso. Ho intenzione di acquisire ulteriori dati per aumentare la mia portata. Stiamo anche lavorando a una soluzione per automatizzare i backtest con MT e così via.
 

schnappi ho visto solo ora il tuo post, posso apprezzare il sentimento e sono d'accordo che al primo passaggio tutto sembra piuttosto complesso (per essere sicuri che non è semplice), ma non lasciare mai che tu ti senta come se non fosse qualcosa che non puoi padroneggiare alle tue condizioni un giorno nel prossimo futuro. Non hai bisogno di una laurea per capire e usare questa roba, hai solo bisogno del tempo/dedicazione e della spinta personale per continuare e inevitabilmente padroneggerai gli argomenti.

Aiuta ad essere consapevoli di alcuni dei termini e degli argomenti che sono là fuori nell'attuale industria della finanza d'investimento professionale, che andrà un po' lontano per accorciare la curva di apprendimento, e spero che i miei post ti abbiano aiutato in questa capacità. Non sarei dove sono ora se non fosse per il fatto che altri prima di me hanno offerto le loro spalle per me.

Noi "home grown" quant traders abbiamo tutti molto in comune, i nostri background sono estremamente diversi e non molti di noi hanno un'istruzione superiore in finanza o in programmazione, ma ciò che ci manca in termini di istruzione formale puntiamo a compensare con tenacia e ambizione. Ha funzionato per Thomas Edison... ammetto che non è il miglior esempio dal punto di vista etico/morale, ma il suo esempio del prototipo di 10.000 lampadine è la morale della storia.

Arriverete a riconoscere, e forse lo avete già fatto, che il vostro tasso personale di progresso è di natura iterativa. Impari di più sulle tecniche di codifica e i tuoi codici diventano più sofisticati, impari di più sulle strategie commerciali che hanno e non hanno funzionato in passato e affini le tue strategie un po' di più, impari sulla gestione del rischio contro la misurazione del rischio e cominci ad affrontare il tuo rischio di rovina in modi di cui non eri nemmeno consapevole di aver bisogno in primo luogo.

E solo perché il mio approccio è apparentemente complesso non significa che la complessità sia una necessità... approcci molto più semplici e molto meno complessi possono essere superiori in ogni modo... solo che non sono ancora abbastanza intelligente da aver capito come. Ci sono molti modi stupidamente complessi per fare una lampadina, e metodi più complessi non garantiscono una lampadina migliore.

Quindi non fatevi scoraggiare da qualsiasi percezione che potreste avere tra la complessità/semplicità del vostro approccio contro la mancanza di esso nel mio... potreste benissimo essere sulla strada giusta mentre io sono fuori strada.

 

1005phillip: 2010.03.17 18:38

Questo(script mq4 allegato) è quello che uso per fare il lavoro, non è bello (il codice) e potrebbe fare un po' di pulizia e cambiare gli if ripetitivi per gli switch, ecc.

Nota: i tempi di apertura delle candele W1 sono automaticamente allineati al primo giorno della settimana di trading (lunedì) e i tempi di apertura delle candele MN sono automaticamente allineati al primo giorno di mercato aperto del nuovo mese
Questo script è rotto. Il primo giorno della settimana di trading è domenica (2200z) non lunedì. E non gestisce le festività di venerdì o lunedì. Semplice correzione:
      time0=Time[i];
//    if((TimeDayOfWeek(time0)==1 && TimeDayOfWeek(Time[i+1])==5) || i==0)
      if (TimeDayOfWeek(time0) < TimeDayOfWeek(Time[i+1])         || i==0)
Motivazione: