Breakeven

 

Pessoal, estou tentando adicionar um breakeven que é acionado quando o segundo candle com lucro é encerrado mas só recebo esta mensagem:

2022.01.27 16:07:54.542 2015.01.02 11:00:00   failed modify #2 sell 0.01 EURUSD sl: 0.00000, tp: 0.00000 -> sl: 0.00000, tp: 0.00000 [Invalid stops]

Alguém pode dar uma ajuda!

double preco_entrada=PositionGetDouble(POSITION_PRICE_OPEN); // Captura o preço de entrada na posição
double preco_sl=PositionGetDouble(POSITION_SL);              // Captura o preço do stop loss
double preco_tk=PositionGetDouble(POSITION_TP);              // Captura o preço do take profit
bool be_ativado=false;       // Breakeven ativado? Corrige o looping dentro da função do breakeven
// Breakeven
void Breakeven(double preco_entrada_,double preco_sl_,double preco_tk_)
   {if(PositionSelect(_Symbol)&&PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)  // Se a operacão existir e for de compra
      {int sVelasPositivas=0;                                                          // Conta velas positivas seguidas
       int sVelasNegativas=0;
       double sOpen=0,sClose=0;
       int Candles=3; 
       for(int i=0;i<= Candles;i++)
          {sOpen=iOpen(NULL,PERIOD_CURRENT,i);
           sClose=iClose(NULL,PERIOD_CURRENT,i);
           (sClose-sOpen)>0?sVelasPositivas++:sVelasNegativas++;
           Print("Velas positivas = ",sVelasPositivas);}
       if(sVelasPositivas==Candles&&!be_ativado) // Testa condição para acionar o Breakeven
         {desenhaLinhaHorizontal("Compra",velas[1].close,clrGreen); // Desenha uma linha no alvo do breakeven
          trade.PositionModify(PositionGetTicket(0),preco_entrada,preco_tk_);be_ativado=true;}} // Modifica a posicão. Novo stop loss e novo take profit
    if(PositionSelect(_Symbol)&&PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL) // Breakeven de venda
      {int sVelasPositivas=0;                                                          // Conta velas positivas seguidas
       int sVelasNegativas=0;
       double sOpen=0,sClose=0;
       int Candles=3; 
       for(int i=0;i<= Candles;i++)
          {sOpen=iOpen(NULL,PERIOD_CURRENT,i);
           sClose=iClose(NULL,PERIOD_CURRENT,i);
           (sClose-sOpen)>0?sVelasPositivas++:sVelasNegativas++;
           Print("Velas negativas = ",sVelasNegativas);}
       if(sVelasNegativas==Candles&&!be_ativado) // Testa condição para acionar o Breakeven
         {desenhaLinhaHorizontal("Venda",velas[1].close,clrYellow);}
          trade.PositionModify(PositionGetTicket(0),preco_entrada,preco_tk_);be_ativado=true;}} // Modifica a posicão. novo stop loss e novo take profit


 
Alexandre Becker:

Pessoal, estou tentando adicionar um breakeven que é acionado quando o segundo candle com lucro é encerrado mas só recebo esta mensagem:

2022.01.27 16:07:54.542 2015.01.02 11:00:00   failed modify #2 sell 0.01 EURUSD sl: 0.00000, tp: 0.00000 -> sl: 0.00000, tp: 0.00000 [Invalid stops]

Alguém pode dar uma ajuda!



double preco_entrada=PositionGetDouble(POSITION_PRICE_OPEN); // Captura o preço de entrada na posição
double preco_sl=PositionGetDouble(POSITION_SL);              // Captura o preço do stop loss
double preco_tk=PositionGetDouble(POSITION_TP);              // Captura o preço do take profit

Acho que as variaveis acima devem estar retornando tudo "0"..

 E se vc fizer assim antes de chamar passa-las pra função Breakeven:

double preco_entrada;     // Captura o preço de entrada na posição
double preco_sl;              // Captura o preço do stop loss
double preco_tk;             // Captura o preço do take profit

if(PositionSelect(_Symbol))
{
    preco_entrada=PositionGetDouble(POSITION_PRICE_OPEN); // Captura o preço de entrada na posição
    preco_sl=PositionGetDouble(POSITION_SL);              // Captura o preço do stop loss
    preco_tk=PositionGetDouble(POSITION_TP);              // Captura o preço do take profit
}

Razão: