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

 
elibrario:
Penso che SanSanych intendesse non preoccuparsi di scrivere il proprio codice, ma usare funzioni già pronte di R

Non si tratta solo del codice. Il codice pronto è l'implementazione di alcune idee.

Vedere

gafs - selezione di predittori tramite algoritmo genetico
e il modello finale è basato su un sottoinsieme del predittore, che è attaccato al numero ottimale di generazioni determinato dal ricampionamento


rfe - selezione a ritroso dei predittori

implementa la selezione a ritroso dei predittori basata sulla classifica dell'importanza dei predittori.

I predittori sono ordinati, e quelli meno importanti sono rimossi in modo sequenziale prima della modellazione.

L'obiettivo è quello di trovare un sottoinsieme di predittori che possono essere utilizzati da un modello più accurato

safs - - robustezza della selezione dei predittori simulata (annealing dei predittori)

Durante una ricerca, è necessariauna misura di fitness (cioè il valore energetico di SA) per la ricerca, che è una misura interna di performance. Durante la ricerca, i dati disponibili sono le istanze selezionate dal ricampionamento di alto livello (ad esempio quelle parti di nove decimi menzionate sopra). L'approccio generale deve fare una procedura di ricampionamento diversa. L'altra opzione deve utilizzare più fuori-campioni per determinare la valutazione interna delle prestazioni


Nel farlo, ricordate sempre: "spazzatura dentro, spazzatura fuori".

 
SanSanych Fomenko:

Non si tratta solo del codice. Il codice pronto è l'implementazione di alcune idee.

Vedere

gafs - selezione di predittori tramite algoritmo genetico
e il modello finale è basato su un sottoinsieme del predittore, che è attaccato con il numero ottimale di generazioni determinato dal ricampionamento


rfe - selezione a ritroso dei predittori

implementa la selezione a ritroso dei predittori basata sulla classifica dell'importanza dei predittori.

I predittori sono ordinati, e quelli meno importanti sono rimossi in modo sequenziale prima della modellazione.

L'obiettivo è quello di trovare un sottoinsieme di predittori che possono essere utilizzati da un modello più accurato

safs - - robustezza della selezione dei predittori simulata (annealing dei predittori)

Durante una ricerca, è necessariauna misura di fitness (cioè il valore energetico di SA) per la ricerca, che è una misura interna di performance. Durante la ricerca, i dati disponibili sono le istanze selezionate dal ricampionamento di alto livello (ad esempio quelle parti di nove decimi menzionate sopra). L'approccio generale deve fare una procedura di ricampionamento diversa. L'altra opzione deve utilizzare più campioni per determinare la valutazione interna delle prestazioni


Nel farlo, ricordate sempre: "spazzatura dentro, spazzatura fuori".

Idee interessanti. Non puoi scrivere una cosa del genere da solo...

Ho fatto uno screening di correlazione. Per cominciare.
Ordino i predittori per correlazione totale, poi vado dal meno correlato, e rimuovo quelli correlati con esso. Poi ripeto questo con i restanti predittori.

Pearson Corr M
1.00,0.97,0.86,0.88,0.84,0.80,
0.97,1.00,0.92,0.84,0.79,0.75,
0.86,0.92,1.00,0.73,0.67,0.63,
0.88,0.84,0.73,1.00,0.99,0.98,
0.84,0.79,0.67,0.99,1.00,1.00,
0.80,0.75,0.63,0.98,1.00,1.00,
Corr + Kfull - somma delle colonne
5.35,5.26,4.80,5.42,5.30,5.16,

Kfull ordinato
4.80(2),5.16(5),5.26(1),5.30(4),5.35(0),5.42(3),
Ingressi da cancellare: 1,3,4,
Ingressi da mantenere: 0,2,5,

 
SanSanych Fomenko:

Non si tratta solo del codice. Il codice pronto è l'implementazione di alcune idee.

Vedere

gafs - selezione di predittori tramite algoritmo genetico
e il modello finale si basa su un sottoinsieme del predittore che è collegato al numero ottimale di generazioni determinato dal ricampionamento


rfe - selezione a ritroso dei predittori

implementa la selezione a ritroso dei predittori basata sulla classifica dell'importanza dei predittori.

I predittori sono ordinati, e quelli meno importanti sono rimossi in modo sequenziale prima della modellazione.

L'obiettivo è quello di trovare un sottoinsieme di predittori che possono essere utilizzati da un modello più accurato

safs - - robustezza della selezione dei predittori simulata (annealing dei predittori)

Durante una ricerca, è necessariauna misura di fitness (cioè il valore energetico di SA) per la ricerca, che è una misura interna di performance. Durante la ricerca, i dati disponibili sono le istanze selezionate dal ricampionamento di alto livello (ad esempio quelle parti di nove decimi menzionate sopra). L'approccio generale deve fare una procedura di ricampionamento diversa. L'altra opzione deve utilizzare più fuori-campioni per determinare la valutazione interna delle prestazioni


Nel fare ciò, ricordate sempre "spazzatura dentro, spazzatura fuori".

Idee interessanti, ovviamente non puoi scriverlo da solo, né puoi avere l'idea da solo)

Rimane la questione se idee così complesse siano necessarie per il trading. Cercherò di rimuovere quelli altamente correlati per ora, se il risultato è inaccettabile, dovrò passare a R
 
elibrario:

Idee interessanti, ovviamente non puoi scriverle tu, e non puoi avere l'idea).

Resta da chiedersi se idee così complesse siano necessarie per il trading. Proverò a rimuovere quelli altamente correlati per ora, se il risultato è inaccettabile, dovrò passare a R

Sei bloccato con alglib nel senso che è estremamente inutile nel lavoro di ricerca. R interprete e provare qualsiasi cosa è un gioco da ragazzi.

Rimuovere i predittori altamente correlati - (multicollineari) è un must.

Correlazione tra predittore e obiettivo - certamente interessante. Posso lanciare un'idea per questo tipo di correlazione. Costruisci una regressione lineare (ce ne sono di più sofisticate) e butta fuori quei predittori che non hanno coefficienti significativi. Non ha funzionato per me. Forse puoi farlo tu.

Ma la selezione dei predittori è un must in MO

 

L'articolo https://www.mql5.com/ru/articles/497 suggerisce di cambiare la pendenza della funzione di attivazione a seconda del numero di ingressi.

In Algli e in R, la pendenza è standard o si auto-ottimizza a seconda del numero di input? O è che quasi nessuno sa cosa c'è dentro queste scatole nere?

Нейронные сети - от теории к практике
Нейронные сети - от теории к практике
  • 2012.10.06
  • Dmitriy Parfenovich
  • www.mql5.com
В наше время, наверное, каждый трейдер слышал о нейронных сетях и знает, как это круто. В представлении большинства те, которые в них разбираются, это какие-то чуть ли не сверхчеловеки. В этой статье я постараюсь рассказать, как устроена нейросеть, что с ней можно делать и покажу практические примеры её использования.
 
elibrarius:

L'articolo https://www.mql5.com/ru/articles/497 suggerisce di cambiare la pendenza della funzione di attivazione a seconda del numero di ingressi.

In Algli e in R, la pendenza è standard o si auto-ottimizza a seconda del numero di input? O cosa c'è dentro quelle scatole nere che quasi nessuno conosce?


Alcune librerie di reti neurali offrono all'utente ampie opportunità di personalizzare la rete neurale creata, fino a impostare funzioni per attivare singoli neuroni o aggiungere/rimuovere connessioni individuali. Tuttavia la pratica mostra che spesso non sono necessarie funzionalità estese - ci sono alcune architetture generiche che non possono essere migliorate in modo significativo dalla messa a punto, e la situazione è simile con i metodi di formazione delle reti neurali. Infine, c'è un'altra ragione per non dare all'utente un toolbox troppo ricco - se una rete neurale richiede una regolazione fine, allora tale regolazione non è difficile per l'autore di un pacchetto software, ma può spesso sconcertare l'utente finale. Da qui la conclusione: un buon pacchetto di reti neurali non dovrebbe richiedere una complessa personalizzazione. Seguendo questo principio, il pacchetto ALGLIB cerca di risolvere automaticamente quanti più problemi possibile, lasciando all'utente solo le decisioni veramente importanti.

Architetture disponibili
Il pacchetto ALGLIB permette la creazione di reti neurali senza strati nascosti, con uno strato nascosto e con due strati nascosti. Le connessioni vanno dallo strato di input al primo strato nascosto (se c'è), poi al secondo, poi allo strato di output. Non ci sono connessioni "corte" dallo strato di input a quello di output. Gli strati nascosti hanno una delle funzioni di attivazione compressiva standard, ma una maggiore varietà è possibile per lo strato di uscita della rete neurale. Lo strato di uscita può essere lineare (tali reti sono utilizzate in problemi di approssimazione), può avere una funzione di attivazione compressiva (nel caso in cui le uscite della rete siano limitate a un certo intervallo). Sono anche disponibili reti con una funzione di attivazione limitata dall'alto (o dal basso). Nel caso più semplice (delimitato da zero) questa funzione tende a x se x tende a +∞, e tende esponenzialmente a zero se x tende a -∞.
Un caso speciale sono le reti neurali con strato di uscita lineare e normalizzazione SOFTMAX delle uscite. Sono utilizzati per problemi di classificazione, in cui le uscite della rete devono essere non negative e la loro somma deve essere strettamente uguale a uno, il che permette di utilizzarle come probabilità di assegnazione del vettore di input a una delle classi (nel caso limite le uscite della rete addestrata convergono a queste probabilità). Il numero di uscite di una tale rete è sempre almeno due (limitazione dettata dalla logica elementare).
Tale insieme di architetture, nonostante il suo carattere minimalista, è sufficiente per risolvere la maggior parte dei problemi pratici. L'assenza di dettagli superflui permette di concentrarsi sul problema (classificazione o approssimazione) senza prestare eccessiva attenzione a dettagli poco importanti (ad esempio, la scelta di una particolare funzione di attivazione per uno strato non lineare di solito ha poco effetto sul risultato).

http://alglib.sources.ru/dataanalysis/neuralnetworks.php

 
Letto in precedenza, ma questo non risponde alla domanda (
"Gli strati nascosti hanno una delle funzioni di attivazione compressiva standard" - quale? Adatta i suoi coefficienti al numero di connessioni in entrata? Il fatto che il numero di ingressi influenzi il risultato è stato mostrato nell'articolo. Altrimenti ci sbattiamo 100 neuroni in uno strato nascosto (o anche in uno strato di ingresso), e i seguenti neuroni possono funzionare bene con solo 5 ingressi...
 
elibrario:
Letto in precedenza, ma questo non risponde alla domanda (
"Gli strati nascosti hanno una delle funzioni di attivazione compressiva standard" - quale? Adatta i suoi coefficienti al numero di connessioni in entrata? Il fatto che il numero di ingressi influenzi il risultato è stato mostrato nell'articolo. Altrimenti alimentiamo 100 neuroni in uno strato nascosto (o anche nello strato di ingresso) e i seguenti neuroni possono funzionare bene con solo 5 ingressi...


solo se curiosate nel codice o chiedete loro ... se ci sono 2 tipi di griglia, probabilmente sigmoide e qualche altro in uscita, che varia a seconda che sia lineare o in gamma

e l'architettura a griglia è un po' una seccatura... Dovrò fare un sacco di fatica, ma per fortuna ci sono solo 2 strati nascosti, quindi è già più facile :) Ho letto da qualche parte che lo strato nascosto, in generale, dovrebbe essere 2 volte inferiore all'input... o più, non ricordo )

 

A proposito, ho controllato la correlazione con periodi da 10 a 60 (6 pezzi) sul grafico EURUSD M1, verso l'uscita (non ho uno zigzag, ma qualcosa di vicino).

-0.00,0.01,0.00,0.01,0.01,-0.01

La correlazione è da -0,01 a 0,01, cioè non c'è alcuna correlazione.

Tuttavia, il tuo Expert Advisor mostra un profitto. Penso che sia molto più facile scrivere un normale Expert Advisor che funzioni secondo queste regole.

 
Maxim Dmitrievsky:


Ho letto da qualche parte che lo strato nascosto, in generale, dovrebbe essere la metà dello strato di input... o più, non ricordo)

Una delle regole "Numero ottimale di neuroni nello strato nascosto (# di neuroni nascosti) = (# di ingressi + # di uscite)/2 , o SQRT(# di ingressi * # di uscite) "

E nella rete di Reshetov che hai usato, 2nIngressi