| Filename | Latest commit message | Latest commit date |
|---|---|---|
User request: 'move from arrows on lows and highs to small horizontal lines at the actual prices the entry/exit would trigger, just a bit larger than the candles. dark green for buy, dark red for sell.' Every mark is now an OBJ_TREND segment with both anchors at one price and both rays off, spanning 1.3 bar widths, drawn at the bar's CLOSE - the price a market order actually fires at, and the exact entry TripleBarrierLabel assumes. It used to sit on the candle's LOW for a Buy and its HIGH for a Sell: prices the trade never touches, picked so an arrow glyph would clear the candle. The tooltip now carries that price too. COLOUR NOW MEANS DIRECTION AND ONLY DIRECTION on every layer (dark green / dark red). Layer moves to width+style - the traded vote is solid and thick and drawn in front, a single model's raw opinion is thin, dotted and behind the candles - which keeps the distinction the old palette existed to draw (a model's opinion must never read as a trade) while freeing colour to say one thing consistently. Consequences handled, all of them the same 'a typed scan went blind' failure: - SaveChartSignals filtered OBJPROP_TYPE == OBJ_ARROW and read OBJPROP_ARROWCODE. It now filters OBJ_TREND and recovers direction from the colour. The sidecar keeps the old 217/218 numbers as its buy/sell token deliberately, so existing .arrows files still load. - AdvanceChartSignalRestore now rebuilds through the SAME creation point the live path uses, so a restored mark and a fresh one are identical objects. - The rescan-scoped delete enumerated ObjectsTotal(OBJ_ARROW) - retyped, or it silently deletes nothing. - ApplySignalsVisibility enumerated OBJ_ARROW with NO prefix filter. Under the new type that would have hidden and shown THE USER'S OWN trend lines on every Hide/Show click; it is now prefix-scoped. The old type was uncommon enough on a real chart to mask the missing check - trend lines are the most hand-drawn object there is. - DrawObject's high/low parameters are gone (6 call sites pass m_Close instead), so no caller can hand it a price it no longer draws at. - Fixed a pre-existing stale comment that still described the purge sweep as OBJ_ARROW-only three lines above the note explaining it had been widened to every type. NOT COMPILED - user compiles in MetaEditor. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
||
| .. | ||
| AIBase | ||
| ADIndicatorTuner.mqh | ||
| ExpertCustom.mqh | ||
| ExpertMoneyCustom.mqh | ||
| ExpertSignalAIBase.mqh | ||
| ExpertSignalCustom.mqh | ||
| README.md | ||
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.