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

Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
E quali sono i risultati nelle previsioni? Oso chiedere.
Ecco il foglio di calcolo preparato per la formazione del modello.
I prezzi sono convertiti in delta per colonne; colonne rimosse senza modifiche o con NA.
Ha stipato 3 ritardi in ogni riga per ogni colonna (riga corrente meno la precedente; precedente meno la preesistente; preesistente meno la preesistente)
Target - valore di aumento/diminuzione sulla riga successiva (riga successiva meno la riga corrente, arrotondato a +-1, o 0 se nessun cambiamento; 3 classi in totale). Tutti gli obiettivi hanno il prefisso "target_".
*Non si possono usare altri obiettivi per prevedere un obiettivo, o sarebbe una sbirciata nel futuro. Tutte le colonne che hanno il prefisso "target_" non possono essere usate come predittore o intuizione.
Problema.
Diviso il file csv in due parti per righe, rapporto 10:1 per i dati di allenamento e fronttest. Ho addestrato il modello per target_SiH7.bid (dalla tabella sopra) e ho ottenuto una precisione di classificazione del 62% sui dati di allenamento e del 74% sui nuovi dati. Era felice, ma ricontrollato, si è scoperto che la classe 0 è molto sbilanciata in relazione agli altri, e solo dalla quantità ha il 60% e il 74%. Cioè, il modello ha imparato a rilevare bene lo 0, ma si è impantanato sulle classi -1 e 1.
È necessario un punteggio diverso. Per due classi sbilanciate questa metrica è ottima -https://en.wikipedia.org/wiki/Cohen's_kappa, ma nel nostro caso ci sono tre classi sbilanciate, non due, c'è un analogo Kappa per 3?
Se me lo chiedete probabilmente non posso rispondere in modo univoco, ci sono molte cose che sono previste e tutto è diverso. Ma in media circa il 60-65%.
Interessante, puoi descriverlo più dettagliatamente...
È solo che ora sono in un'area di previsione completamente diversa e non posso permettermi di essere disperso, quindi non posso fare esperimenti con te in questa data di marzo, ma è molto interessante da leggere e osservare, scrivi di più per favore...
si scopre che la classe 0 è molto sbilanciata rispetto alle altre, e solo in termini di quantità ha il 60% e il 74%. Cioè, il modello ha imparato a rilevare molto bene lo 0, ma ha rinunciato alle classi -1 e 1.
Ho avuto lo stesso problema quando ho addestrato la mia foresta casuale per le inversioni a U, c'erano naturalmente molte meno inversioni a U che non inversioni a U. Più alberi facevo, più il MO segnava sulle classi di turno e si concentrava di più sulle classi non di turno.
Ci sono diversi metodi in caret per bilanciare le classi, ma tutti sono banali - o raddoppiare la classe che ha meno osservazioni per allineare la somma delle osservazioni in tutte le classi per diventare la stessa o rimuovere le osservazioni non necessarie dalla classe che ha più osservazioni.
Nessuno dei metodi è più redditizio che senza bilanciamento (ma questo è solo nel mio caso).
Interessante, puoi descriverlo più dettagliatamente...
Sto lavorando proprio ora in un'area completamente diversa della previsione e non posso permettermi di perdermi, ecco perché non posso fare esperimenti con te su questo mart, ma è molto interessante da leggere e osservare, per favore scrivi di più...
Ho avuto lo stesso problema quando mi allenavo per le inversioni a U, le inversioni a U naturalmente erano molto meno di quelle non a U. Più alberi facevo, più il MO si impantanava con la classe U-turn e si concentrava di più sulla classe non-turn.
Ci sono diversi metodi in caret per bilanciare le classi, ma tutti sono banali - o raddoppiare la classe che ha meno osservazioni per allineare la somma delle osservazioni in tutte le classi per diventare la stessa o rimuovere le osservazioni non necessarie dalla classe che ha più osservazioni.
Nessuno dei metodi è più redditizio che senza bilanciamento (ma questo è solo nel mio caso)
Tutto è negoziabile. Ho suggerito i forts futures, per esempio Si, RI, BR ecc. i più liquidi in generale. Suggerisco il segnale (-1,0,1)(short,cash,long) come risultato, il segnale è inequivocabile della probabilità e non distortoda MM come ordini. La post-elaborazione, i segni e il targeting dipendono da voi, o dal libro.
Dopo aver riflettuto un po' sono giunto alla conclusione che almeno un altro bicchiere andrebbe aggiunto{price:vol,...||..., price:vol } così com'è, un ultimo al secondo, per ogni strumento previsto, poi il delta non serve e anche bid, ask, è IMHO obbligatorio, se con il nastro al secondo i volumi spaccati e lo spostamento di OM, più o meno informativo, allora per il bicchiere un delta è ben poca cosa, almeno si dovrebbero vedere diverse distribuzioni "piatti", ecc e questo è sufficiente come inizio. Aggiungi un bicchiere e pubblica un dataset di allenamento per un paio di giorni, giocheremo. :)
Alla fine si è deciso per ilPi di Scotthttps://en.wikipedia.org/wiki/Scott's_Pi
Ecco i miei risultati con questa stima, ho addestrato il modello sul primo 91% delle linee, e poi ho fatto il fronttest sugli ultimi dati rimanenti (rapporto backtest : fronttest = 10:1)
colonna "class_0_rate" nella tabella - rapporto tra la classe 0 e le classi -1e1, in modo da poter setacciare in Excel i risultati in cui questo valore è troppo alto.
Le ultime due colonne sono la metrica Pi di Scott per l'allenamento e il test, il valore sarà da -1 a 1; dove 0=il risultato è casuale e il meodello è inutile, e 1 = tutto va bene. Un risultato negativo non è buono, correlazione inversa, puoi provare a invertire il risultato della previsione. La correlazione inversa a volte funziona bene con due classi quando si negozia l'esatto contrario della previsione. Ma con tre classi è difficile trovare il contrario, ogni classe ha due valori opposti e in questo caso il valore negativo è anche cattivo.
Penso che dobbiamo scegliere la valuta che le previsioni di bid (o ask) hanno valori simili e alti nel backtest e nel fronttest, per esempio xagusd. Anche se un punteggio di 0,18 su una scala da 0 a 1 è piccolo. E anche prevedere un tick in anticipo nel trading reale è un male. In generale c'è un risultato, ma non è applicabile :)
Codice R per Scott's Pi
if(length(act) != length(pred)){
stop("different length")
}
n_observ <- length(act)
all_levels <- unique(c(act,pred))
n_levels <- length(all_levels)
marginal_matrix <- matrix(NA, ncol=n_levels, nrow=n_levels)
colnames(marginal_matrix) <- all_levels
rownames(marginal_matrix) <- all_levels
for(i in 1:n_levels){
for(j in 1:n_levels){
marginal_matrix[i,j] <- sum((act==all_levels[i]) & (pred==all_levels[j]))
}
}
diagSum <- 0
for(i in 1:n_levels){
diagSum <- diagSum + marginal_matrix[i,i]
}
diagSum <- diagSum / n_observ
marginalSum <- 0
for(i in 1:n_levels){
marginalSum <- marginalSum + ((sum(marginal_matrix[i,]) + sum(marginal_matrix[,i]))/n_observ/2)^2
}
p <- marginalSum
return((diagSum - p)/(1-p))
}
Alla fine si è deciso per ilPi di Scotthttps://en.wikipedia.org/wiki/Scott's_Pi
Ecco i miei risultati con questa stima, ho addestrato il modello sul primo 91% delle linee, e poi ho fatto il fronttest sugli ultimi dati rimanenti (rapporto backtest : fronttest = 10:1)
colonna "class_0_rate" nella tabella - rapporto tra la classe 0 e le classi -1e1, in modo da poter setacciare in Excel i risultati in cui questo valore è troppo alto.
Le ultime due colonne sono la metrica Pi di Scott per l'allenamento e il test, il valore sarà da -1 a 1; dove 0=il risultato è casuale e il meodello è inutile, e 1 = tutto va bene. Un risultato negativo non è buono, correlazione inversa, puoi provare a invertire il risultato della previsione. La correlazione inversa a volte funziona bene con due classi quando si negozia l'esatto contrario della previsione. Ma con tre classi è difficile trovare il contrario, ogni classe ha due valori opposti e in questo caso il valore negativo è anche cattivo.
Penso che dobbiamo scegliere la valuta che le previsioni di bid (o ask) hanno valori simili e alti nel backtest e nel fronttest, per esempio xagusd. Anche se un punteggio di 0,18 su una scala da 0 a 1 è piccolo. E anche prevedere un tick in anticipo nel trading reale è un male. In generale c'è un risultato, ma non è applicabile :)
Codice R per Scott's Pi
if(length(act) != length(pred)){
stop("different length")
}
n_observ <- length(act)
all_levels <- unique(c(act,pred))
n_levels <- length(all_levels)
marginal_matrix <- matrix(NA, ncol=n_levels, nrow=n_levels)
colnames(marginal_matrix) <- all_levels
rownames(marginal_matrix) <- all_levels
for(i in 1:n_levels){
for(j in 1:n_levels){
marginal_matrix[i,j] <- sum((act==all_levels[i]) & (pred==all_levels[j]))
}
}
diagSum <- 0
for(i in 1:n_levels){
diagSum <- diagSum + marginal_matrix[i,i]
}
diagSum <- diagSum / n_observ
marginalSum <- 0
for(i in 1:n_levels){
marginalSum <- marginalSum + ((sum(marginal_matrix[i,]) + sum(marginal_matrix[,i]))/n_observ/2)^2
}
p <- marginalSum
return((diagSum - p)/(1-p))
}