- Tem como rodar varias contas cada uma com um robo diferente, ao mesmo tempo na mesma instância do metatrader?
- [Dúvida] Como realizar operações em diferentes EA's, em diferentes ativos, no mesmo tempo?
- Dois robôs no mesmo terminal METATRADER
O que controla a ação de um EA é o Magic Number, e, se ele segue todas as diretrizes para isso. Procure por esses termos...
Mas, se o seu robô não segue esse conceito, em todos os passos de um trade, todas as m*rdas podem acontecer...
;)
O que controla a ação de um EA é o Magic Number, e, se ele segue todas as diretrizes para isso. Procure por esses termos...
Mas, se o seu robô não segue esse conceito, em todos os passos de um trade, todas as m*rdas podem acontecer...
;)
Na verdade, esqueci de especificar. Esses EAs que me refiro, não fazem trade; apenas geram relatórios
Variável global?
Sim. A variável é definida como static no início do script em escopo global e usada em OnTick().
Muitas vezes ao passar um valor para a variável em OnTick(), ela acabava não recebendo o valor para ser usado no tick seguinte.
Como não tinha certeza se o problema era um erro de execução ao passar o valor para a variável ou um conflito com outro EA rodando junto em outro ativo com os mesmos nomes de variáveis, a solução que implementei na verdade foi a seguinte:
x_EA1 = valor;
while(x_EA1 != valor)
{
x_EA1 = valor;
}
Além de adicionar um prefixo _EA, adicionei um while como um fixador de valor para essas variáveis estáticas para certificar que de fato ela receba o valor determinado. Eu sei que parece bizarro, mas o problema foi resolvido, não sei se pelo while ou pelo prefixo diferenciando as variáveis entre EAs.
Não achei nada na literatura MQL5 sobre possíveis conflitos nesse sentido, muito estranho. O código ficou com uma baita gambiarra pra dar certo kkk
Sim. A variável é definida como static no início do script em escopo global e usada em OnTick().
Acho que vc esta confundindo as coisas, eu perguntei se a variavel é uma GlobalVariable que é um grupo de funções para trabalhar com variáveis globais. O que vc descreve é que, esta usando uma variável no escopo global de seu script/EA, o que é totalmente diferente do que falei.
Outra questão, o uso de variáveis estáticas tem uma certa especificidade, e o que me parece vc esta fazendo o uso de forma errada.
"
Variáveis estáticas existem a partir do momento de execução do programa e são inicializados somente uma vez antes que a função especializada OnInit() seja chamada. Se valores iniciais não forem especificados, variáveis da classe de armazenamento estático assumem valores iniciais zero.
Variáveis locais declarados com a palavra-chave static retém seus valores durante todo o tempo de vida da função. A cada próxima chamada da função, tais variáveis locais contêm os valores que elas tinham durante a chamada anterior.
"
- www.mql5.com
Acho que vc esta confundindo as coisas, eu perguntei se a variavel é uma GlobalVariable que é um grupo de funções para trabalhar com variáveis globais. O que vc descreve é que, esta usando uma variável no escopo global de seu script/EA, o que é totalmente diferente do que falei.
Outra questão, o uso de variáveis estáticas tem uma certa especificidade, e o que me parece vc esta fazendo o uso de forma errada.
"
Variáveis estáticas existem a partir do momento de execução do programa e são inicializados somente uma vez antes que a função especializada OnInit() seja chamada. Se valores iniciais não forem especificados, variáveis da classe de armazenamento estático assumem valores iniciais zero.
Variáveis locais declarados com a palavra-chave static retém seus valores durante todo o tempo de vida da função. A cada próxima chamada da função, tais variáveis locais contêm os valores que elas tinham durante a chamada anterior.
"
Exato, não é uma variável global, apenas está em um escopo global. Ela é definida antes de OnInit() e usada em OnTick(). Como falei, não é sempre que o problema ocorre. Mas depois que mudei os nomes das variáveis e adicionei o while (não mudei o local de inicialização delas), o problema foi resolvido. Agora não sei dizer o que de fato resolveu, se foi a mudança de nomes ou o uso do while
...
Se vc faz atribuições de novos valores em tempo de execução nessa variável, não faz sentido ela ser uma variável estática estando no escopo global do seu sistema, apenas faria sentido isso, se estivesse dentro de alguma função. Pois o ciclo de vida das variáveis criadas dentro de uma função não são permanentes, ou seja, existem em quanto a função esta empilhada nas chamadas do compilador.
Se vc faz atribuições de novos valores em tempo de execução nessa variável, não faz sentido ela ser uma variável estática estando no escopo global do seu sistema, apenas faria sentido isso, se estivesse dentro de alguma função. Pois o ciclo de vida das variáveis criadas dentro de uma função não são permanentes, ou seja, existem em quanto a função esta empilhada nas chamadas do compilador.
É que além de Ontick() eu uso algumas delas também em OnDeInit(). De qualquer forma, também mudei a versão do Meta Trader que eu estava usando. Estava usando da corretora Rico e agora estou usando o padrão da Meta Quotes. Não sei se isso tem haver com alguma questão de atualização, mas já me precavi.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso