트레이딩의 머신러닝: 이론, 모델, 실전 및 알고리즘 트레이딩 - 페이지 516

 
도서관 :

NS(4분)보다 훨씬 빠른 스캐폴딩도 확인했는데 결과는 거의 같습니다. 흥미롭게도 선형 회귀 는 동일한 결과로 훨씬 더 빠르게 계산합니다.
누군가가 여기에 썼듯이 - 그것은 모두 기능에 관한 것입니다.


글쎄, 이것이 가장 중요한 것이고 다른 모델과 가방을 가지고 노는 것은 큰 증가를주지 않습니다 :)

 
막심 드미트리예프스키 :

내가 이해하는 한 거기에서 1-2 Epoch를 설정할 수 있습니다. 거의 항상 처음으로 수렴합니다 .. 여기에 누락이 있었습니까? 오랫동안 사용하지 않았지만 뭔가 혼란 스러울 수 있습니다.

에포크의 제한 사항은 어디에서도 본 적이 없습니다.
 
도서관 :
에포크의 제한 사항을 어디에서도 본 적이 없습니다.

mlptrainlm 함수

/**************************************************** **** ************************** 수정된 Levenberg-Marquardt를 사용하여 정확한 신경망 훈련 헤시안 계산 및 정규화. 서브루틴은 신경망을 훈련시킵니다. 임의의 위치에서 다시 시작합니다. 알고리즘은 소규모에 적합합니다. 및 중간 규모 문제(수백 개의 가중치). 입력 매개변수: 네트워크 - 초기화된 지오메트리가 있는 신경망 XY 트레이닝 세트 NPoints - 훈련 세트 크기 감쇠 - 중량 감쇠 상수, >=0.001 감쇠 용어 '감쇠*||가중치||^2'가 오류에 추가되었습니다. 기능. 어떤 Decay를 선택해야 할지 모르겠다면 0.001을 사용하십시오. 다시 시작 - 임의 위치에서 다시 시작 횟수, >0. 무엇을 다시 시작해야 할지 모르는 경우 2를 사용하십시오.
내 생각에는
 
막심 드미트리예프스키 :

글쎄, 이것이 가장 중요한 것이고 다른 모델과 가방을 가지고 노는 것은 큰 증가를주지 않습니다 :)

NN의 장점은 비선형 종속성을 찾아 사용하는 것이라고 생각합니다.
Vladimir의 마지막 기사 에는 2개가 있습니다.

오히려 선형 회귀를 악화시킵니다.

 
막심 드미트리예프스키 :

mlptrainlm 함수

이것은 권장 값이며 아무도 최소 1000을 설정하는 것을 귀찮게하지 않지만 오랜 시간이 걸릴 것입니다 ... 코드를 살펴 보았습니다. epoch 수에 대한주기가 있습니다. 2).
 
도서관 :
NN의 장점은 비선형 종속성을 찾아 사용하는 것이라고 생각합니다.
Vladimir의 마지막 기사 에는 2개가 있습니다.

오히려 선형 회귀를 악화시킵니다.


포리스트는 또한 비선형 이전 패턴에만 독점적으로 사용되며 선형 패턴에서는 작동하지 않습니다.

 
도서관 :
이것은 권장 값이며 아무도 최소 1000을 설정하는 것을 귀찮게하지 않지만 오랜 시간이 걸릴 것입니다 ... 코드를 살펴 보았습니다. epoch 수에 대한주기가 있습니다. 2).
6퍼프에 1500까지 만들었습니다. 예, 오랫동안 약 32시간 동안이지만 우선 결과가 기대 이상입니다. 둘째, 손으로 디자인 하는 것에 비해 완전하고 길지 않습니다.) 그리고 MLP를 사용하면 - 표준 구조에서 원하는 것을 가르칩니다.))
 
막심 드미트리예프스키 :

포리스트는 또한 비선형 이전 패턴에만 독점적으로 사용되며 선형 패턴에서는 작동하지 않습니다.

아마도 이것이 검증 영역의 숲이 선형 회귀 보다 0.4% 더 나은 이유일 것입니다))). 훈련 시간은 각각 36분과 3분입니다(265개 입력). 내가 선형 회귀 를 좋아하는 것.
 

어쩌면 누군가가 탐닉하기를 원할 수도 있습니다. 숲은 증분으로 훈련되며 앞으로 1바에 대한 예측을 제공합니다. 설정은 훈련 깊이, 증분 지연 및 항목 수를 설정합니다(각각의 새 항목은 1bar씩 뒤로 시프트됨). 그런 다음 현재 가격 에서 예측 값을 뺍니다. 히스토그램은 각각의 새 막대에 대해서만 그려지며 시각화 도우미에서 보았습니다.

 //+------------------------------------------------------------------+
//|                                          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 );
  
  }
 
도서관 :
아마도 이것이 유효성 검사 플롯의 숲이 선형 회귀 보다 0.4% 더 나은 이유입니다))). 훈련 시간은 각각 36분과 3분입니다(265개 입력). 내가 선형 회귀 를 좋아하는 것.

나는 또한 비교했다 - 나는 VR autoregression을하고 숲을 통해 동일하게했습니다 - 차이점은 최소화됩니다 :) 본질적으로 이것은 거기에 정상적인 패턴이 없다는 것을 의미합니다.

사유: