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

 
막심 드미트리예프스키 :

모델은 여전히 \u200b\u200b성공하기 때문에 ^) 큰 오류가 있으므로 더 오래 작동하는 모델이 필요합니다.

예를 들어 2개월 학습 및 1주 거래

당신이 옳을 수도 있지만, 우리가 "ALPHA ZERO" 알고리즘과 유사한 무제한 무작위 양초 시뮬레이션을 할 수 있을 때까지 하루 종일 작동하는 RDF에 의해 그러한 모델이 발견되지 않을 것이라고 생각합니다.

시장은 거의 매시간 바뀌기 때문에 갑자기 뉴스 이벤트가 발생하거나 시장이 어떤 이유로 인해 행동이 바뀔 경우 한 모델은 크게 실패할 것입니다. 그러나 수백만 번의 양초 시뮬레이션을 수행했다면 아마도 시스템이 시장 변화에 따라 최소한의 손실로 복구할 수 있고 나중에 손실을 빠르게 복구할 수 있을 것입니다. 가능한 것 같습니다.

나는 모든 것이 어떻게 진행되는지 보기 위해 모델 선택 방법과 촛불 시뮬레이션 방법을 모두 시도할 것입니다 :))

그건 그렇고, 나는 1 일 훈련, 5 일 훈련 등을 시도했지만 다음 날에 실패했습니다 :)))))))))))))))))

그래서 하나의 모델이 작동하지 않을 수 있습니다. 비록 내가 틀릴 수 있지만...

 

그리고 한가지만 더 부탁할게 Maxim...

기사를 게시할 때 다른 사람들이 코드를 빠르고 쉽게 이해할 수 있도록 최대한 코드에 주석 을 달아서 더 빨리 진행할 수 있도록 해주세요..

그렇지 않으면 코드를 이해하는 데 시간이 오래 걸리면 수정하는 데 더 많은 시간이 걸립니다.

따라서 가능한 한 많은 주석과 코드 설명을 추가해 주시기 바랍니다. 일단 빠르게 이해하려고 노력하고 이해가 안가는 부분이 있으면 질문드리겠습니다:))

 
FxTrader562 :

그리고 한가지만 더 부탁할게 Maxim...

기사를 게시할 때 다른 사람들이 코드를 빠르고 쉽게 이해할 수 있도록 최대한 코드에 주석을 달아서 더 빨리 진행할 수 있도록 해주세요..

그렇지 않으면 코드를 이해하는 데 시간이 오래 걸리면 수정하는 데 더 많은 시간이 걸립니다.

따라서 가능한 한 많은 주석과 코드 설명을 추가해 주시기 바랍니다. 일단 빠르게 이해하려고 노력하고 이해가 안가는 부분이 있으면 질문드리겠습니다:))

좋아, 이제 나는 계속해서 많은 것을 변경하고 그것에 대해 논평할 의미가 없다.

또한 출력을 변경하는 방법에 대해 생각할 수 있습니다. 보상 기능 이나 다른 대신 다른 설정으로 지그재그를 사용할 수 있습니다.
 
막심 드미트리예프스키 :

좋아, 이제 나는 계속해서 많은 것을 변경하고 그것에 대해 논평할 의미가 없다.

또한 출력을 변경하는 방법에 대해 생각할 수 있습니다. 보상 기능 이나 다른 대신 다른 설정으로 지그재그를 사용할 수 있습니다.

방금 코드에 대한 간략한 개요를 보았습니다. 그러나 지금까지 나는 지표가 어디에 있는지 또는 그것이 거래 항목을 결정하는 방법을 정확히 파악하지 못했습니다. 그래서 출력으로 무엇을해야할지 모르겠습니다. GDMH를 사용한 출력을 의미합니까?

그냥 여러가지 설정으로 테스트를 해봤는데 완전 랜덤거래가 되는 것 같습니다.

또한 테스트 단계에서 "Mtrees" 텍스트 파일을 생성하지 않습니다. 맞습니까?

제 말은 당신이 제공한 코드가 완전하지 않다는 것입니다. 맞습니까? 또는 최적화 없이 차트에 직접 첨부하면 거래를 할 수 있습니까?

 
FxTrader562 :

방금 코드에 대한 간략한 개요를 보았습니다. 그러나 지금까지 나는 지표가 어디에 있는지 또는 그것이 거래 항목을 결정하는 방법을 정확히 파악하지 못했습니다. 그래서 출력으로 무엇을해야할지 모르겠습니다.

다양한 설정으로 테스트를 실행했지만 완전히 무작위 거래가 발생하고 이상한 동작을 보여 서버를 재부팅했습니다. VPS의 실제 커널과 관련이 있습니까?

또한 테스트 단계에서 "Mtrees" 텍스트 파일을 생성하지 않습니다. 맞습니까?

테스터에서 처음 실행할 때 "true"를 선택하십시오.

그는 무작위 거래를 하고 모델을 배우고 저장할 것입니다.

2차 실행은 false를 선택합니다. 그게 다야 그리고 그는 모델을 업로드하고 +

다음으로 EA에서 에이전트를 추가할 수 있습니다. 이제 에이전트 5개, 에이전트당 기능 100개, 트리 50개

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

이 함수에서 우리는 각 에이전트에 대해 100개의 종가를 추가합니다(100개의 예측 변수). 그런 다음 데이터를 정규화합니다. 예를 들어 처음 50개 기능(종가, 다음 25개 rsi, 다음 25개 adx)을 추가하거나 에이전트를 선언할 때 예측 변수의 수를 변경할 수 있습니다.

 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
  }

각 거래 후 그는 정책을 업데이트하고 거래를 마감할 때 업데이트 보상(TD, 시간차 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);
     }

정말 간단한 라이브러리 사용법

훈련 모드에서 그는 각 반복에 대한 오류가 있는 로그를 표시합니다.

 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

테스터의 거래 모드에서 각 에이전트에 대한 기차 및 테스트 하위 집합에 대한 최종 오류 표시

 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

100 종가에 대한 결과:


 
막심 드미트리예프스키 :

테스터에서 처음 실행할 때 "true"를 선택하십시오.

그는 무작위 거래를 하고 모델을 배우고 저장할 것입니다.

2차 실행은 false를 선택합니다. 그게 다야 그리고 그는 모델을 업로드하고 +

다음으로 EA에서 에이전트를 추가할 수 있습니다. 이제 에이전트 5개, 에이전트당 기능 100개, 트리 50개

이 함수에서 우리는 각 에이전트에 대해 100개의 종가를 추가합니다(100개의 예측 변수). 그런 다음 데이터를 정규화합니다. 예를 들어 처음 50개 기능(종가, 다음 25개 rsi, 다음 25개 adx)을 추가하거나 에이전트를 선언할 때 예측 변수의 수를 변경할 수 있습니다.

각 거래 후 그는 정책을 업데이트하고 거래를 마감할 때 업데이트 보상(TD, 시간차 RL)

정말 간단한 라이브러리 사용법

예, 이것은 동시에 강력할 뿐만 아니라 매우 간단해 보입니다. 실험해 봅시다. 잘 하셨습니다!!!!!

그렇다면 GDMH는 어디에 사용됩니까?

GDMH 코드를 작성할 생각이었습니다. RDF 입력 및 출력이 발생하는 코드 또는 정확히 어디에서 GDMH를 구현하려고 하는지 보여주시면 제가 코드를 작성해 보도록 하겠습니다. 그러면 귀하의 코드와 코드 모두 결과를 비교하고 평가할 수 있습니다. .

 
FxTrader562 :

예, 이것은 동시에 강력할 뿐만 아니라 매우 간단해 보입니다. 실험해 봅시다. 잘 하셨습니다!!!!!

그렇다면 GDMH는 어디에 사용됩니까?

GDMH 코드를 작성할 생각이었습니다. RDF 입력 및 출력이 발생하는 코드 또는 정확히 어디에서 GDMH를 구현하려고 하는지 보여주시면 제가 코드를 작성해 보도록 하겠습니다. 그러면 귀하의 코드와 코드 모두 결과를 비교하고 평가할 수 있습니다. .

여기서는 간단한 커널 CRLAgent::kernelizedMatrix(void)(라이브러리 내)를 사용하므로 gdmh에 대해 이 함수 를 변경해야 합니다.

 
막심 드미트리예프스키 :

여기서는 간단한 커널 CRLAgent::kernelizedMatrix(void)(라이브러리 내)를 사용하므로 gdmh에 대해 이 함수 를 변경해야 합니다.

좋아, 내가 내 자신의 코드를 작성할 수 있는지 보자....

GDMH 논리라면 GDMH 알고리즘을 MQL5 코드로 쉽게 변환하거나 변환할 수 있지만 다른 커널 기능이나 라이브러리와 관련이 있는 경우 연구하고 변환하는 데 시간이 필요합니다...

 
FxTrader562 :

또 다른 기능: 위원회에서 각 에이전트를 구성할 수 있습니다.

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 );
  }

예측자 값을 채우면 여기에서 변경됩니다.

 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();
  }

또한 다른 에이전트 그룹을 추가할 수 있습니다.

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 :

좋아, 내가 내 자신의 코드를 작성할 수 있는지 보자....

GDMH 논리라면 GDMH 알고리즘을 MQL5 코드로 쉽게 변환하거나 변환할 수 있지만 다른 커널 기능이나 라이브러리와 관련이 있는 경우 연구하고 변환하는 데 시간이 필요합니다...

gmdh 논리를 변환할 수 있다면 매우 유용할 것입니다. 그러면 내 라이브러리에서 변경할 수 있습니다.

사유: