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

 
elibrario:

Controllato e impalcatura - molto più veloce di NS (4 min.), e il risultato è circa lo stesso. E la cosa interessante è che la regressione lineare conta ancora più velocemente, con gli stessi risultati.
Come qualcuno ha scritto qui - è tutta una questione di caratteristiche.


Beh, questa è la cosa principale, e il gioco con diversi modelli e borse non darà un grande aumento :)

 
Maxim Dmitrievsky:

Lì, per quanto ho capito, si possono impostare 1-2 epoche, perché converge quasi sempre la prima volta... forse è stata un'omissione? anche se non lo uso da molto tempo, potrei essere confuso.

Da nessuna parte ho visto un limite in epoche
 
elibrario:
Non ho visto un limite da nessuna parte in epoche

funzione mlptrainlm

/************************************************************************* Addestramento delle reti neurali usando Levenberg-Marquardt modificato con calcolo esatto dell'Hessiano e regolarizzazione. La subroutine allena la rete neurale con ripartenze da posizioni casuali. L'algoritmo è adatto a problemi di piccola e media scala (centinaia di pesi). PARAMETRI INPUT: Network - rete neurale con geometria inizializzata XY - set di allenamento NPoints - dimensione del set di allenamento Decay - costante di decadimento dei pesi, >=0.001 Il termine Decay 'Decay*|||Weights|||^2' viene aggiunto alla funzione di errore. Se non sai quale Decay scegliere, usa 0.001. Restarts - numero di riavvii dalla posizione casuale, >0. Se non sai quale Restarts scegliere, usa 2.
Penso che sia questo.
 
Maxim Dmitrievsky:

Beh, questa è la cosa principale, e giocare con diversi modelli e borse non ti darà una grande spinta :)

Penso che il vantaggio di NS sia quello di trovare dipendenze non lineari e usarle.
Ce ne sono 2 nell'ultimo articolo di Vladimir.

La regressione lineare al contrario peggiorerà.

 
Maxim Dmitrievsky:

funzione mlptrainlm

Questo è solo un valore consigliato, nessuno si ferma almeno a 1000, ma ci vorrà molto tempo... Ho guardato nel codice - c'è solo un ciclo sul numero di epoche (ho anche usato 2, a proposito).
 
elibrario:
Penso che il vantaggio di NS sia quello di trovare dipendenze non lineari e usarle.
L'ultimo articolo di Vladimir ne ha 2.

La regressione lineare sarà, al contrario, degradata da loro.


Lo scaffolding è anche usato esclusivamente per i modelli non lineari in anticipo, non funziona su quelli lineari

 
elibrarius:
Questo è solo un valore consigliato, nessuno ti impedisce di mettere 1000, ma ci vorrà molto tempo... Ho guardato nel codice - c'è solo un ciclo sul numero di epoche (ho anche usato 2, a proposito).
L'ha fatto fino a 1500 su un 6 tele. Sì, lungo - circa 32 ore, ma, in primo luogo, il risultato supera le aspettative. In secondo luogo, non è affatto lungo, rispetto alla proiezione a mano). E con MLP - struttura standard, e insegna quello che vuoi)).
 
Maxim Dmitrievsky:

Lo scaffolding è anche usato esclusivamente per i modelli non lineari in anticipo, non funziona su quelli lineari

Forse è per questo che la foresta sulla trama di convalida è migliore dello 0,4% rispetto alla regressione lineare))). Il tempo di apprendimento è di 36 e 3 minuti rispettivamente (a 265 ingressi). Comincia a piacermi la regressione lineare.
 

Se qualcuno vuole giocare, l'impalcatura impara a incrementi e prevede 1 barra avanti. Nelle impostazioni, impostate la profondità di apprendimento, il ritardo per gli incrementi e il numero di voci (ogni nuova voce è uno spostamento di 1 barra indietro). Poi il valore previsto viene dedotto dai prezzi correnti. L'istogramma è disegnato solo per ogni nuova barra, l'ho visto nel visualizzatore.

//+------------------------------------------------------------------+
//|                                          NonLinearPredictor.mql5 |
//|                                                  Dmitrievsky Max |
//|                        https://www.mql5.com/ru/users/dmitrievsky |
//+------------------------------------------------------------------+
#property copyright "Dmitrievsky Max."
#property link      "https://www.mql5.com/ru/users/dmitrievsky"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   1
//--- plot Label1
#property indicator_label1  "Tensor non-linear predictor"
#property indicator_type1   DRAW_COLOR_HISTOGRAM
#property indicator_color1  clrOrangeRed,clrOrange
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- подключим библиотеку Alglib
#include <Math\Alglib\alglib.mqh>

//RDF system. Here we create all RF objects.
CDecisionForest      RDF;                                     //Random forest object
CDFReport            RDF_report;                              //RF return errors in this object, then we can check it
double RFout[1], vector[];                                    //Arrays for calculate result of RF
CMatrixDouble RMmatrix;
int retcode=0;

//--- input parameters
input int             last_bars=500;
input int             lag=5; 
input int             bars_seria = 100;

//--- indicator buffers
double         SpreadBuffer[];
double         ColorsBuffer[];

//--- время открытия предыдущего бара
static datetime last_time=0;
int needToLearn=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,SpreadBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ColorsBuffer,INDICATOR_COLOR_INDEX);
//--- установим индексацию как в таймсерии - от настоящего в прошлое
   ArraySetAsSeries(SpreadBuffer,true);
   ArraySetAsSeries(ColorsBuffer,true);
   RMmatrix.Resize(last_bars,bars_seria);
   ArrayResize(vector,bars_seria-1);
//---
   IndicatorSetString(INDICATOR_SHORTNAME,StringFormat("Non-linear predictor (%s, %s, %s)",_Symbol,(string)last_bars, (string)lag));
   IndicatorSetInteger(INDICATOR_DIGITS,5);
   return(INIT_SUCCEEDED);
  }
 
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
  ArraySetAsSeries(close,true);
  
   if(prev_calculated==0 || needToLearn>last_bars/5) 
     {
      for(int i=0;i<last_bars;i++) 
       {   
        for(int l=0;l<ArraySize(vector);l++)
         {
          RMmatrix[i].Set(l,MathLog(close[i+1+l]/close[i+lag+1+l]));
         }   
        RMmatrix[i].Set(bars_seria-1,MathLog(close[i]/close[i+lag]));
       }
      CDForest::DFBuildRandomDecisionForest(RMmatrix,last_bars,bars_seria-1,1,100,0.95,retcode,RDF,RDF_report);
      needToLearn=0;
     }
     
   if(isNewBar()) 
    {
     if(retcode==1)
      {
       for(int i=0;i<ArraySize(vector);i++)
        {
         vector[i]=MathLog(close[i]/close[i+lag]);
        }
    
       CDForest::DFProcess(RDF,vector,RFout);
       SpreadBuffer[0]=MathLog(close[0]/close[0+lag])-RFout[0];
       ColorsBuffer[0]=(SpreadBuffer[0]>0?0:1);
      }
      needToLearn++;
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| возвращает true при появлении нового бара                        |
//+------------------------------------------------------------------+
bool isNewBar()
  {
   datetime lastbar_time=datetime(SeriesInfoInteger(Symbol(),_Period,SERIES_LASTBAR_DATE));
   if(last_time==0)
     {
      last_time=lastbar_time;
      return(false);
     }
   if(last_time!=lastbar_time)
     {
      last_time=lastbar_time;
      return(true);
     }
   return(false);
  
  }
 
elibrario:
Forse è per questo che la foresta nella trama di convalida è migliore dello 0,4% rispetto alla regressione lineare)). Tempo di apprendimento 36 e 3 min rispettivamente (a 265 ingressi). Comincia a piacermi la regressione lineare.

Ho anche confrontato - ho fatto l'autoregressione BP e ho fatto lo stesso attraverso la foresta - le differenze sono minime :) In sostanza questo significa che non c'è uno schema normale lì o lì vicino