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

 
Alexander_K2:

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 - scrivi, cercherò di aiutarti.

Supponiamo che ci sia un processo autoregressivo, cioè la dipendenza degli stati presenti dagli stati passati.

come selezionare correttamente una combinazione di incrementi con diversi ritardi al fine di prevedere il sistema? I ritardi devono essere costanti o variare nel tempo, e in tal caso come determinarlo (oltre alla banale enumerazione)?

perché se c'è una tale combinazione di incrementi che predice in modo robusto l'obiettivo, allora non si dovrebbero avere problemi ad addestrare NS su di essa.

 
Maxim Dmitrievsky:

allora questa domanda - diciamo che c'è un processo di autoregressione, cioè la dipendenza degli stati presenti da quelli passati

come selezionare correttamente un insieme di incrementi con diversi ritardi per prevedere il sistema? I ritardi dovrebbero essere costanti o cambiare nel tempo, e se dovessero cambiare, come determinarlo (tranne una banale enumerazione)?

C'è un punto qui che ovviamente causa difficoltà.

Il set di dati non è locale nel tempo.

Questo è un punto cruciale!

Cioè, se lavoriamo con il tempo, dobbiamo capire che in un intervallo di tempo strettamente definito abbiamo a che fare con un diverso set di dati. Questa è la pietra angolare della pietra d'inciampo. Cercando di lavorare con lo stesso campione di valori specifici ci ritroviamo con una finestra "fluttuante" di osservazioni nel tempo.

Io aggiro questo problema in 2 modi:

1. Lavorare esclusivamente con un particolare set di tick (volume di campioni) - è lo stesso per una particolare coppia una volta per tutte. Ma questo insieme è caratterizzato da diversi tempi di formazione, e non si possono fare previsioni.

2. lavorare esclusivamente con una finestra temporale costante. In questo caso, al contrario, abbiamo un volume fluttuante di campionamento di zecche in esso. Come evitare questa difficoltà? La risposta è di inserire degli "pseudo-stati", cioè di riempire la quantità di dati nella finestra di osservazione fino alla dimensione del campione richiesta. Lo faccio forzando il lavoro in scala temporale esponenziale. Cioè leggo i dati in una finestra temporale strettamente definita attraverso l'esponente e non è importante se era un tick realmente arrivato o no. In questo caso è possibile fare delle previsioni . L'unica cosa è che dubito che gli intervalli esponenziali siano la soluzione giusta. Feynman ha lavorato con intervalli uniformi.

Se si sceglie 1 modo - il problema della previsione non è risolvibile in linea di principio.

Il modo 2 è risolvibile, ma non ci sono archivi di questo tipo.

Su questo sono bloccato e finora ho stupidamente digitato i miei archivi. Non vedo un altro modo, ahimè...

 
Alexander_K2:

2. lavorare esclusivamente con una finestra temporale permanente. In questo caso, al contrario, abbiamo un volume di campione galleggiante. Come possiamo aggirare questa difficoltà? La risposta è introdurre i cosiddetti "pseudo-stati", cioè portare il numero di dati nella finestra di osservazione alla dimensione del campione richiesta. Lo faccio forzando il lavoro in scala temporale esponenziale. Cioè leggo i dati in una finestra temporale strettamente definita attraverso l'esponente e non è importante se era un tick realmente arrivato o no. In questo caso è possibile fare delle previsioni . L'unica cosa è che dubito che gli intervalli esponenziali siano la soluzione giusta. Feynman lavorava con intervalli uniformi.

In effetti, gli intervalli esponenziali sono esattamente la soluzione giusta al problema della finestra costante, per quanto ne so (dovrebbe essere). Diciamo che il campione di allenamento è di 1000 barre (ticks), qualunque cosa. Naturalmente con una finestra scorrevole i modelli cambiano e l'NS deve essere riqualificato. Ma se il nostro campione contiene una combinazione di incrementi il cui ritardo aumenta esponenzialmente... Mi chiedo di quanti diversi ritardi in totale il sistema avrebbe bisogno non solo per uscire dalla finestra (diciamo, ritardo 1500), ma anche per descrivere tutti gli stati possibili per la stessa finestra, solo ora scorrevole.

Forse sono sciocco :D ma non è difficile da provare. Ma la domanda è quando fermarsi

 
Maxim Dmitrievsky:

Questo è in realtà gli intervalli esponenziali come soluzione al problema della finestra costante, per quanto ho capito, è la soluzione giusta (dovrebbe esserlo). Diciamo che il campione di allenamento è di 1000 barre (tick), qualunque cosa. Naturalmente con una finestra scorrevole i modelli cambiano e l'NS deve essere riqualificato. Ma se il nostro campione contiene una combinazione di incrementi il cui ritardo aumenta esponenzialmente... Mi chiedo di quanti diversi ritardi in totale il sistema avrebbe bisogno non solo per uscire dalla finestra (diciamo, ritardo 1500), ma anche per descrivere tutti gli stati possibili per la stessa finestra, solo ora scorrevole.

Forse sono sciocco :D ma non è difficile da provare. Ma la domanda è quando fermarsi.

E bisogna fermarsi quando il sistema passa da uno stato instabile a uno stabile.

Per esempio, se in un dato momento del tempo vediamo l'aumento della nonentropia (è iniziata una tendenza), allora in un certo intervallo di tempo la nonentropia tornerà al suo caratteristico valore medio calcolato dalla storia.

Come determinare questo intervallo di tempo di transizione? Beh, questa è la vera previsione, non si scherza. Questo è quello che mi aspetto dalle reti neurali e ho letto questo thread :)

 
Alexander_K2:

Ed è necessario fermarsi quando il sistema passa da uno stato instabile a uno stabile.

Cioè, per esempio, se in un dato momento del tempo abbiamo visto un aumento della non-entropia (è iniziata una tendenza), allora dopo un certo intervallo di tempo la non-entropia tornerà al suo caratteristico valore medio calcolato dalla storia.

Come determinare questo intervallo di tempo di transizione? Beh, questa è la vera previsione, non si scherza. Questo è quello che mi aspetto dalle reti neurali e leggere questo thread :)

Ah, il problema era abbastanza banale - addestrare il modello in incrementi esponenziali, e costruire un grafico di spread tra i prezzi previsti e attuali, vedere come si distribuiscono le deviazioni dalla media (residui)

lo farà la prossima settimana :) basta sostituire la parola inentropia con la parola varianza

 
Maxim Dmitrievsky:

ah, bene, il compito era abbastanza banale - addestrare il modello su incrementi esponenziali, e tracciare lo spread tra i prezzi previsti e attuali, vedere come sono distribuite le deviazioni dalla media (residui)

Lo farò la prossima settimana :)

Non vedo l'ora, Maxim. Seriamente - sono sicuro che si può fare. Non dimenticate di aprire il segnale - sarò il primo ad iscrivermi.

Solo 2 cose possono davvero funzionare sul mercato: le reti neurali e il teorico. Tutti gli altri sono spazzatura, fandonie e tasche vuote come risultato.

 
Alexander_K2:

Non vedo l'ora, Maxim. Seriamente - sono sicuro che si può fare. Non dimenticate di aprire il segnale - sarò il primo ad iscrivermi.

Solo 2 cose possono davvero funzionare sul mercato: le reti neurali e un teorico. Tutto il resto è spazzatura, armeggiare e svuotare le tasche come risultato.

Vi mostrerò il bot come esempio, potete modificarlo più tardi :D Lo farò come indicatore all'inizio per chiarezza

 

In seguito a questo -https://www.mql5.com/ru/forum/86386/page643#comment_6472393

Ildottor Trader:

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


La funzione per setacciare i predittori random.forest.importance() ha mostrato risultati abbastanza buoni su alcuni test. È sconveniente che a suo parere tutti i predittori siano almeno un po' importanti. ma se si calcola l'importanza media, per esempio, e si prendono solo i predittori che sono importanti sopra la media, si ottengono ottimi risultati.

library(FSelector)

load("ALL_cod.RData")
trainTable <- Rat_DF1
PREDICTOR_COLUMNS_SEQ <- 1:27
TARGET_COLUMN_ID      <- 29

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

rfImportance <- random.forest.importance(targetFormula, trainTable)
colnames(trainTable)[PREDICTOR_COLUMNS_SEQ][rfImportance[[1]] > mean(rfImportance[[1]])]
 
Dr. Trader:

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

Logicamente, se l'entropia aumenta, 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, è insolito.

(corretto questo refuso nel codice allegato, scaricatelo di nuovo se avete già avuto il tempo di scaricare il vecchio codice)

Non ha senso condurre test yf la quotazione iniziale, perché a occhio è chiaro che la serie non è stazionaria.

E interessanti (non per me - lo uso sempre) sono i grafici per serie temporali log(p/p-1).

Cosa c'è lì dentro? E naturalmente una scala sull'asse delle ordinate è necessaria.

 
Dr. Trader:

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


C'è anche un ampio set molto interessante di strumenti di Rilievo nel pacchetto CORElearn.

Nei miei lunghi esercizi su questo argomento non ho trovato niente di meglio delle funzioni di selezione dei predittori in caret, specialmente saf.

Ma niente di tutto questo funzionerà a meno che la preselezione dei predittori non sia fatta su una base "deve fare" per la variabile obiettivo.

Ripeto ancora con un esempio di due classi:

  • una parte del predittore deve essere legata a una classe e l'altra parte a un'altra classe. L'intersezione di queste due parti dei predittori è ciò che dà l'errore di classificazione, che non può essere superato.



PS.

Discusso i componenti principali e avete visto il difetto che l'algoritmo è senza insegnante.

Qui è con l'insegnante:

sgpls( x, y, K, eta, scale.x=TRUE,
        eps=1 e-5, denom.eps=1 e-20, zero.eps=1 e-5, maxstep=100,
        br=TRUE, ftype='iden' )
Arguments

x       Matrix of predictors.
y       Vector of class indices.
K       Number of hidden components.
eta     Thresholding parameter. eta should be between 0 and 1.
scale.x Scale predictors by dividing each predictor variable by its sample standard deviation?
eps     An effective zero for change in estimates. Default is 1 e-5.
denom.eps       An effective zero for denominators. Default is 1 e-20.
zero.eps        An effective zero for success probabilities. Default is 1 e-5.
maxstep Maximum number of Newton-Raphson iterations. Default is 100.
br      Apply Firth's bias reduction procedure?
ftype   Type of Firth's bias reduction procedure. Alternatives are "iden" (the approximated version) or "hat" (the original version). Default is "iden".

Il pacchetto spls

Motivazione: