Preço Last atinge meu TP e fecha posição no negativo (bolsas de valores)

 

Olá pessoal!

Tudo bem?

Estou com uma questão pra resolver no mercado de bolsas brasileiro (B3).

Desenvolvi um EA, porém, percebi que em alguns momentos (acredito que de alta volatilidade), o preço Last se afasta do Ask e do Bid, e nestas situações o Last atinge meu TP no lucro, porém, fecha a posição com valor negativo (Ask quando fecha uma venda e Bid quando fecha uma compra), estes testes foram realizados no mini índice (WIN), inclusive aumentei os TPs para tentar evitar de que o Last ativasse o TP enquanto os preços de Ask/Bid estavam no negativo da posição, porém, não resolveu a questão.

Diante de tais situações, quais são as soluções que vcs utilizam nos seus EAs para operar em bolsas que possuem este comportamento?

 

Pensei em, ao invés de colocar o TP/SL nas posições abertas, armazenar eles e monitorar os preços de Ask/Bid conforme a posição desejada a ser fechada no lucro, porém acredito que esta abordagem irá aumentar um pouco o meu custo computacional exigindo que a CPU processe mais para o monitoramento dos valores Tick a tick e também exigirá um pouco mais de memória para que sejam armazenados os níveis de SL/TP. E como é uma estratégia que utiliza Hedge e abre muitas operações me parece que o custo computacional acabará aumentando bastante.

Por isso, gostaria de ouvir as ideias e soluções que vcs utilizam.

 

Desde já, muito obrigado pela atenção e ajuda de vocês!

 

Atenciosamente,

Samuel.

 
Samuel Sant Anna:


Olá Samuel,

em algumas commodities,  nos contratos cheios de  IND e DOL e nas ETF é muito comum isso acontecer.

Eu uso para SL/TP o  BUY_STOP_LIMIT e SELL_STOP_LIMIT,  mas atenção, como a oferta é a preço limite,  esta pode ficar na pedra,  o seu EA tem que estar preparado para contornar isso.

 

Olá,

Crie as saídas com BL ou SL.

 
Rogerio Giannetti Torres:

Olá Samuel,

em algumas commodities,  nos contratos cheios de  IND e DOL e nas ETF é muito comum isso acontecer.

Eu uso para SL/TP o  BUY_STOP_LIMIT e SELL_STOP_LIMIT,  mas atenção, como a oferta é a preço limite,  esta pode ficar na pedra,  o seu EA tem que estar preparado para contornar isso.

Olá Rogério!
Primeiramente, muito obrigado pela resposta, porém, poderia dar um exemplo para que eu entendesse melhor sua ideia?

Se entendi, ao invés de utilizar SL/TP vc utiliza BUY_STOP_LIMIT e SELL_STOP_LIMIT, como funciona isso? Esta ideia vale tanto para contas hedge como netting? Poderia dar um exemplo desta ideia em funcionamento?

Também não entendi direito este alerta: "como a oferta é a preço limite,  esta pode ficar na pedra,  o seu EA tem que estar preparado para contornar isso.". Pode dar um exemplo tbm desta situação e como contornar ela?

Desde já, muito obrigado Rogério!

 
Ivan Ronchi:

Olá,

Crie as saídas com BL ou SL.

Olá Ivan!

BL seria Breakeven Level?

Utilizando o SL no lucro quando preço atual estiver lucro, eu escaparia desta situação do preço Last disparar e me fazer a posição fechar em um valor negativo?

Poderia citar um exemplo da sua ideia para eu entender melhor?

Desde já, muito obrigado pelas suas ideias Ivan!

 
Samuel Sant Anna:

Olá Rogério!
Primeiramente, muito obrigado pela resposta, porém, poderia dar um exemplo para que eu entendesse melhor sua ideia?

Se entendi, ao invés de utilizar SL/TP vc utiliza BUY_STOP_LIMIT e SELL_STOP_LIMIT, como funciona isso? Esta ideia vale tanto para contas hedge como netting? Poderia dar um exemplo desta ideia em funcionamento?

Também não entendi direito este alerta: "como a oferta é a preço limite,  esta pode ficar na pedra,  o seu EA tem que estar preparado para contornar isso.". Pode dar um exemplo tbm desta situação e como contornar ela?

Desde já, muito obrigado Rogério!

Boa tarde,

vou exemplificar comprando IND,  de antemão eu sei que o spread do IND é 90% tempo >= 3 ticks, então:

Se o preço está em 100300  e você quer comprar se o preço atingir 100350, coloque uma BUY_STOP_LIMIT com gatilho a  100365 e preço limitado em 100350 como mostrado abaixo, então quando uma operação for executada a 100365 o gatilho é executado e uma ordem de compra a preço limite de 100350 e colocada no DOM.

Uma vez atingido 100365, ou melhor rompido 100350, nada garante que  sua ordem colocada no DOM  será executada ....

Se você usar o BUYSTOP que é o gatilho a mercado você vai comprar, mas pela melhor oferta (ASK) quando a ordem bater na B3...  é uma loteria comprar IND a mercado.


   MqlTradeRequest      request;     
   MqlTradeResult       result;    
   ZeroMemory(request);
   ZeroMemory(result);
//---
   request.action       = TRADE_ACTION_PENDING;
   request.type         = ORDER_TYPE_BUY_STOP_LIMIT;
   request.magic        = 123581321;
   request.symbol       = _Symbol;
   request.volume       = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
   request.price        = 100350 + 3*SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE);  // gatilho para emitir a buy limit
   request.stoplimit    = 
100350 ;
   request.type_filling = ORDER_FILLING_RETURN;
//---
   bool ret = OrderSend(request, result);
//---
 
Rogerio Giannetti Torres:

Boa tarde,

vou exemplificar comprando IND,  de antemão eu sei que o spread do IND é 90% tempo >= 3 ticks, então:

Se o preço está em 100300  e você quer comprar se o preço atingir 100350, coloque uma BUY_STOP_LIMIT com gatilho a  100365 e preço limitado em 100350 como mostrado abaixo, então quando uma operação for executada a 100365 o gatilho é executado e uma ordem de compra a preço limite de 100350 e colocada no DOM.

Uma vez atingido 100365, ou melhor rompido 100350, nada garante que  sua ordem colocada no DOM  será executada ....

Se você usar o BUYSTOP que é o gatilho a mercado você vai comprar, mas pela melhor oferta (ASK) quando a ordem bater na B3...  é uma loteria comprar IND a mercado.


Muito interessante esta abordagem Rogério!

Muito obrigado por compartilhar, vou pensar mais sobre esta possibilidade.

Muito obrigado Rogério! Grande abraço!