100 lines
4.1 KiB
MQL5
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
|