190 líneas
6,9 KiB
MQL5
190 líneas
6,9 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| IStrategy.mqh - Strategy Interface Definition |
|
|
//| Defines the base interface for all trading strategies |
|
|
//+------------------------------------------------------------------+
|
|
#ifndef ISTRATEGY_MQH
|
|
#define ISTRATEGY_MQH
|
|
|
|
#include <Object.mqh> // Required for CObject base class
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Trailing Stop Types |
|
|
//+------------------------------------------------------------------+
|
|
enum TrailingType
|
|
{
|
|
TRAIL_NONE = 0, // No trailing stop
|
|
TRAIL_FIXED = 1, // Fixed points trailing
|
|
TRAIL_FIXED_POINTS = 1,
|
|
TRAIL_ATR = 2, // ATR-based trailing
|
|
TRAIL_PERCENT = 3, // Percentage trailing
|
|
TRAIL_STEP = 4 // Step-based trailing
|
|
};
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Trading Signal Structure |
|
|
//+------------------------------------------------------------------+
|
|
struct TradingSignal
|
|
{
|
|
// Core identity
|
|
string id; // Unique signal id (for logging/telemetry)
|
|
string strategy_name; // Legacy strategy name field
|
|
string strategy; // Canonical strategy identifier
|
|
string symbol; // Symbol
|
|
ENUM_TIMEFRAMES timeframe; // Timeframe
|
|
|
|
// Direction / type
|
|
int direction; // -1=Sell, 0=None, 1=Buy (legacy)
|
|
int type; // 0=buy,1=sell (used by execution logic)
|
|
ENUM_ORDER_TYPE order_type; // Order type: BUY, SELL, BUY_STOP, SELL_STOP, BUY_LIMIT, SELL_LIMIT, etc.
|
|
|
|
// Prices and risk
|
|
double confidence; // 0.0-1.0
|
|
double entry_price; // Entry price (for gates)
|
|
double stop_loss; // Stop loss level (for gates)
|
|
double take_profit; // Take profit level (for gates)
|
|
double price; // Canonical price (used by PaperEA and optimizers)
|
|
double sl; // Canonical SL
|
|
double tp; // Canonical TP
|
|
double volume; // Lots
|
|
|
|
// Context
|
|
datetime timestamp; // Signal timestamp
|
|
bool is_exit; // Is exit signal
|
|
string regime; // Regime tag
|
|
string market_regime; // Market regime tag
|
|
double volatility; // Volatility metric
|
|
double correlation; // Correlation metric
|
|
|
|
TradingSignal() { Init(); }
|
|
|
|
void Init()
|
|
{
|
|
id = "";
|
|
strategy_name = "";
|
|
strategy = "";
|
|
symbol = "";
|
|
timeframe = PERIOD_CURRENT;
|
|
direction = 0;
|
|
type = 0;
|
|
order_type = ORDER_TYPE_BUY; // Default to market buy
|
|
confidence = 0.0;
|
|
entry_price = 0.0;
|
|
stop_loss = 0.0;
|
|
take_profit = 0.0;
|
|
price = 0.0;
|
|
sl = 0.0;
|
|
tp = 0.0;
|
|
volume = 0.0;
|
|
timestamp = 0;
|
|
is_exit = false;
|
|
regime = "";
|
|
market_regime = "";
|
|
volatility = 0.0;
|
|
correlation = 0.0;
|
|
}
|
|
};
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Trade Order Structure |
|
|
//+------------------------------------------------------------------+
|
|
struct TradeOrder
|
|
{
|
|
int action; // ACTION_BUY, ACTION_SELL, ACTION_NONE
|
|
ENUM_ORDER_TYPE order_type;
|
|
double lots;
|
|
double price;
|
|
double stop_loss;
|
|
double take_profit;
|
|
string strategy_name;
|
|
datetime timestamp;
|
|
double volume;
|
|
|
|
bool trailing_enabled;
|
|
TrailingType trailing_type;
|
|
double trail_distance_points;
|
|
double trail_activation_points;
|
|
double trail_step_points;
|
|
int atr_period;
|
|
double atr_multiplier;
|
|
|
|
TradeOrder()
|
|
{
|
|
action = 0; // ACTION_NONE
|
|
order_type = (ENUM_ORDER_TYPE)0;
|
|
lots = 0.0;
|
|
price = 0.0;
|
|
stop_loss = 0.0;
|
|
take_profit = 0.0;
|
|
strategy_name = "";
|
|
timestamp = 0;
|
|
volume = 0.0;
|
|
|
|
trailing_enabled = false;
|
|
trailing_type = TRAIL_NONE;
|
|
trail_distance_points = 0.0;
|
|
trail_activation_points = 0.0;
|
|
trail_step_points = 0.0;
|
|
atr_period = 14;
|
|
atr_multiplier = 2.0;
|
|
}
|
|
};
|
|
|
|
double GetATR(const int period = 14, const int shift = 0)
|
|
{
|
|
int handle = iATR(_Symbol, _Period, period);
|
|
if(handle == INVALID_HANDLE) return 0.0;
|
|
double buf[1];
|
|
if(CopyBuffer(handle, 0, shift, 1, buf) != 1) { IndicatorRelease(handle); return 0.0; }
|
|
IndicatorRelease(handle);
|
|
return buf[0];
|
|
}
|
|
|
|
// Constants for action types
|
|
#define ACTION_NONE 0
|
|
#define ACTION_BUY 1
|
|
#define ACTION_SELL 2
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Base Strategy Interface |
|
|
//+------------------------------------------------------------------+
|
|
class IStrategy : public CObject
|
|
{
|
|
protected:
|
|
string m_name; // Strategy name
|
|
string m_symbol; // Trading symbol
|
|
ENUM_TIMEFRAMES m_timeframe; // Timeframe
|
|
bool m_enabled; // Enabled flag
|
|
|
|
public:
|
|
// Constructor
|
|
IStrategy(string name, string symbol, ENUM_TIMEFRAMES tf)
|
|
: m_name(name), m_symbol(symbol), m_timeframe(tf), m_enabled(true) {}
|
|
|
|
// Pure virtual methods that must be implemented
|
|
virtual void Refresh() = 0; // Update indicator calculations
|
|
virtual TradeOrder CheckSignal() = 0; // Check for trading signal
|
|
virtual string Name() const { return m_name; } // Get strategy name
|
|
virtual string Symbol() const { return m_symbol; } // Get symbol
|
|
virtual int Magic() const { return 0; } // Get magic number
|
|
|
|
// Feature export for ML (optional)
|
|
virtual void ExportFeatures(CObject* kb, const datetime ts) {}
|
|
|
|
// Position management (optional overrides)
|
|
virtual double GetStopLossPoints() const { return 0; }
|
|
virtual double GetTakeProfitPoints() const { return 0; }
|
|
virtual bool IsExitSignal() const { return false; }
|
|
virtual void SetExitSignal(bool exit) {}
|
|
virtual bool IsBullish() const { return false; }
|
|
virtual bool IsBearish() const { return false; }
|
|
|
|
// Lifecycle
|
|
virtual bool Init() { return true; }
|
|
virtual void Deinit() {}
|
|
|
|
// Enable/disable
|
|
void SetEnabled(bool enabled) { m_enabled = enabled; }
|
|
bool IsEnabled() const { return m_enabled; }
|
|
};
|
|
|
|
#endif // ISTRATEGY_MQH
|