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

 
forexman77:

Come si identificano i "predittori di rumore"? Ho provato a selezionare per rilevanza e rimuovere in questo modo, il risultato è peggiorato.

Ci sono state molte raccomandazioni qui.

Uso uno schema molto semplice, non sto cercando la precisione, ma è molto chiaro.

Prendo un predittore - un vettore - e lo divido in due parti: una parte si riferisce a una classe dell'obiettivo, e l'altra parte si riferisce a un'altra classe dell'obiettivo. Poi costruisco gli istogrammi di ogni parte e li confronto: se coincidono, sono rumore, se divergono, hanno un certo potere predittivo. Se divergono completamente, allora hanno una capacità predittiva del 100% (non l'ho visto). L'intersezione degli istogrammi è un errore di classificazione che non può essere superato in linea di principio.

Ho postato i grafici qui, avevo l'rsi come predittore. È possibile fare una misura della divergenza degli istogrammi.


Questo è un sonaglio - con costo zero si può controllare un numero arbitrario di predittori contro un gran numero di variabili target, cosa che a volte faccio come cortesia a quelli particolarmente pigri.

 
Aleksey Vyazmikin:

Non è chiaro come leggere il vostro indicatore.

Non è un indicatore, è una foresta casuale...

Si possono valutare i modelli per OOB, RMS, ecc. ma non si può capire il risultato del modello.

Solo dopo aver combinato il risultato di una foresta casuale con un grafico dei prezzi è possibile rilevare le peculiarità del comportamento del modello.

Grafico generato usando https://github.com/Roffild/RoffildLibrary/blob/master/Include/Roffild/ToIndicator.mqh

 
Ildottor Trader:

Filtro_02 2016 arr_Buy

La classe "1" supera addirittura lo "0" in numero, quindi ci sono meno falsi ingressi rispetto a prima. Prova questo albero nell'EA per favore? Sono curioso di sapere cosa mostrerà il grafico dei profitti.


y_pred
y_true01
0
1


La prima colonna con le cifre non è filtrata, la seconda è filtrata

Forse ho sbagliato la logica dell'albero?


void FilterTree()
{
int arr_DonProc=DonProcf();
int arr_DonProcVisota=DonProcVisotaf();
int arr_DonProc_M15=DonProc_M15f();
int Level_Support_D1=LevlSupportf(PERIOD_D1);
int Level_Support_W1=LevlSupportf(PERIOD_W1);
int arr_Regressor=RegressorP();
bool BlockBuy=false;

if (arr_DonProc>=2.5)
   {
   if (arr_DonProcVisota>=7.5)
      {
         BlockBuy=true;      
      }
   else
      {
       if (arr_DonProc>=6.5)
          { 
            if (Level_Support_D1>=-2.5)
            {
               if (Level_Support_W1<=1.5)BlockBuy=true;                  
            }          
          }
       else
          {
            if (arr_Regressor>=2.5)
               {
                  if(arr_DonProc_M15>=4.5)BlockBuy=true;
               
               }
            else
               {
                  if(Level_Support_D1<1.5)
                  {
                     if(Level_Support_W1<-1.5)BlockBuy=true;
                  }
               }
          }         
      }   
   
   }

if (BlockBuy==true)BuyNow=false;
SellNow=false;
}
 
Roffild:

Questo non è un indicatore, ma una foresta casuale...

Si possono valutare i modelli per OOB, RMS, ecc. ma non si può capire il risultato del modello.

Solo dopo aver sovrapposto il risultato della foresta casuale al grafico dei prezzi si rivelano le peculiarità del comportamento del modello.

Grafico generato usando https://github.com/Roffild/RoffildLibrary/blob/master/Include/Roffild/ToIndicator.mqh

Non è chiaro, non hai chiaramente la foresta, ma l'indicatore - forse il fatto che ha elaborato qualche logica della "foresta" e l'ha emessa, ma non diventa non un indicatore.

Quindi cosa volevi mostrare, come leggere le letture, cosa danno?

 
Aleksey Vyazmikin:


La prima colonna con i numeri non è filtrata e la seconda colonna con un filtro

Forse ho sbagliato la logica dell'albero?


C'è stato un errore.

if (BlockBuy==false)BuyNow=false;


 
Aleksey Vyazmikin:

Non è chiaro, chiaramente non hai una foresta lì ma un indicatore - forse il punto è che ha elaborato qualche logica della "foresta" e l'ha dedotta, ma questo non lo rende non un indicatore.

Allora, cosa volevi mostrare, come leggere le letture, cosa danno?

CDForest::DFProcess(forest1, netinputs, netoutputs);
indicSymbol.buffer(netoutputs[1] * 100.0, 0);

CDForest::DFProcess(forest2, netinputs, netoutputs);
indicSymbol.buffer(netoutputs[1] * 100.0, 1);
Se non credi che il grafico sia una vera foresta, allora la nozione di foresta è chiaramente sbagliata...
 
Roffild:
Se non credi che il grafico sia una vera foresta, allora la nozione di foresta è chiaramente sbagliata...

Cosa c'entra questo con una questione di fede? Vedo dei ghirigori nel grafico - e non capisco come interpretarli - tutto.

 

Dr. Trader, in generale bisogna ramificare più in alto nell'albero, ci sono poche informazioni per prendere una decisione.

 
Aleksey Vyazmikin:

La prima colonna con i numeri è senza filtro e la seconda con filtro

Capisco. L'albero non poteva imparare a filtrare correttamente, quindi il risultato non era molto migliore con il filtraggio, solo meno accordi. Fondamentalmente ha filtrato alcuni dei buoni scambi e alcuni di quelli cattivi a caso,

Ho allenato l'albero sul 2015 solo per malovhodov.
Filter_02 e mnogovhodov_02 sono stati addestrati per il 2016, è meglio confrontare il 2016 e il 2017 in tester (2017 - nuovi dati che non erano affatto in archivio, questo è il più interessante da vedere).

 
Aleksey Vyazmikin:

Dr. Trader, in generale è necessario ramificare ulteriormente l'albero, ci sono poche informazioni per prendere una decisione.

Ho scoperto che un'ulteriore ramificazione porta ad un overfit. Per una migliore precisione dovremmo passare a modelli più complessi - forestali o neuronici.

Si può ancora ramificare al 100% di precisione sui dati di addestramento, ma che senso ha se un tale albero fallirà solo sui nuovi dati. Voglio insegnare un tale modello che sarà in grado di mostrare quasi lo stesso risultato sui nuovi dati come sui dati di allenamento.