Warrior_EA/Expert/AIBase
Repository files (latest commit first)
Filename Latest commit message Latest commit date
AnimateDread 1a900a0a35 feat(vote): CONSENSUS arithmetic - agreement is now what the threshold dials
Era-680 report, all three observations one equation: "peak 29, no arrows at
threshold 30" / "at 20, arrows on EVERY bar" / "label at 12 while arrows
everywhere". Under the voters-only divisor, any bar with at least one
directional voter read the weighted mean of the firing tiers' weights - and
once the tiers self-ranked to each model's pooled win rate (~28-31), that
mean was NEAR-CONSTANT regardless of headcount. One member alone: ~29. Four
unanimous: ~29. Min_Vote_Open was a step function around that constant -
above it nothing ever fired, below it everything did - and the label's 12
was a 3v1 split netting through the same divisor. Not three display bugs:
one arithmetic that could not express agreement.

The divisor is now the CAPABLE weight - every filter that could vote,
whether it did or not:
 * live (Direction): VoteCapableWeight() - classic pattern ladders always,
   veto filters never, AI members once past the same readiness test
   LongCondition gates on. A model still training must not dilute an
   ensemble it cannot join: four trainees + one deployed model is a solo
   chart wearing an ensemble label, and the solo vote reads full strength.
 * gate (EnsembleEraVerdict): g_ensVoteWeightSum accumulates for every
   member that EVALUATED the bar, Neutral included.
 * overlay sweep + prospective readout: weight counts whenever the member
   has data; a snapshotted Neutral dilutes.
One arithmetic, four sites, same numbers everywhere.

What the numbers become (four members, w~0.29, tiers~29): unanimous ~29 -
the CEILING, which is the pooled win rate and is what the peak displays;
3-of-4 ~22; 2-of-4 ~14.5; 3v1 ~14.5. Min_Vote_Open 20 now means "roughly
three-quarters of the ensemble's trust agrees, net". It MUST sit below the
ceiling to ever fire - the census/peak states the ceiling.

This is the ensemble the user specified in the original design discussion
("if the perceptron also votes, both together reach the threshold; if
another NN votes the other side, the threshold is not reached") - union
semantics was the pre-ensemble behaviour, kept until measurement showed its
vote magnitude was a constant.

Plus overlay DECLUSTERING, the other half of "arrows on every bar": the
same three NMS rules as the per-member arrows (same-direction runs collapse
to their first bar, cross-direction flicker keeps the stronger side), online
over the sweep's strictly oldest->newest walk. Suppression is a verdict and
deletes a standing arrow; the den==0 no-data skip still never does.

NOT COMPILED - user compiles in MetaEditor.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-19 06:58:03 -04:00
..
AutoTune.mqh fix(geometry): the ensemble was training on TWO DIFFERENT TARGETS - propagate the adopted barrier 2026-08-17 19:35:45 -04:00
ChartUI.mqh fix(deinit): vote arrows survived the cheap sweep, and 5 long loops ignored the stop 2026-08-18 17:13:50 -04:00
Excursion.mqh fix: the trailing-incumbent count gate was unpassable by construction 2026-08-11 18:50:39 -04:00
Features.mqh feat(gates): derive the recall floor instead of configuring it, publish what the configuration can PROVE, and stop an arbitrary member driving live exits 2026-08-17 16:15:08 -04:00
Inference.mqh fix(depth): route EVERY ResizeBuffers call site through one indicator-depth gate 2026-08-17 13:33:16 -04:00
Labels.mqh feat(vote): thresholds become confidence percentages, on ONE scale everywhere 2026-08-18 15:52:08 -04:00
Lifecycle.mqh fix(chart): display now reads era-end SNAPSHOTS - the live cache is wiped mid-era 2026-08-18 22:03:20 -04:00
MetaCorpus.mqh fix(meta): make the stale-DB corpus warning unmissable in the tester 2026-08-12 23:56:26 -04:00
OnlineLearning.mqh fix(depth): route EVERY ResizeBuffers call site through one indicator-depth gate 2026-08-17 13:33:16 -04:00
Persistence.mqh feat(altdata): external feature block wired into the NN feature window 2026-08-16 13:39:00 -04:00
PooledGate.mqh fix(pooledgate): _Period, not Period() - the bare call resolves to CExpertBase's setter 2026-08-17 12:57:43 -04:00
Topology.mqh fix(imbalance): the class-imbalance correction was subsidising the abstain class 2026-08-16 22:43:30 -04:00
Training.mqh feat(vote): CONSENSUS arithmetic - agreement is now what the threshold dials 2026-08-19 06:58:03 -04:00