Leitura de Posições Múltiplas

 

Bom dia,

 supondo que eu tenha n experts rodando no mesmo ativo - e em diferentes também - e precise:

 # Saber se existem ordens abertas naquele ativo: uma vez que caso meu expert n1 compre 1000  lotes e meu n2 venda 1000 lotes, terei um resultado de 0 lotes para o MT - e portanto nenhuma posição para puxar informações -, ainda que, na verdade, existam 1000 BUY de n1 e 1000 SELL de n2.

 # Saber a quem exatamente pertence cada fração do volume final mostrado pelo MT. No caso de haver 500 BUY em um ativo e, na verdade, isso for resultado de 1000 SELL n1, 700 BUY n2 e 800 BUY n3, como proceder sem ter que utilizar do histórico de ordens e ir verificando ordem a ordem pelo MAGIC_NUMBER toda vez que meu expert se inicia?

 #  Fazer com que cada expert reconheça ordens em tempo real dadas pelos demais no mesmo ativo. 

Inicialmente pensei em uma conjunção de Variáveis de Terminal - me informando quais experts possuem posição abertas, tal como o tipo das mesmas - com o uso do HistorySelect() para ir voltando as ordens e verificando quais ordens pertencem a quem - por meio do magic number - e contabilizando como estava o real estado das ordens sempre que meu expert se iniciava, porém achei muito pouco prático e muito passível de bugs no código. Penso que estou fazendo isso de forma estúpida, havendo um jeito melhor de realizar esse controle.

Alguém pode me ajudar?

----------------------------------------------------------------------------------------------------------

 OBS: reparei que alguns experts parecem parar de funcionar com o tempo, demandando que sejam recompilados e reinseridos para funcionar normalmente. Desconfiei que poderia ser algum estouro de memória o algo do tipo, mas ainda não cheguei a alguma real conclusão. Alguma luz sobre o problema? 

 
bremora10:

Bom dia,

OBS: reparei que alguns experts parecem parar de funcionar com o tempo, demandando que sejam recompilados e reinseridos para funcionar normalmente. Desconfiei que poderia ser algum estouro de memória o algo do tipo, mas ainda não cheguei a alguma real conclusão. Alguma luz sobre o problema? 

Olá bremora10,

Você vai precisar de um Virtual Order Manager (VOM, em inglês).

Existe um artigo sobre isso na base de artigos do site MQL5.com: https://www.mql5.com/pt/articles/88

Não é algo trivial, mas dá para ser feito.

Existem também outras discussões antigas sobre esse mesmo tema aqui no fórum, como por exemplo nesse post.

Com relação à necessidade de recompilar EA's, muito provavelmente pode ser algo relacionado à programação do mesmo. Essa é inclusive uma das checagens recomendadas nesse post

    7. O robô consegue operar por mais de 5 dias consecutivos de forma totalmente automática sem necessitar intervenções manuais?

Espero ter ajudado.

Abraços,
Malacarne 

Um Administrador de ordem virtual para rastrear ordens dentro do ambiente MetaTrader 5 de posição centrada
Um Administrador de ordem virtual para rastrear ordens dentro do ambiente MetaTrader 5 de posição centrada
  • 2014.01.22
  • Paul
  • www.mql5.com
Esta biblioteca de classe pode ser adicionada a um Expert Advisor do MetaTrader 5 para possibilitar que seja escrito com uma abordagem de ordem cêntrica amplamente similar ao MetaTrader 4, em comparação com a abordagem baseada em posição do MetaTrader 5. Ela faz isso mantendo um registro das ordens virtuais no cliente do terminal do MetaTrader 5, enquanto mantém uma parada de quebra protetora para cada posição para proteção contra desastres.
 

Obrigado pela resposta Malacarne.

Eu cheguei inclusive a escrever uma Classe de Controle de Posições que funciona, entretanto ficou aquela sensação que estava escrevendo um longo código - o que facilita a aparição de bugs - e que estava realizando trabalho desnecessário, além de um dependência profunda das Variáveis de Terminal, uma vez que dependia delas as informações.

 Vou olhar a construção do VOM e adaptar.

Razão: