Neo traderBot

Neo traderBot

Você sabia?

Um backtesting adequado deve buscar simular situações práticas do mercado (slippage, custo de operação, etc...)

leaf leftleaf right
Notifications
Clear all

[Solucionado] Impedir de enviar uma ordem logo após fechar uma posição

3 Posts
3 Usuários
1 Reactions
125 Visualizações
(@renan)
Novo membro
Registrou: 1 ano atrás
Posts: 1
Iniciador do tópico  

Gostaria de tirar uma dúvida, programei um robo que faz uma compra (com ordem limite) em uma média x, quando a diferença de 2 médias é y pontos e tem um stop de z pontos. Acontece que as vezes ele é stopado, e ainda da as condições para entrar no trade , então logo que é stopado, ele recompra, e eu não quero isso. Como faço para impedir de fazer uma compra logo depois de ser stopado? Desde já agradeço!


   
Citar
(@admin)
Membro Admin
Registrou: 2 anos atrás
Posts: 216
 

Olá Renan!

 

         Uma forma de impedir de fazer a compra logo depois de ser stopado é utilizar um contador de barras. Mas poderia-se pensar diversas outras formas, como por exemplo, o preço movimentar x% ou y ticks.

        Fiz o código abaixo de exemplo no caso de aguardar Barras após um loss. Este código funciona para backtesting. No caso de aplicar em um gráfico com dados tick a tick ou módulo de automação, a lógica precisa ser refinada pois os contadores devem atuar apenas no primeiro tick de cada barra.

 

Espero que lhe ajude. Grande abs!

 

const
  iBarrasAEsperarAposLoss = 3;

var
  fResultadoDia: float;
  iData, iHorarioBarra: integer;
  iTimeOut: integer;
begin
  //Zera a variavel de resultado diário
  if iData <> Date then
  begin
    fResultadoDia := 0;
    iData := Date;
  end;

  fResultadoDia := DailyResult(false);
  //Houve prejuízo na ultima operação
  if fResultadoDia < fResultadoDia[1] then
  begin
    iTimeOut := iBarrasAEsperarAposLoss;
    iHorarioBarra := Time;
  end;

  //Aguarda TimeOut
  if iTimeOut <> 0 then
  begin
    if Time <> iHorarioBarra then
    begin
      iHorarioBarra := Time;
      iTimeOut := iTimeOut - 1;
    end;
  end
  else
  begin
    // Abertura de posições
    if (not hasPosition) and (iTimeOut = 0) then BuyAtMarket;
  end;

  // Gestão das posições
  if isBought then
    begin
      SellToCoverStop(buyprice - 20*MinPriceIncrement, buyprice - 40*MinPriceIncrement);
      SellToCoverLimit(buyPrice + 60*MinPriceIncrement);
    end;

end;

 


   
masker reacted
ReplyCitar
(@marcos_acesso)
Novo membro
Registrou: 1 ano atrás
Posts: 2
 

Possa ser que seja parecido a dúvida com a situação do amigo aí, a minha programação é baseado em fechamento de reversão mas eu queria bloquear o envio de uma nova ordem após um loss para evitar dias de tendência forte, caso o preço esteja subindo e faça uma venda e essa venha a dá loss, gostaria de impedir novas vendas e só liberar qnd tivesse um gain na compra


   
ReplyCitar