//+------------------------------------------------------------------+ //| HFT_Scalper_Profiles.mqh | //| Copyright 2024, Scalper HFT Systems Ltd. | //| https://www.mql5.com/pt/users | //+------------------------------------------------------------------+ #property copyright "Copyright 2024, Scalper HFT Systems Ltd." #property link "https://www.mql5.com/pt/users" //+------------------------------------------------------------------+ //| Perfis de Configuração para HFT Scalper | //+------------------------------------------------------------------+ //--- Perfil CONSERVADOR struct ConservativeProfile { static double LotSize() { return 0.01; } static int StopLoss() { return 8; } static int TakeProfit() { return 12; } static int MaxOrders() { return 2; } static int MinBarsAfterTrade() { return 5; } static double MaxSpread() { return 3.0; } static int RSI_Overbought() { return 70; } static int RSI_Oversold() { return 30; } static double MinPriceSpeed() { return 0.0002; } static bool UseTrailingStop() { return true; } static int TrailingStop() { return 4; } static string Description() { return "Perfil Conservador - Menor risco, trades mais seletivos"; } }; //--- Perfil MODERADO (Padrão) struct ModerateProfile { static double LotSize() { return 0.01; } static int StopLoss() { return 10; } static int TakeProfit() { return 15; } static int MaxOrders() { return 3; } static int MinBarsAfterTrade() { return 3; } static double MaxSpread() { return 5.0; } static int RSI_Overbought() { return 75; } static int RSI_Oversold() { return 25; } static double MinPriceSpeed() { return 0.0003; } static bool UseTrailingStop() { return true; } static int TrailingStop() { return 5; } static string Description() { return "Perfil Moderado - Balanceado entre risco e oportunidade"; } }; //--- Perfil AGRESSIVO struct AggressiveProfile { static double LotSize() { return 0.02; } static int StopLoss() { return 12; } static int TakeProfit() { return 18; } static int MaxOrders() { return 5; } static int MinBarsAfterTrade() { return 2; } static double MaxSpread() { return 7.0; } static int RSI_Overbought() { return 80; } static int RSI_Oversold() { return 20; } static double MinPriceSpeed() { return 0.0004; } static bool UseTrailingStop() { return true; } static int TrailingStop() { return 6; } static string Description() { return "Perfil Agressivo - Maior risco, mais trades"; } }; //--- Perfil ULTRA-HFT (Máxima Frequência) struct UltraHFTProfile { static double LotSize() { return 0.01; } static int StopLoss() { return 6; } static int TakeProfit() { return 9; } static int MaxOrders() { return 8; } static int MinBarsAfterTrade() { return 1; } static double MaxSpread() { return 2.0; } static int RSI_Overbought() { return 85; } static int RSI_Oversold() { return 15; } static double MinPriceSpeed() { return 0.0001; } static bool UseTrailingStop() { return true; } static int TrailingStop() { return 3; } static string Description() { return "Perfil Ultra-HFT - Máxima frequência, apenas para contas ECN premium"; } }; //--- Perfil SCALPING NOTURNO struct NightScalpingProfile { static double LotSize() { return 0.005; } static int StopLoss() { return 15; } static int TakeProfit() { return 20; } static int MaxOrders() { return 2; } static int MinBarsAfterTrade() { return 8; } static double MaxSpread() { return 4.0; } static int RSI_Overbought() { return 65; } static int RSI_Oversold() { return 35; } static double MinPriceSpeed() { return 0.0001; } static bool UseTrailingStop() { return true; } static int TrailingStop() { return 8; } static string Description() { return "Perfil Noturno - Adaptado para baixa volatilidade"; } }; //+------------------------------------------------------------------+ //| Configurações por Sessão de Mercado | //+------------------------------------------------------------------+ //--- Sessão ASIÁTICA (Baixa Volatilidade) struct AsianSessionConfig { static double LotSizeMultiplier() { return 0.5; } static int StopLossMultiplier() { return 150; } // 150% do normal static int TakeProfitMultiplier() { return 120; } // 120% do normal static double MaxSpread() { return 3.0; } static int MinBarsAfterTrade() { return 5; } static string TimeRange() { return "00:00-08:00 GMT"; } }; //--- Sessão EUROPEIA (Alta Volatilidade) struct EuropeanSessionConfig { static double LotSizeMultiplier() { return 1.0; } static int StopLossMultiplier() { return 100; } // Normal static int TakeProfitMultiplier() { return 100; } // Normal static double MaxSpread() { return 5.0; } static int MinBarsAfterTrade() { return 3; } static string TimeRange() { return "08:00-17:00 GMT"; } }; //--- Sessão AMERICANA (Máxima Volatilidade) struct AmericanSessionConfig { static double LotSizeMultiplier() { return 1.2; } static int StopLossMultiplier() { return 80; } // 80% do normal (mais apertado) static int TakeProfitMultiplier() { return 120; } // 120% do normal static double MaxSpread() { return 6.0; } static int MinBarsAfterTrade() { return 2; } static string TimeRange() { return "13:00-22:00 GMT"; } }; //+------------------------------------------------------------------+ //| Configurações para diferentes tipos de mercado | //+------------------------------------------------------------------+ //--- Mercado TRENDING (Tendência) struct TrendingMarketConfig { static int MA_Fast() { return 3; } // EMA mais rápida para capturar tendências static int MA_Slow() { return 8; } static int RSI_Period() { return 5; } static double MinPriceSpeed() { return 0.0005; } // Velocidade maior static int TakeProfitMultiplier() { return 150; } // TP maior em trends static string Description() { return "Config para mercados em tendência forte"; } }; //--- Mercado RANGING (Lateral) struct RangingMarketConfig { static int MA_Fast() { return 8; } // EMAs mais lentas para filtrar ruído static int MA_Slow() { return 15; } static int RSI_Period() { return 10; } static double MinPriceSpeed() { return 0.0002; } // Velocidade menor static int StopLossMultiplier() { return 80; } // SL menor em range static string Description() { return "Config para mercados laterais"; } }; //--- Mercado HIGH VOLATILITY (Alta Volatilidade) struct HighVolatilityConfig { static double LotSizeMultiplier() { return 0.7; } // Lote menor static int StopLossMultiplier() { return 150; } // SL maior static int TakeProfitMultiplier() { return 200; } // TP muito maior static double MaxSpread() { return 8.0; } static int MinBarsAfterTrade() { return 5; } static string Description() { return "Config para alta volatilidade (news, eventos)"; } }; //+------------------------------------------------------------------+ //| Configurações de Horários de Trading | //+------------------------------------------------------------------+ struct TradingHours { // Horários ideais para HFT (GMT) static bool IsGoodTime(int hour) { // Sessão Europeia: 8-12h (abertura) if(hour >= 8 && hour < 12) return true; // Sobreposição EU/US: 13-17h (máxima liquidez) if(hour >= 13 && hour < 17) return true; // Sessão Americana ativa: 20-22h if(hour >= 20 && hour < 22) return true; return false; } static bool IsBadTime(int hour) { // Rollover e baixa liquidez: 21-23h if(hour >= 21 && hour < 23) return true; // Madrugada: 23-1h if(hour >= 23 || hour < 1) return true; return false; } static string GetSessionName(int hour) { if(hour >= 0 && hour < 8) return "Asiática"; if(hour >= 8 && hour < 17) return "Europeia"; if(hour >= 17 && hour < 24) return "Americana"; return "Desconhecida"; } }; //+------------------------------------------------------------------+ //| Configurações de Money Management | //+------------------------------------------------------------------+ struct MoneyManagement { // Calcular lote baseado no saldo static double CalculateLotSize(double balance, double risk_percent = 2.0) { double min_lot = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN); double max_lot = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX); double lot_step = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP); double risk_amount = balance * risk_percent / 100.0; double pip_value = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE); double calculated_lot = risk_amount / (10 * pip_value); // 10 pips de risco // Normalizar lote calculated_lot = MathFloor(calculated_lot / lot_step) * lot_step; calculated_lot = MathMax(calculated_lot, min_lot); calculated_lot = MathMin(calculated_lot, max_lot); return calculated_lot; } // Ajustar lote baseado no drawdown static double AdjustLotForDrawdown(double base_lot, double current_dd, double max_dd = 10.0) { if(current_dd >= max_dd * 0.8) // 80% do DD máximo return base_lot * 0.5; else if(current_dd >= max_dd * 0.5) // 50% do DD máximo return base_lot * 0.7; else return base_lot; } };