Aprendizado de máquina no trading: teoria, prática, negociação e não só - página 1064

 
Maxim Dmitrievsky:

Porque os modelos ainda são uma porcaria ^) com grandes erros, precisam de modelos que funcionem por mais tempo

por exemplo, 2 meses de aprendizagem e 1 semana de negociação

Você pode estar certo, mas eu não acho que tais modelos nunca serão descobertos pelo RDF que um trabalho mesmo por um dia completo até que possamos fazer ilimitadas simulações aleatórias de velas semelhantes a "ALPHA ZERO" algo.

Porque os mercados mudam quase a cada hora e um modelo falhará terrivelmente se de repente ocorrer um evento noticioso ou se o mercado mudar o seu comportamento por alguma razão. Mas se fizemos milhões de simulações de velas, então provavelmente o sistema pode se recuperar com perdas mínimas após a mudança no mercado e pode recuperar rapidamente a perda depois. Isso parece ser possível.

Vou tentar tanto o vosso método de selecção de modelos como o meu método de simulação de velas para ver como tudo corre:)))

A propósito, tentei 1 dia de treinamento,5 dias de treinamento etc. e falhei no dia seguinte:))))))))))))))))

Então um modelo pode não funcionar...embora eu possa estar errado...

 

Também, tenho mais um pedido Maxim...

Quando publicar o seu artigo, por favor tente comentar o código o mais possível para que seja rápido e fácil para os outros entenderem o código para que possamos progredir mais rapidamente...

Caso contrário, se demorar muito tempo para eu entender o código, então levará ainda mais tempo para modificá-lo.

Por isso peço-lhe que acrescente o maior número possível de comentários e explicações sobre o código. Por agora vou tentar compreendê-lo rapidamente e perguntar-lhe-ei se não compreendo nada:))

 
FxTrader562:

Também, tenho mais um pedido Maxim...

Quando publicar o seu artigo, tente comentar o código o mais possível para que seja rápido e fácil para os outros entenderem o código, para que possamos progredir mais rapidamente...

Caso contrário, se demorar muito tempo para eu entender o código, então levará ainda mais tempo para modificá-lo.

Por isso peço-lhe que acrescente o maior número possível de comentários e explicações sobre o código. Por agora vou tentar compreendê-lo rapidamente e perguntar-lhe-ei se não compreendo nada:))

Ok, agora eu apenas mudo constantemente muitas coisas e não faz sentido comentar.

também se pode pensar em como mudar os resultados... talvez usar ziguezague com configurações diferentes em vez da função de recompensa ou outra coisa
 
Maxim Dmitrievsky:

Ok, agora eu apenas mudo constantemente muitas coisas e não faz sentido comentar.

também se pode pensar em como mudar os resultados... talvez usar ziguezague com configurações diferentes em vez da função de recompensa ou outra coisa

Acabei de ter uma rápida visão geral do código. Mas até agora ainda não descobri exactamente onde estão os indicadores ou como decide as entradas comerciais. Portanto, não tenho a certeza do que fazer com a produção. Refere-se à saída usando GDMH?

Eu apenas faço o teste com várias configurações, mas parece colocar negociações completamente aleatórias.

Além disso, na fase de testes não cria os arquivos de texto "Mtrees", certo?

O código que você forneceu não está completo, certo? Ou é capaz de colocar ofícios se estiver anexado diretamente ao gráfico sem otimização.

 
FxTrader562:

Acabei de ter uma rápida visão geral do código. Mas até agora ainda não descobri exactamente onde estão os indicadores ou como decide as entradas comerciais. Portanto, não tenho a certeza do que fazer com a produção.

Eu apenas executei o teste com várias configurações, mas ele parece colocar negociações completamente aleatórias, bem como mostrou algum comportamento estranho e, portanto, eu apenas reinicializei o meu servidor. Tem de fazer alguma coisa com os grãos reais do VPS?

Também, na fase de testes não cria os ficheiros de texto "Mtrees". Certo?

Na primeira execução no testador escolha "verdadeiro".

Ele vai fazer negócios aleatórios e aprender então e salvar os modelos

2ª corrida escolha falso. É isso mesmo. E ele faz o upload de modelos e vai negociar em +.

Em seguida, na EA você pode adicionar agentes, agora você tem 5 agentes, 100 características para cada agente, 50 árvores

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

Nesta função adicionamos 100 preços de fechamento para cada agente (100 preditores). E depois normalizar os dados. Você pode adicionar diferentes indicadores, por exemplo, as primeiras 50 características - preços fechados, próximos 25 rsi, próximos 25 adx, ou alterar o número de preditores quando você declara 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
  }

Após cada negócio ele atualiza as políticas, quando fecha o comércio - atualizar recompensa (TD, diferença temporal 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);
     }

Utilização muito simples da biblioteca

No modo de trem ele irá mostrar os logs com erros para cada iteração

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

No modo de comércio em testador mostram erros finais no comboio e subconjunto de teste para cada 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

Resultado por 100 preços fechados:


 
Maxim Dmitrievsky:

Na primeira execução no testador escolha "verdadeiro".

Ele vai fazer negócios aleatórios e aprender então e salvar os modelos

A 2ª corrida escolhe falso. É isso mesmo. E ele carrega modelos e vai negociar em +

Em seguida, na EA você pode adicionar agentes, agora você tem 5 agentes, 100 características para cada agente, 50 árvores

Nesta função adicionamos 100 preços de fechamento para cada agente (100 preditores). E depois normalizar os dados. Você pode adicionar diferentes indicadores, por exemplo, as primeiras 50 características - preços fechados, próximos 25 rsi, próximos 25 adx, ou alterar o número de preditores quando você declara agente

Após cada negócio ele atualiza as políticas, quando fecha o comércio - atualizar recompensa (TD, diferença temporal RL)

Uso realmente simples da biblioteca

Sim, isto parece muito simples assim como robusto ao mesmo tempo...vamos experimentar e ver...Óptimo trabalho!!!!!

Então, onde está o uso da GDMH?

Eu estava a pensar em escrever o meu código GDMH. Você pode apenas me mostrar o código onde a entrada e saída do RDF está acontecendo ou onde exatamente você está tentando implementar o GDMH para que eu tente escrever meu pedaço de código e então, nós podemos comparar os resultados tanto do seu código como do meu código e avaliar.

 
FxTrader562:

Sim, isto parece muito simples assim como robusto ao mesmo tempo...vamos experimentar e ver...Óptimo trabalho!!!!!

Então, onde está o uso da GDMH?

Eu estava a pensar em escrever o meu código GDMH. Você pode apenas me mostrar o código onde a entrada e saída do RDF está acontecendo ou onde exatamente você está tentando implementar o GDMH para que eu tente escrever meu pedaço de código e então, nós podemos comparar os resultados tanto do seu código como do meu código e avaliar.

Aqui eu uso o kernel simples CRLAgent::kernelizedMatrix(void) (em biblioteca), então preciso alterar esta função para gdmh

 
Maxim Dmitrievsky:

Aqui eu uso o kernel simples CRLAgent::kernelizedMatrix(void) (em biblioteca), então preciso alterar esta função para gdmh

Ok, vamos ver se eu consigo escrever o meu próprio código....

Se se trata apenas da lógica GDMH, então eu posso facilmente traduzir ou converter o GDMH algo em código MQL5, mas se tem a ver com algumas outras funções do kernel ou bibliotecas, então eu preciso de tempo para estudar e converter...

 
FxTrader562:

Outro recurso: você pode configurar cada agente no comitê

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 se preenchem os valores dos preditores, os valores mudam aqui:

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

Também pode adicionar diferentes grupos de agentes

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, vamos ver se eu consigo escrever o meu próprio código....

se é apenas sobre a lógica GDMH, então eu posso facilmente traduzir ou converter o GDMH algo em código MQL5, mas se tem a ver com algumas outras funções do kernel ou bibliotecas, então eu preciso de tempo para estudar e converter...

Se você puder apenas converter a lógica gmdh - será muito útil, então eu posso mudá-la para a minha biblioteca