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

 

Grazie, ho guardato le colonne, in linea di principio l'ho fatto anch'io - delta, min, max, tempo, ecc.

Il modo come creare un modello di trading forex per me diventa solo più complicato, i modi semplici non danno risultati stabili. Il modo in cui la vedo ora è il seguente:

1) scaricare i dati da MT5: ohlc, tempo, indicatori. In questa fase non aggiungerò delta.

2) caricare i dati in R, aggiungere un numero enorme di nuove colonne aggiungendo, sottraendo, min, max, ecc. dei dati iniziali. È più facile farlo in R che in mt5.

3) selezionare in qualche modo dei sottoinsiemi di dati di input (per colonne). Posso seguire l'esempio di Alexey usando GenSA o semplicemente l'ottimizzazione genetica usando il pacchetto GA. Poiché ho solo bisogno di un risultato binario per ingresso (on/off), GA ha un vantaggio secondo me, ha un modo di funzionamento binario. Ma devo provare a confrontare entrambi i pacchetti.

4) Analisi di sottoinsiemi di input. Questo è anche nell'esempio di Alexei. Ma rischierò di addestrare subito il modello su un sottoinsieme di input, e di utilizzare l'errore dei dati di convalida come risultato. A condizione che il tempo di apprendimento del modello non sia più di un paio di secondi.

5) Tornare al passo 2, aggiungere nuovi input contati, eseguire altri passi, passare attraverso tali cicli fino a quando il risultato non smette di migliorare.

Ho anche sperimentato un po' con l'articolo sul Metodo dei componenti principali. C'è una sfumatura nell'esempio dell'articolo che il risultato può essere calcolato esattamente dai dati di input. Nel mio caso, quando i dati di input non sono ovviamente sufficienti, questo metodo inizia ad usare il rumore per l'apprendimento. Si scopre che se questo metodo può raggiungere un risultato (r-squared) di 0,95 con solo un paio di componenti - allora i predittori utilizzati nel modello sono molto probabilmente corretti. Se anche usando tutte le componenti, l'r-squared è ancora inferiore a 0,95, il modello include del rumore nei suoi calcoli. Tuttavia, è degno di nota il fatto che quando si aggiungono altri predittori di rumore, l'r-squared diminuisce poco a poco. Penso che in questo modo si possano confrontare i sottoinsiemi di predittori tra loro - se l'r-squared è più grande, allora il sottoinsieme è migliore.

 
Dr.Trader:


Ho anche sperimentato un po' di più con l'articolo Principal Component Method. Nell'esempio dell'articolo c'è una sfumatura che il risultato può essere calcolato accuratamente dai dati di input. Nel mio caso, quando i dati di input non sono ovviamente sufficienti, questo metodo inizia ad usare il rumore per l'apprendimento. Si scopre che se questo metodo può raggiungere un risultato (r-squared) di 0,95 con solo un paio di componenti - allora i predittori utilizzati nel modello sono molto probabilmente corretti. Se anche usando tutte le componenti, l'r-squared è ancora inferiore a 0,95, il modello include del rumore nei suoi calcoli. Tuttavia, è degno di nota il fatto che quando si aggiungono altri predittori di rumore, l'r-squared diminuisce poco a poco. Penso che questo sia un modo per confrontare i sottoinsiemi di predittori tra loro - se l'r-squared è più grande, allora il sottoinsieme è migliore.

Finora, quello che sembriamo avere in termini di preselezione dei predittori che sono "rilevanti" per la variabile obiettivo: Alexey ha un certo insieme di tecniche e io lo faccio. Non sarebbe una cattiva idea averne un altro. La PCA è molto attraente perché è ampiamente conosciuta, un sacco di letteratura.... Si noti, tuttavia, che esiste un gran numero di algoritmi che calcolano l'"importanza" dei predittori, ma non sono riuscito ad usarli. Ma in combinazione con il mio algoritmo, quasi tutti questi algoritmi standard danno buoni risultati - l'errore si riduce del 5-7%.

E il numero di predittori iniziali, penso, dovrebbe essere qualche dozzina con diverse migliaia di osservazioni. In statistica, se qualcosa non è sufficiente, allora non c'è statistica.

 
Dr.Trader:

Grazie, ho guardato le colonne, in linea di principio ho già fatto anche questo - delta, min, max, tempo, ecc.



Non c'è di che. Puoi fare pratica anche sul mio kit. C'è un disegno di qualità dell'esperimento. I dati sono buoni. E ottenere un risultato positivo sulla convalida non è affatto facile.

1) Scaricare i dati da MT5: ohlc, tempo, indicatori. Non aggiungerò delta in questa fase.

2) caricare i dati in R, aggiungere un numero enorme di nuove colonne aggiungendo, sottraendo, min, max, ecc. quelle originali. È più facile farlo in R che in mt5.

3) selezionare in qualche modo dei sottoinsiemi di dati di input (per colonne). Posso seguire l'esempio di Alexey usando GenSA o semplicemente l'ottimizzazione genetica usando il pacchetto GA. Dato che ho solo bisogno di un risultato binario per ingresso (on/off), GA ha un vantaggio secondo me, ha un modo di funzionamento binario. Ma è necessario provare a confrontare entrambi i pacchetti.

Qui consiglierei di mantenere due punti: primo - gli ingressi dovrebbero essere tutti stazionari rispetto alla loro media. Secondo - sul meccanismo di enumerazione delle colonne; sì, GA ha la modalità binaria. GenSA non lo fa, ma ho simulato la selezione binaria.

4) Analisi di sottoinsiemi di input. Questo è anche nell'esempio di Alexei. Ma rischierò di addestrare il modello su un sottocampione di input subito, e utilizzare l'errore dei dati di convalida come risultato. A condizione che il tempo di apprendimento del modello non sia più di un paio di secondi.

Buona idea! Ma tenete a mente che l'intero processo può ancora richiedere molto tempo, dato che di solito avete bisogno di migliaia di iterazioni. Questa funzione di fitness è la più complessa, poiché calcola l'intero modello. Io, d'altra parte, applico una cosiddetta funzione di fitness di filtraggio, dove non c'è apprendimento in quanto tale, ma c'è un'euristica che determina quanto gli input influenzano l'output in un senso più ampio. Il calcolo può essere più veloce di due secondi. Ma non di un ordine di grandezza.

Il modo di creare un modello di forex trading per me diventa solo più complicato, i modi semplici non producono risultati coerenti. Al momento la vedo così:

Finora ho rinunciato ad aggiungere nuovi predittori e ogni sorta di piccoli miglioramenti al disegno dell'esperimento.

Ho un'idea che mi frulla in testa e che non ho ancora messo in pratica. La questione è che noi, tu e tutti gli altri di solito prevediamo una certa condizione di chiusura dell'affare, per esempio 3 ore prima o quando il prezzo raggiunge un livello di take o di stop.

E si ottengono risultati pessimi. E quando inserisco diverse condizioni concomitanti in MT4 per chiudere un trade, che vengono lavorate attraverso l'operatore OR, riesco ad ottenere un OM positivo anche al di fuori del campione.

Quindi mi chiedevo come potrei simulare in R la previsione del risultato di un trade in base a diverse condizioni contemporaneamente. Per esempio, se il prezzo raggiunge il TP entro 3 ore, allora chiudilo. Ma il parametro delle 3 ore non deve essere fissato rigidamente, perché deve essere scelto in modo ottimale. E se aggiungiamo anche una condizione che se il prezzo è positivo entro 3 ore, ma non ha raggiunto il TP, dovremmo disegnare lo STOP a Breakeven.

In questo caso l'ingresso in una posizione è anche previsto dalla macchina.

Questo è il compito in mente.

 
Alexey Burnakov:

Quindi mi chiedevo come potrei simulare in R la previsione del risultato di un trade basato su diverse condizioni contemporaneamente. Per esempio, se il prezzo raggiunge il TP entro 3 ore, allora chiudilo. Ma il parametro delle 3 ore non deve essere fissato rigidamente, perché deve essere scelto in modo ottimale. E se aggiungiamo anche una condizione che se il prezzo è vincente entro 3 ore, ma non ha raggiunto il TP, dobbiamo disegnare lo STOP a Breakeven.

Dall'esperienza di trading degli EA non mi piacciono TP e SL. Se il sistema di trading è costruito correttamente, allora le sue stesse uscite dagli scambi saranno più efficaci delle uscite basate su TP e SL.

I valori ottimali di SL e TP cambiano con il tempo, non esiste un valore costante stabile. Possiamo trovare alcuni valori che miglioreranno l'efficienza del sistema di trading in un certo periodo, ma in questo caso l'efficienza della strategia diminuirà oltre questo periodo. È meglio non spostare lo SL, ma tenerlo alla distanza di "qualcosa è andato storto" e fermare il trading del tutto se il prezzo raggiunge lo SL, per l'analisi degli errori e l'ottimizzazione della strategia di trading.

Ma ci sono alcuni EA intelligenti di auto-ottimizzazione che usano TP. Capisco che dovremmo già introdurre una costante TP nel set di allenamento. Per esempio nel mio caso il risultato della formazione del TP è 0/1 - il prezzo è aumentato/diminuito nella prossima barra. Ma se il prezzo è aumentato e ha raggiunto il livello di TP, poi alla fine della barra è sceso sotto il livello iniziale - nel training set il risultato "1", non "0" (perché l'affare sarà chiuso con un profitto su TP, e non ci saranno più scambi fino alla fine della barra). Il TP è solitamente piccolo, meno di 50 punti (5 pips sulle quattro cifre). SL è decine di volte più grande, nel caso in cui "tutto andasse male". Il TP per il fronttest o il trade non può essere ottimizzato, solo quello usato per creare un campione di allenamento. Ho visto strategie così di successo che penso che valga la pena scavare in questa direzione.

 
Dr.Trader:

Dall'esperienza di esperto di trading non mi piacciono i TP e gli SL. Se il sistema di trading è costruito correttamente, le sue stesse uscite dai trade saranno più efficaci delle uscite basate su TP e SL.


E come sono formulate le sue uscite? Solo per tempo?

Se dite di chiudere in un'ora, ma se entro un'ora il TP viene violato, allora questo sarebbe l'esito 1, allora si stanno già utilizzando condizioni di chiusura complesse.

Circa TP di 5 pts e SL di decine di volte di più - come opzione, ma tale TP mangerà il profitto.

 

Sono con voi questa settimana e la settimana scorsa separati da fusi orari, quindi non ho un dialgo dal vivo. Sono in California per lavoro, quindi...

Comunque, penso che io (forse anche tu) possa già pianificare bene l'esperimento, allenarmi e convalidare i risultati. Si possono reclutare predittori anche in modo ridondante.

Penso che la fregatura sia che prevedere un commercio basato su un obiettivo fisso, come la chiusura in un'ora, non è ottimale, e i risultati sono deboli.

Nel tester MT ottimizzo in base all'equilibrio e al fattore di recupero. In R ottimizzo la precisione nell'indovinare le direzioni o nel prevedere le differenze di prezzo. Sono cose diverse, non importa come la si guardi.

Forse provate a scrivere la vostra funzione di perdita in R per il metodo di apprendimento, dove il profitto è massimizzato, per esempio. Questa funzione può essere sostituita in alcuni metodi di apprendimento.

 
Alexey Burnakov:

Sono con voi questa settimana e la settimana scorsa separati da fusi orari, quindi non ho un dialgo dal vivo. Sono in California per lavoro, quindi...

Comunque, penso che io (forse anche tu) possa già pianificare bene l'esperimento, allenarmi e convalidare i risultati. Si possono reclutare predittori anche in modo ridondante.

Penso che la fregatura sia che prevedere un commercio basato su un obiettivo fisso, come la chiusura in un'ora, non è ottimale, e i risultati sono deboli.

Nel tester MT ottimizzo in base all'equilibrio e al fattore di recupero. In R ottimizzo la precisione nell'indovinare le direzioni o nel prevedere le differenze di prezzo. Sono cose diverse, non importa come la si guardi.

Forse provate a scrivere la vostra funzione di perdita in R per il metodo di apprendimento, dove il profitto è massimizzato, per esempio. Questa funzione può essere sostituita in alcuni metodi di apprendimento.

Ultimamente sto attuando il seguente piano.

Ho implementato il mio vecchio EA basato sull'indicatore di tendenza. Si tratta di un solido Expert Advisor che fa trading su un conto reale.

Il prossimo.

Cerco i suoi inconvenienti e cerco di migliorarli usando R.

Per esempio.

Prendo la direzione generale dalla barra alta. Tuttavia, se guardo attentamente il tempo, c'è un grande ritardo in termini di barre, soprattutto per quelle basse. Quindi se è D1, e faccio trading su M5, risulta che prendo quasi i dati del giorno prima di ieri per la direzione. Anche prevedere un passo avanti per D1 con un errore del 30% ha migliorato radicalmente la redditività di EA e, cosa più importante, ha aumentato la fiducia che non si svenderà.

Che ne dite di questo modo: prevedere in R alcuni elementi di un EA già pronto, anche cattivo, per aggiornarlo?

Come si fa a trovare un'idea del genere?

 

Recentemente ha scritto un articolo per smart-lab. Una comunità debole, ma con qualcosa di utile:

http://smart-lab.ru/search/topics/?q=%D0%B4%D0%BB%D1%8F+%D0%BB%D1%8E%D0%B1%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%B9+fx

 
SanSanych Fomenko:

Ultimamente ho attuato il seguente piano.

Ho preso il mio vecchio consigliere di tendenza sugli indicatori. Si tratta di un vero e proprio Expert Advisor che fa trading su un conto reale.

Ora sto cercando i suoi svantaggi e cercando di diminuirli usando R.

Cerco i suoi inconvenienti e cerco di migliorarli usando R.

Per esempio.

Prendo la direzione generale dalla barra alta. Tuttavia, se guardo attentamente il tempo, c'è un grande ritardo in termini di barre, soprattutto per quelle basse. Quindi se è D1, e faccio trading su M5, risulta che prendo quasi i dati del giorno prima di ieri per la direzione. Anche prevedere un passo avanti per D1 con un errore del 30% ha migliorato radicalmente la redditività di EA e, cosa più importante, ha aumentato la fiducia che non si svenderà.

Che ne dite di questo modo: prevedere in R alcuni elementi di un EA già pronto, anche cattivo, per aggiornarlo?

Come si fa a trovare un'idea del genere?

L'idea è interessante e ho anche alcuni EA funzionanti. Forse penserò a come aggiornarli. Ma non capisco cosa esattamente deve essere migliorato? Di cosa ha bisogno la macchina per imparare?

L'Expert Advisor ha una logica rigida per l'apertura e la chiusura delle posizioni. Nell'apprendimento automatico, la decisione viene presa in un modo leggermente diverso.

Quindi, non è esattamente chiaro cosa farete esattamente.

 
Alexey Burnakov:

È un'idea interessante, anch'io ho degli EA che funzionano. Forse penserò a come aggiornarli. Ma non mi è chiaro cosa esattamente deve essere migliorato? Di cosa avete bisogno per insegnare alla macchina?

L'Expert Advisor ha una logica rigida per l'apertura e la chiusura delle posizioni. Nell'apprendimento automatico, la decisione viene presa in un modo leggermente diverso.

Quindi, non è del tutto chiaro cosa farete esattamente.

Quello che farete è chiaro. Quello che non è chiaro è perché ne abbiamo bisogno. In primo luogo, se c'è un sistema che analizza la correttezza dell'altro sistema e/o controlla i parametri, allora il sistema controllato diventa inutile, perché se li si usa insieme, l'efficienza totale di entrambi diminuirà in una volta sola e sarà inferiore a quella che si avrebbe usandoli separatamente. Per esempio, se c'è un sistema che dà il 70% di decisioni corrette, e c'è un sistema che può controllare uno o più parametri con il 99% di precisione, allora l'efficienza finale sarà uguale:

0,7*0,99=0,693

che è inferiore ai sistemi da soli.

Amen. È meglio cercare di migliorare il sistema originale senza "controllori".