//+------------------------------------------------------------------+ //| Context.mqh – konfigurace EA, pouze data z inputů | //+------------------------------------------------------------------+ #property copyright "TestRefactor" #property strict #ifndef __CONTEXT_MQH__ #define __CONTEXT_MQH__ enum ENUM_EXIT_MODE { EXIT_BY_SL_TRAIL, // Stop Loss & Trailing – uzavření přes trailing stop EXIT_BY_OPPOSITE_SIGNAL // Opposite Crossover – uzavření při protisměrném signálu }; enum ENUM_TRADE_MODE { TRADE_SINGLE, // Jedna pozice – max. jedna BUY nebo jedna SELL TRADE_GRID // GRID – více úrovní, vzdálenost mezi úrovněmi, stejný lot }; // Struktura pro publikaci input hodnot konzumentům struct SContext { int fastMaPeriod; // Perioda rychlé SMA int slowMaPeriod; // Perioda pomalé SMA int rsiPeriod; // Perioda RSI double rsiOverbought; // RSI horní hranice pro BUY signál double rsiOversold; // RSI dolní hranice pro SELL signál double lotSize; // Velikost lotu double trailingTriggerUSD; // Zisk v USD pro aktivaci trailing stop double trailingDistanceUSD; // Vzdálenost trailing stop od zisku v USD double smaMinDistancePoints; // Min. vzdálenost SMA v bodech (0 = vypnuto) int h1TrendMaPeriod; // Perioda SMA na H1 pro trend (0 = vypnuto) ENUM_TIMEFRAMES timeframe1; // První dodatečný TF pro Grid filtr int timeframe1MaPeriod; // Perioda SMA na TF1 (0 = vypnuto) ENUM_TIMEFRAMES timeframe2; // Druhý dodatečný TF pro Grid filtr int timeframe2MaPeriod; // Perioda SMA na TF2 (0 = vypnuto) ENUM_TRADE_MODE tradeMode; // Single nebo Grid režim double gridDistancePoints; // Vzdálenost mezi úrovněmi Gridu v bodech double gridTargetProfitUSD; // Cílový zisk Gridu v USD double maxEquityDrawdownPct; // Max. drawdown equity v % (jen Single) ENUM_EXIT_MODE exitMode; // SL & Trailing nebo Opposite Crossover int gridMaxLevels; // Max. počet úrovní Gridu }; //+------------------------------------------------------------------+ //| CContext – drží input hodnoty, poskytuje je přes SContext | //+------------------------------------------------------------------+ class CContext { private: SContext m_ctx; public: CContext() { m_ctx.gridMaxLevels = 20; } void SetFromInputs( int fastMaPeriod, int slowMaPeriod, int rsiPeriod, double rsiOverbought, double rsiOversold, double lotSize, double trailingTriggerUSD, double trailingDistanceUSD, double smaMinDistancePoints, int h1TrendMaPeriod, ENUM_TIMEFRAMES timeframe1, int timeframe1MaPeriod, ENUM_TIMEFRAMES timeframe2, int timeframe2MaPeriod, ENUM_TRADE_MODE tradeMode, double gridDistancePoints, double gridTargetProfitUSD, double maxEquityDrawdownPct, ENUM_EXIT_MODE exitMode ) { m_ctx.fastMaPeriod = fastMaPeriod; m_ctx.slowMaPeriod = slowMaPeriod; m_ctx.rsiPeriod = rsiPeriod; m_ctx.rsiOverbought = rsiOverbought; m_ctx.rsiOversold = rsiOversold; m_ctx.lotSize = lotSize; m_ctx.trailingTriggerUSD = trailingTriggerUSD; m_ctx.trailingDistanceUSD = trailingDistanceUSD; m_ctx.smaMinDistancePoints = smaMinDistancePoints; m_ctx.h1TrendMaPeriod = h1TrendMaPeriod; m_ctx.timeframe1 = timeframe1; m_ctx.timeframe1MaPeriod = timeframe1MaPeriod; m_ctx.timeframe2 = timeframe2; m_ctx.timeframe2MaPeriod = timeframe2MaPeriod; m_ctx.tradeMode = tradeMode; m_ctx.gridDistancePoints = gridDistancePoints; m_ctx.gridTargetProfitUSD = gridTargetProfitUSD; m_ctx.maxEquityDrawdownPct = maxEquityDrawdownPct; m_ctx.exitMode = exitMode; } SContext Get() { return m_ctx; } void SetGridMaxLevels(int n) { m_ctx.gridMaxLevels = n; } }; #endif