Ajuda em realização parcial

 

Boa noite pessoal,



Estuo tentando implementar uma RP, mas não esta fazendo saida parcial.

O EA até entra no if para fazer a parcial mas não o faz, não estou entendendo o porque.


void realizacaoParcial(int pontoDeSaida, int volume)
   {
      double preco = simbolo.Last();
      double preco_abertura=PositionGetDouble(POSITION_PRICE_OPEN);
      double positionVolume = PositionGetDouble(POSITION_VOLUME);
      double contratos = NormalizeDouble((positionVolume * (volume/100)), 0);
      
      
      if(TipoPosicao() == 1)
      {
         if(preco == (preco_abertura + pontoDeSaida))
         {
           trade.Sell(contratos, _Symbol,preco,0,0,"Realização parcial de ordem de compra");
         }
      }
      else if(TipoPosicao() == -1)
      {
         if(preco == (preco_abertura - pontoDeSaida))
         {
            trade.Buy(contratos,_Symbol,preco,0,0,"Realização parcial de ordem de venda");
         } 
      }
   }


Minha conta é neting por isso não estou verificando o ticket da posição.

Minha ideia é fazer a parcial com um volume estipulado através de porcentagem em cima do volume total da posição.

Ex:

Quero fazer uma parcial de 10% do volume total da posição.

Se minha posição é de 100 contratos minha parcial deve ser de 10 contratos.

Por isso tento fazer esse calculo do volume baseado na porcentagem informada no parametro da função:

double contratos = NormalizeDouble((positionVolume * (volume/100)), 0);


Poderiam me ajudar a entender se tem algum problema com meu código?


Desde já agradeço.

 
João Bernardes:

Boa noite pessoal,



Estuo tentando implementar uma RP, mas não esta fazendo saida parcial.

O EA até entra no if para fazer a parcial mas não o faz, não estou entendendo o porque.



Minha conta é neting por isso não estou verificando o ticket da posição.

Minha ideia é fazer a parcial com um volume estipulado através de porcentagem em cima do volume total da posição.

Ex:

Quero fazer uma parcial de 10% do volume total da posição.

Se minha posição é de 100 contratos minha parcial deve ser de 10 contratos.

Por isso tento fazer esse calculo do volume baseado na porcentagem informada no parametro da função:


Poderiam me ajudar a entender se tem algum problema com meu código?


Desde já agradeço.

Pessoal consegui aqui achar o problema.

Era no calculo da porcentagem mesmo.

Ficou assim depois de corrigir:

double contratos = MathRound(NormalizeDouble((positionVolume * (volume/100.0)), 2));
Razão: