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

 
Alexey Burnakov:
  • Cercherò di selezionare i modelli sulla base del FV massimo (ora sto selezionando i modelli per MO). Cioè, cambierò la funzione di valutazione della qualità del modello. HZ....

La giusta funzione per valutare la qualità del modello è molto importante, perché ciò che si cerca e si cerca di massimizzare è ciò che si otterrà alla fine. Se si usa l'accuratezza del modello, è facile scivolare in un massimo locale in cui il modello restituisce sempre la classe con il maggior numero di esempi. Per i dati di addestramento con classi non bilanciate è meglio usare F-score o Cohen's Kappa. Ma anche con loro ho avuto problemi, perché l'aumento del prezzo per barra può essere diverso, e anche avendo una stima positiva, si può essere in negativo - il numero di trade vincenti sarà più di quelli perdenti, ma pochi trade perdenti possono avere grandi perdite irrecuperabili. La simulazione del trading e la valutazione del modello in base ai risultati del trading è la cosa giusta da fare, sono d'accordo con te, ho iniziato a farlo anche io di recente. Necessità di redditività con un piccolo drawdown - quindi la valutazione del modello dovrebbe usare questi concetti.

Penso che MO non sia una buona scelta perché non tiene conto del drawdown, che è importante. Tra tutte le funzioni disponibili per la stima degli EAs in MT5, il Recovery Factor e lo Sharpe ratio sono i migliori.
Il fattore di recupero è il profitto totale diviso per il massimo prelievo per l'intero periodo. Abbastanza semplice, ma efficace.
Sharpe Ratio - molte descrizioni su Internet, ma non ho trovato molte formule. C'è un codice per MT4, penso che dovremmo trasferirlo in R e provare.

double GetSharpeRatioFromHistory(double riskFreeYearlyIncome = 0.01){
   double profitsArray[];
   int profitsArraySize = 0;
   
   double profitsAvg = 0.0;
   int profitsAvgCount = 0;
   
   int ordersHistoryTotal = OrdersHistoryTotal();
   if(ordersHistoryTotal == 0){
      return 0.0;
   }
   for(int i=0; i<ordersHistoryTotal; i++){
      if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){
         if((OrderSymbol() == _Symbol) && (OrderMagicNumber() == magic)){
            double profitForTrade = (OrderProfit() + OrderCommission() + OrderSwap());
            double seconds = double(OrderCloseTime() - OrderOpenTime());
            double riskFreeRate = riskFreeYearlyIncome / double(365*24*60*60) * seconds;
            double tradeResult = profitForTrade - riskFreeRate;
            
            profitsArraySize = ArrayResize(profitsArray, profitsArraySize+1);
            if(profitsArraySize>0){
               profitsArray[profitsArraySize-1] = tradeResult;
            }
            
            profitsAvg += tradeResult;
            profitsAvgCount++;
         }
      }
   }
   
   if(profitsArraySize == 0){
      return 0.0;
   }
   
   profitsAvg /= double(profitsAvgCount);
   
   double stdDev = 0.0;
   for(int i=0; i<profitsArraySize; i++){
      stdDev += ((profitsArray[i]-profitsAvg)*(profitsArray[i]-profitsAvg)/double(profitsArraySize));
   }
   
   if(stdDev == 0.0){
      return 0.0;
   }

   return profitsAvg/stdDev;
}

Il parametro riskFreeYearlyIncome - rendimento annuale per l'investimento senza rischio (deposito bancario), nell'esempio è 1%. Il rapporto di Sharpe tiene conto di quanto la strategia sia migliore di un tale investimento.
double seconds = double(OrderCloseTime() - OrderOpenTime()) - quanto tempo è stato aperto un trade in secondi. Per il bar trading questo è rispettivamente quanti secondi in una barra.

 
Dr.Trader:

1) La funzione giusta per valutare la qualità del modello è molto importante, perché quello che stiamo cercando e cercando di massimizzare, è quello che otteniamo alla fine.

