Ajuda com EA que não altera SL/TP na conta real

 

Prezados,


Não sei o que ocorre, sempre na conta demo esse EA abria a posição e logo em seguida altera o SL/TP conforme o indicador ATR.


Porém hoje ao testar na conta real da XP, a posição foi aberta mas nada de alterar o SL/TP:


Log EA (obs: essa edição de preço em 10:45:41 foi na mão):

2023.02.27 10:45:00.007    Trades    ' xxxxxxx': accepted exchange buy 1 WINJ23 at market
2023.02.27 10:45:00.037    Trades    ' xxxxxxx': exchange buy 1 WINJ23 at market placed for execution (Order Ack. Sending to OMS...)
2023.02.27 10:45:00.070    Trades    ' xxxxxxx': order #2482101663 buy 1 / 1 WINJ23 at market done in 93.369 ms
2023.02.27 10:45:00.071    Trades    ' xxxxxxx': deal #339815691 buy 1 WINJ23 at 107580 done (based on order #2482101663)
2023.02.27 10:45:41.174    Trades    ' xxxxxxx': modify #2482101663 buy 1 WINJ23 sl: 0, tp: 0 -> sl: 107240, tp: 107920
2023.02.27 10:45:41.206    Trades    ' xxxxxxx': accepted modify #2482101663 buy 1 WINJ23 sl: 0, tp: 0 -> sl: 107240, tp: 107920
2023.02.27 10:45:41.206    Trades    ' xxxxxxx': modify #2482101663 buy 1 WINJ23 -> sl: 107240, tp: 107920 done in 32.369 ms

Trecho do código:

if(comprado==true && posicaoAberta==false)
     {
      request.action=TRADE_ACTION_DEAL;
      request.type=ORDER_TYPE_BUY;
      request.symbol = _Symbol;
      request.volume = Lote;
      request.price=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
      request.sl = 0;
      request.tp = 0;
      request.deviation=100;

      bool sent=OrderSend(request,result);
      

      // Modificar SL/TP
      if(result.retcode==TRADE_RETCODE_PLACED || result.retcode==TRADE_RETCODE_DONE)
        {
         request.action=TRADE_ACTION_SLTP;

         PositionSelect(_Symbol);
         double precoPosicao=PositionGetDouble(POSITION_PRICE_OPEN);
         int spread = MathRound(atr[1]);
         spread = (int)(spread+(5-MathMod(spread,5)));
         if(Stop>=0) 
            {request.sl=precoPosicao -(spread);}
         if(Take>=0) 
         {request.tp=precoPosicao+(spread);}

         if(request.sl>0 && request.tp>0) sent=OrderSend(request,result);

         compraAberta=true;
         vendaAberta=false;
         comprado=false;
         vendido=false;
         Comment("Sem viés, porém livre para alterações"+"\n"+"comprado = "+comprado+"\n"+"vendido = "+vendido+"\n"+"nível = "+nivel);

         Print("Ordem de compra inserida!");
        }
       else
       {
         Print("Não foi enviada a ordem solicitada. Erro ",result.retcode);
         Print("Erro ao enviar a ordem de compra. Erro =",GetLastError());
         ResetLastError();
       }
       Print("Sinal de compra");
     }

Ainda que houvesse algum erro no valor cadastrado como o SL/TP não deveria indicar no log ao menos a primeira linha de "modify..." ?


Att.

 
Breno Nascimento Faria:

Prezados,


Não sei o que ocorre, sempre na conta demo esse EA abria a posição e logo em seguida altera o SL/TP conforme o indicador ATR.


Porém hoje ao testar na conta real da XP, a posição foi aberta mas nada de alterar o SL/TP:


Log EA (obs: essa edição de preço em 10:45:41 foi na mão):

2023.02.27 10:45:00.007    Trades    ' xxxxxxx': accepted exchange buy 1 WINJ23 at market
2023.02.27 10:45:00.037    Trades    ' xxxxxxx': exchange buy 1 WINJ23 at market placed for execution (Order Ack. Sending to OMS...)
2023.02.27 10:45:00.070    Trades    ' xxxxxxx': order #2482101663 buy 1 / 1 WINJ23 at market done in 93.369 ms
2023.02.27 10:45:00.071    Trades    ' xxxxxxx': deal #339815691 buy 1 WINJ23 at 107580 done (based on order #2482101663)
2023.02.27 10:45:41.174    Trades    ' xxxxxxx': modify #2482101663 buy 1 WINJ23 sl: 0, tp: 0 -> sl: 107240, tp: 107920
2023.02.27 10:45:41.206    Trades    ' xxxxxxx': accepted modify #2482101663 buy 1 WINJ23 sl: 0, tp: 0 -> sl: 107240, tp: 107920
2023.02.27 10:45:41.206    Trades    ' xxxxxxx': modify #2482101663 buy 1 WINJ23 -> sl: 107240, tp: 107920 done in 32.369 ms

Trecho do código:

Ainda que houvesse algum erro no valor cadastrado como o SL/TP não deveria indicar no log ao menos a primeira linha de "modify..." ?

a

Att.

Até onde consigo ver era pra estar dando erro "invalid stop", nao tem nada no log mesmo? nas abas diario ou expert? Mesmo esses seus logs nao mostrou nenhuma mensagem?

 
Ricardo Rodrigues Lucca #:

Até onde consigo ver era pra estar dando erro "invalid stop", nao tem nada no log mesmo? nas abas diario ou expert? Mesmo esses seus logs nao mostrou nenhuma mensagem?

Exato, nada de erro nos logs da aba diario ou expert, nem nos txt gerados. Nem mesmo há menção de tentativa de modificação.

Deixei em anexo os logs, apenas ignore a menção "comprado" que não significa posicionado, serve para negociar com vies apenas para compras.


O estranho que não mexo no código desde 2021 mas venho usando sempre na demo (abaixo) roda normal, abre a posição e em seguida o SL/TP:


CS    0    14:45:00.150    Trades    '': exchange sell 1 WINJ23 at market
CS    0    14:45:00.365    Trades    '': accepted exchange sell 1 WINJ23 at market
CS    0    14:45:00.772    Trades    '': deal #1107462587 sell 1 WINJ23 at 107455 done (based on order #1492212771)
CS    0    14:45:00.836    Trades    '': order #1492212771 sell 1 / 1 WINJ23 at 107455 done in 820.494 ms
CS    0    14:45:00.863    Trades    '': modify #1492212771 sell 1 WINJ23 sl: 0, tp: 0 -> sl: 107645, tp: 107265
CS    0    14:45:00.900    Trades    '': accepted modify #1492212771 sell 1 WINJ23 sl: 0, tp: 0 -> sl: 107645, tp: 107265
CS    0    14:45:00.922    Trades    '': modify #0 sell 1 WINJ23 -> sl: 107645, tp: 107265 done in 59.985 ms
CS    0    14:50:39.237    Trades    '': modify #1492212771 sell 1 WINJ23 sl: 107645, tp: 107265 -> sl: 107405, tp: 107265
CS    0    14:50:39.271    Trades    '': accepted modify #1492212771 sell 1 WINJ23 sl: 107645, tp: 107265 -> sl: 107405, tp: 107265
CS    0    14:50:39.271    Trades    '': modify #1492212771 sell 1 WINJ23 -> sl: 107405, tp: 107265 done in 72.718 ms
CS    0    14:50:50.704    Trades    '': deal #1107472647 buy 1 WINJ23 at 107265 done (based on order #1492225529)
"

Att.

 
Breno Nascimento Faria:


Caro Breno,

em REAL as coisas são mais lentas do que em DEMO, alguns ms +a. 

Então vamos lá,

1) Não deveria testar ORDER PLACED. O Placed no log é o registro ACCEPTED!

2) Em seguida está assumindo que o PositionSelect(_Symbol) obteve o dado da posição em aberto, mas na verdade deu FALSE!, pois DEAL ainda não foi atualizado no TERMINAL.


Detalhe importante:

Em REAL a ordem dos TRANSACTIONS é: ACCEPT, ORDER DONE, DEAL ... 

EM DEMO a ordem dos TRANSACTIONS é: ACCEPT,  DEAL, ORDER DONE ...