Galateo del mercato o buone maniere in un campo minato - pagina 84

 

Neutron grazie per aver inviato la tesi


Grazie anche per l'argomento sollevato e il costruttivo

Finora sono riuscito a implementare qualcosa di simile usando SSAS (purtroppo, ho letto solo oggi sia questo thread che la tesi),

Forse K.N. imparerà qualcosa di utile da questo:

1. Clustering del range intraday in diversi cluster secondo il valore medio della candela H1 e dividendo il giorno in intervalli di tempo (TI)

(2 cluster e 2 VV, ma una coppia di yen ha prodotto 4 cluster e 7 VV)

2. I modelli sono creati per ogni strumento e VI:

- raggruppamento dei precedenti movimenti al rialzo e al ribasso separatamente da due parametri di input: prezzo e tempo

- Clustering dei movimenti futuri verso l'alto e verso il basso separatamente da due parametri di input: prezzo e tempo
(questo modello è ovviamente utilizzato solo per preparare i dati per la fase di formazione)

- modelli predittivi:
-- Baia ingenua

-- regola empirica

-- regole di relazione

-- NS

-- albero di decisione

3. sulla base della deviazione minima da un estremo, si costruisce uno zigzag - si ottiene una struttura f monotona a tratti e, di conseguenza, modelli di N segmenti.

Addestriamo modelli di clustering appropriati e raggruppiamo i segmenti

5. Calcoliamo l'orizzonte predittivo del modello come frazione della lunghezza del modello o della lunghezza fissa o al multiplo più vicino di una frazione più grande della lunghezza del modello

6. Calcolare e classificare la "previsione"

7. Insegnare modelli prognostici

Durante il funzionamento, l'Expert Advisor carica i dati in MS SQL e genera periodicamente punti a zig zag e previsioni. Avendoli ricevuti, analizza i valori del loro supporto e la validità delle regole. Prende una decisione in base al confronto.


Vantaggi:

- È possibile utilizzare e confrontare i risultati di diversi modelli di DM

- i modelli stessi possono scegliere tra una varietà di metodi

Svantaggi:

- Meno parametri per impostare i modelli

- funzionamento ad alta intensità di risorse di MSSQL

- Mancanza di una base scientifica (correggiamo, comprese le conclusioni della suddetta dissertazione)


Senza invadere in alcun modo la grande ombra della scienza e delle prove dell'opera citata,

Vorrei chiedere a tutti quelli che leggono questo thread

sulla convenienza di usare per il clustering degli input aggiuntivi monotonali a forma di piecewise come il volume, il delta del mercato, ecc.

Forse possono svolgere un ruolo aggiuntivo, per esempio di filtro.


S.Privalov: Essenzialmente questo lavoro (dissertazione) definisce una metodologia per la creazione di un modello per una previsione.

Imho, è di questo che stiamo parlando - per esempio, quando si ottiene una previsione secondo le regole dell'ass. si può specificare il numero N di pezzi del modello e chiedere un diverso numero di passi prognostici in avanti e ottenerli con diversi supporti e certezze - cioè si ottiene un modello che può essere usato come base per una previsione.

Pensi che sia possibile/come applicare la tua idea di usare la f. di Kalman a loro?

Avere un modello/e sarebbe interessante allenarlo sotto di loro.


Questo è l'aspetto dei modelli in SSAS, per questo strumento sono stati identificati 3 vi

Qui http://www.fxexpert.ru/forum/index.php?showtopic=656 ci sono librerie di mesh, tra cui mql e altre cose utili.

 

Ho iniziato a scavare in profondità nella rete cercando di determinare il numero ottimale di neuroni nascosti. Sono arrivato ad una conclusione piuttosto interessante, alla quale credo che altri siano arrivati da tempo. Cercherò di spiegarlo in modo intuitivo. Immaginate un neurone di livello nascosto che ha 20 ingressi. Con questi input, come tentacoli, geme sugli input e nel processo di geme, i pesi degli input sono ottimizzati per ottenere gli output attesi della rete. Aggiungiamo ora un altro neurone nascosto, con 20 ingressi collegati ai 20 ingressi del primo neurone, ma con pesi diversi. Poiché il secondo neurone sta sondando gli stessi input, non fornisce essenzialmente alcuna nuova informazione. Se questo è vero, allora l'addestramento della rete porterà agli stessi pesi di ingresso per entrambi i neuroni. Poiché le uscite di entrambi i neuroni sono moltiplicate per i pesi corrispondenti del neurone di uscita e sommate, i pesi di ingresso di entrambi i neuroni nascosti possono differire l'uno dall'altro in ampiezza di un fattore pari al rapporto dei pesi del neurone di uscita.

Comunque, dopo aver addestrato una rete 20-2-1, ottengo questi pesi di ingresso di due neuroni nascosti:

Notate che entrambi i set di pesi si comportano allo stesso modo a seconda del numero di ingresso, tranne che per il moltiplicatore costante. Cioè, entrambi i neuroni danno le stesse informazioni al neurone di uscita. Forse è per questo che l'errore di apprendimento della mia rete difficilmente migliora dopo l'aggiunta di un secondo neurone nascosto. Ecco un'altra immagine dei pesi dei neuroni nascosti. Qui differiscono per un segno, ma anche i segni dei pesi dei neuroni di uscita differiscono


In generale, una tale rete a due strati si comporta in modo simile a una semplice rete a uno strato (modello AR). Con questa conclusione mi trovo in un vicolo cieco. Si scopre che le reti neurali sono adatte solo per la classificazione, cioè quando l'uscita ha solo due valori: sì o no. Cercare di utilizzare la rete per la previsione dei prezzi porta agli stessi risultati del modello AR poiché le uscite dei neuroni non sono sature e la sua funzione di attivazione non lineare gioca un ruolo minore anche se normalizziamo i dati di ingresso a -1...+1. Vado a bere una birra - forse appariranno nuove idee (per esempio, per alimentare +1 e -1 agli ingressi della rete?)

 
M1kha1l писал(а) >>

Finora sono riuscito a implementare qualcosa di simile usando SSAS (purtroppo ho letto solo oggi questo thread e la tesi),

Qui http://www.fxexpert.ru/forum/index.php?showtopic=656 ci sono librerie di mesh, tra cui mql e altre cose utili.

Grazie, M1kha1l, per le tue gentili parole e per aver condiviso la tua conoscenza.

Il tuo post ha bisogno di un po' di tempo per essere compreso. Lo sto leggendo ora.

gpwr ha scritto >>.

Ho iniziato a scavare in profondità nella rete cercando di determinare il numero ottimale di neuroni nascosti. Sono arrivato a una conclusione piuttosto interessante, che probabilmente altri hanno raggiunto molto tempo fa. Cercherò di spiegarlo in modo intuitivo. Immaginate un neurone di livello nascosto che ha 20 ingressi. Con questi input, come tentacoli, geme sugli input e nel processo di geme, i pesi degli input sono ottimizzati per ottenere gli output attesi della rete. Aggiungiamo ora un altro neurone nascosto, con 20 ingressi collegati ai 20 ingressi del primo neurone, ma con pesi diversi. Poiché il secondo neurone sta sondando gli stessi input, non fornisce essenzialmente alcuna nuova informazione. Se questo è vero, allora l'addestramento della rete porterà agli stessi pesi di ingresso per entrambi i neuroni. Poiché le uscite di entrambi i neuroni sono moltiplicate per i pesi corrispondenti del neurone di uscita e sommate, i pesi di ingresso di entrambi i neuroni nascosti possono differire l'uno dall'altro in ampiezza di un fattore pari al rapporto dei pesi del neurone di uscita.

Ottimo lavoro, gpwr, non avevo nemmeno pensato di guardare i pesi dei neuroni paralleli!

Guardiamo il processo di riduzione dell'errore di apprendimento (in rosso) e di riduzione dell'errore di generalizzazione (in blu) per NS multistrato nel processo di apprendimento:

Possiamo vedere che il minimo dell'errore di generalizzazione (quello che ci dà il vantaggio statistico nel processo decisionale) non è lo stesso del minimo dell'errore di generalizzazione. Questo è comprensibile, perché la storia non sempre si ripete esattamente, ma approssimativamente. E mentre c'è solo un minimo globale per l'apprendimento, ci sono molti minimi locali per la generalizzazione e non c'è modo di scegliere il migliore. Si può solo indovinare. Ed è qui che la statistica sotto forma di più neuroni in uno strato nascosto viene alla ribalta. Tutti sono un po' poco allenati e "sguazzano" nei minimi locali, alcuni al loro meglio (in termini di errore di generalizzazione), altri al loro peggio. Capito? In generale, le loro soluzioni sono mediate dal neurone lineare di uscita e tale stima è la migliore. Inoltre, l'errore di stima scende come la radice quadrata del numero di neuroni nello strato nascosto. Questo è il motivo per cui il potere predittivo di NS aumenta con l'aumentare del numero di neuroni nello strato nascosto.

Quei dati, che lei ha citato, parlano di riqualificazione della rete e, di conseguenza, del funzionamento sincrono di tutti i suoi neuroni nello strato nascosto. Il multistrato NS è degenerato in uno pseptron lineare!

 
Neutron >> :

Grazie, M1kha1l, per le tue gentili parole e per aver scelto di condividere le tue conoscenze.

