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

 

Sobre o tópico de como transferir a neurônica do R para o mql:

Eu fi-lo com o pacote nnet. Veja emhttps://cran.r-project.org/web/packages/nnet/index.html(Fonte do pacote: nnet_7.3-12.tar.gz). Existe uma pasta src / nnet.c no arquivo.

Precisamos da função fpass, primeiras linhas antes desteError = 0.0 (este é o início do cálculo de erro para backprop, sem necessidade de predição simples)


Este é o código que podemos usar no nosso EA -

   double sigmoid(double sum)
     {
      if(sum<-15.0)
         return (0.0);
      else if(sum>15.0)
         return (1.0);
      else
         return (1.0 / (1.0 + exp(-sum)));
     }

//nnet_hidden - число нейронов в скрытом слое
//выход один
//nnet_weights - массив с весами нейронки взятыми из R после обучения nnet модели

int weights_it=0;
double hiddenLayer[];
ArrayResize(hiddenLayer,nnet_hidden);
for(int i=0; i<nnet_hidden; i++)
 {
  hiddenLayer[i]=nnet_weights[weights_it++];
  for(int j=1; j<=nnet_bars; j++)
    {
     hiddenLayer[i]+=openPrices[j]*nnet_weights[weights_it++];
    }
  hiddenLayer[i]=sigmoid(hiddenLayer[i]);
 }
double prediction=nnet_weights[weights_it++];
for(int i=0; i<nnet_hidden; i++)
 {
  prediction+=hiddenLayer[i]*nnet_weights[weights_it++];
 }
if(!linout)
 {
  prediction = sigmoid(prediction);
 }

este código só funcionará com o parâmetro de modelo saltar = FALSO
Se não for assim, ou se for usado um softmax - procure diferenças na função fpass()


pesos (array nnet_weights) devem ser copiados do próprio R após o treinamento

library(nnet)
trainedModel <- nnet(y = 1:10, x = matrix(runif(20),ncol=2), size=10)
nnet_weights <- trainedModel$wts
cat("double nnet_weights[] = {", paste(format(weights,digits=16,scientific=T), collapse=","), "};", file="D:/weights.txt") #сохранить  веса в файлик чтоб оттуда скопипастить в советник
 
О! Isso é alguma coisa. Um pouco mais de trabalho e você pode usá-lo. Obrigado! (Risos)
 

Outro pequeno artigo introdutório sobre reforço, enquanto o ponto é

Seria interessante organizar uma pequena sessão de trabalho em equipe e brainstorming no mql e compartilhar a experiência.

https://proglib.io/p/trade-learning/

Трейдинг и машинное обучение с подкреплением
Трейдинг и машинное обучение с подкреплением
  • 2018.02.15
  • matyushkin
  • proglib.io
В статье рассмотрено, как машинное обучение с подкреплением может применяться для трейдинга финансовых рынков и криптовалютных бирж. Академическое сообщество Deep Learning в основном находится в стороне от финансовых рынков. В силу ли того, что у финансовой индустрии не лучшая репутация, что решаемые проблемы не кажутся слишком интересными для...
 

Na minha opinião, a aprendizagem de reforço geralmente dá um modelo com um sobrefit muito grande, e a validação cruzada não vai salvar neste caso. Deve haver alguns mecanismos especiais dentro do próprio modelo contra o sobreajustamento.

Para aqueles que não estão familiarizados com este assunto, brevemente: em vez da avaliação habitual do modelo (precisão, r2, logloss, etc.), é criada uma função especial de aptidão com a sua própria lógica de avaliação do modelo. Essa função de adequação pode, por exemplo, calcular o lucro de um modelo ao negociar, ou o sharperatio. E os parâmetros do modelo são selecionados por algoritmo genético.

É interessante, esse otimizador em MT4 e MT5 também trabalha com o princípio da aprendizagem com reforço - em cada barra (ou mesmo tick) o Expert Advisor recebe valores correntes do preço e indicadores, toma algumas decisões, e a estimativa final da EA é calculada como o resultado da negociação. Os parâmetros do Expert Advisor são selecionados pela genética para aumentar a estimativa.
A julgar pelos Expert Advisors disponíveis gratuitamente para o MT5, podemos ver claramente que este método de aprendizagem causa muitos perdedores. Mas às vezes os bons EAs também são bons.

 
Dr. Trader:

Na minha opinião, a aprendizagem de reforço geralmente dá um modelo com uma saliência muito grande, e a validação cruzada não vai salvar neste caso. Deve haver alguns mecanismos especiais dentro do próprio modelo contra o sobreajustamento.

Para aqueles que não estão familiarizados com este assunto, brevemente: em vez da avaliação habitual do modelo (precisão, r2, logloss, etc.), é criada uma função especial de aptidão com a sua própria lógica de avaliação do modelo. Essa função de adequação pode, por exemplo, calcular o lucro de um modelo ao negociar, ou o sharperatio. E os parâmetros do modelo são selecionados por um algoritmo genético.

O interessante é que o optimizador em MT4 e MT5 também funciona com base no princípio de aprendizagem com reforço - em cada barra (ou mesmo tick) o Expert Advisor recebe os valores actuais dos preços e indicadores, toma algumas decisões, e a estimativa final do Expert Advisor é o resultado da negociação. Os parâmetros do Expert Advisor são selecionados por Genética para aumentar a estimativa.
A julgar pelos Expert Advisors disponíveis gratuitamente para o MT5, podemos ver claramente que este método de aprendizagem causa uma grande "perda". Mas às vezes os bons EAs também são bons.

É uma boa analogia com o otimizador, o meu bot anterior era sobre isso, mas é muito simples.

Mas em geral não é, RL se não se opõe à genética, enfatiza suas vantagens, por exemplo, a possibilidade de trabalhar em processos não estacionários. Em particular, é possível utilizar funções de aptidão física não gananciosas, graças às quais o modelo está constantemente a aprender à medida que corre e a fazer passos aleatórios. E como otimizador usamos o recheio NS (não genética).

É um pouco mais complicado lá, mas ainda não acabei de ler o livro.

Portanto, sua afirmação sobre genética, otimizador e RL está incorreta.

 

*um momento de emoção e filosofia e todas essas coisas*

Imagina um dia claro e ensolarado. Você está sentado na grama ao lado de um lago, uma brisa quente da primavera está soprando, deixando ondulações na água, o som de patos pode ser ouvido em algum lugar próximo. Raramente os peixes nadavam debaixo de água, às vezes tocando a superfície com suas barbatanas e fazendo círculos na água. A vizinha estava a colher água e o neto atirava pedras para a água, perseguindo rãs de um lado para o outro. Do outro lado do lago, um homem lava o seu carro.

O preço é como as ondas na água de toda a agitação, mas também durante uma tempestade. Podemos seguir as ondas e tentar adivinhar quando a água subirá ou descerá em determinado ponto, mas se não seguirmos o ambiente, estaremos errados a maior parte do tempo.

O valor dos preços futuros não depende de movimentos de preços passados, mas dos processos globais que causaram movimentos de preços passados e que causarão novos movimentos.
Você precisa monitorar não apenas as ondas na água, mas também o vento, a trajetória dos peixes, o balde do vizinho, etc., então a natureza das ondas na água será clara e previsível.

Assim, se você tiver informações sobre todos os processos globais que afetam o preço, você pode aprender a prever e qualquer modelo simples do século anterior o fará.
O problema é que normalmente existe apenas um gráfico de preços e isso não é suficiente.

 

Aqui como ligar RL e NN

 

e um vídeo, há a parte 2 mais.

É isso, não vou mais fazer spam, quem estiver interessado vai ler.


 
As redes neurais na MT são simples. Existe uma biblioteca da Microsoft chamada CNTK. É implementado para Python, C# e C++. Toda a análise e treinamento da rede é feita em Python enquanto C++ é usado para escrever uma DLL que carrega a rede treinada e realiza cálculos usando-a. Na minha opinião, esta é a melhor opção. A segunda opção, a ligação do Python ao MT. Eu escrevi uma biblioteca simples para isto. Biblioteca. Ligamo-lo e podemos usar tudo o que está disponível em Python. E há muitas coisas disponíveis. Estou a pensar se devo começar a escrever sobre a aprendizagem da máquina no meu blog.
 
Grigoriy Chaunin:
Tudo é simples com redes neurais em MT. Existe uma biblioteca CNTK da Microsoft. É implementado para Python, C# e C++. Toda a análise e treinamento da rede é feita em Python, enquanto C++ é usado para escrever uma DLL que carrega a rede treinada e realiza cálculos usando-a. Na minha opinião, esta é a melhor opção. A segunda opção, a ligação do Python ao MT. Eu escrevi uma biblioteca simples para isto. Biblioteca. Ligamo-lo e podemos usar tudo o que está disponível em Python. E há muitas coisas disponíveis. Estou a pensar se devo começar a escrever sobre a aprendizagem da máquina no meu blog.

seria interessante ler sobre estratégias e pensamentos/experiências pessoais... para mim pessoalmente

porque a maioria das coisas que eles escrevem aqui são apenas tretas sobre passar por um monte de bibliotecas e o que é melhor para escrever... é uma epidemia, e tudo vai para o lixo.

Embora a ideia básica tenha sido expressa pelo fxsaber há muito tempo - com a mesma abordagem o assunto pode muito bem ser encerrado, porque originalmente está errado.