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

 
Yousufkhodja Sultonov:

Le AM sono progettate dalla natura per ingannare voi - coloro che non capiscono le leggi del mercato. E tutti ci sono cascati. Sorprendentemente, è un fatto. Guardatevi intorno e vi renderete conto che la MA è una proprietà di tutte le serie numeriche, indipendentemente dal fatto che siano di mercato o casuali. Svegliatevi commercianti, non lasciatevi ingannare.

Io la chiamerei paranoia)).

Gli AM sono il filtro più comune che non è colpevole di nulla. Qualsiasi metodo di accoppiamento è buono dove e per dove è applicabile.

 
Maxim Dmitrievsky:

quindi qual è la vera domanda sulla ricerca delle caratteristiche?

c'è solo il prezzo nel nostro caso. Qualsiasi trasformazione dei prezzi è una regolarità a priori, sotto forma di una sorta di "memoria" del processo (indicatori costruiti su n periodi). Cioè, se non conosciamo le regolarità, possiamo solo inserire il prezzo, gli incrementi con periodi diversi per tenere conto dei processi di memoria.

cosa può essere oltre agli incrementi di prezzo? o no, cosa stai scegliendo così scrupolosamente, c'è? :)

C'è un processo di atvoregressione con ordine, si può fare lo stesso attraverso NS. Mi sembra che questa sia l'unica cosa che può essere insegnata. Voglio dire che prendere i modelli econometrici ed estenderli

IMHO... ecco perché non provo nemmeno a raccogliere le patatine :) e i nervi vanno bene (ma non proprio)

in altre parole, cosa possiamo trovare nel prezzo: tendenza, stagionalità, ciclicità, rumore

Tu stesso hai postato un esempio un paio di pagine fa con un neurone che impara a riconoscere una spirale. Le due caratteristiche standard richiedono 3 strati nascosti di neuroni. E se si aggiungono altre funzioni, un solo livello è sufficiente.
Così anche qui, si può dare in pasto a un neurone un centinaio di incrementi passati ed elaborare il tutto in una dozzina di strati nascosti, oppure si possono ottenere delle buone caratteristiche fatte in casa che una griglia a singolo strato degli anni 90 può gestire.

 

Ho trovato un altro pacchetto interessante per setacciare i predittori. Si chiama FSelector. Offre circa una dozzina di metodi per setacciare i predittori, compresa l'entropia.

Ho preso un file con predittori e un obiettivo da qui -https://www.mql5.com/ru/forum/86386/page6#comment_2534058


library(FSelector)
library(corrplot)

load("ALL_cod.RData")
trainTable <- Rat_DF1

PREDICTOR_COLUMNS_SEQ <- 1:27
TARGET_COLUMN_ID     <- 28

targetFormula <- as.simple.formula(colnames(trainTable)[PREDICTOR_COLUMNS_SEQ], colnames(trainTable)[TARGET_COLUMN_ID])

impMatrix <- matrix(NA, nrow = 0, ncol = length(PREDICTOR_COLUMNS_SEQ))

impMatrix <- rbind(impMatrix, colnames(trainTable)[PREDICTOR_COLUMNS_SEQ] %in% cfs(targetFormula, trainTable))
rownames(impMatrix)[nrow(impMatrix)] <- "cfs"
impMatrix <- rbind(impMatrix, chi.squared(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "chi.squared"
impMatrix <- rbind(impMatrix, colnames(trainTable)[PREDICTOR_COLUMNS_SEQ] %in% consistency(targetFormula, trainTable))
rownames(impMatrix)[nrow(impMatrix)] <- "consistency"
if(class(trainTable[,TARGET_COLUMN_ID]) != "factor"){
  impMatrix <- rbind(impMatrix, linear.correlation(targetFormula, trainTable)[[1]])
  rownames(impMatrix)[nrow(impMatrix)] <- "linear.correlation"
  impMatrix <- rbind(impMatrix, rank.correlation(targetFormula, trainTable)[[1]])
  rownames(impMatrix)[nrow(impMatrix)] <- "rank.correlation"
}
impMatrix <- rbind(impMatrix, information.gain(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "information.gain"
impMatrix <- rbind(impMatrix, gain.ratio(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "gain.ratio"
impMatrix <- rbind(impMatrix, symmetrical.uncertainty(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "symmetrical.uncertainty"
impMatrix <- rbind(impMatrix, oneR(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "oneR"
impMatrix <- rbind(impMatrix, random.forest.importance(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "random.forest.importance"
impMatrix <- rbind(impMatrix, relief(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "relief"

impMatrix

for(i in 1:nrow(impMatrix)){
  if(length(unique(impMatrix[i,]))==1){
    impMatrix[i,] <- 0
  }else{
    impMatrix[i,] <- -1 + (impMatrix[i,]-min(impMatrix[i,]))/(max(impMatrix[i,])-min(impMatrix[i,]))*2
  }
}

while(nrow(impMatrix) < ncol(impMatrix)){
  impMatrix <- rbind(impMatrix, 0)
}
while(ncol(impMatrix) < nrow(impMatrix)){
  impMatrix <- cbind(impMatrix, 0)
}

impMatrix <- as.matrix(impMatrix)
colnames(impMatrix) <- colnames(trainTable)[PREDICTOR_COLUMNS_SEQ]

corrplot(impMatrix)

La valutazione del predittore per ogni metodo che ho mostrato nel grafico alla fine.

Il blu è buono, il rosso è cattivo (per il corrplot i risultati sono stati scalati a [-1:1], per la valutazione esatta vedere i risultati di cfs(targetFormula, trainTable), chi.squared(targetFormula, trainTable), ecc.)
Puoi vedere che X3, X4, X5, X19, X20 sono ben valutati da quasi tutti i metodi, puoi iniziare con loro, poi provare ad aggiungere/rimuovere altro.

Tuttavia, i modelli in rattle non hanno superato il test con questi 5 predittori su Rat_DF2, di nuovo il miracolo non è avvenuto. Cioè, anche con i predittori rimanenti devi regolare i parametri del modello, fare la validazione incrociata, aggiungere/rimuovere i predittori da solo.

 
SanSanych Fomenko:

Potresti eseguire una finestra sul risultato dell'unione e dare dei grafici:

  • valori di entropia
  • Risultati adfTest
  • Risultati dell'ArchTest

Ho preso solo eurusd m1 per circa gennaio di quest'anno, e una finestra scorrevole di 1 giorno.

Per logica, se l'entropia sta crescendo, allora si dovrebbe sospendere il trading, e continuare il trading a bassa entropia. Ma qui abbiamo una tendenza a bassa entropia per qualche motivo, anche se è più facile fare trading a piatto.

(errore di battitura corretto nel codice allegato, scaricatelo di nuovo se avete già avuto il tempo di scaricare quello vecchio)

 
Ildottor Trader:

Un paio di pagine fa hai postato un esempio con una rete neurale che impara a rilevare una spirale. Le due caratteristiche standard richiedono 3 strati nascosti di neuroni. E se si aggiungono altre funzioni, un solo livello è sufficiente.
Anche in questo caso, si può alimentare un neurone con un centinaio di incrementi passati ed elaborare il tutto in una dozzina di strati nascosti, o ottenere delle buone caratteristiche fatte in casa che una griglia a uno strato degli anni 90 può gestire.

Lo capisco, ma la spirale non cambia nel tempo... pensate che falso problema state risolvendo, quando la spirale nel tempo è ora un quadrato e ora un'ellisse

e la validazione incrociata non aiuta perché le transizioni di stato sono casuali.

 
Ildottor Trader:

Logicamente, se l'entropia aumenta, si dovrebbe smettere di fare trading, e continuare a fare trading quando l'entropia è bassa. Ma qui, quando l'entropia è bassa, per qualche motivo è in tendenza, anche se è più facile fare trading in un piatto, il che è insolito.


Per questo dico: prenditi il tuo tempo.

Ad alta entropia si ottiene la distribuzione normale con trading in controtendenza.

A bassa entropia - distribuzione di Pareto, tendenza, "memoria" - comunque la si voglia chiamare.

Si scopre che hai delle cose già pronte in R, è più facile per te. Io, d'altra parte, ho un sacco di lavoro da fare ora per rendere conto della non-entropia, quindi ho abbandonato le discussioni del forum.

Resto della mia opinione: la contabilità dell'entropia è la chiave di tutto.

 
Maxim Dmitrievsky:

e la validazione incrociata non aiuterà perché le transizioni di stato sono casuali

Se le transizioni di stato sono casuali, allora il processo è markoviano e questo intero thread del forum può essere rimosso per inutilità :)

Ma io, per esempio, credo che il processo non sia markoviano. Alexander sembra essere d'accordo, è molto più bravo di me nelle statistiche, mi fiderei di lui.

 
Ildottor Trader:

Se le transizioni di stato sono casuali, allora il processo è markoviano e questo intero thread del forum può essere cancellato per inutilità :)

Ma io, per esempio, credo che il processo non sia markoviano. Alexander sembra essere d'accordo, conosce le statistiche molto meglio di me, mi fiderei di lui.

Ho già scritto: casuale a livello locale, non si può tenerne conto senza passare al grande ritardo o ad altra scala, e lì il processo diventa di nuovo prevedibile. Uno MA, la popolazione generale è sconosciuta e il numero di trasferimenti in un'altra scala è limitato. Ecco perché Alexander usa le zecche. È così, ma anche questo non funzionerà sempre quando ci imbattiamo nell'insufficienza della storia dovuta alla sua assenza, e di conseguenza, all'assenza di un'idea chiara dei modelli del BP indagato.

In una parola, alcune transizioni a livello locale non possono essere previste affatto, è necessario un altro livello di rappresentazione

 
Ildottor Trader:

Se le transizioni di stato sono casuali, allora il processo è markoviano e questo intero thread del forum può essere cancellato per inutilità :)

Ma io, per esempio, credo che il processo non sia markoviano. Alexander sembra essere d'accordo, conosce le statistiche molto meglio di me, mi fiderei di lui.

Anche se non uso reti neurali, ma ho letto il thread, perché Feynman era convinto che sia possibile prevedere l'ulteriore movimento della particella dallo stato A allo stato B (esattamente da stato a stato, e non solo estrapolare all'infinito).

Per questo scopo ha usato come input i soliti incrementi tra lo stato attuale e quello precedente, e ha preso in considerazione molti parametri aggiuntivi. Shelepin L.A. fu il primo ad iniziare ad usare la nonentropia e morì per qualche motivo... non ha portato il lavoro alla fine. Quindi, tocca a noi finire questo argomento.

 

Sì, ho dimenticato di dirlo.

Gli stati sono considerati un insieme di dati che caratterizzano quasi completamente una particella. Cioè è un insieme di dati, in parole povere - volume campione, con le sue caratteristiche - curtosi, asimmetria, non-entropia, ecc.

Cioè con la fiducia di R. Feynman è possibile affermare, che avendo definito correttamente il volume del campione per la coppia di calcestruzzo, avendo calcolato sulla storia valori medi caratteristici di questi coefficienti per questo campione, è possibile prevedere, che avendo al momento attuale il certo insieme di parametri, in un certo intervallo di tempo, il sistema passerà ad uno stato con i suoi parametri di stato stazionario.

Questo è quello che mi aspetto da questo thread. Se hai bisogno di aiuto per determinare la giusta dimensione del campione, contattami e cercherò di aiutarti.