mql5/Experts/testRefactor2/Context.mqh
2026-02-01 21:39:33 +01:00

100 lines
4.1 KiB
MQL5

//+------------------------------------------------------------------+
//| 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