Falha no retorno de informações de posições em conta Hedge

 

Boa tarde pessoal,

Estou enfrentando o seguinte problema nos testes de um EA em EURUSD para conta Hedge:

Dentro de um loop para obter infos das posições abertas, algumas das posições não retornam suas informações (símbolo é um string vazio e não há ticket), segue o código abaixo.

Outro ponto importante, não ocorre para todas as posições, em teste com 4 posições abertas, alternadamente 2 foram processadas corretamente e 2 falharam. Imaginei que pudesse ser problema do tempo de execução, mas coloquei atrasos propositalmente e não adiantou. Para conseguir as informações tive que chamar o mesmo loop algumas vezes, o que não faz sentido neste caso..

Alguma sugestão ou erro aparente?

Muito obrigado!

int totalPositions = PositionsTotal();
if(totalPositions > 0)
{
   for(int posId = 0; posId < totalPositions; posId++)
   {
      string posSymbol = PositionGetSymbol(posId); // Get Symbol
      if(posSymbol == Symbol())
      {
         ulong posTicket = PositionGetTicket(posId); // Get Ticket
         if(PositionSelectByTicket(posTicket))
         {
            long magic = (long)PositionGetInteger(POSITION_MAGIC); // Get magic number
            if(magic == EA_MAGIC) // Compare magic numbers
            {
               // Other function...
            }
         }
      }
   }
}
 
Murilo Falleiros:

Boa tarde pessoal,

Estou enfrentando o seguinte problema nos testes de um EA em EURUSD para conta Hedge:

Dentro de um loop para obter infos das posições abertas, algumas das posições não retornam suas informações (símbolo é um string vazio e não há ticket), segue o código abaixo.

Outro ponto importante, não ocorre para todas as posições, em teste com 4 posições abertas, alternadamente 2 foram processadas corretamente e 2 falharam. Imaginei que pudesse ser problema do tempo de execução, mas coloquei atrasos propositalmente e não adiantou. Para conseguir as informações tive que chamar o mesmo loop algumas vezes, o que não faz sentido neste caso..

Alguma sugestão ou erro aparente?

Muito obrigado!

Murilo, pode ser que falte um Refresh,

Veja, pode ser que ajude: https://www.mql5.com/pt/docs/standardlibrary/expertclasses/expertbaseclasses/cexpert/cexpertrefresh

Documentação sobre MQL5: Biblioteca Padrão / Módulos de estratégias / Classes Base para Expert Advisors / CExpert / Refresh
Documentação sobre MQL5: Biblioteca Padrão / Módulos de estratégias / Classes Base para Expert Advisors / CExpert / Refresh
  • www.mql5.com
//| Refreshing data for processing                                   | //| INPUT:  no.                                                      | //| OUTPUT: true-if successful, false otherwise.                     | //| REMARK: no.                                                      |
 
Ruy Christian Hoffmann:

Murilo, pode ser que falte um Refresh,

Veja, pode ser que ajude: https://www.mql5.com/pt/docs/standardlibrary/expertclasses/expertbaseclasses/cexpert/cexpertrefresh

Obrigado Ruy, não estou utilizando bibliotecas padrão, mas em último caso, vou estudar a possibilidade de inclusão aqui!