Maior e Menor Preço das ordens abertas.

lmdesenvolvimento  

Olá pessoal, pesquisei bastante aqui mas não consegui encontrar (talvez ate já tenha), gostaria de saber no caso se tiver mais de uma ordem aberta, qual o menor preço e qual o maior preço.

Exemplo:  Se eu tiver comprado no 100, 90, 80 e 70, o maior seria 100 e o menor o 70.

Eu consegui pegar o preço da ultima ordem aberta, mas nem sempre ela vai ser maior ou menor porque a mesma pode dar take antes das primeiras ordem que foram abertas.

Desde ja agradeço.

Sidnei Da Silva Santos Junior  
lmdesenvolvimento:

Olá pessoal, pesquisei bastante aqui mas não consegui encontrar (talvez ate já tenha), gostaria de saber no caso se tiver mais de uma ordem aberta, qual o menor preço e qual o maior preço.

Exemplo:  Se eu tiver comprado no 100, 90, 80 e 70, o maior seria 100 e o menor o 70.

Eu consegui pegar o preço da ultima ordem aberta, mas nem sempre ela vai ser maior ou menor porque a mesma pode dar take antes das primeiras ordem que foram abertas.

Desde ja agradeço.

Talvez o uso da função OnTradeTransaction() possa te ajudar. 

Não sou um programador avançado em MQL5 mas eu tentaria por esse caminho.

Jonathan Pereira  
   for(int i = PositionsTotal()-1; i>=0; i--)
     {
      if(PositionGetSymbol(i) == Symbol() && PositionGetInteger(POSITION_MAGIC) == m_expert_magic)
        {
         .....///sua logica
        }
     }
lmdesenvolvimento  

obrigado Jonathan, não sei se é o certo mas usando tua logica resolvi assim:

menorPreco = 0; //variavel que recebe o menor preço

   for(int i = PositionsTotal()-1; i>=0; i--)   //loop com quantidade ordens abertas

     {

      if(PositionGetSymbol(i) == Symbol() && PositionGetInteger(POSITION_MAGIC) == numeroMagico) //verificando se a ordem equivale ao numero magico

        {

         if (menorPreco == 0) // verificando se a variavel ja tem algum valor

        {

         menorPreco = PositionGetDouble(POSITION_PRICE_OPEN); //senao tiver ela recebe o preço da primeira ordem encontrada

           }

         else

           {

            if (PositionGetDouble(POSITION_PRICE_OPEN) < menorPreco) //verifica se a proxima ordem é menor que a ordem setada na variável menorPreco

            {

              menorPreco = PositionGetDouble(POSITION_PRICE_OPEN); //se for menor a variavel menorPreco recebe o preço da ordem atual do loop

            }

           }

        }

     }
Razão: