COMO CAPTURAR LUCRO CORRENTE DE TODAS AS ORDENS ABERTAS

 

Olá, eu estou desenvolvendo um EA teste que faz GRID e gostaria que ele fechasse todas as ordens abertas quando atingisse determinado lucro. Porém, da forma que eu estou fazendo o meu EA só identifica o lucro corrente da primeira ordem aberta e ignora as outras que foram abertas posteriormente. Como eu resolvo esse problema?

Eu usei a função:

if(PositionGetDouble(POSITION_PROFIT) >= Lucro)
  {FechaPosicao();}
 
Rafael Magalhães:

Olá, eu estou desenvolvendo um EA teste que faz GRID e gostaria que ele fechasse todas as ordens abertas quando atingisse determinado lucro. Porém, da forma que eu estou fazendo o meu EA só identifica o lucro corrente da primeira ordem aberta e ignora as outras que foram abertas posteriormente. Como eu resolvo esse problema?

Eu usei a função:

Provavelmente você está usando uma conta do tipo Hedge.

Você precisa varrer as posições com PositionsTotal() e PositionSelect().

https://www.mql5.com/en/docs/trading/positionstotal

Documentation on MQL5: Trade Functions / PositionsTotal
Documentation on MQL5: Trade Functions / PositionsTotal
  • www.mql5.com
PositionsTotal - Trade Functions - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5
 
Rafael Magalhães:

Olá, eu estou desenvolvendo um EA teste que faz GRID e gostaria que ele fechasse todas as ordens abertas quando atingisse determinado lucro. Porém, da forma que eu estou fazendo o meu EA só identifica o lucro corrente da primeira ordem aberta e ignora as outras que foram abertas posteriormente. Como eu resolvo esse problema?

Eu usei a função:

tente isso..

double saldo=0;

      for(int i=0; i<PositionsTotal(); i++)
        {
         PositionGetSymbol(i);
         saldo += (PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)?PositionGetDouble(POSITION_PRICE_CURRENT)-PositionGetDouble(POSITION_PRICE_OPEN):PositionGetDouble(POSITION_PRICE_OPEN)-PositionGetDouble(POSITION_PRICE_CURRENT);
        }
 

Perfeita a solução do amigo Jonathan, mas acho que o codigo deveria ficar dessa forma:

double saldo=0;

      for(int i=0; i<PositionsTotal(); i++)
        {
         PositionGetSymbol(i);
         saldo += PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP);
        }

Assim são somados o ganho (ou prejuízo) tanto do profit quanto do swap.

 
Muito obrigado pela ajuda de todos. Com a ajuda de vocês eu consegui solucionar o meu problema.
 
Rafael Magalhães #:
Muito obrigado pela ajuda de todos. Com a ajuda de vocês eu consegui solucionar o meu problema.

Parabens Rafa

Razão: