5.5 KiB
5.5 KiB
SLTPManager Specification
1. Overview
SLTPManager.mqh provides a reusable MQL5 stop-loss manager for Expert Advisors. It scans all open positions, selects only positions matching a configured symbol and magic number, and updates SL values with CTrade::PositionModify() while preserving each position's existing TP.
2. Indicators
- No standard or custom indicators are used.
- The manager uses
SYMBOL_DIGITS,SYMBOL_POINT,SYMBOL_TRADE_STOPS_LEVEL,SYMBOL_TRADE_FREEZE_LEVEL, and live bid/ask ticks from the configured symbol.
3. Inputs and Settings
The reusable class stores settings through setter methods rather than direct input declarations. SLTPManagerSample.mq5 exposes the following example inputs:
input_magic_number: Magic number used to select managed positions.input_slippage_points: Deviation in points passed toCTrade.input_use_breakeven: Enables the normal break-even mode.input_breakeven_trigger_pips: Profit threshold for normal break-even.input_breakeven_buffer_pips: Profit-side SL buffer from entry after normal break-even triggers.input_use_elapsed_breakeven: Enables elapsed-time break-even.input_elapsed_breakeven_hours: Holding time required before the time-based break-even move is allowed. Fractional hours are supported.input_elapsed_breakeven_buffer_pips: Profit-side SL buffer from entry after elapsed-time break-even triggers.input_use_active_trailing: Enables active break-even plus step trailing.input_active_breakeven_pips: Profit threshold for the first active break-even move.input_active_stop_loss_offset_pips: Locked profit offset from entry at activation.input_active_step_trigger_pips: Additional profit interval required for each trailing step.input_active_step_move_pips: SL movement added per completed trailing step.input_use_tp_progress_stop: Enables TP-progress-based SL locking.input_tp_progress_trigger_percent: Current price progress toward TP required before locking SL.input_tp_progress_sl_lock_percent: Entry-to-TP percentage where SL is moved after the trigger.
4. Entry and Exit Conditions
- The manager does not open or close positions.
ManagePositions()scansPositionsTotal()and processes only positions wherePOSITION_MAGICequals the configured magic number andPOSITION_SYMBOLequals the configured symbol.- BUY profit calculations use Bid and price increases as the favorable direction.
- SELL profit calculations use Ask and price decreases as the favorable direction.
- Normal break-even moves SL to entry plus/minus the configured buffer once profit reaches the trigger. BUY positions use entry +
input_breakeven_buffer_pips, and SELL positions use entry -input_breakeven_buffer_pips. - Elapsed-time break-even uses the position
POSITION_TIMEand the current tick time. When holding time is at leastinput_elapsed_breakeven_hoursand the current rate has crossed the entry price, SL moves to entry plus/minusinput_elapsed_breakeven_buffer_pips. BUY positions require Bid above entry, and SELL positions require Ask below entry. - Active trailing first moves SL to the active offset once profit reaches
input_active_breakeven_pips, then addsinput_active_step_move_pipsfor every completedinput_active_step_trigger_pips. - TP-progress locking runs only when TP exists and the TP is in the correct profit direction.
5. Risk Management
- SL updates are monotonic: BUY stops only move upward and SELL stops only move downward.
- When multiple rules produce candidates on the same tick, BUY uses the highest candidate and SELL uses the lowest candidate.
- TP is never changed; the current TP is passed back unchanged during
PositionModify(). - Pip conversion follows the existing
AdjustPoint()convention:GOLD/XAUUSDuse1 pip = 0.1, 2/3-digit symbols use0.01, and 4/5-digit symbols use0.0001. - Candidate SL prices are normalized with
NormalizeDouble()using the symbol digits. - Broker stop and freeze levels are checked with
SYMBOL_TRADE_STOPS_LEVEL,SYMBOL_TRADE_FREEZE_LEVEL, andSYMBOL_POINTbefore modification. ValidateSettings()rejects simultaneous normal break-even and active trailing because those modes are mutually exclusive.- Elapsed-time break-even can be enabled or disabled independently from normal break-even and active trailing. If multiple candidates are valid, the existing best-candidate selection rule is used.
ValidateSettings()checks that elapsed-time break-even hours and buffer pips are non-negative.- Failed SL modifications log ticket, symbol, magic number, trade retcode,
GetLastError(), and requested SL.
6. Changelog
- 2026-05-05: Aligned pip conversion with the existing
AdjustPoint()convention soGOLD/XAUUSDuse1 pip = 0.1. A panel input of2.0pips now maps to a0.2price distance onGOLD. - 2026-05-05: Added elapsed-time break-even settings
input_use_elapsed_breakeven,input_elapsed_breakeven_hours, andinput_elapsed_breakeven_buffer_pips, allowing an independent SL move to entry plus/minus buffer after the configured holding time when the current rate has crossed entry. - 2026-05-05: Added the configurable normal break-even buffer
input_breakeven_buffer_pipsand clarified that SL moves to entry plus/minus the buffer after the trigger. - 2026-05-05: Added reusable
CSLTPManager, example EASLTPManagerSample.mq5, normal break-even, active trailing, TP-progress SL locking, monotonic SL selection, broker stop/freeze checks, and validation for mutually exclusive modes.