// ============================================================================ // ROBÔ HFT SCALPER WINV25 - NELOGICA PROFIT PRO 5.0 // Versão 1.0 - Estratégia Price Action Scalper // Mercado: BMF - Futuro WINV25 // Timeframe: M1 (1 minuto) // Horário: 08:55 às 18:00 (Segunda a Sexta) // ============================================================================ // CONFIGURAÇÕES BÁSICAS Var TakeProfit: Integer; // Take Profit em pontos StopLoss: Integer; // Stop Loss em pontos MaxPosicao: Integer; // Máximo de contratos por posição TempoMaxPosicao: Integer; // Tempo máximo em posição (minutos) UsarBreakEven: Boolean; // Usar break even PontosBreakEven: Integer; // Pontos para ativar break even // PARÂMETROS PRICE ACTION PeriodoMA: Integer; // Período da média móvel MinVariacao: Float; // Variação mínima para entry VolumeMinimo: Integer; // Volume mínimo para validar sinal // VARIÁVEIS DE CONTROLE BarrasEntrada: Integer; PosicaoAberta: Boolean; PrecoEntrada: Float; BreakEvenAtivo: Boolean; UltimaOperacao: Float; IntervaloCooldown: Integer; // Minutos entre operações // VARIÁVEIS TÉCNICAS MA: Float; PrecoAnterior: Float; VolumeAtual: Integer; CompraSetup: Boolean; VendaSetup: Boolean; // ============================================================================ // INICIALIZAÇÃO // ============================================================================ Once Begin // Configurações padrão TakeProfit := 15; StopLoss := 10; MaxPosicao := 1; TempoMaxPosicao := 5; UsarBreakEven := True; PontosBreakEven := 8; PeriodoMA := 9; MinVariacao := 5.0; VolumeMinimo := 100; IntervaloCooldown := 3; // Inicializar variáveis BarrasEntrada := 0; PosicaoAberta := False; PrecoEntrada := 0; BreakEvenAtivo := False; UltimaOperacao := 0; CompraSetup := False; VendaSetup := False; PrecoAnterior := Close; End; // ============================================================================ // FUNÇÃO PRINCIPAL // ============================================================================ Begin // Verificar horário de operação (08:55 às 18:00, Segunda a Sexta) If Not HorarioOperacao() Then Begin If PosicaoAberta Then FecharPosicao(); Exit; End; // Calcular indicadores técnicos CalcularIndicadores(); // Verificar se pode operar (cooldown) If (Time - UltimaOperacao) < (IntervaloCooldown / 1440) Then Exit; // Gerenciar posição existente If PosicaoAberta Then Begin GerenciarPosicao(); Exit; End; // Identificar setups de entrada IdentificarSetups(); // Executar entradas If CompraSetup And ValidarEntrada() Then AbrirCompra(); If VendaSetup And ValidarEntrada() Then AbrirVenda(); // Atualizar variáveis PrecoAnterior := Close; End; // ============================================================================ // FUNÇÕES AUXILIARES // ============================================================================ Function HorarioOperacao(): Boolean; Var HoraAtual: Integer; MinutoAtual: Integer; DiaSemana: Integer; Begin HoraAtual := Hour(Time); MinutoAtual := Minute(Time); DiaSemana := DayOfWeek(Date); // Segunda a Sexta (2-6 no NTSL) If (DiaSemana < 2) Or (DiaSemana > 6) Then Begin Result := False; Exit; End; // Das 08:55 às 18:00 If (HoraAtual = 8) And (MinutoAtual >= 55) Then Result := True Else If (HoraAtual >= 9) And (HoraAtual < 18) Then Result := True Else Result := False; End; Procedure CalcularIndicadores(); Begin MA := Average(Close, PeriodoMA); VolumeAtual := Volume; End; Procedure IdentificarSetups(); Var ForcaAlta: Boolean; ForcaBaixa: Boolean; VolumeBom: Boolean; Begin CompraSetup := False; VendaSetup := False; // Verificar volume adequado VolumeBom := VolumeAtual >= VolumeMinimo; If Not VolumeBom Then Exit; // Setup de compra: preço acima da MA e movimento forte para cima ForcaAlta := (Close > MA) And (Close > Open) And ((High - Low) >= MinVariacao) And (Close > PrecoAnterior + MinVariacao/2); // Setup de venda: preço abaixo da MA e movimento forte para baixo ForcaBaixa := (Close < MA) And (Close < Open) And ((High - Low) >= MinVariacao) And (Close < PrecoAnterior - MinVariacao/2); CompraSetup := ForcaAlta; VendaSetup := ForcaBaixa; End; Function ValidarEntrada(): Boolean; Begin // Não operar se já teve operação recente If (Time - UltimaOperacao) < (IntervaloCooldown / 1440) Then Begin Result := False; Exit; End; // Não operar nos últimos 15 minutos do pregão If (Hour(Time) >= 17) And (Minute(Time) >= 45) Then Begin Result := False; Exit; End; Result := True; End; Procedure AbrirCompra(); Begin If PosicaoAberta Then Exit; Buy MaxPosicao Shares Next Bar At Market; PosicaoAberta := True; PrecoEntrada := Close; BarrasEntrada := 0; BreakEvenAtivo := False; UltimaOperacao := Time; // Configurar stop loss e take profit Sell MaxPosicao Shares Next Bar At (PrecoEntrada - StopLoss) Stop; Sell MaxPosicao Shares Next Bar At (PrecoEntrada + TakeProfit) Limit; Print("COMPRA executada em: ", PrecoEntrada:0:2); End; Procedure AbrirVenda(); Begin If PosicaoAberta Then Exit; SellShort MaxPosicao Shares Next Bar At Market; PosicaoAberta := True; PrecoEntrada := Close; BarrasEntrada := 0; BreakEvenAtivo := False; UltimaOperacao := Time; // Configurar stop loss e take profit BuyToCover MaxPosicao Shares Next Bar At (PrecoEntrada + StopLoss) Stop; BuyToCover MaxPosicao Shares Next Bar At (PrecoEntrada - TakeProfit) Limit; Print("VENDA executada em: ", PrecoEntrada:0:2); End; Procedure GerenciarPosicao(); Var TempoEmPosicao: Integer; LucroAtual: Float; Begin BarrasEntrada := BarrasEntrada + 1; TempoEmPosicao := BarrasEntrada; // Calcular lucro atual If Position > 0 Then LucroAtual := Close - PrecoEntrada Else LucroAtual := PrecoEntrada - Close; // Ativar break even se configurado If UsarBreakEven And Not BreakEvenAtivo And (LucroAtual >= PontosBreakEven) Then Begin If Position > 0 Then Sell MaxPosicao Shares Next Bar At PrecoEntrada Stop Else BuyToCover MaxPosicao Shares Next Bar At PrecoEntrada Stop; BreakEvenAtivo := True; Print("Break Even ativado"); End; // Fechar por tempo máximo If TempoEmPosicao >= TempoMaxPosicao Then Begin FecharPosicao(); End; End; Procedure FecharPosicao(); Begin If Position > 0 Then Sell Position Shares Next Bar At Market Else If Position < 0 Then BuyToCover Abs(Position) Shares Next Bar At Market; PosicaoAberta := False; BarrasEntrada := 0; BreakEvenAtivo := False; Print("Posição fechada"); End;