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

 
Maxim Dmitrievsky:

Sì, è solo la mia funzione di trasformazione con cos e grado casuale, non un kernel

RDF salva la propria struttura se il file, quindi se troppi campioni o caratteristiche - i file possono essere troppo grandi, non sono sicuro di milioni di agenti :) Ma è possibile diminuire l'errore di classificazione e aumentare la stabilità del modello aumentando il numero di agenti con caratteristiche diverse

Momento successivo - nella mia esperienza, dati più grandi != migliore precisione sui nuovi dati. Se i predittori sono cattivi, il risultato sarà lo stesso cattivo

Anche gdmh può lavorare con insiemi di dati estremamente piccoli, e approssimativamente è buono per i dati futuri

Ma... possiamo applicare un modello semplice come la regressione logistica + gdmh (invece di RDF), quindi il processo di apprendimento sarà molto veloce, ma non sappiamo la precisione

Per quanto riguarda GMDH, questo è esattamente quello che ti ho informato quando hai parlato per la prima volta di GMDH. Perché GMDH stesso agisce come una rete neurale e quindi, non c'è uso di RDF qui.

 
Maxim Dmitrievsky:

Sì, ci sono differenze. Per prendere una decisione con RDF deve passare attraverso tutti i nodi e le foglie. Quindi se la struttura RDF è grande - ci vorrà più tempo per ogni decisione

Per questo modo è meglio usare modelli estremamente veloci (NN appresi velocemente) con una risposta veloce. O un hardware migliore, compresa la GPU

Un altro problema - RDF è sensibile al rumore nei dati, quindi quasi sempre overfitted. Per ridurre questo effetto del rumore, è bene incorporare il livello LDA o PCA all'algoritmo

quindi questo non è un compito così banale come potrebbe sembrare a prima vista

Vuoi dire che la tua attuale implementazione di RDF e la tua precedente versione di RDF sono completamente diverse? Questa versione RDF usa la politica o qualcos'altro? Non sono sicuro dei file ".rl". Ho pensato che sono simili ai file "Mtrees" della vostra versione precedente.

Fatemi vedere cosa sta succedendo con la formazione e i test. Ho notato che i modelli e gli agenti non sembrano funzionare correttamente a valori molto grandi. Per esempio, ho appena impostato gli agenti a 100 e i modelli a 100. Gli agenti hanno funzionato, ma i modelli hanno smesso di funzionare a 50 per ogni agente. Non so per quale motivo.

A proposito, sto solo testando la mia algo con RDF dal momento che hai già implementato il codice di base, perché ho fatto migliaia e migliaia di combinazioni diverse di ottimizzazione e test nella tua versione precedente e quindi, ho una comprensione completa della tua versione precedente di RDF. Altrimenti, devo scrivere il codice completo per l'algo "Monte carlo" usato in "ALPHA ZERO" per integrarlo al mio algo che potrebbe richiedere un po' di tempo per me, dato che non sono un programmatore esperto.

 
Maxim Dmitrievsky:

Ciao, prova a capire questo codice, per cominciare:

Qui impariamo RDF con ogni 1 caratteristica (1 input) e salviamo i numeri delle migliori caratteristiche in un array ordinato (modelli). Poi possiamo scegliere i pochi migliori

Il prossimo passo - dobbiamo combinare tutti i migliori predittori con gli altri e controllare di nuovo gli errori, credo, e salvare il risultato. Su questo passo possiamo applicare alcune equazioni polinomiali

Ok, vediamo ora come implementare GMDH con questo codice.

Più potete spiegare il codice, più velocemente posso trovare un ponte. In realtà, il mio problema è che sono un po' debole nella sintassi di alcuni concetti base di C++ come classe, oggetti, array ecc. e quindi, mi ci vuole più tempo per capire l'implementazione di questi concetti, altrimenti, avrei scritto direttamente il file di classe di GMDH e ve lo avrei dato.

Comunque, fammi vedere.

Per favore, spiegatemi bene queste 3 righe. Credo che qui sia il punto in cui dobbiamo applicare la GMDH:

        m[i].Set(0,RDFpolicyMatrix[i][bf]); 
        m[i].Set(1,RDFpolicyMatrix[i][bf+1]);
        m[i].Set(2,RDFpolicyMatrix[i][bf+2]);

Voglio dire che per favore commentate queste 3 righe

Penso che nel mio codice precedente ho fatto qualche piccolo errore nel ciclo. Quindi penso che qui ci sia il ponte fornito se sai esattamente cosa hai scritto su RDF:))... perché non so molto sull'implementazione della matrice...

 ///---Remaining values of Y starting from Y_1
  for(int i=1;i<3;i++)
  m[i]=CalculateNeuron(a);///---Calculate individual value of Y_1,Y_2,Y_3,...to feed to RDF inputs
 
 
Maxim Dmitrievsky:

questo è un array 2d (matrice), formato libreria "alglib", lo riempiamo semplicemente con il numero di predittori (bf) (indice 0 della matrice), il prossimo (1,2) sono i valori di uscita... errore qui :) abbiamo bisogno di impostare i valori con gli indici "features" e "features-1"

m - la nostra matrice attuale ha 1 caratteristica e 2 uscite, maRDFpolicyMatrix contiene tutte le caratteristiche + uscite

fisso

potete leggere qui http://www.alglib.net/dataanalysis/generalprinciples.php#header0

Ok, quindi c'è qualche malinteso... fammi controllare di nuovo il codice su come collegare questo a GMDH...

Se ti viene l'idea, aggiornami in modo che non debba perdere tempo a pensare:))

Penso che RDF e GMDH siano simili e quindi sta diventando difficile integrarsi con l'altro...

Fammi pensare ancora....

 
Maxim Dmitrievsky:

no, è facile da integrare ... cambiamo solo i vettori di ingresso con gdmh, solo alcune trasformazioni

al prossimo passo controlleremo i gruppi di predittori, combinandoli a quali altri (solo alcuni della selezione precedente)

Poi, questo ciclo può fare tutto per la trasformazione delle caratteristiche a cui vi riferite:

Poi, questa è la funzione per calcolare Neuron:

Poi, Y_Final=Y_All+Y_0;

Ora abbiamo rotto gli input in 3 pezzi e possiamo espanderli a qualsiasi numero se necessario...

Qui gli input sono le caratteristiche o il predictor e i pesi sono pesi casuali ... possiamo prendere quelli dalla funzione casuale inizialmente e in seguito quelli saranno memorizzati all'interno di RDF dopo l'allenamento

 
Maxim Dmitrievsky:

prova a rifarlo per matrix ora ))

ma... non abbiamo bisogno di un sommatore qui, abbiamo bisogno di predittori separati per ogni passo, basta espandere la nostra matrice per caratteristiche aggiuntive e aggiungerle, e controllare di nuovo gli errori

ok, dammi un po' di tempo e presto sarò pronto

Ok, nessun problema qui allora, basta rimuovere il segno "+" per i predittori separati e otterrete i predittori individuali:

/// --- Remaining values ​​of Y starting from Y_1 
  for ( int a = 1 ; a < 3 ; a ++) 
  Y_All [a]=CalculateNeuron (a); /// --- Calculate the individual value of Y_1, Y_2, Y_3, ... to feed to RDF inputs...Here feature transformation done

Ma se avete modi migliori che è anche grande:)). Perché questo sarà molto lento a causa di più cicli for... Quindi un'implementazione molto grossolana:))

Ho scritto questo codice in un'ora e quindi non mi piace nemmeno questo codice:))

Matrix non entra nel mio cervello:)))))))))))))))))))))))))))))))))
 
Maxim Dmitrievsky:

hehe... che ne dite di ordinare la matrice 2d? :)

Inoltre, vi chiederò di implementare almeno qualche altra varietà di predittori nella versione finale dell'EA:

1.Alcuni indicatori dell'oscilatore

2. Alcuni indicatori di tendenza

3.Alcuni indicatori di volume

4. Alcuni indicatori da timeframes più alti (buon filtro per segnali rumorosi)

5.Alcuni prezzi di chiusura diretta

Altrimenti, devo continuare a chiederti quando devo aggiungere qualcosa :)))...

Se può passare istantaneamente da un sistema a un altro sistema a ogni candela in base al cambiamento del mercato, allora sarà davvero grande... Infatti questo era l'obiettivo originale che mi aspettavo da questa versione quando hai menzionato le spline, le trasformazioni delle caratteristiche e il trucco del kernel ecc... Il trucco del kernel avrebbe aiutato a rendere il calcolo molto più veloce anche in un server regolare per dati grandi... Quindi ora dobbiamo contare solo su modelli perfettamente allenati e trasformazioni veloci...

A proposito, dagli ultimi 2 giorni di test in avanti devo dire che questa versione di RDF sembra un po' più stabile e affidabile rispetto alla versione precedente di RDF ... voglio dire che il test in avanti corrisponde un po' al backtesting ... ma la versione precedente era per lo più over-fitting con dati di ottimizzazione

 
Maxim Dmitrievsky:

la versione precedente era solo un concetto con idee di base

si può aggiungere un indicatore stesso, invece dei prezzi di chiusura

No, non un solo indicatore...voglio dire che sono confuso quando applico più indicatori simultaneamente nel ciclo dell'array di "ag1.agent"

cosa dovrei usare al posto di"ArraySize(ag1.agent)" quando uso 100 caratteristiche totali, ma 50 per la chiusura e 50 per l'alto

for(int i=0;i<ArraySize(ag1.agent);i++)///---here
     {   
      CopyClose(_Symbol,0,0,50,ag1.agent[i].inpVector);
      normalizeArrays(ag1.agent[i].inpVector);
     }
for(int i=0;i<ArraySize(ag1.agent);i++)///---here
     {   
      CopyHigh(_Symbol,0,0,50,ag1.agent[i].inpVector);
      normalizeArrays(ag1.agent[i].inpVector);
     }

Quindi il codice di cui sopra è corretto per la dichiarazione dell'agente come questa qui sotto?

CRLAgents *ag1=new CRLAgents("RlExp1iter",5,100,50,regularize,learn);///----Here

Beh, sono stato la prima persona a commentare sul vostro forum inglese:))).... Da quel giorno ho eseguito almeno più di 20.000 diversi test e ottimizzazioni su tutti i miei server e tutti i tipi di combinazioni di impostazioni e quindi, ho una migliore comprensione del concetto generale...ma il mio problema principale è che a volte mi blocco anche con il codice semplice....

E posso promettervi che anche se questa algo può appena iniziare a convergere un po' nel tempo, allora posso ottimizzare il codice per eseguire almeno 2 o 3 volte meglio di quello che pubblicherete :))...tutto solo dalla mia esperienza e dalle mie osservazioni :)).

O questo codice qui sotto è corretto?

Or

for(int i=0;i<50;i++)///---here
     {   
      CopyClose(_Symbol,0,0,50,ag1.agent[i].inpVector);
      normalizeArrays(ag1.agent[i].inpVector);
     }
for(int i=50;i<100;i++)///---here
     {   
      CopyHigh(_Symbol,0,0,50,ag1.agent[i].inpVector);
      normalizeArrays(ag1.agent[i].inpVector);
     }
 
Maxim Dmitrievsky:

Grazie mille...Ora, penso di poter fare più indicatori:))))))))

 
Maxim Dmitrievsky:

O come qui, più semplice

Sì, mi piace...Questo è il mio tipo :))

L'esempio precedente è molto condizionato e non può aumentare altri predittori ....

A proposito, ho usato questo metodo per le simulazioni di candele casuali... ma devo cambiare i prezzi di entrata e uscita del trade anche per la formazione e quindi, mi sono confuso...

Per ora proverò questi metodi di indicatori...e li testerò e più tardi proverò il metodo di simulazione delle candele...dato che se avrà successo allora sarà l'ultima versione di qualsiasi EA di apprendimento automatico mai creato nel mercato forex:))))