Ci vuole un po' di tempo per comprendere il tuo post. L'ho letto.

Ottimo lavoro, gpwr, non avevo nemmeno pensato di guardare i pesi dei neuroni paralleli!

Andiamo a vedere il processo di riduzione dell'errore di apprendimento (in rosso) e l'errore di generalizzazione (in blu) per il multistrato NS nel processo di apprendimento:

Possiamo vedere che il minimo dell'errore di generalizzazione (quello che ci dà il vantaggio statistico nel processo decisionale) non è lo stesso del minimo dell'errore di generalizzazione. Questo è comprensibile, perché la storia non sempre si ripete esattamente, ma approssimativamente. E mentre c'è solo un minimo globale per l'apprendimento, ci sono molti minimi locali per la generalizzazione e non c'è modo di scegliere il migliore. Si può solo indovinare. Ed è qui che la statistica sotto forma di più neuroni in uno strato nascosto viene alla ribalta. Tutti sono un po' poco allenati e "sguazzano" nei minimi locali, alcuni al loro meglio (in termini di errore di generalizzazione), altri al loro peggio. Capito? In generale, le loro soluzioni sono mediate dal neurone lineare di uscita e tale stima è la migliore. Inoltre, l'errore di stima scende come la radice quadrata del numero di neuroni nello strato nascosto. Questo è il motivo per cui il potere predittivo di NS aumenta con l'aumentare del numero di neuroni nello strato nascosto.

Quei dati, che lei ha citato, parlano di riqualificazione della rete e, di conseguenza, del funzionamento sincrono di tutti i suoi neuroni nello strato nascosto. Il multistrato NS è degenerato in un perseptron lineare!

La mia rete ha ricevuto 300 esempi di allenamento e il numero di pesi era 45. In letteratura c'è l'opinione che con 5 volte più esempi di allenamento che pesi, la rete con il 95% di probabilità sarà generalizzata. Cioè, la mia rete deve avere una buona generalizzazione secondo la teoria, ma in realtà non è così. Ecco perché ho dato degli esempi per confermarlo. Penso che il punto qui non sia quello di prendere più esempi di formazione. Si tratta della natura del problema che sto forzando la rete a risolvere. Se si cerca di far prevedere alla rete la dimensione del prossimo passo del prezzo, allora nell'addestramento essa tenderà a pesi tali per cui i neuroni operano nell'area lineare della funzione di attivazione, al fine di preservare la proporzionalità tra il passo previsto e i passi passati in ingresso. Cioè, il compito stesso è lineare. Dato questo stato di cose, l'aggiunta di neuroni nascosti non migliorerà nulla. E lo stesso strato nascosto diventa inutile. Sperimentando con la mia rete, sono arrivato alla conclusione che un singolo strato funziona bene come un doppio strato. Penso che, leggendo i tuoi post precedenti in questo thread, sei arrivato alla stessa conclusione anche per EURUSD.

Secondo me, la rete dovrebbe essere usata per problemi altamente non lineari (come XOR o problemi di classificazione) per i quali la funzione di attivazione dei neuroni può essere scelta per essere sfalsata.


 

Volevo sottolineare che l'essenza dell'effetto rilevato può essere spiegato dal sovrallenamento di NS a causa di un numero eccessivo di epoche di allenamento, e ci deve essere un optimum nel numero di epoche di allenamento Nopt (vedi figura sopra), che dipende dal coefficiente del tasso di apprendimento. Non ho detto che dovremmo "...per prendere ancora più esempi di allenamento. ", questa è l'essenza del problema della lunghezza ottimale del campione di allenamento Rort=w*w/d. Questo è quello che dice la teoria, non che "...il numero di esempi di allenamento è 5 volte il numero di pesi..." .

Stiamo parlando di cause diverse per l'effetto di sovrallenamento della rete.

Sono d'accordo con te che il compito di prevedere il segno e l'ampiezza della prossima barra è prevalentemente lineare e non può esserci altro. Il mercato è semplice come un piede di porco e imprevedibile come le previsioni del tempo. Anche se un po' più tardi posterò i risultati comparativi per la qualità delle previsioni su barre orarie per il singolo strato, il doppio strato con due neuroni nello strato nascosto e il doppio strato con 4 neuroni nello strato nascosto. Tutti questi saranno presentati in funzione del numero di ingressi d del NS. I dati saranno mediati su 50 esperimenti numerici indipendenti.

 

Non c'è modo di... per mettere un cavallo e una cerva nello stesso carro? Intendo MT4 e MathCad. Per ricevere le quotazioni attuali direttamente in MathCad ed eseguire l'intera analisi lì, e poi trasferire il segnale generato a MT4. La prima cosa che viene in mente è l'uso del file, ma entrambi i programmi devono controllare continuamente il contenuto di due file diversi. Non è molto conveniente. Forse c'è qualcos'altro? È un peccato che non ci sia una gestione degli interrupt in MQL. Come tutto è fatto in modo inopportuno! МТ4, questo cazzo di... Potrei semplicemente sedermi e studiare il C++.


P.S. Sto giocando con i dati per la griglia.

 

No, è noioso implementare l'intero algoritmo di analisi in MQL? O le difficoltà sono in qualche modo esorbitanti?

P.S. E mi stanno arrivando le statistiche...

 

Sì, ci sono difficoltà con MQL ad ogni passo. Per esempio, ecco il codice più semplice (indicatore) per dividere un quoziente in un numero di operazioni:

#property indicator_chart_window
#property indicator_buffers 2

#property indicator_color1 Red
#property indicator_color2 MediumBlue

extern int step = 5;
extern int sp = 3;

double Trans[], Kagi[];
int mn, mx, H, Cotir, Up, Dn;
bool set_new=false, SetMax=false, SetMin=false;

//******************************************************************************
int init() 
{ 
SetIndexBuffer(0, Trans);
SetIndexBuffer(1, Kagi);

SetIndexEmptyValue(0,0.0);
SetIndexEmptyValue(1,0.0);

SetIndexStyle(0,DRAW_ARROW);
SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(0,119);
SetIndexArrow(1,162);

IndicatorShortName ("Kagi++");
return(0); 
} 
//*******************************************************************************

int start() 
{ 
int reset, MaxBar, MaxBarJ, counted_bars=IndicatorCounted(), mx_j, mn_j;

if ( counted_bars<0)return(-1);
if ( counted_bars>0) counted_bars--;
int limit=Bars- counted_bars-1; MaxBar=Bars-2; MaxBarJ= MaxBar-30; 
if ( limit==Bars-1) limit=Bars-2;

//----+ ОСНОВНОЙ ЦИКЛ ВЫЧИСЛЕНИЯ ИНДИКАТОРА 
for(int i= limit; i>=0; i--)
   {
     Cotir = Open[ i]*MathPow(10.0,Digits);
          
     if(! set_new)
      {
        mx = Cotir;
        mn = Cotir;
        H = step* sp;
        set_new = true;
      }               
     if( Cotir - mx > 0)
      {
        mx = Cotir;
        mx_j = i;
      }  

     if( Cotir - mn < 0)
      {
        mn = Cotir;
        mn_j = i;
      }  

     if(! SetMax && Cotir <= mx - H) 
      {
         Trans[ i] = Cotir/MathPow(10.0,Digits); 
         mn = Cotir;           
         mn_j = i;
         SetMax = true;
         SetMin = false;
         Kagi[ mx_j] = mx/MathPow(10.0,Digits);
      } 
     if(! SetMin && mn + H <= Cotir) 
      {
         Trans[ i] = Cotir/MathPow(10.0,Digits); 
         mx = Cotir;       
         mx_j = i;
         SetMax = false;
         SetMin = true;
         Kagi[ mn_j] = mn/MathPow(10.0,Digits);
      } 

   }
return(0);  
}


Funziona ma non possiamo disegnare i suoi risultati con linee nella finestra del grafico. Inoltre, (questo è al di là della mia comprensione) se lo spread è diviso per meno di 6 spread, non emette nulla, nonostante il fatto che gli array siano formati correttamente. In MQL, così come in ogni tecnologia homebrew ci sono un sacco di difficoltà completamente inaspettate (a partire dal doppio confronto e così via...) e "peculiarità", ovviamente non documentate. Sto rimproverando, in generale...

Inoltre capisco come controllare la griglia in MathCad, ma come farlo in MQL - non si può pensare? E se ho un bug da qualche parte?

 
paralocus писал(а) >>

Sì, ci sono difficoltà con MQL ad ogni passo. Ecco un semplice codice per esempio, per dividere un quoziente in un numero di operazioni:

vedere l'allegato - disegnare - godere

paralocus ha scritto >>.

So anche come controllare la griglia in MathCad, ma come farlo in MQL - non ne ho idea. >> E se ho un bug da qualche parte?

Perché non considerare l'uso di NeuroShell o Statistics? Lì si possono creare mesh e metterle in librerie e poi addestrarle da MT e monitorare i loro parametri
File:
 

Sembra che non potrò aspettare di raccogliere statistiche sul mio MS...

Penso che dovrò abbandonare l'idea di presentare i dati di accuratezza della predizione in incrementi di 1 per il numero di ingressi NS. Per esempio, possiamo semplificare il compito prendendo il numero di ingressi come multiplo di 2...

Motivazione: