27 KiB
HIT-EA Specification (English)
1. Overview
- This EA sends confirmed H4 OHLC data to an external Python process for market-state analysis and confirmed H1 OHLC data for entry candidate generation.
- The MQL5 side reads Python output files and places pending orders only after checking the H4 market state, H1 candidate prices, M15 confirmation filter, spread, and broker distance constraints.
- For backtest reproducibility, OHLC export uses
OHLC_START_SHIFT = 1, so the forming bar is excluded and only closed bars are passed to Python. - For live resilience, the EA tracks external-process running files, process IDs, exit codes, and timeouts to prevent duplicate launches and CSV overwrites.
2. Indicators
- No standard or custom indicators are used.
- OHLC data is retrieved with
CopyRates(_Symbol, timeframe, OHLC_START_SHIFT, HISTORY_BARS, rates). - M15 entry confirmation uses candle shape, average range, and distance to the candidate price for T2/T4. For T1/T3 it uses M15 impulse confirmation when that option is enabled.
3. Parameters
input
lot_size = 0.01: Order volume.spread_limit = 60: Maximum allowed spread in points.magic_number = 10001: Magic number used to identify this EA's orders and positions.initial_order = 0: Retained for compatibility with older settings. Startup always rebuilds H4/H1 results and remains in technical-error stop state until the H4 result is reloaded.input_position_limit = 10: Practical limit for this EA's pending orders plus positions. Values above the internalPOSITION_LIMITare clamped.use_split_entry_zone = false: Enables split entries based on H1 predicted zones.split_entry_count = 3: Number of split entry orders, clamped to 1..10.split_lot_mode = SPLIT_LOT_TOTAL: Split lot mode.SPLIT_LOT_TOTALdivides the total lot across slots, andSPLIT_LOT_FIXEDuses a fixed lot per order.split_total_lot_size = 0.09: Total lot used by total-split mode.split_fixed_lot_size = 0.01: Per-order lot used by fixed-split mode.cancel_old_split_pending_on_new_zone = true: Cancels older split pending orders when a new H1 zone set is loaded.input_cancel_retry_cooldown_seconds = 60: Wait time before retrying a failed pending-order cancellation for the same ticket. The effective value is clamped to 1..3600 seconds.use_m15_entry_filter = true: Enables M15 closed-bar entry timing confirmation.m15_entry_zone_atr_multiplier = 1.50: Allowed proximity multiplier based on the M15 average range.use_m15_imbalance_confirmation = true: Adds M15 impulse confirmation for T1/T3 trend-following candidates.m15_imbalance_avg_body_period = 20: Average-body period used by M15 impulse confirmation.m15_imbalance_sensitivity = 2.0: Required multiple of the average body for M15 impulse confirmation.m15_imbalance_min_avg_body_points = 1.0: Minimum M15 average body in points.use_m15_imbalance_debug_log = false: Enables detailed M15 impulse-confirmation logs.input_entry_max_candidate_age_minutes = 120: Maximum age, in minutes, for using an H1 candidate for new execution. This blocks delayed entries when M15 confirmation appears too late.input_tp_multiplier = 1.25: Expands the API TP distance from the entry price. Values below1.0are clamped to1.0, and values above100.0are clamped to100.0.input_min_tp_points = 0: Minimum final TP distance in points.0disables the floor.input_max_tp_points = 0: Maximum expanded TP distance in points.0disables the cap. The EA never makes the final TP closer than the API-provided TP distance.input_range_breakout_guard_enabled = true: Cancels adverse reversal Limit orders during range breakouts and temporarily blocks new ones.input_range_breakout_guard_timeframe = PERIOD_M15: Timeframe used by the range-breakout monitor.input_range_breakout_lookback_bars = 20: Closed-bar count used for range high/low and average range. The range starts from the bar before the latest closed bar.input_range_breakout_max_width_multiplier = 6.0: Maximum allowed range width versus average range.0disables the width filter.input_range_breakout_buffer_multiplier = 0.20: Average-range multiplier used as the confirmed-breakout buffer.input_range_breakout_near_multiplier = 0.50: Average-range multiplier used as the pre-breakout proximity band.input_range_breakout_body_multiplier = 1.50: Required latest closed-bar body multiple for momentum warning.input_range_breakout_cooldown_bars = 4: Number of monitor-timeframe bars to block adverse Limit entries after detection.input_sltp_manager_enabled = false: Enables UI-driven existing-position SL management throughCSLTPManager.input_sltp_show_panel = true: Shows the SLTP control panel on the chart.input_sltp_use_breakeven = false: Enables normal break-even.input_sltp_breakeven_trigger_pips = 30.0: Profit threshold for normal break-even.input_sltp_breakeven_buffer_pips = 3.0: Profit-side entry buffer used by normal break-even.input_sltp_use_elapsed_breakeven = false: Enables elapsed-time break-even.input_sltp_elapsed_breakeven_hours = 4.0: Holding time required before elapsed-time break-even is allowed.input_sltp_elapsed_breakeven_buffer_pips = 3.0: Profit-side entry buffer used by elapsed-time break-even.input_sltp_use_active_trailing = false: Enables active step trailing.input_sltp_active_breakeven_pips = 30.0: Profit threshold that starts active trailing.input_sltp_active_stop_loss_offset_pips = 5.0: Initial locked profit offset from entry.input_sltp_active_step_trigger_pips = 10.0: Additional profit interval required for each SL step.input_sltp_active_step_move_pips = 5.0: SL movement added per completed step.input_sltp_use_tp_progress_stop = false: Enables TP-progress-based SL locking.input_sltp_tp_progress_trigger_percent = 70.0: TP progress required before the SL lock is applied.input_sltp_tp_progress_sl_lock_percent = 30.0: Entry-to-TP distance percentage locked by SL.input_sltp_use_high_volatility_limit = false: Enables short-term high-volatility SL tightening.
Main Constants
POSITION_LIMIT = 48: Maximum number of this EA's pending orders plus positions.ENTRY_H1_LIMIT = 2: Pending-order lifetime in H1 bars.CLOSE_H1_LIMIT = 12: Position lifetime in H1 bars.HISTORY_BARS = 72: Number of OHLC bars exported to Python.OHLC_START_SHIFT = 1: Shift used to export closed bars only.M15_CONFIRM_BARS = 30: Number of M15 bars used for average-range calculation.ENTRY_RETRY_SECONDS = 60: Retry interval for entry checks.ENTRY_RETRY_LIMIT = 10: Maximum retry count for one H1 candidate set.TARGET_SIZE = 13: Number of numeric values expected intarget_prices.txt.TARGET_ZONE_SCHEMA_VERSION = 2: Schema version used bytarget_zones.txt.PYTHON_TIMEOUT_SECONDS = 600: External Python wait threshold.
Python Entry-Candidate Guard
- After H1 candidate generation, Python invalidates any
entrythat is too far from the current price. - The maximum distance is strategy-specific: T1/T3 Stop candidates use
max(H1 EATR * 1.50, 5.00), and T2/T4 Limit candidates usemax(H1 EATR * 1.00, 5.00). A strategy beyond its limit is rewritten to0.00,0.00,0.00. - This post-filter is intended to reduce delayed entries from deep limit orders or distant breakout waits after M15 confirmation arrives late.
4. File Layout
Experts/MyProject/HIT-EA_refactor_ver6.mq5: EA entry point. KeepsOnInit,OnDeinit,OnTick, inputs, global state, and DLL imports.Include/MyLib/Common/HITRuntimeController.mqh: Tick flow, H4/H1/M15 update control, status comments, and spread checks.Include/MyLib/Signals/HITEntrySignal.mqh: Entry preconditions, order-type price validation, M15 filter, and retry-state updates.Include/MyLib/Common/HITExternalProcess.mqh: done/running files, external process handles, PID recovery, exit-code checks, and timeout recovery.Include/MyLib/Signals/HITPythonSignalGateway.mqh: OHLC CSV export, Python batch launch, andtrend_state.txt/target_prices.txt/target_zones.txtloading.Include/MyLib/Trading/HITTradeManager.mqh: Order sending, filling policy, pending-order expiration, order/position counting, expired order cancellation, expired position closing, and adverse Limit cancellation during range breakouts.Include/MyLib/Trading/SLTPManager.mqh: Existing-position break-even, elapsed-time break-even, active trailing, TP-progress SL, and high-volatility SL management.Include/MyLib/Panel/SLTPManagerPanel.mqh: Chart panel that togglesCSLTPManagerfeatures, validates numeric inputs, and applies settings to the EA.
5. Python Integration Files
During OnInit(), the EA builds a HIT_<sanitized symbol>_<magic_number> prefix from _Symbol and magic_number, then applies it to all MT5 Files linkage names. Example: HIT_GOLD_10001_ohlc_H4.csv. The same prefix is passed to the batch file as the first argument, and the batch file exposes it to Python as MT5_EA_FILE_PREFIX. The EA also passes the symbol's SYMBOL_DIGITS as the second argument, exposed to Python as MT5_PRICE_DIGITS.
When no prefix is provided, such as manual Python execution, Python keeps using the legacy names like ohlc_H4.csv.
H4 Trend Analysis
- MQL5 output:
<prefix>_ohlc_H4.csv - Python output:
<prefix>_trend_state.txt - Done marker:
<prefix>_process_done_trend.txt - Running marker:
<prefix>_process_running_trend.txt - Batch file:
<TerminalDataPath>\MQL5\python_for_ea\bat\get_trend_reply.bat
H1 Entry Candidate Generation
- MQL5 output:
<prefix>_ohlc_H1.csv - Python output:
<prefix>_target_prices.txt,<prefix>_target_zones.txt - Done marker:
<prefix>_process_done_entry.txt - Running marker:
<prefix>_process_running_entry.txt - Batch file:
<TerminalDataPath>\MQL5\python_for_ea\bat\get_entry_reply.bat
H1 candidate generation uses the OpenAI Responses API. The default model is gpt-5.5, the default reasoning.effort is low, and the default text.verbosity is low. temperature is not set. Runtime overrides are available through OPENAI_MODEL, OPENAI_REASONING_EFFORT, and OPENAI_TEXT_VERBOSITY. Output is validated with text.format Structured Outputs JSON Schema; incomplete responses, schema mismatches, price-rule failures, and insufficient reward/risk fall back to safe-stop values.
During OnInit(), the EA resolves MQL5\python_for_ea from TerminalInfoString(TERMINAL_DATA_PATH) and builds absolute batch-file paths. Each batch file resolves the Python project root from its own location, so runtime execution no longer depends on C:\ea_py.
target_prices.txt must contain 13 lines:
Line 1: res_chk
Lines 2-4: T1 Buy Stop entry/tp/sl
Lines 5-7: T2 Buy Limit entry/tp/sl
Lines 8-10: T3 Sell Stop entry/tp/sl
Lines 11-13: T4 Sell Limit entry/tp/sl
target_zones.txt must contain 7 lines for split entries:
Line 1: schema_version (2)
Line 2: res_chk
Line 3: candidate_id derived from the closed H1 bar time
Line 4: T1 Buy Stop strategy, zone_low, zone_high, tp, sl
Line 5: T2 Buy Limit strategy, zone_low, zone_high, tp, sl
Line 6: T3 Sell Stop strategy, zone_low, zone_high, tp, sl
Line 7: T4 Sell Limit strategy, zone_low, zone_high, tp, sl
Python creates process_done_entry.txt only after both target_prices.txt and target_zones.txt have been written. Prices in target_zones.txt are formatted with MT5_PRICE_DIGITS; manual runs without this value use a conservative 5 decimal places. When split entries are disabled, the EA keeps using the legacy 13-line target_prices.txt path.
6. Entry Conditions
New entries are allowed only when all conditions below are satisfied:
- Spread is less than or equal to
spread_limit. - H4 trend analysis is complete and
trend_state.txtcan be loaded. - H1 entry candidate generation is complete and
target_prices.txtcan be loaded. res_chk = 1.- The H1 candidate set has not expired under
ENTRY_H1_LIMIT, measured from the closed H1 bar time that produced the candidate. - The H1 candidate set has not exceeded
input_entry_max_candidate_age_minutes, measured from the closed H1 bar time that produced the candidate. - The selected order type has valid
entry/tp/slvalues greater than0.0. - The order type is allowed by the H4
market_state. - Before price-consistency and broker-distance checks, TP is recalculated from the distance between entry and the API TP, multiplied by
input_tp_multiplier. Buy strategies place the final TP above entry, and Sell strategies place it below entry. - When split entries are enabled, the final TP is recalculated separately for each slot from that slot's entry price.
- The order-type price relationship and broker minimum distance rules are satisfied.
- When
use_m15_entry_filter = true, T2/T4 satisfy the M15 direction, rejection, and proximity checks. T1/T3 satisfy M15 impulse confirmation whenuse_m15_imbalance_confirmation = true. - When
input_range_breakout_guard_enabled = true, T4 Sell Limit is blocked during an upward range-breakout cooldown and T2 Buy Limit is blocked during a downward range-breakout cooldown. - This EA's pending orders plus positions are below
input_position_limit. - When split entries are enabled,
target_zones.txthasres_chk = 1, the predicted zone prices are valid, split lots fitSYMBOL_VOLUME_MIN/MAX/STEP, and no duplicate order or position exists for the samecandidate_id+ order type + slot.
market_state and Allowed Order Types
0 MARKET_LOW_VOL_RANGE: Allows T2 Buy Limit / T4 Sell Limit.1 MARKET_HIGH_VOL_RANGE: Allows T2 Buy Limit / T4 Sell Limit.2 MARKET_LOW_VOL_UP: Allows T1 Buy Stop / T2 Buy Limit.3 MARKET_HIGH_VOL_UP: Allows T1 Buy Stop / T2 Buy Limit.4 MARKET_LOW_VOL_DOWN: Allows T3 Sell Stop / T4 Sell Limit.5 MARKET_HIGH_VOL_DOWN: Allows T3 Sell Stop / T4 Sell Limit.6 MARKET_TECHNICAL_ERROR_STOP: Blocks new entries.
After an H4 market_state reload, the EA cancels existing pending orders whose order types are not allowed by the refreshed state. For 6 MARKET_TECHNICAL_ERROR_STOP, it cancels all pending orders managed by this EA.
Range Breakout Guard
- The guard uses closed bars from
input_range_breakout_guard_timeframe; the reference range is built frominput_range_breakout_lookback_barsbars before the latest closed bar. - It treats the market as a range only when the range width is within
input_range_breakout_max_width_multipliertimes the average range. A value of0disables this width check. - If the latest closed bar closes above
rangeHigh + buffer, or current Bid approaches the range high with upward momentum on the latest closed bar, the guard treats it as an upward warning/confirmation. It cancels existing T4 Sell Limit orders and blocks new T4 entries forinput_range_breakout_cooldown_barsmonitor bars. - If the latest closed bar closes below
rangeLow - buffer, or current Ask approaches the range low with downward momentum on the latest closed bar, the guard treats it as a downward warning/confirmation. It cancels existing T2 Buy Limit orders and blocks new T2 entries forinput_range_breakout_cooldown_barsmonitor bars. bufferand the proximity band use the larger of the average-range multiple and current spread to reduce over-triggering during live spread expansion.
Order-Type Price Rules
- T1 Buy Stop:
Ask < entry,tp > entry,sl < entry - T2 Buy Limit:
Ask > entry,tp > entry,sl < entry - T3 Sell Stop:
Bid > entry,tp < entry,sl > entry - T4 Sell Limit:
Bid < entry,tp < entry,sl > entry
7. Exit Conditions
- Pending orders are cancelled after
ENTRY_H1_LIMIT * PeriodSeconds(PERIOD_H1)has elapsed from the H1 candidate time restored from the comment. Legacy orders without that token fall back to setup time. - Positions are closed after
CLOSE_H1_LIMIT * PeriodSeconds(PERIOD_H1)has elapsed from entry time. - Time-limit handling runs early in
OnTickand is independent of Python readiness or spread checks. - On EA removal,
OnDeinit()releases external-process state and the SLTP panel, then clears the chart status text withComment("")andChartRedraw(0). - When
input_sltp_manager_enabledor the panelManagertoggle is ON, the EA runsCSLTPManager::ManagePositions()andHighVolatilityLimit()after time-limit handling. Existing-position SL protection therefore continues while Python results are pending or new entries are skipped. - Normal break-even and active trailing are mutually exclusive. The panel turns one mode off when the other is enabled, and
CSLTPManager::ValidateSettings()also validates the exclusion.
7.1 SLTP Control Panel
- The panel is created when
input_sltp_show_panel = trueand appears near the chart's upper-right area. - If panel creation fails, the EA logs the failure and continues with the already-applied input-based SLTP settings.
- The
Managerbutton toggles all SLTP management. When OFF, panel values remain stored butOnTickdoes not modify SL values. - The
BreakEven,Elapsed BE,Active Trail,TP Progress, andHigh Volbuttons toggle eachCSLTPManagerfeature. - Numeric fields are validated when
APPLYis pressed. Invalid or out-of-range values show aMessageBox, are logged, and revert to the previous valid value. - Settings are copied into
CSLTPManageronly afterAPPLYsucceeds. The EA then callsValidateSettings(); if validation fails, SLTP management is stopped and the reason is logged.
8. Risk Management
- Managed orders and positions are limited to matching
_Symbolandmagic_number. input_position_limitcounts only this EA's orders and positions, not the full account. The hard internal limit isPOSITION_LIMIT.- The EA selects the filling policy from
SYMBOL_FILLING_MODE, preferring IOC, then FOK, then RETURN. - Before sending either single or split orders, the EA verifies the requested lot against
SYMBOL_VOLUME_MIN/MAX/STEP. - Pending orders receive server-side expiration from the H1 candidate time when the broker supports it. Orders are skipped if that expiration is already in the past.
OrderSendreturn values andMqlTradeResult.retcodeare checked. Failures are logged withGetLastError()or the retcode.- Single and split order comments keep a valid
candidate_idfor candidate-origin expiration handling. - Split-entry order comments also include order type and slot number to prevent duplicate execution of the same strategy slot.
- When
cancel_old_split_pending_on_new_zone = true, a new validcandidate_idcancels older split pending orders, and an invalid or stoppedtarget_zones.txtcancels all existing split pending orders for this EA/symbol/magic. - If the API TP direction contradicts the Buy/Sell price rules, the EA does not repair it; the existing price-consistency checks skip the order.
- After an H4 state update, existing pending orders that contradict the refreshed
market_stateare cancelled. - The range-breakout guard only targets pending orders matching
_Symbolandmagic_number; upward breakouts cancel T4 Sell Limit only, and downward breakouts cancel T2 Buy Limit only. - A failed pending-order cancellation is not retried for the same ticket until
input_cancel_retry_cooldown_secondshas elapsed, preventing excessive per-tick trade-server requests. - SLTP management only targets existing positions matching
_Symbolandmagic_number, and it preserves each position's current TP. - SL changes are sent only when the candidate improves protection relative to the current SL and satisfies broker stop-level and freeze-level constraints.
HighVolatilityLimit()evaluates BUY positions with Bid and SELL positions with Ask, and treats GOLD/XAUUSD suffix symbols as 1 pip = 0.1.
9. Error Handling
- If
trend_state.txtis missing, unreadable, not strictly parseable as an integer, or outside0..6, the EA usesMARKET_TECHNICAL_ERROR_STOP. - If
target_prices.txtis missing, unreadable, shorter than 13 lines, or contains a non-strict numeric line, the EA usesres_chk = 0. - When split entries are enabled, missing
target_zones.txt, schema mismatch, fewer than 7 lines,res_chk != 1, a valid-zonecandidate_idthat is not a strict 12-digit timestamp, or non-strict numeric values stop new split orders. - When Python falls back to H1 safe-stop values, it appends
RESULT: SAFE_STOP, the stop stage, reason, H4 state, and candidate ID todebug_entry.txt. This distinguishes a normal GPT skip from API, configuration, or data failures. - If a Python process exits with a non-zero code, the code is logged and the next trigger may retry.
- If a Python process remains active beyond
PYTHON_TIMEOUT_SECONDS, the EA runstaskkill /T /Fagainst the cmd/bat process tree, clears done/running files, and allows the next trigger to retry. - If only a stale running marker remains, the EA attempts PID recovery. If recovery fails and the marker is timed out, it removes the stale marker.
10. Changelog
2026-06-13
- Added a range-breakout guard that retreats adverse reversal Limit orders. Upward breakouts cancel existing T4 Sell Limit orders and temporarily block new T4 entries; downward breakouts cancel existing T2 Buy Limit orders and temporarily block new T2 entries.
- Added guard inputs for monitor timeframe, lookback bars, range-width multiplier, breakout buffer, proximity band, momentum body multiple, and cooldown bars.
- Added
input_tp_multiplier,input_min_tp_points, andinput_max_tp_pointsto expand API-derived TP distances for both standard orders and per-slot split entries.
2026-06-06
- Updated the Python-side OpenAI default model to the official
gpt-5.5slug and made Responses API calls send explicitreasoning.effortandtext.verbosity. For GPT-5.5, the output contract is now documented as primarily enforced by Structured Outputs rather than duplicated prompt schema text. - Added compatibility declarations to
HIT-EA_refactor_ver5.mq5so it compiles against the current shared headers, covering split-entry zones, Python linkage filenames, and pending-cancel retry tracking. Sinceuse_split_entry_zone = falseby default, the normal ver5 entry behavior remains unchanged.
2026-06-01
- Added
debug_entry.txtsafe-stop diagnostics with the stop stage and reason so normal candidate skips can be distinguished from guarded failure fallbacks.
2026-05-31
- Changed startup initialization to rebuild H4/H1 results regardless of
initial_order, while holding the technical-error stop state until the H4 result reloads. - Added cancellation of existing pending orders that contradict a refreshed H4
market_state. - Added per-ticket cooldown after failed pending-order cancellation to prevent excessive per-tick trade-server requests.
- Added order type to split-slot identifiers so different strategies using the same
candidate_idand slot cannot collide. - Kept valid
candidate_idtokens in both single and split order comments and changed pending expiration to use the H1 candidate origin time. - Required strict 12-digit timestamp
candidate_idvalues for validtarget_zones.txt; malformed values now stop safely.
2026-05-30
- Added the
HIT_<symbol>_<magic_number>linkage-file prefix contract on both the MT5 and Python sides to avoid collisions across multiple EAs or symbols in the same terminal. - Updated T1/T3 trend-following candidates so
use_m15_imbalance_confirmation = truerequires M15 impulse confirmation. - Added strict numeric parsing requirements for
trend_state.txt,target_prices.txt, andtarget_zones.txt, with invalid content handled as a safe stop state. - Added stale split-pending cancellation behavior when
target_zones.txtis invalid or stopped. - Synchronized current defaults for
input_entry_max_candidate_age_minutes,ENTRY_H1_LIMIT, SLTP buffers, and the Python entry-distance guard. - Added process-tree termination and retry recovery for Python timeouts.
- Changed H1 candidate freshness checks to use the closed H1 bar time restored from
candidate_id, instead of the Python result load time. - Added
MT5_PRICE_DIGITSso Python formatstarget_zones.txtprices with the active symbol's decimal precision. - Added single-order lot validation, OHLC CSV NaN/inf and consistency checks, Ask-based SELL high-volatility SL evaluation, and GOLD/XAUUSD suffix handling.
2026-05-27
- Moved the Python helper application specification from
C:\ea_pytoMQL5\python_for_eaunder the MT5 data folder. - Updated the EA startup path model so batch paths are built from
TerminalInfoString(TERMINAL_DATA_PATH), and the external process working directory is derived from the batch-file location. - Updated Python path discovery so the default MT5 linkage is the adjacent
MQL5\Filesdirectory, withMT5_FILES_DIRorMT5_DATA_PATHavailable for explicit overrides.
2026-05-24
- Added Python-side
target_zones.txtoutput and madeprocess_done_entry.txtappear only after bothtarget_prices.txtandtarget_zones.txtare written. - Added
use_split_entry_zone,split_entry_count,split_lot_mode,split_total_lot_size,split_fixed_lot_size, andinput_position_limit. - Added split-zone pending order placement with total-lot or fixed-lot sizing.
- Added
candidate_id+ slot identification to prevent duplicate split orders.
2026-05-13
- Added a Python-side H1 EATR distance guard that invalidates candidates too far from the current price before they are passed to MT5.
- Added
input_entry_max_candidate_age_minuteson the EA side so stale H1 candidates are not executed when M15 confirmation arrives late. - Added H1 candidate age to entry skip logs to make delayed entries, M15 rejection, and price mismatch easier to diagnose.
2026-05-05
- Added
Comment("")andChartRedraw(0)toOnDeinit()so the chart status comment is removed when the EA is deleted. - Connected
CSLTPManagerand the dedicated chart panelSLTPManagerPanel.mqhtoHIT-EA_refactor_ver5.mq5, allowing UI control of break-even, elapsed-time break-even, active trailing, TP-progress SL, and high-volatility SL tightening. - Added SLTP management immediately after time-limit handling in
OnTick, so existing-position protection continues independently of Python readiness and spread checks. - Added SLTP panel inputs, mutual exclusion for normal break-even versus active trailing, and numeric validation on
APPLY. - Split the function implementations from
HIT-EA_refactor_ver5.mq5into purpose-specific.mqhfiles. - Kept
OnInit,OnDeinit,OnTick, inputs, and global state in the EA source while moving behavior functions underInclude/MyLib/. - Updated the specification to match the current
CreateProcessWPython process tracking, M15 filter,market_staterange0..6, andspread_limit = 60.
2026-05-02
- Added entry suppression when
res_chk = 0. - Moved time-limit handling before Python readiness and spread checks.
- Split startup flags for H4 and H1 initial processing.
- Switched OHLC retrieval to
CopyRatesand exported closed bars only.