Warrior_EA/Expert/README.md
AnimateDread d7eea325fb refactor(ai): extract Layer.mqh and deduplicate AI config
- Moves CLayer neuron construction to AI/Impl/Layer.mqh to keep Network.mqh clean
- Unifies four previously duplicated architecture initialisation blocks (MLP/CONV/LSTM/HYBRID) into a single shared function
- Eliminates risk of behavioural drift where one architecture missed a setter, causing mismatched feature sets or targets
2026-08-01 11:27:28 -04:00

5.2 KiB

Expert/ Directory Documentation

Market-submission compliance (article 2555)

Every runtime check from The Checks a Trading Robot Must Pass Before Publication in the Market is implemented in System/TradeChecks.mqh (free functions, TC* prefix) and applied by the classes in this folder. Where each rule lives:

# Rule Implemented in
1 Catch/fix errors via the tester Development practice; every rejection below logs a throttled reason
2 Insufficient funds TCCheckMoneyForTrade / TCFitVolumeToFreeMargin, applied by CExpertMoneyCustom::ValidateLotForTrade
3 Invalid volumes TCCheckVolumeValue / TCNormalizeVolume, same call site
4 Pending-order count limit TCIsNewOrderAllowed, checked in CExpertSignalCustom::OpenParams and again in CExpertCustom::OpenLong/OpenShort
5 Per-symbol lot limit TCSymbolVolumeAllowed / TCApplySymbolVolumeLimit
6 SYMBOL_TRADE_STOPS_LEVEL TCCheckStops / TCAdjustStops / TCCheckPendingPrice, applied when the setup is shaped and again immediately before the order is sent
7 SYMBOL_TRADE_FREEZE_LEVEL TCFreezeOkForPosition / TCFreezeOkForOrder, gating close, reverse, trailing, order modify and order delete in CExpertCustom
8 Insufficient quote history TCHasEnoughHistory, in CExpertCustom::Refresh and CExpertSignalCustom::OpenParams
9 Array out of range TCIndexOk, plus the existing index guards (iLowest/iHighest return values, Direction()'s bounded loops)
10 Zero divide TCSafeDivide, plus explicit zero-denominator guards on every volume-step / loss division
11 Modification with no changes TCPositionModifyIsMeaningful / TCOrderModifyIsMeaningful, in the TrailingStop* / TrailingOrder* overrides
12 No DLL imports Build-time: WARRIOR_MARKET_BUILD compiles out the #import blocks in AI/NeuronDirectML.mqh
13 No external iCustom Build-time: #resource block in Warrior_EA.mq5 + WARRIOR_CI() in Variables/IndicatorResources.mqh
14 Invalid function parameters TCSymbolIsTradeable, plus the existing ValidationSettings() range checks
15 Access violation No runtime check exists by definition; the NULL-pointer and index guards above are what prevent it
16 CPU / memory consumption TCWarnIfSlow on each OnTick pass (EXPERT_TICK_BUDGET_US) and TCWarnIfMemoryAbove on each timer pass (EXPERT_MEMORY_SOFT_LIMIT_MB)

All rejections report through TCLog(), which throttles per condition so a state that persists for many ticks writes one journal line per minute instead of thousands.

Class hierarchy

CExpert          -> CExpertCustom          (event dispatch, order lifecycle, article-2555 gates)
CExpertMoney     -> CExpertMoneyCustom     (volume correction, margin fitting)
CExpertSignal    -> CExpertSignalCustom    -> CExpertSignalAIBase -> CSignalPAI/CONV/LSTM/HYBRID

ExpertCustom.mqh

Base expert. Virtual handlers for OnTick / OnTimer / OnChartEvent, trading-object setup, series refresh, and the freeze/stops-level gates applied immediately before every send, modify and delete.

ExpertMoneyCustom.mqh

  • CheckAndCorrectVolumeValue — clamps volume to the broker's min/max/step and describes each correction.
  • CheckAndAdjustMoneyForTrade — reduces lots to fit free margin rather than failing the order outright.
  • ValidateLotForTrade — the single gate for rules 2/3/5/14, with throttled logging.

ExpertSignalCustom.mqh

Shared non-AI signal machinery: database-backed signal tracking, pattern weighting, OpenParams() (which shapes SL/TP and applies the min-R:R rejection), and the filter collection. SL_Mode/TP_Mode live here — note they define the AI training target as well as the order, since the triple-barrier label is built from them.

There is no duplicate-trade detection. Three methods that implied otherwise were declared but never defined or called, and were removed in 2026-07. Do not assume the guard exists.

ExpertSignalAIBase.mqh

The AI signal base class. The declaration lives here; the method bodies are split by responsibility into Expert/AIBase/ and included at the bottom of the file, after the declaration. Include them nowhere else.

Expert/AIBase/ holds
Training.mqh era loop, plateau ladder, checkpoint selection, auto-deploy
Topology.mqh network bootstrap, derived shape, conv/LSTM/batch-norm stages
Features.mqh indicator creation, per-bar input feature vector
ChartUI.mqh arrows, arrow persistence, status panel, cleanup
Lifecycle.mqh ctor/dtor, the vote API, tick + chart-event dispatch, config lock
Persistence.mqh .stats / .cfg sidecars, CPU-inference validation
OnlineLearning.mqh live continual learning, EMA shadow, OOS simulator
Labels.mqh triple-barrier labels, async label-cache prebuild
AutoTune.mqh indicator auto-tuner
Inference.mqh softmax, prior calibration, class priors

The topology is derived, not configured — width, taper, depth, conv filters and LSTM hidden size all come from the data shape. See Topology.mqh and Variables/Inputs.mqh for which inputs were removed and why.