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

 
SanSanych Fomenko:

2. Vedere il video:

Mi dispiace, ma le solite sciocchezze di un dottorando non istruito...

Come si dice, quello che compro, lo vendo. Mi è stata fatta una domanda, ho dato un video con una risposta dettagliata. Il docente non sta facendo il furbo, sta sproloquiando sulla teoria dell'apprendimento statistico.

vedere. Vapnik V.N. Teoria statistica dell'apprendimento. NY: John Wiley, 1998.

SanSanych Fomenko:

1. Un notevole deterioramento della generalizzabilità, se rimuoviamo almeno un predittore informativo dal campione.


Credetemi, purtroppo questo non prova nulla. Inoltre, se l'insieme dei predittori è cattivo (molto rumore) allora questo effetto sarà più forte quanto più rumore c'è. Questo si spiega molto semplicemente: più c'è rumore, più è facile per l'algoritmo trovare un valore "conveniente".

Come si dice, al gusto e al colore ...

SanSan Fomenko:

Per quanto riguarda il suo file.

1. Non sono riuscito a costruire 6 modelli di classificazione sui tuoi dati: errore superiore al 50%. Se vuoi posso postare i risultati qui

Grazie per le informazioni. I risultati sono già chiari: una completa mancanza.

SanSanych Fomenko:

2. La ragione di questo risultato è che avete un insieme molto povero di predittori - rumore, cioè predittori non rilevanti per la variabile obiettivo. I predittori 6, 7 e 8 hanno un certo potere predittivo, ma molto poco. Non lavoro con questi predittori. Gli altri sono solo rumore.

Bene, bene. Senza rumore qualsiasi sciocco è in grado di classificare correttamente. Il rumore c'è e in quantità decente. Ci sono anche informazioni utili. Ecco, per esempio, i risultati della vecchia libVMR 3.01:

/**
* La qualità della modellazione in fuori campione:
*
* TruePositives: 245
* TrueNegatives: 113
* FalsePositive: 191
* FalsiNegativi: 73
* Modelli totali su campioni con statistiche: 622
* Errori totali nel fuori campione: 264
* Sensibilità della capacità di generalizzazione: 56.19266055045872%
* Specificità della capacità di generalizzazione: 60,752688172043015%
* Capacità di generalizzazione: 16.94534872250173%
* Indicatore di Reshetov: 0,1075044213677977

*/

Cioè, sono aumentato di quasi il 17% nella capacità di generalizzazione.

La performance del nuovo ragazzo è notevolmente migliore.

 
Alexey Burnakov:
Usa la convalida incrociata per raccogliere il numero di componenti. Il miglior valore su crossvalidation poi controlla sul set di convalida.

È venuto fuori di nuovo non buono. Avrei preso 20 componenti, poiché min(trainwinrate. validate1winrate, validate2winrate) è il più grande rispetto alle altre quantità di componenti. E otterrei ~55% di risultato nel fronttest, anche peggio di prima. È uscito uno strano modello - la percentuale di vincita è un po' più del 50% (non adatto al forex), la validazione incrociata non funziona, l'importanza dei predittori non può essere tolta. Posso solo stamparlo e appenderlo al muro :)


 
Yury Reshetov:

* TruePositives: 245

* TrueNegatives: 113
* FalsePositive: 191
* FalsiNegativi: 73

Quindi hai una percentuale di vincita del 57,6% su test.csv, giusto? Proverò il mio metodo per setacciare i predittori e addestrare il neurone, riporterò i risultati domani.
 
Dr.Trader:

È venuto fuori di nuovo non buono. Avrei preso 20 componenti, poiché min(trainwinrate. validate1winrate, validate2winrate) è il più grande rispetto alle altre quantità di componenti. E otterrei ~55% di risultato nel fronttest, anche peggio di prima. È uscito uno strano modello - la percentuale di vincita è poco più del 50% (non adatta al forex), la validazione incrociata non funziona, l'importanza dei predittori non può essere tolta. Posso solo stamparlo e appenderlo al muro :)


Se non si hanno abbastanza dati, la validazione incrociata può dare cattivi risultati. L'apprendimento automatico coinvolge decine di migliaia di osservazioni. Se la validazione incrociata è cattiva, significa che il modello nel suo insieme è così.
 

Questi sono i risultati del mio grande esperimento. A causa di un bug nel vento, il codice si è interrotto e non ho finito di imparare tutti i personaggi. Ma questo mi basta per ora. Buoni risultati su eurusd.

Ho mostrato solo i valori massimi che ho trovato senza specificare alcun parametro. C'è già un buon risultato. Le sottigliezze dell'impostazione GBM aiutano.

 

Prevedendo l'eurusd 512 minuti avanti, puoi guadagnare 1,5 pips per trade, ho ragione? E si tiene conto anche dello spread? È anche importante conoscere il drawdown massimo per quel tempo, non ha senso fare trading anche per 10 pips, se il drawdown per quel tempo era tutto di duecento. Per stimare il trade, sarebbe bene usare il Rapporto di Sharpe ma non l'ho visto in R, per iniziare possiamo usare il seguente fattore: (profitto finale)/(massimo drawdown del capitale su tutto il tempo).

Per esempio, supponiamo di avere un segnale 1. Il trader ha guadagnato il 1000% durante l'anno ma il suo drawdown massimo è stato del 50%. Allo stesso tempo, il segnale 2 ha solo il 600% di profitto nel corso dell'anno, ma il drawdown massimo è stato del 25%. Può sembrare che il trader 1 sia migliore (in termini di profitto), ma in realtà non lo è, rischia solo il doppio. Il primo commerciante ha 1000/50 = 20, il secondo ha 600/25 = 24. Quindi è meglio iscriversi al secondo segnale, e raddoppiare il rischio se si vuole rischiare il 50% del deposito.

Inoltre, nel tuo esperimento è importante valutare i rischi. Il trading in un piccolo intervallo può essere molto più redditizio, perché il modello può reagire in tempo ai picchi di prezzo e guadagnare su di essi, piuttosto che aspettare attraverso un enorme drawdown con il rischio di prendere uno stop loss.

 
Alexey Burnakov:

Colleghi, se avete tempo, potete farmi delle domande sotto l'articolo?https://habrahabr.ru/company/aligntechnology/blog/303750/

Perché Habr è silenzioso!

Hubr non è silenzioso - Hubr sta leggendo.
Molte lettere.
 
Dr.Trader:

Prevedendo l'eurusd 512 minuti avanti, puoi guadagnare 1,5 pips per trade, ho ragione? E si tiene conto anche dello spread? È anche importante conoscere il drawdown massimo per quel tempo, non ha senso fare trading anche per 10 pips, se il drawdown per quel tempo era tutto di duecento. Per stimare il trade, sarebbe bene usare il Rapporto di Sharpe ma non l'ho visto in R, per iniziare possiamo usare il seguente fattore: (profitto finale)/(massimo drawdown del capitale su tutto il tempo).

Per esempio, supponiamo di avere un segnale 1. Il trader ha guadagnato il 1000% durante l'anno ma il suo drawdown massimo è stato del 50%. Allo stesso tempo, il segnale 2 ha solo il 600% di profitto nel corso dell'anno, ma il drawdown massimo è stato del 25%. Può sembrare che il trader 1 sia migliore (in termini di profitto), ma in realtà non lo è, rischia solo il doppio. Il primo commerciante ha 1000/50 = 20, il secondo ha 600/25 = 24. Quindi è meglio iscriversi al secondo segnale, e raddoppiare il rischio se si vuole rischiare il 50% del deposito.

Anche nel tuo esperimento è importante valutare i rischi. Il trading in un piccolo intervallo può essere molto più redditizio, perché il modello può reagire in tempo ai picchi di prezzo e guadagnare su di essi, piuttosto che aspettare attraverso un enorme drawdown con il rischio di prendere uno stop loss.

Sì 1,5 pts con uno spread di 1.

Tutti gli altri indicatori saranno valutati insieme: posterò i gufi su mt4 sul modello addestrato.

Sfortunatamente, non posso calcolare Sharp ed ecc. in R, poiché ho 49 campioni casuali, che non ripristinano la sequenza degli scambi.

I risultati sono dati per 13000 scambi per eurusd in particolare.
 
Dr.Trader:
Quindi la sua percentuale di vincita su test.csv è del 57,6%, giusto? Proverò il mio metodo per setacciare i predittori e addestrare il neurone e riporterò i risultati domani.

Non il guadagno, ma il numero di previsioni corrette della direzione futura dei prezzi. Il classificatore produce uno dei due valori sul campione di prova: Positivo - ci si aspetta un futuro aumento dei prezzi, Negativo - ci si aspetta una futura diminuzione dei prezzi. Se predice correttamente un campione di prova, gli verrà assegnato True. Se è sbagliato è Falso.

Sensibilità della capacità di generalizzazione: 56.19266055045872% - la crescita futura dei prezzi è corretta: 100% * TP / (TP + FP) = 100% * 245 / (245 + 191) = 100% * 245 / 436 = 56.192660550458715%

Specificità della capacità di generalizzazione: 60,752688172043015% - ha previsto correttamente la diminuzione futura dei prezzi: 100% * TN / (TN + FN) = 100% * 113 / (113 + 73) = 100% * 113 / 186 = 60,75268817204302%

 
Yury Reshetov:

Non il guadagno, ma il numero di previsioni corrette della direzione futura dei prezzi. Il classificatore sul campione di prova produce uno dei due valori: Positivo - si presume una crescita futura dei prezzi, Negativo - si presume un calo futuro dei prezzi. Se predice correttamente un campione di prova, gli verrà assegnato True. Se è sbagliato è Falso.

Sensibilità della capacità di generalizzazione: 56.19266055045872% - la crescita futura dei prezzi è corretta: 100% * TP / (TP + FP) = 100% * 245 / (245 + 191) = 100% * 245 / 436 = 56.192660550458715%

Specificità della capacità di generalizzazione: 60,752688172043015% - ha previsto correttamente la diminuzione futura dei prezzi: 100% * TN / (TN + FN) = 100% * 113 / (113 + 73) = 100% * 113 / 186 = 60,75268817204302%

Yuri, la prima prova sui tuoi dati:

metodo funzione_perdita cv_folds borsa_frac modello_parametri AUC_cv allenamento_di_precisione convalida_di_precisione
GBM bernoulli 4 0.4 0.015_|_7_|_70_|_600 0.429659 0.590361 0.50501
GBM bernoulli 4 0.6 0.02_|_5_|_110_|_600 0.485727 0.586345 0.51503

Due diversi set di valori di parametri per l'allenamento. È degno di nota che l'AUC è al di sotto dello zoccolo sulla convalida incrociata.

Complessivamente, un'accuratezza del 51,5% sul test è il massimo che si è rivelato.

Non so nemmeno come si fa ad aggirare il 60%.

Motivazione: