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

 

A ajuda do OnnxTypeInfo carece de explicações sobre o campo dimensions[]. Seria bom explicar o significado dessa matriz, pelo menos no exemplo do projeto ONNX.Price.Prediction, em que (MT5 versão 3621) o resultado é o seguinte:

   OnnxTypeInfo otype;
   OnnxGetInputTypeInfo(handle, 0, otype);
   Print(otype.type == ONNX_TYPE_TENSOR);               // true
   Print(otype.element_type == ONNX_DATA_TYPE_FLOAT);   // true
   ArrayPrint(otype.dimensions);                        // -1 -1 4
   OnnxGetOutputTypeInfo(handle, 0, otype);
   Print(otype.type == ONNX_TYPE_TENSOR);               // true
   Print(otype.element_type == ONNX_DATA_TYPE_FLOAT);   // true  
   ArrayPrint(otype.dimensions);                        // -1 1
 
Bohdan Suvorov #:
E aqui está minha implementação do EA em meus próprios neurônios

Gostaria de saber que tipo de biblioteca é essa?

#import "markettrader.dll"
  void AlertT(string &msg,int len);
 
Aleksey Nikolayev #:

A ajuda do OnnxTypeInfo carece de explicações sobre o campo dimensions[]. Seria bom explicar o significado dessa matriz, pelo menos no exemplo do projeto ONNX.Price.Prediction, em que (MT5 versão 3621) o resultado é o seguinte:

Em termos de python, essa é a forma do objeto.

 
Rashid Umarov #:

Em termos de python, essa é a forma do objeto.

Então, os números negativos e o fato de que o comprimento da matriz é uma unidade maior do que o número de dimensões dos parâmetros são confusos.

Além disso, a forma dos parâmetros é definida no script, e não obtida das propriedades do modelo. Isso é um bug ou um recurso?

 
Aleksey Nikolayev #:

Então, os números negativos e o fato de o comprimento da matriz ser uma unidade maior do que o número de medições de parâmetros são confusos.

Além disso, a forma dos parâmetros é definida no script, e não obtida das propriedades do modelo. Isso é um bug ou um recurso?

Sim, eu me esqueci dos valores negativos. Vou verificar.

 

Olá a todos!

Eu consigo negociar com algum sucesso no modo de negociação manual, mas ainda gostaria de automatizar o processo. Pensando nisso, resolvi tentar fazer uma consulta sobre a questão do aprendizado de máquina. Quem usa quais modelos e com que sucesso? A maneira como vejo o problema é a seguinte:

A ideia fundamental é que não é a direção da tendência que precisa ser prevista, mas os três pontos: comprar, vender e esperar. Ou seja, 1 (comprar), -1 (vender), 0 (manter o negócio atual se houver um ou não fazer nada se não houver negócios). É desejável trabalhar com séries temporais em minutos, o que ainda não descobri. É importante que a série temporal de algum número de barras passadas seja levada em conta, de modo que os indicadores no histórico sejam levados em conta, caso contrário, sua dinâmica não ficará clara. Tenho cerca de 30 deles, o que provavelmente é difícil de manter em minha mente, mas ainda assim, de alguma forma, consigo negociar com minhas mãos.

Pelo que entendi, no aprendizado de máquina há tarefas de classificação, por exemplo, se a tendência será de alta ou de baixa, ou a previsão de um valor específico, como o preço, será aqui com tal erro. Mas nos mercados financeiros a tarefa é um pouco diferente: maximizar o lucro e minimizar os saques. E eu não vi esse tipo de modelo de aprendizado pequeno.

Isso é mais lucro quando seu tamanho é maximizado para cada negociação possível e as perdas são minimizadas, com alta precisão de entrada e saída de uma negociação:

Lucro = negociações positivas - negociações perdedoras, quando se leva em conta o spread,

em que a soma dos negócios positivos deve tender ao máximo e a soma dos negócios perdedores deve tender a zero. Então, por definição, o lucro tenderá ao máximo, se as outras coisas forem iguais (por exemplo, tamanho do lote).

Ou seja, em minha opinião, deveria haver um modelo desse tipo, pois assim as entradas e saídas seriam mais precisas.

 
Aleksey Nikolayev #:

Então, os números negativos e o fato de o comprimento da matriz ser uma unidade maior do que o número de medições de parâmetros são confusos.

Além disso, a forma dos parâmetros é definida no script, e não obtida das propriedades do modelo. Isso é um bug ou um recurso?

O valor negativo da dimensão significa que essa dimensão não é fixa e é definida por meio de um parâmetro externo. Portanto, o script deve especificar explicitamente a dimensionalidade

 

É claro que o exemplo do uso do modelo ONNX na MQL5 é apenas uma ilustração disso e nada mais. Mas, ainda assim, gostaria de chamar a atenção para um erro muito importante. No aprendizado de máquina, o primeiro estágio é o pré-processamento. Isso inclui uma série de coisas, desde a normalização trivial até a redução de dimensionalidade e outros truques de engenharia. A regra principal de qualquer preditor e transformação de destino nesse estágio é que todos os parâmetros de transformação (como média, mediana, sd, mad etc.) são calculados no conjunto de treinamento. O conjunto de teste e os novos dados são processados usando os parâmetros obtidos no conjunto de treinamento.

Portanto, no exemplo, foi necessário calcular a média/sd no conjunto de treinamento, passar esses dados para a parte em que o predicado é feito e processar os novos dados com esses parâmetros. Depois disso, desnormalizar e obter os valores reais do preço previsto. Essa sequência é importante.

É claro que ninguém alimenta a entrada do modelo com preços reais, mas isso já é específico.

Boa sorte

 
Slava #:

Um valor de dimensão negativo significa que essa dimensão não é fixa e é definida por meio de um parâmetro externo. Portanto, o script deve especificar explicitamente a dimensionalidade

Obrigado, agora está mais claro.

 
Elvin Nasirov #:

Pelo que entendi, no aprendizado de máquina há tarefas de classificação, por exemplo, se a tendência será de alta ou de baixa, ou a previsão de um valor específico, como o preço será aqui com tal e tal erro. Mas, nos mercados financeiros, a tarefa é um pouco diferente: maximizar os lucros e minimizar os saques. E eu ainda não vi esse tipo de modelo de aprendizagem da Raspberry.

Esse problema é resolvido com o uso de uma função de perda apropriada ao treinar modelos MO. Há dois problemas associados a isso. Primeiro, técnico - as funções de perda padrão nos pacotes MO estão relacionadas à maximização do lucro apenas indiretamente, o que leva à necessidade de criar funções personalizadas. Isso é bastante difícil de fazer - você precisa ter um bom entendimento dos pacotes MO no nível do código. Se esse problema for resolvido, pode haver um segundo problema matemático em que a função de perda personalizada é ruim para o treinamento do modelo.

Se alguém resolver um problema tão difícil, é improvável que compartilhe a solução.