Warrior_EA/Expert/Training
Repository files (latest commit first)
Filename Latest commit message Latest commit date
AnimateDread 2e22e714c6 fix(pool): length-prefix the fingerprint - the cross-instrument pool was inert
STrainPoolHeader wrote its fingerprint into a FILE_BIN stream as
FileWriteString(h, fingerprint + "\n") and read it back with
FileReadString(h) - no length argument. In binary mode FileWriteString
emits the characters raw: no length prefix, no terminator, and "\n" is
just another character rather than a delimiter anything honours. The
reader had nothing to stop at, over-read into the float rows that follow,
and returned the fingerprint plus a few bytes of binary garbage - so
`fingerprint != wantFp` could never succeed between two genuinely
identical models.

Verified in the bytes rather than inferred: xxd on a v1 file shows three
ints then the fingerprint starting immediately at offset 12 with no count
in front of it, and EURUSD/USDJPY/USDCAD all stored width 624 with
byte-identical fingerprints while each one's log rejected the other two as
"different model fingerprint". The StringReplace on "\n" is the tell that
a delimiter was intended.

Cross-asset-class peers really are incompatible and always will be - FX
majors carry XA:6, indices/metals/oil carry XA:6:IDX2, giving widths
600/612/624 - which is why the reject list looked plausible and this went
unread. The three FX majors were always poolable and never pooled.

Length-prefixes the string, bounds-checks the count before sizing a read
from it, and bumps TRAINPOOL_RECORD_VERSION 1 -> 2 so existing files are
refused by the version gate with a reason instead of being misread.

Also documents, without changing, why Signal_ThresholdOpen is now a
unanimity rule: the vote is a weighted mean of tier weights, those fell
from ~70 to ~30 with the pivot-event label, so PCT_25 went from ~36% of
the reachable ceiling to ~83%. Measured: all 6 symbols clear their
precision bar, 4 of 6 fail only on coverage, and coverage decays 6.8% ->
2.2% over 35 eras as the models specialise - which shrinks effN and so
RAISES the deploy bar at flat precision. PCT_20 (a 3-of-4 quorum) is the
indicated change but is left unmade: MT5 stores input values per chart in
profiles\Charts\*\chart*.chr, so an already-attached EA ignores this
default entirely - confirmed by a full close/recompile/relaunch cycle
after which the log still read "fired at vote>=25%".

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-26 00:41:41 -04:00
..
AIBaseTrainingData.mqh feat(target): delete the barrier/geometry stack - the label is the verdict 2026-08-24 20:42:31 -04:00
AIBaseTrainingDataImpl.mqh feat(target): delete the barrier/geometry stack - the label is the verdict 2026-08-24 20:42:31 -04:00
BaselineComparator.mqh feat(target): delete the barrier/geometry stack - the label is the verdict 2026-08-24 20:42:31 -04:00
DeployGate.mqh fix: correct edge floor percentage calculation and logging for model training 2026-08-25 23:16:05 -04:00
ITrainingData.mqh feat(target): delete the barrier/geometry stack - the label is the verdict 2026-08-24 20:42:31 -04:00
OosTally.mqh feat(target): delete the barrier/geometry stack - the label is the verdict 2026-08-24 20:42:31 -04:00
PooledGate.mqh feat(target): delete the barrier/geometry stack - the label is the verdict 2026-08-24 20:42:31 -04:00
TrainingPool.mqh fix(pool): length-prefix the fingerprint - the cross-instrument pool was inert 2026-08-26 00:41:41 -04:00