2) Ma anche con loro ho avuto problemi, perché l'aumento del prezzo per barra può essere diverso, e anche avendo una valutazione positiva, si può essere in negativo - il numero di trade vincenti sarà più che perdenti, ma alcuni trade perdenti possono avere una grande perdita irrecuperabile.

3) Simulare un trade, e valutare il modello in base ai risultati del trade è la cosa giusta da fare, sono d'accordo con te, ho iniziato a farlo anche io di recente. Avete bisogno di redditività con un piccolo drawdown - quindi la valutazione del modello dovrebbe usare questi concetti.

4)

Penso che MO non sia una buona scelta perché non tiene conto del drawdown che è importante. Le mie caratteristiche preferite in MT5 sono il Recovery Factor e lo Sharpe ratio.
Il fattore di recupero è il profitto totale diviso per il massimo prelievo per l'intero periodo. Abbastanza semplice, ma efficace.
Sharpe Ratio - molte descrizioni su Internet, ma non ho trovato molte formule. C'è un tale codice per MT4, penso che dovremmo trasferirlo a R e provarlo.


1) Assolutamente

2) esattamente.

3) Sì, aiuta a sbarazzarsi del bias di partenza nella valutazione.

4) FS è il fattore di recupero. Ho molto rispetto per esso in generale. Lo metterò nella funzione di stima, è facile.

Sharpe. È facile! Spiego.

a) Si ottiene un vettore di risultati di trade in pip, giusto?

b) Bisogna simulare il trading con REINVESTMENT e convertire il vettore di punti in un vettore di incrementi percentuali del deposito. Esempio: iniziamo con 100.000 dollari. Scambiamo 0,1 lotto ottenuto 0,001 (dieci punti). Si tratta di 10 dollari per lotto. Così questo valore si trasforma in 10 / 100 000. E così via, tenendo conto dell'aumento o della diminuzione del lotto.

c) Utilizzando il vettore risultante degli incrementi percentuali, calcolare: media, deviazione st.

d) Inserisci un certo rendimento senza rischio all'anno (3%) - il numero è condizionato, un piccolo numero.

e) O traduci i tuoi trade in reddito medio annuo, o decomponi il rendimento senza rischio all'anno per il rendimento medio per trade. Fatto.

f) (il tuo rendimento medio per operazione (per periodo) - rendimento senza rischio) / deviazione standard

Non ho ancora il codice per R. Ma non dovrebbe essere difficile scrivere una tale funzione.

 

Nei mercati finanziari, tutto viene riqualificato! Anche quello che dicono che non è riqualificato è riqualificato.

La regressione lineare robusta è meno ritrattata, ma dà una qualità di apprendimento così merdosa che è anche merdosa nell'esprapolazione a nuovi dati.

 
Alexey Burnakov:

La tua idea di categorizzare i guadagni di prezzo è stata per me puramente emotiva fin dall'inizio. Se prevediamo le tendenze, guardiamo ZZ ed è chiaro: qui c'è una classe e qui un'altra classe. Se guardiamo il grafico dell'aumento dei prezzi, è caotico e si muove a scatti intorno allo zero. Dove sono le classi chiaramente visibili qui?

Questa è pura emozione che do grande importanza alla statistica - tutto dovrebbe essere chiaro e ovvio senza matematica.

Inoltre, per l'aumento dei prezzi sui mercati finanziari l'ARIMA-ARCH è stato sviluppato per molti anni e funziona abbastanza bene. Quest'opera ha anche modelli che considerano Hearst. Cosa c'è di meglio di una classificazione?

La classificazione è i modelli - "testa e spalle", la ricerca dei quali abbiamo automatizzato e che prevedono una classe chiaramente visibile. Con la classificazione troviamo un modello (in forma di albero, per esempio) e diciamo: "dopo questo modello ci sarà la crescita". Se abbiamo formulato correttamente la variabile obiettivo, lo farà. Qui ZZ non è la variabile di destinazione corretta. L'idea qui era di prevedere una crescita futura di 100 pip. Una tale variabile obiettivo mi sembra molto più corretta.

