Problemas com a função PositionsTotal() (RESOLVIDO)

 

Estou desenvolvendo um EA que utiliza os volumes (cotas) para gerenciar compras e vendas. O desenvolvimento não foi nada muito complexo. Na conta demo de duas corretoras diferentes funciona sem problemas (tirando algumas limitações por ser conta demo!).

Quando resolvi testar em uma conta real, a função 'PositionsTotal()' está replicando sete (7) vezes a posição total.

Fiz testes em outros ativos e o problema se repete em todos aqueles que tenho cotas compradas.

Liguei para a corretora, e realizaram um sincronismo entre a plataforma da corretora e o MT5, que não resolveu o problema.

segue código abaixo:

double CountVolumeOpenPositionsTipeBuy(void) {
   int total = PositionsTotal();    
   PrintFormat("PositionsTotal(): %d", total); 
   
   int count = 0;
   for (int i=0; i<total; i++){
      if(PositionSelect(Symbol())){
         if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) {
         
         PrintFormat("Volume da posição: %.0f; Time %d", PositionGetDouble(POSITION_VOLUME), (datetime)PositionGetInteger(POSITION_TIME));
            count++; 
           m_volume_total_posicao_compra += PositionGetDouble(POSITION_VOLUME);
         }
      }
   }
   
   PrintFormat("Volume Total posições de compra: %.0f; Time %d", m_volume_total_posicao_compra, (datetime)PositionGetInteger(POSITION_TIME));
   PrintFormat("Total posições de compra: %d", count);
    return(m_volume_total_posicao_compra);
}

E o resultado exibido na aba Experts no MT5 conta real:

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

PositionsTotal(): 7

Volume da posição: 128; Time 1535729157

Volume da posição: 128; Time 1535729157

Volume da posição: 128; Time 1535729157

Volume da posição: 128; Time 1535729157

Volume da posição: 128; Time 1535729157

Volume da posição: 128; Time 1535729157

Volume da posição: 128; Time 1535729157

Volume Total posições de compra: 896; Time 1535729157

Total posições de compra: 7

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

OBS.: o volume de 128 cotas está correto.

Abraço a todos.


SOLUÇÃO DO PROBLEMA:

O problema estava no condicional que verificava se a posição era de compra. Faltava verificar o ativo em questão.

O trecho de código era:

if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY){

E ficou: 

if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && PositionGetSymbol(i) == Symbol()) {


Deixo a critério dos moderadores a deleção deste tópico, pois acredito que possa ajudar algum usuário que tenha problema semelhante.

Abraço a todos.

Razão: