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

 
Maxim Dmitrievsky:

Perché i modelli fanno ancora schifo ^) con grandi errori, hanno bisogno di modelli che funzionano più a lungo

per esempio 2 mesi di apprendimento e 1 settimana di trading

Potresti avere ragione, ma non credo che tali modelli saranno mai scoperti da RDF che un lavoro anche per un giorno completo fino a quando possiamo fare illimitate simulazioni di candele casuali simili a "ALPHA ZERO" algo.

Perché i mercati cambiano quasi ogni ora e un modello fallirà terribilmente se improvvisamente accadrà una notizia o se il mercato cambierà il suo comportamento per qualche motivo. Ma se abbiamo fatto milioni di simulazioni di candele, allora probabilmente il sistema può recuperare con una perdita minima al cambio di mercato e può recuperare rapidamente la perdita dopo. Questo sembra essere possibile.

Proverò sia il tuo metodo di selezione dei modelli che il mio metodo di simulazione delle candele per vedere come va tutto:))

A proposito, ho provato 1 giorno di allenamento, 5 giorni di allenamento ecc. e il giorno dopo non è riuscito:))))))))))))))))

Quindi un modello potrebbe non funzionare... anche se potrei sbagliarmi...

 

Inoltre, ho un'altra richiesta Maxim...

Quando pubblichi il tuo articolo, per favore cerca di commentare il codice il più possibile in modo che sia facile e veloce per gli altri capire il codice in modo che possiamo progredire più velocemente...

Altrimenti, se mi ci vorrà molto tempo per capire il codice, allora ci vorrà ancora più tempo per modificarlo.

Quindi vi chiedo di aggiungere il maggior numero possibile di commenti e spiegazioni del codice. Per ora cercherò di capire velocemente e vi chiederò se non capisco qualcosa:))

 
FxTrader562:

Inoltre, ho un'altra richiesta Maxim...

Quando pubblichi il tuo articolo, per favore cerca di commentare il codice il più possibile in modo che sia facile e veloce per gli altri capire il codice in modo che possiamo progredire più velocemente...

Altrimenti, se mi ci vorrà molto tempo per capire il codice, allora ci vorrà ancora più tempo per modificarlo.

Quindi vi chiedo di aggiungere il maggior numero possibile di commenti e spiegazioni del codice. Per ora cercherò di capire velocemente e vi chiederò se non capisco qualcosa:))

Ok, ora cambio costantemente molte cose e non ha senso commentarlo

anche tu puoi pensare a come cambiare le uscite... forse usare lo zigzag con diverse impostazioni invece della funzione di ricompensa o qualcos'altro
 
Maxim Dmitrievsky:

Ok, ora cambio costantemente molte cose e non ha senso commentarlo

anche tu puoi pensare a come cambiare le uscite... forse usare lo zigzag con diverse impostazioni invece della funzione di ricompensa o qualcos'altro

Ho solo dato una rapida occhiata al codice. Ma fino ad ora non ho capito esattamente dove sono gli indicatori o come decide le entrate commerciali. Quindi non sono sicuro di cosa fare con l'uscita. Intendi l'uscita con GDMH?

Ho appena eseguito il test con varie impostazioni, ma sembra piazzare trade completamente casuali.

Inoltre, nella fase di test non crea i file di testo "Mtrees", giusto?

Voglio dire che il codice che hai fornito non è completo, giusto? Oppure è in grado di piazzare trade se è attaccato direttamente al grafico senza ottimizzazione.

 
FxTrader562:

Ho solo dato una rapida occhiata al codice. Ma fino ad ora non ho capito esattamente dove sono gli indicatori o come decide le entrate commerciali. Quindi non sono sicuro di cosa fare con l'uscita.

Ho appena eseguito il test con varie impostazioni, ma sembra piazzare compravendite completamente casuali così come ha mostrato un comportamento strano e quindi, ho appena riavviato il mio server. Ha a che fare con i kernel reali del VPS?

Inoltre, nella fase di test non crea i file di testo "Mtrees". giusto?

Alla prima esecuzione nel tester scegliete "true".

Farà scambi casuali e imparerà allora e salverà i modelli

La 2a corsa sceglie il falso. Questo è tutto. E lui carica modelli e scambierà in +.

Poi, in EA potete aggiungere agenti, ora avete 5 agenti, 100 caratteristiche per ogni agente, 50 alberi

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

In questa funzione aggiungiamo 100 prezzi di chiusura per ogni agente (100 predittori). E poi normalizzare i dati. Potete aggiungere diversi indicatori, per esempio le prime 50 caratteristiche - prezzi di chiusura, i prossimi 25 rsi, i prossimi 25 adx, o cambiare il numero di predittori quando dichiarate agente

void calcSignal()
  {
   sig1=0;
       
   for(int i=0;i<ArraySize(ag1.agent);i++) - the agents are stored in "ag1.agent" array. We have 5 agents, so array size is 5
     {   
      CopyClose(_Symbol,0,0,100,ag1.agent[i].inpVector); - for each agent from array (now we have 5 agents) fill predictors (100 close prices). For each feature we fill a single value
      normalizeArrays(ag1.agent[i].inpVector);
     }
   sig1=ag1.getTradeSignal(); this function return averaged signal for all agents
  }

Dopo ogni affare aggiorna le politiche, quando chiude il commercio - aggiorna la ricompensa (TD, differenza temporale RL)

void placeOrders()
  {
   if(countOrders(0)!=0 || countOrders(1)!=0)
     {
      for(int b=OrdersTotal()-1; b>=0; b--)
         if(OrderSelect(b,SELECT_BY_POS)==true)
            switch(OrderType())
              {
               case OP_BUY:
                  if(sig1>0.5)
                  if(OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Red))
                     ag1.updateRewards();

                  break;

               case OP_SELL:
                  if(sig1<0.5)
                  if(OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Red))
                     ag1.updateRewards();

                  break;
              }
      return;
     }

   if(sig1<0.5 && (OrderSend(Symbol(),OP_BUY,lotsOptimized(),SymbolInfoDouble(_Symbol,SYMBOL_ASK),0,0,0,NULL,OrderMagic,INT_MIN)>0))
     {
      ag1.updatePolicies(sig1);
     }

   else if(sig1>0.5 && (OrderSend(Symbol(),OP_SELL,lotsOptimized(),SymbolInfoDouble(_Symbol,SYMBOL_BID),0,0,0,NULL,OrderMagic,INT_MIN)>0))
     {
      ag1.updatePolicies(sig1);
     }

Uso molto semplice della libreria

In modalità treno vi mostrerà i log con gli errori per ogni iterazione

2018.09.16 01:33:27.319 2018.09.13 23:59:59   Agent 5 Model 40 passed with errors: 0.2422178988326848  0.5097276264591439
2018.09.16 01:33:27.319 2018.09.13 23:59:59   Agent 5 Model 41 passed with errors: 0.2295719844357977  0.4824902723735409
2018.09.16 01:33:27.319 2018.09.13 23:59:59   Agent 5 Model 42 passed with errors: 0.2558365758754864  0.4961089494163424
2018.09.16 01:33:27.319 2018.09.13 23:59:59   Agent 5 Model 43 passed with errors: 0.2422178988326848  0.4863813229571984
2018.09.16 01:33:27.319 2018.09.13 23:59:59   Agent 5 Model 44 passed with errors: 0.2422178988326848  0.4766536964980545
2018.09.16 01:33:27.319 2018.09.13 23:59:59   Agent 5 Model 45 passed with errors: 0.245136186770428  0.5379377431906615
2018.09.16 01:33:27.319 2018.09.13 23:59:59   Agent 5 Model 46 passed with errors: 0.2587548638132296  0.4912451361867704
2018.09.16 01:33:27.319 2018.09.13 23:59:59   Agent 5 Model 47 passed with errors: 0.2480544747081712  0.4776264591439689
2018.09.16 01:33:27.319 2018.09.13 23:59:59   Agent 5 Model 48 passed with errors: 0.2636186770428016  0.5009727626459144
2018.09.16 01:33:27.319 2018.09.13 23:59:59   Agent 5 Model 49 passed with errors: 0.2616731517509728  0.490272373540856

In modalità commercio nel tester mostra gli errori finali sul sottoinsieme di allenamento e di prova per ogni agente

2018.09.16 01:34:18.107 2018.09.13 23:59:59   RlExp1iter TRAIN LOGLOSS
2018.09.16 01:34:18.107 2018.09.13 23:59:59   0.23249 0.22763 0.24222 0.24125 0.24416
2018.09.16 01:34:18.107 2018.09.13 23:59:59   RlExp1iter OOB LOGLOSS
2018.09.16 01:34:18.107 2018.09.13 23:59:59   0.46790 0.46887 0.46498 0.46790 0.47471

Risultato per 100 prezzi di chiusura:


 
Maxim Dmitrievsky:

Alla prima esecuzione nel tester scegliete "true".

Farà scambi casuali e imparerà allora e salverà i modelli

La 2a corsa ha scelto il falso. Questo è tutto. E lui caricare modelli e si scambierà in +

Poi, in EA potete aggiungere agenti, ora avete 5 agenti, 100 caratteristiche per ogni agente, 50 alberi

In questa funzione aggiungiamo 100 prezzi di chiusura per ogni agente (100 predittori). E poi normalizzare i dati. Potete aggiungere diversi indicatori, per esempio le prime 50 caratteristiche - prezzi di chiusura, i prossimi 25 rsi, i prossimi 25 adx, o cambiare il numero di predittori quando dichiarate agente

Dopo ogni affare aggiorna le politiche, quando chiude il commercio - aggiorna la ricompensa (TD, differenza temporale RL)

Uso molto semplice della libreria

Sì, questo sembra molto semplice e robusto allo stesso tempo... sperimentiamo e vediamo... Grande lavoro!!!!!

Dov'è dunque l'uso del GDMH?

Stavo pensando di scrivere il mio codice GDMH. Puoi semplicemente mostrarmi il codice dove avviene l'input e l'output RDF o dove esattamente stai cercando di implementare GDMH in modo che io provi a scrivere il mio pezzo di codice e poi, possiamo confrontare i risultati sia del tuo che del mio codice e valutare.

 
FxTrader562:

Sì, questo sembra molto semplice e robusto allo stesso tempo...sperimentiamo e vediamo...Grande lavoro!!!!!

Dov'è dunque l'uso del GDMH?

Stavo pensando di scrivere il mio codice GDMH. Puoi semplicemente mostrarmi il codice dove avviene l'input e l'output RDF o dove esattamente stai cercando di implementare GDMH in modo che io provi a scrivere il mio pezzo di codice e poi, possiamo confrontare i risultati sia del tuo che del mio codice e valutare.

Qui uso il semplice kernel CRLAgent::kernelizedMatrix(void) (in libreria), quindi ho bisogno di cambiare questa funzione per gdmh

 
Maxim Dmitrievsky:

Qui uso il semplice kernel CRLAgent::kernelizedMatrix(void) (in libreria), quindi ho bisogno di cambiare questa funzione per gdmh

Ok, vediamo se riesco a scrivere il mio codice....

Se si tratta solo della logica GDMH, allora posso facilmente tradurre o convertire l'algo GDMH in codice MQL5, ma se ha a che fare con alcune altre funzioni del kernel o librerie, allora ho bisogno di tempo per studiare e convertire...

 
FxTrader562:

Un'altra caratteristica: è possibile configurare ogni agente in commissione

CRLAgents *ag1=new CRLAgents("RlExp1iter",5,100,50,regularize,learn);
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   ag1.setAgentSettings(0,100,50,0.1); for each agent you can set number of features, number of trees and r setting, individually
   ag1.setAgentSettings(1,50,50,0.2);
   ag1.setAgentSettings(2,30,50,0.05);
   ag1.setAgentSettings(3,20,50,0.1);
   ag1.setAgentSettings(4,10,50,0.05);
//---
   return(INIT_SUCCEEDED);
  }

Quando si riempiono i valori dei predittori basta cambiare qui:

void calcSignal()
  {
   sig1=0;
       
   for(int i=0;i<ArraySize(ag1.agent);i++)
     {   
      CopyClose(_Symbol,0,0,ArraySize(ag1.agent[i].inpVector),ag1.agent[i].inpVector);
      Print(ArraySize(ag1.agent[i].inpVector));
      normalizeArrays(ag1.agent[i].inpVector);
     }
   sig1=ag1.getTradeSignal();
  }

Inoltre è possibile aggiungere diversi gruppi di agenti

CRLAgents *ag1=new CRLAgents("RlExp1iter1",5,100,50,regularize,learn);
CRLAgents *ag2=new CRLAgents("RlExp1iter2",1,20,50,regularize,learn);
CRLAgents *ag3=new CRLAgents("RlExp1iter3",18,5,50,regularize,learn);

 
FxTrader562:

Ok, vediamo se riesco a scrivere il mio codice....

se si tratta solo della logica GDMH, allora posso facilmente tradurre o convertire l'algo GDMH in codice MQL5, ma se ha a che fare con alcune altre funzioni del kernel o librerie, allora ho bisogno di tempo per studiare e convertire...

Se si può solo convertire la logica gmdh - sarà molto utile, poi posso cambiarla per la mia libreria