Variável fora do escopo do EA

 
Olá amigos,

Estou desenvolvendo um EA que pretendo anexar em cerca de 50 ativos. Gostaria que ele comparasse os sinais de compra e venda desses ativos e escolhesse quais traders fazer, considerando uma ordem de prioridade que poderia ser previamente definida e levando em conta também o gerenciamento de risco.

Pelo meu raciocínio de iniciante, faria sentido o MT5 ter variáveis fora do escopo do EA para esses EAs se conversem. Mas não achei nada sobre isso na documentação. Isso existe?

Como solução de contorno pensei em usar um banco de dados externo. Mas não parece ser a melhor solução.

Outra idéia. Seria transformar o EA numa classe. E fazer um EA "mestre" que criasse uma instância dessa classe para cada ativo, então faria a comparação dos sinais dentro desse EA mestre. Nesse caso minha dúvida seria em qual ativo seria melhor eu anexar esse EA? Seria possível chamar o ontick para cada ativo? Ou eu terei que substituir o ontick por ontime?

Idéias e críticas são bem vindas.

Abs,

Otávio 



 

Otávio, boa tarde!

Seu projeto é ótimo.

Não entendi se deseja que 1 EA analise N ativos ou que para cada ativo rode o EA, mais mesmo com pouco conhecimento que ainda tenho no meta ACHO que de ambas formas é possível, pois as principais propriedades são necessárias informar de qual ativo se refere (SymbolInfoTick(), etc....).

Com relação a variáveis fora do escopo poderia ficar alocadas em um banco sql caso fossem necessárias.

Com relação ao OnTick acho que é individual de cada ativo. Uma alternativa como você mesmo disse poderia ser colocando um timer que a cada intervalo de tempo verificasse o preço/variáveis de cada ativo desejado e fazer a rotina de analise, pelo que vi no meta usando criatividade na programação conseguimos operacionalizar qualquer estratégia.

Ja vi em algum grupo do face, acho que era um EA da AlgoTrading (empresa muito bacana/eficiente pela impressão que eu tive) que era similar a essa sua ideia.

Abraço,

Daniel 

 
Complementando: sugiro que faça em etapas, sendo a primeira implementar a estratégia individual em ativo, com resultados satisfatórios nesse ativo e em outros dai parta para a segunda etapa que é unificar o EA.
 
Daniel Andrejczuk:

Otávio, boa tarde!

Seu projeto é ótimo.

Não entendi se deseja que 1 EA analise N ativos ou que para cada ativo rode o EA, mais mesmo com pouco conhecimento que ainda tenho no meta ACHO que de ambas formas é possível, pois as principais propriedades são necessárias informar de qual ativo se refere (SymbolInfoTick(), etc....).

Com relação a variáveis fora do escopo poderia ficar alocadas em um banco sql caso fossem necessárias.

Com relação ao OnTick acho que é individual de cada ativo. Uma alternativa como você mesmo disse poderia ser colocando um timer que a cada intervalo de tempo verificasse o preço/variáveis de cada ativo desejado e fazer a rotina de analise, pelo que vi no meta usando criatividade na programação conseguimos operacionalizar qualquer estratégia.

Ja vi em algum grupo do face, acho que era um EA da AlgoTrading (empresa muito bacana/eficiente pela impressão que eu tive) que era similar a essa sua ideia.

Abraço,

Daniel 

Valeu Daniel,

A princípio eu pensei em colocar um EA em cada ativo. Mas esbarrou em como fazer os EA conversarem. O banco de dados externo pode ser um caminho... mas se tivesse uma boa saída no próprio MQL5 eu daria preferência, pois um banco de dados externo seria mais uma coisa para gerenciar.

Então como segunda alternativa pensei em fazer um EA para vários ativos, mas tem as questões / desvantagens descritas na abertura do tópico.

Dessa forma estou nesse dilema. Terminando o EA que estou fazendo, vou fazer alguns testes para verificar a viabilidade da segunda alternativa. Por hora se alguém tiver alguma sugestão terei prazer em receber.

Abs

Otávio 

Ps.: Sobre as etapas, já fiz um EA base. Esse EA base apesar de lucrativo gera poucos sinais por mês  (em média 2). O que me faz querer que ele rode em muitos ativos.
 
otaviokc:
Olá amigos,

Estou desenvolvendo um EA que pretendo anexar em cerca de 50 ativos. Gostaria que ele comparasse os sinais de compra e venda desses ativos e escolhesse quais traders fazer, considerando uma ordem de prioridade que poderia ser previamente definida e levando em conta também o gerenciamento de risco.

Pelo meu raciocínio de iniciante, faria sentido o MT5 ter variáveis fora do escopo do EA para esses EAs se conversem. Mas não achei nada sobre isso na documentação. Isso existe?

Como solução de contorno pensei em usar um banco de dados externo. Mas não parece ser a melhor solução.

Outra idéia. Seria transformar o EA numa classe. E fazer um EA "mestre" que criasse uma instância dessa classe para cada ativo, então faria a comparação dos sinais dentro desse EA mestre. Nesse caso minha dúvida seria em qual ativo seria melhor eu anexar esse EA? Seria possível chamar o ontick para cada ativo? Ou eu terei que substituir o ontick por ontime?

Idéias e críticas são bem vindas.

Abs,

Otávio 



Otávio,

 

Como o Daniel falou usar um banco de dados externo acredito que seria uma ótima solução.

Só a titulo de informação, caso queira pode botar o EA em um "ativo X" este EA pode fazer operações em outros ativos (ativo y, ativo z, etc) mesmo estando somente no "ativo x", teu único trabalho maior vai ser declarar todos os ativos que deseja operar como variáveis, da trabalho mas com o código bem estruturado fica legal.

Usava um EA que buscava preço de algumas opções (put e call) para fazer travas automáticas em ações aqui na Bovespa, só lembrando que os ativos que tu queira negociar, além de estarem declarados no código, eles também tem que estar visiveis em "Observação do Mercado".

 

Abraço, 

Lucas Vigioli 

 
só lembrando que os ativos que tu queira negociar, além de estarem declarados no código, eles também tem que estar visiveis em "Observação do Mercado".
Valeu Lucas, muito boa essas dicas.
 
Lucas Vigioli Isoppo:

Otávio,

 

Como o Daniel falou usar um banco de dados externo acredito que seria uma ótima solução.

Só a titulo de informação, caso queira pode botar o EA em um "ativo X" este EA pode fazer operações em outros ativos (ativo y, ativo z, etc) mesmo estando somente no "ativo x", teu único trabalho maior vai ser declarar todos os ativos que deseja operar como variáveis, da trabalho mas com o código bem estruturado fica legal.

Usava um EA que buscava preço de algumas opções (put e call) para fazer travas automáticas em ações aqui na Bovespa, só lembrando que os ativos que tu queira negociar, além de estarem declarados no código, eles também tem que estar visiveis em "Observação do Mercado".

 

Abraço, 

Lucas Vigioli 

Olá Lucas,

Também apenas a título de informação, nesse caso de o EA fazer operações em outros ativos, deve-se levar em conta no projeto o fato de os ticks continuarem a ser do ativo onde o EA está instalado.

Se o escorregamento de preços for relevante, recomendo escolher um instrumento de alta volatilidade ou até mesmo utilizar o timer do MQL5 para diminuir o problema.

Melhores cumprimentos,

Rogério Figurelli 

 
Rogerio Figurelli:

Olá Lucas,

Também apenas a título de informação, nesse caso de o EA fazer operações em outros ativos, deve-se levar em conta no projeto o fato de os ticks continuarem a ser do ativo onde o EA está instalado.

Se o escorregamento de preços for relevante, recomendo escolher um instrumento de alta volatilidade ou até mesmo utilizar o timer do MQL5 para diminuir o problema.

Melhores cumprimentos,

Rogério Figurelli 

Valeu Rogério, confirmou minhas suspeitas.
 
otaviokc:
Valeu Rogério, confirmou minhas suspeitas.

Olá otaviokc,

Perfeitamente, já que você está estudando mais a fundo o assunto, seguem mais informações que talvez também possam contribuir a outros desenvolvedores da comunidade.

Uma outra técnica que poderia ser usada, nesse caso mais precisa, é fazer a análise pela profundidade de mercado, através da função OnBookEvent(), uma vez que ela não irá mascarar os eventos de ativos programados através da função MarketBookAdd().

O problema dessa abordagem, que já adotei em vários robôs que modelam visão de futuro, é que a necessidade de recursos de processamento devem ser bem projetados, se tornando a solução de contorno mais dependente do ambiente do cliente final (por isso não comentei sobre ela). Mas para consumo próprio, como por exemplo um servidor remoto centralizando a análise (como utilizo), me parece uma boa alternativa.

Melhores Cumprimentos, 

Rogério Figurelli
 
Rogerio Figurelli:

Olá otaviokc,

Perfeitamente, já que você está estudando mais a fundo o assunto, seguem mais informações que talvez também possam contribuir a outros desenvolvedores da comunidade.

Uma outra técnica que poderia ser usada, nesse caso mais precisa, é fazer a análise pela profundidade de mercado, através da função OnBookEvent(), uma vez que ela não irá mascarar os eventos de ativos programados através da função MarketBookAdd().

O problema dessa abordagem, que já adotei em vários robôs que modelam visão de futuro, é que a necessidade de recursos de processamento devem ser bem projetados, se tornando a solução de contorno mais dependente do ambiente do cliente final (por isso não comentei sobre ela). Mas para consumo próprio, como por exemplo um servidor remoto centralizando a análise (como utilizo), me parece uma boa alternativa.

Melhores Cumprimentos, 

Rogério Figurelli
Que legal Rogério! Ótima dica. Obrigado!
Razão: