Discussão do artigo "Construa Expert Advisors Auto-Otimizáveis em MQL5"

 

Novo artigo Construa Expert Advisors Auto-Otimizáveis em MQL5 foi publicado:

Construa expert advisors que olhem para frente e se ajustem a qualquer mercado.

Desenvolver um bot de negociação que possa se ajustar às condições atuais do mercado é fundamental para estratégias estáveis de negociação algorítmica. Nosso objetivo é ir além da criação de bots de foco restrito, limitados a poucos símbolos. Pretendemos projetar sistemas com a capacidade de aprender e se adaptar a qualquer símbolo de negociação. Este guia se concentra no uso de MQL5 para desenvolver bots que possam se auto-otimizar em qualquer ambiente de negociação.

O MQL5 é ideal para essa tarefa, ao contrário do que alguns acreditam. Sua API oferece funções extensivas de matriz e vetor, permitindo a criação de modelos compactos de aprendizado de máquina. Esta introdução enfatiza o uso de MQL5 para construir bots auto-otimizáveis. Uma abordagem de Programação Orientada a Objetos reduz a codificação repetitiva e melhora a adaptabilidade em diferentes prazos e condições de mercado.

Optar pelas capacidades de matriz e vetor do MQL5 em vez de alternativas como ONNX e Python tem consideráveis benefícios. Usar um modelo ONNX exigiria instâncias de modelo separadas para cada símbolo de negociação e novos modelos para quaisquer pequenas mudanças de parâmetro, como ajustes de intervalo de tempo. O MQL5, no entanto, oferece adaptabilidade sem a necessidade de gerenciar inúmeros modelos para diferentes condições.

Autor: Gamuchirai Zororo Ndawana

 

Muito obrigado por compartilhar essas informações e por dedicar seu tempo para explicá-las de uma maneira muito agradável e legível. Excelente.

Atenciosamente,

Antonio

 
Antonio Simon Del Vecchio #:

Muito obrigado por compartilhar essas informações e por dedicar seu tempo para explicá-las de uma maneira muito agradável e legível. Excelente.

Atenciosamente,

Antonio

Você é muito gentil, Antonio, obrigado por suas palavras gentis.
 
Muito obrigado, Gamuchirai, isso é incrível, oportuno e relevante em nossa era de negociação de EA.

Você é o melhor :-)
 
Douglas I #:
Muito obrigado, Gamuchirai, isso é incrível, oportuno e relevante em nossa era de negociação de EA.

Você é o melhor :-)
Obrigado Douglas, fico feliz em poder ajudar.

Vamos em frente 🔥.
 

Obrigado pela postagem, mais uma vez uma abordagem única. Estou muito interessado em entender e implementar a abordagem. É um prazer ler essas explicações tão informativas, que melhoram muito minha compreensão. Agradeço pelo tempo que você dedicou à criação deste documento

Atenciosamente, Neil

 
linfo2 #:

Obrigado pela postagem, mais uma vez uma abordagem única. Estou muito interessado em entender e implementar a abordagem. É um prazer ler essas explicações tão informativas, que melhoram muito minha compreensão. Agradeço o tempo que você dedicou à criação deste artigo

Atenciosamente, Neil

Obrigado, Neil, há muitas pessoas que ajudam nos bastidores, como Rashid e outros moderadores de conteúdo, que tornam tudo isso possível. Fico feliz por ter agregado valor, esse é sempre o objetivo. De fato, é o único objetivo.

 
Tentando a LinearRegressionEA em um fim de semana, obtenho valores indefinidos para os valores m[0] e b[0] na LinearRegression,mqh, class Predict() metod, portanto, retorna indefinido -nan, fazendo backtesting no Strategy Tester.
Method Trained() has returned true at that point.
Poderia ter algo a ver com o fato de estar fora do horário de negociação?

ATUALIZAÇÃO: É provável que seja um problema com dados históricos. Eu executo no modo "ticks reais". Tentando o backtest em um mês depois dos dados, ele funciona. Vou ver se consigo adicionar algum código que não permita que os dados indefinidos passem sem serem detectados. Vejo que há algumas verificações para m[0] e d[0] indefinidos, mas talvez seja necessário mais. Vou verificar amanhã.



 
Gunnar Forsgren Strategy Tester.
Method Trained() has returned true at that point.
Poderia ter algo a ver com o fato de estar fora do horário de negociação?

ATUALIZAÇÃO: É provável que seja um problema com dados históricos. Eu executo no modo "ticks reais". Tentando o backtest em um mês depois dos dados, ele funciona. Vou ver se consigo adicionar algum código que não permita que os dados indefinidos passem sem serem detectados. Vejo que há algumas verificações para m[0] e d[0] indefinidos, mas talvez seja necessário mais. Vou verificar amanhã.



Minha observação de backtest "a cada tick" foi resolvida exportando explicitamente os arquivos de dados do histórico de Ticks e Barras da lista de Símbolos e salvando-os em um caminho de arquivo no qual o testador fará referência a eles.
Os arquivos precisam abranger o intervalo de dias para os quais os testes são realizados. Isso pode ser conveniente para um caso de uso em que um período do passado é usado repetidamente para melhorar uma estratégia.
Por padrão, o testador baixa esses dados da rede em cada execução de teste e, aparentemente, às vezes isso não é confiável. Manter esses dados localmente parece funcionar melhor.
Normalmente, na primeira vez em que se tenta fazer com que o testador os consulte localmente, há algumas acrobacias no caminho do arquivo até chegar ao caminho adequado.
Para ilustrar, no meu caso, o caminho do Windows é "C:\Users\<username>\Appdata\Roaming\MetaQuotes\Terminal\Common\Files".
Esta postagem forneceu dicas: https://www.mql5.com/en/forum/367098#comment_21816898

Where to locate files for Strategy tester to find them
Where to locate files for Strategy tester to find them
  • 2021.04.12
  • Anthony Eric Gillon Dawson
  • www.mql5.com
MT5 has a very bizarre way of handling files...
 
Gunnar Forsgren Strategy Tester.
Method Trained() has returned true at that point.
Poderia ter algo a ver com o fato de estar fora do horário de negociação?

ATUALIZAÇÃO: É provável que seja um problema com dados históricos. Eu executo no modo "ticks reais". Tentando o backtest em um mês depois dos dados, ele funciona. Vou ver se consigo adicionar algum código que não permita que os dados indefinidos passem sem serem detectados. Vejo que há algumas verificações para m[0] e d[0] indefinidos, mas talvez seja necessário mais. Vou verificar amanhã.



Adoro sua abordagem proativa. Você está certo, há várias exceções que podem ser levantadas ao tentar obter dados históricos. Por exemplo, se você tentar alterar os períodos de tempo no meio de uma sessão de negociação, o problema "-nan" poderá ser observado mais uma vez.


Houve uma troca inerente entre manter a mensagem fácil de acompanhar e corrigir todos os erros que observei. Se eu optasse pela segunda opção, o código poderia ter sido necessariamente mais complexo e não tão fácil de acompanhar como é. Portanto, decidi manter a mensagem fácil de acompanhar. Portanto, decidi mantê-lo fácil de seguir, com a intenção de que você pudesse estendê-lo rapidamente.

Sua solução parece muito promissora, como ela está se saindo?

 
Gunnar Forsgren #:

Minha observação sobre o backtest "a cada tick" foi resolvida com a exportação explícita dos arquivos de dados do histórico de ticks e barras da lista de símbolos e salvando-os em um caminho de arquivo no qual o testador fará referência a eles.
Os arquivos precisam abranger o intervalo de dias para os quais os testes são realizados. Isso pode ser conveniente para um caso de uso em que um período do passado é usado repetidamente para melhorar uma estratégia.
Por padrão, o testador baixa esses dados da rede em cada execução de teste e, aparentemente, às vezes isso não é confiável. Manter esses dados localmente parece funcionar melhor.
Normalmente, na primeira vez em que se tenta fazer com que o testador os consulte localmente, há algumas acrobacias no caminho do arquivo até chegar ao caminho adequado.
Para ilustrar, no meu caso, o caminho do Windows é "C:\Users\<username>\Appdata\Roaming\MetaQuotes\Terminal\Common\Files".
Esta postagem forneceu dicas: https://www.mql5.com/en/forum/367098#comment_21816898

Sim, de fato, ter os dados localmente é um grande aprimoramento. Ao ter os dados localmente, preparamos a mesa para ir além da simples modificação dos coeficientes de nossa regressão linear, pois também poderemos otimizar os parâmetros de nossos indicadores técnicos em tempo real. Você acertou em cheio.

Obrigado por compartilhar o link. Encontrarei tempo para analisá-lo.