Conclusione. Dovremmo iniziare con la variabile obiettivo, l'obiettivo è sempre il nostro tutto, i falsi obiettivi portano alla palude

 
SanSanych Fomenko:

La tua idea di categorizzare i guadagni di prezzo è stata per me puramente emotiva fin dall'inizio. Se prevediamo le tendenze, guardiamo ZZ ed è chiaro: qui c'è una classe e qui un'altra classe. Se guardiamo il grafico dell'aumento dei prezzi, è caotico e si muove a scatti intorno allo zero. Dove sono le classi chiaramente visibili qui?

Questa è pura emozione che do grande importanza alla statistica - tutto dovrebbe essere chiaro e ovvio senza matematica.

Inoltre, per l'aumento dei prezzi sui mercati finanziari l'ARIMA-ARCH è stato sviluppato per molti anni e funziona abbastanza bene. Quest'opera ha anche modelli che considerano Hearst. Cosa c'è di meglio di una classificazione?

La classificazione è i modelli - "testa e spalle", la ricerca dei quali abbiamo automatizzato e che prevedono una classe chiaramente visibile. Con la classificazione troviamo un modello (in forma di albero, per esempio) e diciamo: "dopo questo modello ci sarà la crescita". Se abbiamo formulato correttamente la variabile obiettivo, lo farà. Qui ZZ non è la variabile di destinazione corretta. L'idea qui era di prevedere una crescita futura di 100 pip. Una tale variabile obiettivo mi sembra molto più corretta.

Conclusione. Bisogna iniziare con la variabile obiettivo, come sempre l'obiettivo è il nostro tutto, i falsi obiettivi portano alla palude

Non so cosa ci sia di emotivamente sbagliato in questo. Questo è un modo di vedere la cosa. Anche il colore della candela si chiama così.

Lasciate che vi ricordi che i compiti di regressione e classificazione erano un appuntamento fisso prima della fase di costruzione di un sistema redditizio.

Inoltre sono arrivato al punto in cui prevedo non solo il segno della crescita ma la crescita con un modulo maggiore. Cioè, entrare a comprare solo dove il sistema prevede una forte crescita, non solo una crescita. Anche con la vendita. Tecnicamente, la macchina impara la regressione. E poi interpreto la sua uscita come forte su, forte giù, penzolante in un canale.

Ora questo è molto vicino a prevedere un futuro aumento di 100 pip. Solo che non mi è chiaro come lei vede la formalizzazione di un tale obiettivo. Cosa significa se prima della crescita c'è stato un calo di 90 pips, e se questa crescita viene raggiunta solo in una settimana?

Al mio orizzonte a ore 9 un forte aumento è da qualche parte intorno ai 20 pip. Dopo 9 ore il trade è chiuso.

E infatti non sto affatto prevedendo la classe ora (aumento / diminuzione / chiacchiere / forte aumento). Sto infatti costruendo un sistema il cui grado nella fase di apprendimento è misurato dall'aspettativa di maturità del commercio. Cioè, l'accuratezza della classificazione può essere bassa (53% per me), ma colpire nella direzione giusta dà un guadagno leggermente più alto che non colpire. Senti la differenza nella dichiarazione del problema? La precisione di classificazione è correlata ma non coincide completamente con la redditività del commercio.

 

A proposito, anche il fattore di recupero in funzione della valutazione della qualità del modello è sbilenco. Posso avere 10 trade e 1 trade perdente, o 500 trade e 10 trade perdenti. Nel secondo caso, il FS può essere inferiore e il profitto 50 volte superiore.

In alternativa, puoi prendere il profitto totale e sottrarre da esso il drawdown massimo. Qui almeno il profitto sarà massimizzato.

O il tradizionale fattore di redditività: profitto totale / perdita totale.

 
Alexey Burnakov:

Nel secondo caso, il FS può essere inferiore e il profitto 50 volte superiore.

Dipende tutto dal rischio che si vuole correre. Per esempio, ci sono due segnali: il primo porta il 100% di profitto all'anno con un drawdown massimo del 10%. Il secondo segnale è il 300% del profitto con un drawdown del 40%. Quindi il secondo segnale è la guida dei profitti.
Ma se si calcola il PV, il leader sarà il primo segnale, ed è giusto, perché si può semplicemente aumentare la dimensione delle operazioni (in lotti) del primo segnale in quattro volte che darà lo stesso drawdown del secondo segnale, ma con maggiori profitti. Oppure se non volete rischiare una grande percentuale del saldo del conto, potete ridurre la dimensione dei lotti del secondo segnale di 4 volte, che darà il rischio desiderato del 10% del saldo, ma il profitto sarà anche inferiore al primo segnale

Cioè, il piano di trading per la strategia può essere il seguente: determinare il massimo drawdown possibile per la strategia roll forward; calcolare quante volte questo drawdown è maggiore / minore del vostro valore ammissibile per il saldo nel vostro conto; calcolare la dimensione del lotto in modo che questi numeri convergano.
L'uso di FS implica che prima di iniziare il trading, si calcolano tutti i rischi e si determina una dimensione del lotto adatta. Più basso è il drawdown della strategia durante il trading, più grande è la dimensione del trade che puoi usare.

 
Alexey Burnakov:

O il tradizionale fattore di redditività: profitto totale/perdita totale.

IMHO, più accettabile è:

criterio_valutazione_TC = totale_transazioni_profitti / (totale_transazioni_profitti + totale_perdite_transazioni)

a condizione che il trading sia fatto con un lotto fisso.

In questo caso, se il criterio è superiore a 0,5, allora la ST ha mostrato un profitto totale, altrimenti una perdita.

Il vantaggio di questo criterio è che è strettamente razionato e il suo valore non può superare l'intervallo da 0 a 1,0 incluso.

I drawdowns, anche a dispetto del profitto finale del sistema di trading, influenzano negativamente questo criterio, cioè sono considerati come un fattore negativo.

 
Yury Reshetov:

IMHO, più accettabile è:

criterio_valutazione_TC = totale_transazioni_profitti / (totale_transazioni_profitti + totale_perdite_transazioni)

a condizione di negoziare con un lotto fisso.

In questo caso, se il criterio è superiore a 0,5, allora la ST ha mostrato un profitto finale, altrimenti una perdita.

Il vantaggio di questo criterio è che è strettamente razionato e il suo valore non può superare l'intervallo da 0 a 1,0 incluso.

I drawdowns, anche nonostante il profitto finale del trade, influenzano negativamente questo criterio, cioè sono considerati come un fattore negativo.

"La_quantità_di_perdita_di_fatti" - chiarisco, intendo il valore assoluto. Grazie, non ho mai visto un criterio così normalizzato.
 
Yury Reshetov:

IMHO, più accettabile è:

criterio_valutazione_TC = totale_transazioni_profitti / (totale_transazioni_profitti + totale_perdite_transazioni)

a condizione di negoziare con un lotto fisso.

In questo caso, se il criterio è superiore a 0,5, allora la ST ha mostrato un profitto finale, altrimenti una perdita.

Il vantaggio di questo criterio è che è strettamente razionato e il suo valore non può superare l'intervallo da 0 a 1,0 incluso.

I drawdowns, anche nonostante il profitto finale del trade, influenzano negativamente questo criterio, cioè sono considerati come un fattore negativo.

Cosa succede se otteniamo il profitto principale in un paio di trade, mentre migliaia di altri trade subiscono piccole perdite? - Non credo che sia una buona idea.