Warrior_EA/System
Repository files (latest commit first)
Filename Latest commit message Latest commit date
AnimateDread ad80e0bb57 fix(shutdown): make ExitPolicy public, and stop every long loop the moment MT5 asks
Two things, one of which was a compile error.

1. ExitPolicy() was declared in the protected block but is pushed in from
   Warrior_EA.mq5:770. Moved to public beside the other EA-facing setters.

2. Chart objects surviving OnDeinit. The 4,500 ms teardown budget is measured
   from the STOP REQUEST, not from OnDeinit's first line, and OnDeinit cannot
   begin until whatever is in flight returns - so a scan still running after
   _StopFlag is raised does not delay the cleanup, it SPENDS it, and the purge
   never gets its turn.

   New CExpertSignalAIBase::ShutdownRequested() = IsStopped() || m_shutdownInProgress.
   Deliberately NOT m_trainingStopRequested: that latches, and a latched flag
   would permanently disable scans that must run again on the next Start.

   Guarded, longest first:
   - TuneIndicatorsByFilter - per candidate, restoring the OPERATOR's settings
     on the way out (best[] is mutated in place; the tuner otherwise keeps the
     last trial's parameters, which nothing chose).
   - ReportBarrierGeometryScan - per pairing, breaking to ONE restore point so
     m_barrierScanLiveLabels can never be left true (that makes ComputeLabelForBar
     read the last candidate's multiples as the configured geometry).
   - ReportFeatureLabelInformation / ReportExcursionInformation / lag profile -
     nulls ABANDON rather than truncate: fewer draws is not a smaller null, it
     is a wrong one, and p shifts toward significance. m_dirEvidence staying
     false is the safe direction.
   - SimulateExitPolicyOutcomes - zeroes its accumulators so the divergence line
     is dropped instead of latching a partial expectancy as the run's only report.
   - ReportGeometryExpectancyScan - per ladder rung.
   - HttpGet - one choke point for up to a dozen blocking WebRequests per
     first-pass Update(). An in-flight request cannot be cancelled; refusing to
     start another is the whole remedy.
   - PollTraining, OnChartEventHandler's study event, TuneIndicatorsAndTrain -
     entry points, so a queued event cannot open an era during teardown.
     TuneIndicatorsAndTrain's guard is the first statement, ahead of the
     m_tuneFilterDone / g_ensembleChartTuneDone latches.
   - OnTick / OnTimer / OnChartEvent.

   Training's own bar loops already honoured this (pass 1 per bar, passes 2/2.5/3
   yield on a 120 ms budget); the warm-up scans did not, and they are the longest
   uninterruptible stretches the EA has.

   StopTraining() is unchanged: the operator's Stop still finalises synchronously.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-17 17:03:11 -04:00
..
AltData.mqh fix(altdata): median-fill instead of zero-fill, and a one-shot feature-vector autopsy 2026-08-17 12:53:51 -04:00
AltDataFetch.mqh fix(shutdown): make ExitPolicy public, and stop every long loop the moment MT5 asks 2026-08-17 17:03:11 -04:00
AtomicFile.mqh fix: make sidecar writes atomic; extract shared AtomicFile helper 2026-07-29 00:31:29 -04:00
CrossAsset.mqh fix: the DB backfill could never run, and HEAD did not compile 2026-08-16 21:25:51 -04:00
NewBar.mqh fix: add error logging for buffer failures and reject trades on invalid stop loss 2026-07-26 12:12:14 -04:00
NewsRelevance.mqh fix(SignalNewsFilter): scope calendar veto to the traded symbol's own currencies 2026-07-18 17:22:33 -04:00
PrintVerbose.mqh convert 2025-05-30 16:35:54 +02:00
README.md refactor(ai): extract Layer.mqh and deduplicate AI config 2026-08-01 11:27:28 -04:00
StatusLabel.mqh fix(indicators+panel): the dead handle is MEASURED now - recreate it; and order the ensemble panel by member, not by who published first 2026-08-17 15:40:00 -04:00
TradeChecks.mqh fix: correct inference-only new-bar detection and add stop validation 2026-07-27 11:51:45 -04:00

System Subsystem (System/)

Overview

The System/ directory contains utility and infrastructure code for the Warrior EA. These modules provide essential services such as new bar detection, conditional logging, crash-safe file writes and trade validation, supporting robust and maintainable EA operation.

Key Components

NewBar.mqh

  • Function: NewBar()
  • Purpose: Detects the arrival of a new bar (candle) on the chart.
  • Logic: Compares the current bar's time with the last seen bar time. Returns true if a new bar is detected.
  • Integration: Used for event-driven logic, e.g., only executing logic once per bar.

PrintVerbose.mqh

  • Function: PrintVerbose(string message)
  • Purpose: Conditional logging based on a VerboseMode flag. Prints messages only if verbose mode is enabled.
  • Integration: Useful for debugging and development without cluttering logs in production.

Documented April 2026. For further details, see the main project documentation.