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] Variável contador (como limitar número de operação do robô )

3 Posts
2 Usuários
1 Reactions
158 Visualizações
(@tadeu-caique)
Membro ativo
Registrou: 2 anos atrás
Posts: 2
Iniciador do tópico  

Como limitar número de operaçoes diárias do robô ?


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

E ai, Tadeu! Tudo bem?

Escrevi o código abaixo para exemplificar como seria implementar a limitação de quantidade de operações do robô no dia.

 

Grande abs!

 

const
  // Mude aqui a qtde maxima de trades por dia 
  cQtdeMaxOperacoesNoDia = 5;

var 
  iQtdeOperacoesNoDia: integer;
  iDataAtual: integer;
  bJaContouOperacao: boolean;
  fMedia: float;

begin
  // Inicialização do contador de ordens do dia  
  if Date <> iDataAtual then
  begin
    iDataAtual := Date;
    iQtdeOperacoesNoDia := 0;
    bJaContouOperacao := false;
  end;
  
  // Setup de cruzamento de Media movel só para gerar operações
  fMedia := Media(3,Close);

  // Realiza abertura de posições apenas se número maximo de operação
  // não tiver sido atingido
  if iQtdeOperacoesNoDia < cQtdeMaxOperacoesNoDia then
  begin
    // COMPRA se fechamento cruzar media para cima e
    // VENDE se fechamento cruzar media pra baixo
    if (Close > fMedia) and (Close[1] <= fMedia[1]) and Not HasPosition then BuyAtMarket;       
    if (Close < fMedia) and (Close[1] >= fMedia[1]) and Not HasPosition then SellShortAtMarket;
  end;
  
  // Contabiliza a abertura da posição como mais uma operação no dia   
  if (isBought or isSold) and Not bJaContouOperacao then
  begin
    iQtdeOperacoesNoDia := iQtdeOperacoesNoDia + 1;
    bJaContouOperacao := true;  
  end;

  // Posiciona ordens para gestão do trade
  if isBought then
  begin
    SellShortStop(buyPrice - 5*MinPriceIncrement);
    SellShortLimit(buyPrice + 15*MinPriceIncrement);
  end;

  // Posiciona ordens para gestão do trade
  if isSold then
  begin
    BuyStop(sellPrice + 5*MinPriceIncrement);
    BuyLimit(sellPrice - 15*MinPriceIncrement);
  end;
  
  // Encerra posicao no mesmo dia
  if (Time >= 1645) and hasPosition then ClosePosition;

  // Se posição for encerrada ativa novamente o contador
  if Not IsBought and Not isSold and bJaContouOperacao then bJaContouOperacao := false;  

  // Apenas para inspeção gráfica do sinal
  Plot(fMedia);
  
end

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

Só complementando...gravei um vídeo com esse Snippet porque essa dúvida já tinha surgido com outras pessoas, e no vídeo explico parte por parte do código fonte.

Link para vídeo: Como LIMITAR a quantidade de TRADES POR DIA

Abs!

    


   
Luan reacted
ReplyCitar