BreakEven em Ordem

 

Estou tentando implementar o breakeven no meu robô, porém, não estou tendo sucesso, estou querendo fazer um breakeven na metade do preço do TAKE PROFIT, ele rastreia o preço médio, mas não executa a lógica. Alguém poderia me explicar se tem um jeito melhor ou o que eu poderia ajeitar no código para dar certo. Fiz o robo para executar uma compra limite ou venda limite, trabalhando com uma ordem por vez. Tentei usar a modificação como POSITION MODIFY e ORDER MODIFY, mas não consegui em nenhuma

 if(liga_breakeven == SIM && OrderSelect(OrderGetTicket(0)) && OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_BUY_LIMIT)

          {

               double preco_entrada = OrderGetDouble(ORDER_PRICE_OPEN);

               double preco_sl      = OrderGetDouble(ORDER_SL);

               double preco_tp      = OrderGetDouble(ORDER_TP);

               

               double preco_medio   = (preco_entrada + preco_tp)/2;

               

               desenhaLinhaHorizontal("Compra", preco_medio,clrGreen);

               

               if(tick.last >= preco_medio)

                 {

                     //trade.OrderModify(OrderGetTicket(0)´,preco_entrada,preco_medio,preco_tp,ORDER_TIME_DAY,ORDER_TIME_EXPIRATION);

                     trade.PositionModify(OrderGetTicket(0),preco_entrada,preco_tp);

                 }

 
ROBERSON MARIANI:

....

Order é diferente de Position


Se vc quer fazer um BreakEven, vc ja tem uma POSIÇÃO e não mais uma ORDEM 

 
Jonathan Pereira:


Nesse caso eu deveria mudar de ORDER para POSITION na parte do codigo então. 

 

Códigos devem está na caixa de código do editor. Facilita pra gente poder lhe ajudar.

Exemplo:

int OnCalculate
(
   const int      rates_total,
   const int      prev_calculated,
   const datetime &time[],
   const double   &open[],
   const double   &high[],
   const double   &low[],
   const double   &close[],
   const long     &tick_volume[],
   const long     &volume[],
   const int      &spread[]
)

Tem o botão com o icone assim: </> 

No editor do texto que vc escreveu.

 
   Ele rastreia a metade do stop gain, porém, quando alcança o preço não muda o stop.
if(liga_breakeven == SIM && OrderSelect(OrderGetTicket(0)) && OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_BUY_LIMIT)
          {
               double preco_entrada = OrderGetDouble(ORDER_PRICE_OPEN);
               double preco_sl      = OrderGetDouble(ORDER_SL);
               double preco_tp      = OrderGetDouble(ORDER_TP);
               
               double preco_medio   = (preco_entrada + preco_tp)/2;
               
               desenhaLinhaHorizontal("Compra", preco_medio,clrGreen);
               
               if(tick.last >= preco_medio)
                 {
                     
                     trade.OrderModify(OrderGetTicket(0),preco_entrada,preco_medio,preco_tp,ORDER_TIME_DAY,0);
                 }
               
               
               Print("PREÇO DA METADE DA COMPRA: ", preco_medio);
          }
Razão: