Buonasera a tutti, se mi è consentito vorrei fare un piccolo appello agli esperti del forum e del topic in particolare, ovviamente dopo essermi presentato.
Sono Federico, un ragazzo di 35 anni appassionato di finanza da almeno 10 e questo post è frutto solo ed esclusivamente di disperazione. Lo faccio qua perchè questo topic è un faro assoluto e mi ci sto aggrappando.
Ciclicamente mi dedico allo studio della materia, tempo permettendo, ma non ho mai completato il percorso. Ho iniziato come tutti: manuali di analisi tecnica, paper trading, soldi persi, soldi vinti, guide, corsi, certificazioni. Logicamente sono arrivato al punti di credere che l'analisi tecnica serva a poco e solo due approcci funzionino: investimenti a lungo termine (non me lo posso permettere) e sistemi automatici su base statistica o di machine learning. L'HFT manco lo calcolo, per i retail è fuori portata.
Da almeno un anno studio il machine learning con applicazione finanziaria con lo scopo di creare un sistema automatico profittevole. Per farlo, avendola presa come missione, ho rischiato di far finire una relazione di 10 anni e di buttare via il mio lavoro. Nessuno, a parte mia madre, crede che ce la faccia. A dire il vero nemmeno io.
Ho studiato decine di manuali in inglese, seguito centinaia di corsi online, da Youtube al MIT. Mi sono, con molto sforzo avendo una formazione umanistica ed essendo rimasto alle tabelline per quanto concerne la matematica, creato una basilare formazione scientifica. Dall'analisi all'algebra lineare passando per la statistica bayesiana e non.
Tolta la parte sul deep learning che francamente ora mi fonderebbe il cervello, ho studiato ogni forma possibile di tecnica di machine learning.
Ho imparato a programmare con Python e a collegarmi via API con i broker. Tutto sempre in demo, non ho nessuna intenzione di andare live fino ad un backtest decente.
Trado solo su Forex, CFD, cripto sporadicamente, azionario raramente. Per questioni meramente di budget.
Arrivo al punto scusandomi per la prolissità: ho un sistema di trading che seleziona dati storici, fa data wrangling, feature selection, feature engineering e poi allena un modello di XGBoost Classification. Il target label è ovviamente binario. L'obiettivo è quello più banale, predire il return della prossima barra (5 minuti, 1 ora, 4 ore o giornaliera). Se mi da 1 vai long, -1 short. La parte di risk management e position sizing non la menziono, al momento mi interessa un modello profittevole con buone accuracy e recall.
Come il 99% dei casi ottimo in train, discreto in test, sostanzialmente random e da buttare in live.
Sono stato mesi a studiarmi la selezione delle features, altri mesi a trovare un target sensato e valido. Niente.
Ho provato tutti i sistemi di cross validation, gridsearch per fare il tuning dei parametri, diversi split dei dati, correzione del bilanciamento delle classi, niente.
Mi sono studiato il testo, a detta di molti rivoluzionario, di Lopez de Prado. Ho cercato di implementare alcune sue tecniche sulle time bars, visto che lui parte dai tick data (insostenibili per costi e capacità computazionale). Dal suo libro ho provato ad usare la fractional differentiation, il CUSUM filter per selezionare samples validi e la purged cross validation.
Ora il mio processo è questo: dati storici (tra i 2 anni sui 5 minuti e i 10 anni per le giornaliere), aggiustamento del time index. Applico all'intero dataset la fractional differentiation (tra 0.3 e 0.5), applico il cusum filter all'intero dataset. Poi aggiungo un centinaio di features tipo: dollar value, vari ratio, indicatori tecnici, return, lagged return, ratio dei return, ratio sul volume, linear regression, low pass filters, volatilità, rolling means ecc. Poi calcolo il target label che è la chiusura della barra dopo. Però uso la chiusura con applicato il frac diff. Essendo sempre positivo uso questa logica: se la prossima chiusura è maggiore di quella attuale è classe 1, altrimenti -1.
Poi faccio train e test split con sklearn e infine applico il modello di XGBoost. Già così il test gira sui 65/70% di accuratezza. Ottimizzo i parametri con gridsearch e salvo il modello.
Il modello salvato lo sbatto in una funzione che carica le barre storiche da un noto broker e che ad ogni nuova barra chiama una funzione che ricrea tutti i feature del modello sui dati live. Quindi se il train/test ha 105 features li ricostruisco sulle barre aggiornate ad ogni avvio funzione, frac diff compreso. Il cusum invece no, perchè eliminando la continuità della serie storica e selezionando solo eventi non saprei come gestire una predizione su barre non recenti. Ovviamente estrapolo l'ultima barra e ci applico la predizione di classe e di probabilità di appartenenza (quella che servirà anche per settare l'expected return e quindi la percentuale di rischio). Altra funzione applica il risk management ecc. andando poi lungo o corto. Non funziona, ovviamente.
Sto uscendo letteralmente di testa. Le mie domande sono queste, se avete avuto la pazienza di leggere e se siete mossi da compassione

:
- che voi sappiate è corretto applicare la fractional differentiation a tutto il dataset prima dello split o rischio look-ahead bias e overfitting?
- stessa domanda però sul CUSUM filter. Anche perchè de Prado lo usa in un sistema del tutto diverso e non saprei come gestirlo. Io lo sto applicando a tutto il dataset prima dello split, ma ho la certezza sia errato. Non a caso se lo applico separatamente a train data e test data l'accuratezza crolla.
- ha senso usare il prezzo di chiusura con applicata la fractional differentiation invece del classico return, come target label?
- ha senso calcolare il return e applicarci sopra la frac diff e usarlo come target label? Non ho idea di che golem abbia creato ma funziona.
- altra cosa che ho notato è la scarsa sensibilità ai cambi di direzione. Esempio: 10 barre da 1 ora, real time 6 long e 4 short, le probabilità predette mi danno 10 long. Eppure
le classi sono bilanciate. Ci sono sistemi per aumentare la sensibilità?
Detto tutto ciò, e chiedo davvero scusa a moderatori e partecipanti, vi chiedo con il cuore in mano di darmi una mano. Non voglio segreti, non voglio le vostre tecniche, non voglio rivelazioni. Conosco il "codice cavalleresco" del trading per cui il proprio lavoro e i sistemi funzionanti non si svelano a nessuno, figuriamoci gli sconosciuti.
Vi chiedo solo di aiutare una ragazzo che ci ha buttato tempo, famiglia e passione a prendere la strada giusta (qualora esista) e a risolvere tanti dubbi.
Oltre alle domande tecniche precedenti vorrei solo sapere: ci sono target labels efficaci così frullo gli altri? Cioè cosa predico, che segnali voglio ottenere?
Ci sono features veramente valide da dare in pasto al modello senza che perda tempo con 200 indicatori inutili?
Il machine learning funziona o posso buttare nel cestino via anni di lacrime e sangue? Per saperlo, almeno mi rilasso e chiudo una fase.
Grazie davvero a tutti, è un post davvero interessante con dibattiti di spessore tra esperti serissimi. Spero di non essere stato fuori luogo e spero di non essere sembrato saccente nell'utilizzo di tanti inglesismi, è solo perchè avendo studiato tutto in inglese mi risultano più immediati.
P.S. amartya78 mi ha ispirato a chiedere un sostegno, mi ha ridato una piccola speranza dopo settimane di sconforto. Ho letto anche i consigli di un altro utente che faceva riferimento a dei blog che già seguo. Molto interessanti, solo che usano R e C che sono meno intuitivi di Python.