| // IStrategy.mqh
|
| // Defines the interface for all trading strategies.
|
|
|
| #property copyright "2025, Windsurf Engineering"
|
| #property link "https://www.windsurf.ai"
|
|
|
| #include <Trade/Trade.mqh>
|
| #include <Object.mqh> // Required for CObject
|
| // Forward declaration to avoid circular include; concrete users should include KnowledgeBase.mqh
|
| class CFeaturesKB;
|
|
|
| // --- Trailing stop policy
|
| enum TrailingType
|
| {
|
| TRAIL_NONE = 0,
|
| TRAIL_FIXED_POINTS = 1,
|
| TRAIL_ATR = 2
|
| };
|
|
|
|
|
| // --- Enum for the type of trade action
|
| enum TradeAction
|
| {
|
| ACTION_NONE,
|
| ACTION_BUY,
|
| ACTION_SELL
|
| };
|
|
|
| // --- Struct to hold all details for a trade order
|
| struct TradeOrder
|
| {
|
| TradeAction action; // Buy, Sell, or None
|
| ENUM_ORDER_TYPE order_type; // Market, Stop, Limit
|
| double price; // Entry price for pending orders
|
| double stop_loss; // Stop loss price
|
| double take_profit; // Take profit price
|
| string strategy_name; // Name of the strategy that generated the signal
|
|
|
| // Trailing policy
|
| bool trailing_enabled; // Enable trailing stop handling after entry
|
| TrailingType trailing_type; // Trailing algorithm
|
| double trail_distance_points; // Distance of SL from price in points
|
| double trail_activation_points;// Profit in points before trailing starts
|
| double trail_step_points; // Minimum step in points to move SL
|
| // ATR-based trailing parameters (used when trailing_type == TRAIL_ATR)
|
| int atr_period; // ATR period
|
| double atr_multiplier; // Distance = ATR * multiplier
|
|
|
| // --- Constructor to initialize with default values
|
| TradeOrder()
|
| {
|
| action = ACTION_NONE;
|
| order_type = ORDER_TYPE_BUY; // Default, should be overwritten
|
| price = 0;
|
| stop_loss = 0;
|
| take_profit = 0;
|
| strategy_name = "";
|
| trailing_enabled = false;
|
| trailing_type = TRAIL_NONE;
|
| trail_distance_points = 0;
|
| trail_activation_points = 0;
|
| trail_step_points = 0;
|
| atr_period = 14;
|
| atr_multiplier = 2.0;
|
| }
|
|
|
| // --- Copy constructor to handle assignments correctly
|
| TradeOrder(const TradeOrder &other)
|
| {
|
| action = other.action;
|
| order_type = other.order_type;
|
| price = other.price;
|
| stop_loss = other.stop_loss;
|
| take_profit = other.take_profit;
|
| strategy_name = other.strategy_name;
|
| trailing_enabled = other.trailing_enabled;
|
| trailing_type = other.trailing_type;
|
| trail_distance_points = other.trail_distance_points;
|
| trail_activation_points = other.trail_activation_points;
|
| trail_step_points = other.trail_step_points;
|
| atr_period = other.atr_period;
|
| atr_multiplier = other.atr_multiplier;
|
| }
|
| };
|
|
|
| // --- The interface for all trading strategies
|
| class IStrategy : public CObject
|
| {
|
| public:
|
| virtual void Refresh() { }
|
| virtual TradeOrder CheckSignal() { TradeOrder order; return order; }
|
| virtual string Name() { return "IStrategy"; }
|
| // Allow a strategy to export its indicator/context features at a timestamp
|
| // Concrete strategies should include KnowledgeBase.mqh and write via kb->WriteKV(ts, symbol, Name(), feature, value)
|
| virtual void ExportFeatures(CFeaturesKB* kb, const datetime ts) { }
|
| };
|
|
|