// ============================================================================ // ROBÔ HFT SCALPER WDOU25 - NELOGICA PROFIT PRO 5.0 // Versão: 1.0 // Desenvolvido para operar apenas na abertura do leilão BMF (08:55 - 09:15) // ============================================================================ // CONFIGURAÇÕES GERAIS strategy WDO_HFT_Scalper; // VARIÁVEIS DE CONFIGURAÇÃO inputs: TakeProfit(4), // Take Profit em pontos (padrão: 4 pontos) StopLoss(6), // Stop Loss em pontos (padrão: 6 pontos) QuantidadeContratos(1), // Quantidade de contratos por operação MaxOperacoesDia(20), // Máximo de operações por dia HorarioInicioHora(8), // Hora de início (08:55) HorarioInicioMinuto(55), // Minuto de início HorarioFimHora(9), // Hora de fim (09:15) HorarioFimMinuto(15), // Minuto de fim VolumeMinimo(100), // Volume mínimo para considerar operação DiferencaBooking(2); // Diferença mínima entre compra e venda no booking // VARIÁVEIS DE CONTROLE variables: OperacoesRealizadas(0), // Contador de operações do dia Posicionado(false), // Flag de posicionamento UltimaOperacao(0), // Timestamp da última operação PrecoCompra(0), // Preço de compra atual PrecoVenda(0), // Preço de venda atual VolumeCompra(0), // Volume de compra no booking VolumeVenda(0), // Volume de venda no booking SpreadAtual(0), // Spread atual do mercado TendenciaCompra(false), // Tendência de compra TendenciaVenda(false), // Tendência de venda HorarioAtual(0), // Horário atual em minutos DentroHorario(false), // Flag de horário de operação PrecoUltimaNegociacao(0), // Preço da última negociação VolumeUltimaNegociacao(0); // Volume da última negociação // ============================================================================ // FUNÇÃO PRINCIPAL DE INICIALIZAÇÃO // ============================================================================ once begin // Resetar contadores no início do dia OperacoesRealizadas := 0; Posicionado := false; // Configurar parâmetros do mercado SetOrderType(Market); SetBrokerageModel(ByTrade); // Log de inicialização Print("Robô HFT WDOU25 Scalper iniciado"); Print("Horário de operação: ", HorarioInicioHora, ":", HorarioInicioMinuto, " às ", HorarioFimHora, ":", HorarioFimMinuto); end; // ============================================================================ // VERIFICAÇÃO DE HORÁRIO DE OPERAÇÃO // ============================================================================ function VerificarHorarioOperacao() : boolean; begin HorarioAtual := Hour * 60 + Minute; // Calcular horários em minutos var HorarioInicio := HorarioInicioHora * 60 + HorarioInicioMinuto; var HorarioFim := HorarioFimHora * 60 + HorarioFimMinuto; // Verificar se está dentro do horário de operação if (HorarioAtual >= HorarioInicio) and (HorarioAtual <= HorarioFim) then result := true else result := false; end; // ============================================================================ // LEITURA DO BOOKING DE OFERTAS // ============================================================================ function LerBookingOfertas() : boolean; begin // Obter dados do Level 2 (Booking) PrecoCompra := BidPrice(0); // Melhor preço de compra PrecoVenda := AskPrice(0); // Melhor preço de venda VolumeCompra := BidSize(0); // Volume na melhor compra VolumeVenda := AskSize(0); // Volume na melhor venda // Calcular spread SpreadAtual := PrecoVenda - PrecoCompra; // Verificar se os dados são válidos if (PrecoCompra > 0) and (PrecoVenda > 0) and (VolumeCompra >= VolumeMinimo) and (VolumeVenda >= VolumeMinimo) then result := true else result := false; end; // ============================================================================ // ANÁLISE DE TENDÊNCIA BASEADA EM TIMES & TRADES // ============================================================================ function AnalisarTendencia() : boolean; begin TendenciaCompra := false; TendenciaVenda := false; // Obter dados do último trade PrecoUltimaNegociacao := Close; VolumeUltimaNegociacao := Volume; // Análise baseada na direção do último trade if PrecoUltimaNegociacao >= PrecoVenda then begin // Trade aconteceu no ask (tendência de compra) TendenciaCompra := true; result := true; end else if PrecoUltimaNegociacao <= PrecoCompra then begin // Trade aconteceu no bid (tendência de venda) TendenciaVenda := true; result := true; end else result := false; end; // ============================================================================ // VERIFICAÇÃO DE CONDIÇÕES DE ENTRADA // ============================================================================ function VerificarCondicoesEntrada() : boolean; begin result := false; // Verificar se pode operar if (OperacoesRealizadas >= MaxOperacoesDia) or Posicionado then exit; // Verificar horário if not VerificarHorarioOperacao() then exit; // Verificar booking if not LerBookingOfertas() then exit; // Verificar spread mínimo if SpreadAtual < DiferencaBooking then exit; // Verificar tendência if not AnalisarTendencia() then exit; result := true; end; // ============================================================================ // EXECUÇÃO DE COMPRA // ============================================================================ procedure ExecutarCompra(); begin if MarketPosition = 0 then begin Buy(QuantidadeContratos) shares next bar at market; Posicionado := true; OperacoesRealizadas := OperacoesRealizadas + 1; UltimaOperacao := CurrentTime; Print("COMPRA executada - Preço: ", PrecoVenda, " Operação: ", OperacoesRealizadas); end; end; // ============================================================================ // EXECUÇÃO DE VENDA // ============================================================================ procedure ExecutarVenda(); begin if MarketPosition = 0 then begin SellShort(QuantidadeContratos) shares next bar at market; Posicionado := true; OperacoesRealizadas := OperacoesRealizadas + 1; UltimaOperacao := CurrentTime; Print("VENDA executada - Preço: ", PrecoCompra, " Operação: ", OperacoesRealizadas); end; end; // ============================================================================ // GERENCIAMENTO DE POSIÇÃO E SAÍDAS // ============================================================================ procedure GerenciarPosicao(); begin if MarketPosition <> 0 then begin // Configurar Stop Loss e Take Profit if MarketPosition > 0 then begin // Posição comprada Sell next bar at EntryPrice + TakeProfit stop; Sell next bar at EntryPrice - StopLoss limit; end else if MarketPosition < 0 then begin // Posição vendida BuyToCover next bar at EntryPrice - TakeProfit stop; BuyToCover next bar at EntryPrice + StopLoss limit; end; end else begin Posicionado := false; end; end; // ============================================================================ // FECHAMENTO FORÇADO NO FINAL DO HORÁRIO // ============================================================================ procedure FecharPosicaoFinal(); begin if (not VerificarHorarioOperacao()) and (MarketPosition <> 0) then begin if MarketPosition > 0 then Sell next bar at market else if MarketPosition < 0 then BuyToCover next bar at market; Print("Posição fechada por fim do horário de operação"); Posicionado := false; end; end; // ============================================================================ // LÓGICA PRINCIPAL DO ROBÔ // ============================================================================ begin // Verificar condições gerais if not VerificarCondicoesEntrada() then begin GerenciarPosicao(); FecharPosicaoFinal(); exit; end; // Lógica de entrada baseada na tendência identificada if TendenciaCompra and (VolumeCompra > VolumeVenda * 1.2) then begin // Forte tendência de compra com volume significativo ExecutarCompra(); end else if TendenciaVenda and (VolumeVenda > VolumeCompra * 1.2) then begin // Forte tendência de venda com volume significativo ExecutarVenda(); end; // Gerenciar posições existentes GerenciarPosicao(); // Verificar fechamento por horário FecharPosicaoFinal(); end;