PositionModify - Atualizar só TP

 

Boa tarde, pessoal hoje tenho o código para modificar os TP e SL de uma operação caso ela aumente os contratos, essa
alteração atualiza em cima do novo preço médio. Porem eu nao quero mais atualizar o meu SL. Quero manter ele fixo e atualizar só o TP com o preço médio. Cheguei a fazer alguns testes mas não consegui. Ou o preço de stop fica zerado ou alteram os SL e TP. Segue abaixo o me codigo atual.

Obrigado

void ModificaPosicao()
   {
      for(int i=PositionsTotal()-1; i>=0; i--)
         {
            string symbol=PositionGetSymbol(i);
            ulong magic=PositionGetInteger(POSITION_MAGIC);
            if(symbol==_Symbol && magic==magicNum)
               {
                  ulong PositionTicket= PositionGetInteger(POSITION_TICKET);
                  double PrecoEntrada = PositionGetDouble(POSITION_PRICE_OPEN);
                  PrecoEntrada=m_symbol.NormalizePrice(PrecoEntrada);
                  double TakeProfitCorrente=PositionGetDouble(POSITION_TP);
                  double StopLossCorrente=PositionGetDouble(POSITION_SL);
                  if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
                     {
                        
                        if(TakeProfitCorrente != (PrecoEntrada+takeProfit) && StopLossCorrente != (PrecoEntrada-stopLoss))
                           {
                              Print("Stop ", StopLossCorrente );
                              trade.PositionModify(PositionTicket,PrecoEntrada-stopLoss,PrecoEntrada+takeProfit);
                              
                           }
                     }
                  if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)
                     {
                        if(TakeProfitCorrente != (PrecoEntrada-takeProfit) && StopLossCorrente != (PrecoEntrada+stopLoss))
                           {
                              Print("Stop ", StopLossCorrente );
                              trade.PositionModify(PositionTicket,PrecoEntrada+stopLoss, PrecoEntrada-takeProfit);
                           }
                     }
               }
         }
   }
 
BRUNO CONTE DE FREITAS:

Boa tarde, pessoal hoje tenho o código para modificar os TP e SL de uma operação caso ela aumente os contratos, essa
alteração atualiza em cima do novo preço médio. Porem eu nao quero mais atualizar o meu SL. Quero manter ele fixo e atualizar só o TP com o preço médio. Cheguei a fazer alguns testes mas não consegui. Ou o preço de stop fica zerado ou alteram os SL e TP. Segue abaixo o me codigo atual.

Obrigado

você já pega o SL corrente aqui:

double StopLossCorrente=PositionGetDouble(POSITION_SL);

na hora de mudar a posição apenas repita ele, assim o SL não se altera

PositionModify(PositionTicket,StopLossCorrente,PrecoEntrada+takeProfit);
Não sei se é bem isso que você quer, mas creio que seja o caminho...
 
Henrique Vilela:

você já pega o SL corrente aqui:

na hora de mudar a posição apenas repita ele, assim o SL não se altera

Não sei se é bem isso que você quer, mas creio que seja o caminho...

Henrique, é exatamente isso que alterei e quando pega a segunda entrada o SL fica como 0(Zero), ou seja, fica sem Stop.

 
BRUNO CONTE DE FREITAS:

Henrique, é exatamente isso que alterei e quando pega a segunda entrada o SL fica como 0(Zero), ou seja, fica sem Stop.

Se você está adicionando mais posições, já tentou utilizar a PositionOpen() ao invés da PositionModify() ? Apenas dando uma idéia, não cheguei realmente a utilizar a Open.


Mas penso que abrindo uma nova posição no mesmo sentido aumentam os papéis (ou contratos) e ao mesmo tempo adiciona um novo stop (o que na pratica, se for no mesmo ponto soma-se com o já existente).


Só uma idéia

Razão: