L'apprendimento automatico nel trading: teoria, modelli, pratica e algo-trading - pagina 15

 
Dr.Trader:

Uso indicatori standard come base per la creazione di predittori. Sto ancora sperimentando io stesso, provando le idee di questo thread del forum.

Lo sto facendo per le ultime settimane, ora il miglior risultato è il seguente: (un sacco di calcoli, sto cercando di utilizzare il timeframe D1 per una migliore velocità, poi userò timeframe più piccoli)

1) esportare da mt5 a csv: ohlc, tempo, indicatori, tutti per le ultime 10 barre. Recentemente ho iniziato a prendere il tempo solo dalla barra più recente, credo che il tempo delle altre barre sia calcolabile e quindi non porta nessuna nuova informazione. Stanno uscendo diverse centinaia di predittori "primari". Il risultato richiesto dell'apprendimento è "1" o "0" - aumento o diminuzione del prezzo nella prossima barra. Il mio metodo con gli zigzag non è stabile e complesso, ora sono più bravo a lavorare con i prezzi vicini. Quando avrò elaborato un algoritmo completo per l'addestramento dei modelli da zero, potrei iniziare a lavorare sugli zigzag e sulla previsione delle tendenze.

2) In R sto facendo diverse operazioni matematiche con i dati disponibili - aggiunta, delta, min, max, ecc. Esce già più di mille predittori.

3) Ovviamente c'è più spazzatura dopo il secondo passo di quella necessaria. Lo sto setacciando con il metodo dell'articolo sui componenti di basehttp://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/, SanSanych l'ha scritto prima. Non sto insegnando il modello PCR in sé e ho deciso di utilizzare la funzione di pre-screening dei predittori per ora:

srcTable è una tabella con predittori, l'ultima colonna dovrebbe essere il risultato di formazione richiesto.pruneSig è meglio lasciare -1.

Come risultato, la funzione restituirà una lista con i nomi delle colonne della tabella che portano alcune informazioni utili. O una lista vuota se non si trova nulla di utile. Questo metodo è menzionato nell'articolo come poco significativo, ma si rivela abbastanza adeguato, setaccia molto bene la spazzatura. Inoltre, l'elenco dei risultati sarà ordinato per rilevanza, dal più utile al meno utile.

4) Se la funzione restituisce una lista vuota - eseguo di nuovo il secondo passo, genera di nuovo diverse combinazioni matematiche sui dati disponibili, poi il terzo passo per setacciare. Devo ripeterlo 3-4 volte. Il volume dei dati cresce ad ogni ripetizione, quindi è meglio limitare il volume dei nuovi dati generati in qualche modo. Possiamo cambiare questa funzione per il vaglio, in modo che se la lista è vuota, restituisca un centinaio o due risultati migliori e generi nuovi predittori solo da questi.

5) Successivamente, secondo l'articolo, dobbiamo addestrare il modello del componente principale stesso. Ho problemi con esso - finora il miglior r-squared per il modello addestrato è 0.1, non è abbastanza, l'articolo dice che ho bisogno di almeno 0.95. Ma posso allenare qualche altro modello R sui predittori ottenuti e darà un risultato migliore. Ho più esperienza con la neuronica, il miglior risultato in fronttest con essa esce con un errore di circa 37%. Il modello PCE dovrebbe essere più stabile, senza retraining, ecc., ma finora non riesco a trovare alcun predittore per esso.


Congratulazioni, grazie per aver pubblicato il risultato.

Spero che questo tuo post sia apprezzato -hai, se non risolto il problema di base del trading, è senza esagerazione.

Tutto il resto verrà con esso.

Congratulazioni ancora, buona fortuna!

 
Dr.Trader:

Uso indicatori standard come base per la creazione di predittori. Sto ancora sperimentando io stesso, provando le idee di questo thread del forum.

Lo sto facendo per le ultime settimane, ora il miglior risultato è il seguente: (un sacco di calcoli, sto cercando di utilizzare il timeframe D1 per una migliore velocità, poi userò timeframe più piccoli)

1) esportare da mt5 a csv: ohlc, tempo, indicatori, tutto per le ultime 10 barre. Recentemente ho iniziato a prendere il tempo solo dalla barra più recente, credo che il tempo delle altre barre sia calcolabile e quindi non porta nessuna nuova informazione. Stanno uscendo diverse centinaia di predittori "primari". Il risultato richiesto dell'apprendimento è "1" o "0" - aumento o diminuzione del prezzo nella prossima barra. Il mio metodo con gli zigzag non è stabile e complesso, ora sono più bravo a lavorare con prezzi vicini. Quando avrò elaborato un algoritmo completo per l'addestramento dei modelli da zero, potrei iniziare a lavorare sugli zigzag e sulla previsione delle tendenze.

2) In R sto facendo diverse operazioni matematiche con i dati disponibili - aggiunta, delta, min, max, ecc. Esce già più di mille predittori.

3) Ovviamente c'è più spazzatura dopo il secondo passo di quella necessaria. Lo sto setacciando con il metodo dell'articolo sui componenti di basehttp://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/, SanSanych l'ha scritto prima. Non sto insegnando il modello PCR in sé e ho deciso di utilizzare la funzione di pre-screening dei predittori per ora:

srcTable è una tabella con predittori, l'ultima colonna dovrebbe essere il risultato di formazione richiesto.pruneSig è meglio lasciare -1.

Come risultato, la funzione restituirà una lista con i nomi delle colonne della tabella che portano alcune informazioni utili. O una lista vuota se non si trova nulla di utile. Questo metodo è menzionato nell'articolo come poco significativo, ma si rivela abbastanza adeguato, setaccia molto bene la spazzatura. Inoltre, l'elenco dei risultati sarà ordinato per rilevanza, dal più utile al meno utile.

4) Se la funzione restituisce una lista vuota - eseguo di nuovo il secondo passo, ancora una volta genera diverse combinazioni matematiche sui dati disponibili, poi il terzo passo per setacciare. Devo ripeterlo 3-4 volte. Il volume dei dati cresce ad ogni ripetizione, quindi è meglio limitare il volume dei nuovi dati generati in qualche modo. Possiamo cambiare questa funzione per il vaglio, in modo che se la lista è vuota, restituisca un centinaio o due risultati migliori e generi nuovi predittori solo da questi.

5) Successivamente, secondo l'articolo, dobbiamo addestrare il modello del componente principale stesso. Ho problemi con esso - finora il miglior r-squared per il modello addestrato è 0.1, non è abbastanza, l'articolo dice che ho bisogno di almeno 0.95. Ma posso allenare qualche altro modello R sui predittori ottenuti e darà un risultato migliore. Ho più esperienza con la neuronica, il miglior risultato in fronttest con essa esce con un errore di circa 37%. Il modello PCE dovrebbe essere più stabile, senza retraining, etc., ma finora non riesco a trovare alcun predittore per esso.

Se hai un errore del 30% nel fronttest è già un modello abbastanza redditizio, fai Expert Advisor per mt5 e controllalo in strategy tester.

Vai avanti! Col tempo migliorerai.
 
Dr.Trader:
Ho iniziato a guardare questo corso e si concentra molto sul framework Pandas in Python. Le prime lezioni sembrano più un tutorial sul framework che sull'analisi dei dati. Ma il tutorial sembra adeguato, senza il tipico "sono un guru del Forex, ti aprirò gli occhi e farai milioni" come in molti altri addestramenti inutili, fa sperare che diranno cose adeguate fino alla fine. Ma bisogna tener conto che questo corso è progettato per il trading azionario, non per il Forex, non so se i processi di apprendimento dei modelli in queste due aree sono simili.
Il principio è lo stesso. Ci sono alcune sfumature del trading. Per esempio, non ci sono molti terminali vicini alla realtà che permettono di testare lo scambio (slittamento, esecuzione parziale, ritardi). Ma ci sono tali. Ma MT5 non appartiene a loro, per quanto ne so.
 
Dr.Trader:

Uso indicatori standard come base per la creazione di predittori.

...

2) Faccio diverse operazioni matematiche con i dati disponibili in R - addizione, delta, min, max, ecc. Viene fuori già più di mille predittori.

3) Ovviamente c'è più spazzatura dopo il secondo passo di quella necessaria. Lo setaccio usando il metodo descritto nell'articolo sui componenti di basehttp://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/, SanSanych ne ha scritto prima.

...

Come risultato, la funzione restituirà una lista con i nomi delle colonne della tabella che contengono alcune informazioni utili. O una lista vuota se non si trova nulla di utile. Questo metodo è menzionato nell'articolo come poco significativo, ma si rivela abbastanza adeguato, setaccia molto bene la spazzatura. Inoltre, la lista con i risultati sarà ordinata per rilevanza, dal più utile al meno utile.

Non si può fare a meno di pensare che il calcolo sia del tutto casuale! I predittori non sono altro che spazzatura. Potrebbe esserci un diamante in mezzo a loro, perché la Vita potrebbe nascere dal "brodo"!

Si scopre che questo approccio è un'intelligente ottimizzazione del calcolo. Quando non c'è bruteforcing, ma algoritmi più intelligenti. Ma l'input è sempre la stessa spazzatura.

Si scopre che se avessimo una macchina di calcolo così potente da poter eseguire qualsiasi calcolo in un secondo, non avremmo bisogno di alcun allenamento. Ma allo stesso tempo, non vedremmo alcun cambiamento qualitativo nel ricevere un TS redditizio. Purtroppo.

 
Alexey Volchanskiy:

Un collega mi ha mandato un link a un corso sull'apprendimento automatico, ti piacerebbe dargli un'occhiata? È gratuito, ma è in Python per qualche motivo ((

https://www.udacity.com/course/machine-learning-for-trading--ud501

Tutto è mostrato meglioqui.

Buona fortuna

 
Anton Zverev:

Non posso fare a meno di pensare che il calcolo sia COMPLETAMENTE basato sul caso! I predittori sono tutti spazzatura. Forse ci sarà un diamante in mezzo a loro - dopo tutto, la vita potrebbe nascere dalla "zuppa"!

.... Questo è triste.

Hai assolutamente torto!

Mi spiego con un esempio.

Prendete un kodobase. Tutto quello che c'è dentro è spazzatura, o c'è qualcosa di utile. Molto probabilmente c'è, dopo tutto, l'esperienza di tante persone.

Ora assumiamo per certo che stiamo andando a fare trading di tendenze. Quale degli indicatori disponibili nel kodobase sarà utile per il trading di tendenza? Dobbiamo giudicare dal nome o intuitivamente? E quanti possiamo praticamente selezionare per provare? 10, 20, 100? Penso che 100 sia attraverso un tester per la vita, considerando dalla combinazione.

Ma la cosa più importante non è solo il numero di indicatori da provare. La cosa principale è se l'Expert Advisor funzionerà in futuro. E l'Expert Advisor funzionerà in futuro solo in un caso - se non viene riqualificato (non sovrallenato). Il problema principale nella costruzione di sistemi di trading meccanico è il problema dell'overtraining (overfitting). Molte persone sono riuscite a superare questo problema?

Penso che ilDr.Trader non abbia costruito i suoi predittori da una torcia, ma abbia avuto qualche idea - al momento l'idea di generare così tanti predittori non è interessante.

Ciò che è interessante è tutt'altro.

Ciò che è interessante è ciò a cui non hai prestato attenzione.

Tra le sue migliaia di predittori,Dr.Trader può selezionare quelli che non causeranno overtraining (overfitting) di Expert Advisors.

Non solo sa come selezionare i predittori che non causeranno lo sviluppo di EAs overfitted, ma ha anche mostrato il codice che lo fa.

 
СанСаныч Фоменко:

Ti sbagli completamente!

Ti faccio un esempio.

Prendiamo kodobase. È tutta spazzatura o c'è qualcosa di utile? Molto probabilmente c'è, dopo tutto, l'esperienza di molte persone.

Spazzatura, ovviamente! Beh, se si prende tutto il codobase come predittore...

Dr.Trader sa come selezionare tali predittori da migliaia di predittori che non porteranno alla riqualificazione (overfitting) degli Expert Advisor.

Non solo sa come selezionare i predittori che non porteranno allo sviluppo di Expert Advisor sovradimensionati, ma ha anche definito il codice con l'aiuto del quale questo viene fatto.

Ed è emerso che da un enorme mucchio di spazzatura non è stata trovata nemmeno una pietra, tanto meno un diamante. Vi dico che sto solo correndo un rischio.

O qualcuno qui è in grado di giustificare che tale indicatore non è spazzatura? E mostrare in cifre l'importanza relativa di questo indicatore?

 

Sì, ho un sacco di azioni casuali, sono d'accordo. Ma non si può prendere un solo indicatore e fare un EA su di esso, si andrà rapidamente in territorio negativo con esso. Gli indicatori non sono spazzatura al 100%, ma da soli non forniscono informazioni sufficienti per prevedere il movimento dei prezzi. Ma ho scoperto nella mia ricerca che la combinazione di indicatori può aumentare il loro potere predittivo, cioè si può davvero fare un diamante dalla spazzatura. Il problema è che ci sono migliaia di combinazioni possibili e solo decine di esse sono utili e non so quali indicatori siano inizialmente migliori di altri. Finora questo problema è stato risolto come ho scritto prima, agendo con forza bruta e lunghi calcoli. Con il passare del tempo otterrò statistiche su quali indicatori entrano più spesso nei predittori finali e potrò lavorare solo con loro, tutto andrà più veloce.

Ho iniziato a fare un Expert Advisor basato sui predittori ottenuti, il risultato sarà veramente visibile nel tester. Si dice che anche con il 60% di barre previste correttamente si perdono comunque dei soldi perché il prezzo ha percorso meno distanza con le barre previste correttamente che con quelle sbagliate. Se è così, dovreste fare la vostra funzione di fitness per addestrare i neuroni per stimare non la percentuale di barre ma la redditività del modello.

 
Dr.Trader:

Sì, mi capita molto a caso, sono d'accordo. Ma non si può semplicemente prendere un indicatore e usarlo per creare un Expert Advisor, si perde rapidamente con esso. Gli indicatori non sono spazzatura al 100%, ma da soli non forniscono informazioni sufficienti per prevedere il movimento dei prezzi. Ma ho scoperto nella mia ricerca che la combinazione di indicatori può aumentare il loro potere predittivo, cioè si può davvero fare un diamante dalla spazzatura. Il problema è che ci sono migliaia di combinazioni possibili e solo decine di esse sono utili e non so quali indicatori siano inizialmente migliori di altri. Finora questo problema è stato risolto come ho scritto prima, con forza bruta e lunghi calcoli. Con il passare del tempo formerò delle statistiche sugli indicatori che arrivano più spesso ai predittori finali, potrò lavorare solo con loro e tutto andrà molto più veloce.

Volete trovare delle correlazioni in una singola BP. E vuoi trovare le interrelazioni che devono essere presenti in ogni momento in quella BP.

Queste due circostanze (in grassetto) sembrano strane, per non dire altro.

I metodi di apprendimento automatico hanno imparato a riconoscere gli oggetti (un cane, un'arancia, ecc.) dalle immagini. Cioè, hanno imparato a riconoscere cose che gli esseri umani o certi tipi di animali possono riconoscere. Quando una persona o un animale vede un BP di prezzo, non è consapevole di nulla. Cioè, non sono in grado di fare paragoni nel loro NS. Tuttavia, quando un uomo guarda diversi BP contemporaneamente, vede delle somiglianze anche ad occhio nudo. E queste somiglianze, in effetti, si realizzano. Pertanto, è la consapevolezza di un oggetto che è logico mettere le tecniche di apprendimento automatico.

Prima lo realizziamo noi stessi, poi proviamo gli algoritmi. Credo che tu sappia cosa intendo.

Una volta EURGBP overnight era molto bello (redditizio). Il tuo NS non l'avrebbe riconosciuto. I profitti sono stati presi da coloro che hanno capito le ragioni della ripidità della notte. E poi hanno applicato algoritmi a questi pezzi di storia EURGBP per trovare la data in cui è diventato improvvisamente ripido. Per non rovinare lo stato con i dati che erano prima della ripidità. Hanno iniziato a indagare. E molti ci hanno fatto dei bei soldi - basta leggere i forum.

Ora immaginate che l'oro/argento sia fresco ora. Non c'è una coppia simile, ma è possibile scambiarla. Ma vi siete limitati a una sola BP. Ed è logico cercare interconnessioni tra diversi BP. In questo caso, possono apparire coppie come GOLD/SILVER. E anche gli intervalli di una settimana, il giorno o la notte, ecc. giocano un ruolo enorme. Il comportamento delle persone dipende dall'ora del giorno e dal giorno della settimana. Sono dati coscienti, quindi è lì che bisogna scavare, IMHO.

 
Anton Zverev:

Volete trovare delle correlazioni in una singola BP. E vuoi trovare le interrelazioni che devono essere presenti in ogni momento in quella BP.

...

Prima ce ne rendiamo conto da soli, poi proviamo gli algoritmi. Credo che tu sappia cosa intendo.

...

Ma ti sei limitato a una sola BP. Ed è logico cercare interconnessioni tra diversi BP. In questo caso, è possibile ottenere questi "GOLD/SILVER". Anche gli intervalli di una settimana, il giorno o la notte, ecc. giocano un ruolo enorme. Il comportamento delle persone dipende dall'ora del giorno e dal giorno della settimana. Si tratta di dati coscienti, quindi bisogna scavare lì, IMHO.

Finora, stiamo cercando di trovare la dipendenza del "futuro" condizionale dal "passato" sulla stessa linea temporale. Ma non significa che non cercheremo di farlo per una combinazione di serie.

Sul riconoscimento. Per le arance il tuo ragionamento è applicabile. Anche forse un esperto distinguerà diverse varietà di arancia.

Per la BP finanziaria, è necessario distinguere un modello - cioè il comportamento monotono della BP su tutto l'intervallo di tempo disponibile. Sì, a volte sembra che ci sia qualcosa in vista. Ma questa conoscenza è molto vaga, e i parametri di dipendenza non sono affatto definiti con precisione. Qui non si può fare a meno dell'aiuto del computer. Anche se non sto affermando che non esiste una persona che possa trovare la dipendenza a occhio e codificarla.

Sono d'accordo con Dr.Trader nel cercare di raccogliere un sacco di spazzatura e poi estrarre da essa degli input di valore. Il valore di questi input viene controllato addestrando il modello e validandolo. Se non si tratta di rumore, ci sarà un plus sulla convalida. Questo è l'intero corso dell'apprendimento automatico. )

Ho provato tali input grezzi:

> names(sampleA)

  [1] "lag_diff_2"        "lag_diff_3"        "lag_diff_4"        "lag_diff_6"        "lag_diff_8"        "lag_diff_11"       "lag_diff_16"     

  [8] "lag_diff_23"       "lag_diff_32"       "lag_diff_45"       "lag_diff_64"       "lag_diff_91"       "lag_diff_128"      "lag_diff_181"    

 [15] "lag_diff_256"      "lag_diff_362"      "lag_diff_512"      "lag_diff_724"      "lag_mean_diff_2"   "lag_mean_diff_3"   "lag_mean_diff_4" 

 [22] "lag_mean_diff_6"   "lag_mean_diff_8"   "lag_mean_diff_11"  "lag_mean_diff_16"  "lag_mean_diff_23"  "lag_mean_diff_32"  "lag_mean_diff_45"

 [29] "lag_mean_diff_64"  "lag_mean_diff_91"  "lag_mean_diff_128" "lag_mean_diff_181" "lag_mean_diff_256" "lag_mean_diff_362" "lag_mean_diff_512"

[36] "lag_mean_diff_724" "lag_max_diff_2"    "lag_max_diff_3"    "lag_max_diff_4"    "lag_max_diff_6"    "lag_max_diff_8"    "lag_max_diff_11" 

 [43] "lag_max_diff_16"   "lag_max_diff_23"   "lag_max_diff_32"   "lag_max_diff_45"   "lag_max_diff_64"   "lag_max_diff_91"   "lag_max_diff_128"

 [50] "lag_max_diff_181"  "lag_max_diff_256"  "lag_max_diff_362"  "lag_max_diff_512"  "lag_max_diff_724"  "lag_min_diff_2"    "lag_min_diff_3"  

 [57] "lag_min_diff_4"    "lag_min_diff_6"    "lag_min_diff_8"    "lag_min_diff_11"   "lag_min_diff_16"   "lag_min_diff_23"   "lag_min_diff_32" 

 [64] "lag_min_diff_45"   "lag_min_diff_64"   "lag_min_diff_91"   "lag_min_diff_128"  "lag_min_diff_181"  "lag_min_diff_256"  "lag_min_diff_362"

 [71] "lag_min_diff_512"  "lag_min_diff_724"  "lag_sd_2"          "lag_sd_3"          "lag_sd_4"          "lag_sd_6"          "lag_sd_8"        

 [78] "lag_sd_11"         "lag_sd_16"         "lag_sd_23"         "lag_sd_32"         "lag_sd_45"         "lag_sd_64"         "lag_sd_91"       

 [85] "lag_sd_128"        "lag_sd_181"        "lag_sd_256"        "lag_sd_362"        "lag_sd_512"        "lag_sd_724"        "lag_range_2"     

 [92] "lag_range_3"       "lag_range_4"       "lag_range_6"       "lag_range_8"       "lag_range_11"      "lag_range_16"      "lag_range_23"    

 [99] "lag_range_32"      "lag_range_45"      "lag_range_64"      "lag_range_91"      "lag_range_128"     "lag_range_181"     "lag_range_256"   

[106] "lag_range_362"     "lag_range_512"     "lag_range_724"     "symbol"            "month"             "day"               "week_day"        

[113] "hour"              "minute"            "future_lag_2"      "future_lag_3"      "future_lag_4"      "future_lag_6"      "future_lag_8"    

[120] "future_lag_11"     "future_lag_16"     "future_lag_23"     "future_lag_32"     "future_lag_45"     "future_lag_64"     "future_lag_91"   

[127] "future_lag_128"    "future_lag_181"    "future_lag_256"    "future_lag_362"    "future_lag_512"    "future_lag_724"

C'è tempo e ogni sorta di metrica per il movimento dei prezzi. Poi ho setacciato anche loro. Ecco, date un'occhiata a quello che ho ottenuto.

Questa è la parte dell'Expert Advisor che prende i segnali dalla macchina addestrata in R. Le voci selezionate sono mostrate lì. E al primo posto, tra l'altro, c'è l'ora in cui si apre uno scambio. Cioè, il tempo è importante!

Questo è un test dell'Expert Advisor su tutta la storia dal 1999.02 al 2016.06:

È un po' storto, ma la macchina impara comunque NON il rumore, ma le dipendenze dagli input indicati.

Quindi siamo sul lato positivo. Almeno, miglioriamo i risultati degli esperimenti.

File:
Motivazione: