@@ -26,32 +26,36 @@ Exit axes (always active in trade simulation):
2626- holdMinutes — slot turnover cap; a busy slot absorbs qualified
2727 ideas (absorbedIdeaIds); time_expired is the worst-case exit.
2828
29- Entry gates (preprocessing of every candidate entry):
30- - minIdeasAligned — unique UNBANNED aligned authors in the 4h
31- window; banned authors are invisible to the count.
32- - minWeightAligned — sum of Laplace weights (hits+1)/(ideas+2) of
33- those authors; 0 disables the weighted gate .
29+ Entry gate (preprocessing of every candidate entry): any idea of
30+ an UNBANNED author triggers an entry. Authors are graded strictly
31+ in isolation — interaction metrics (consensus counting, vote
32+ weighting, Wilson bounds) do not exist here by design: swarm
33+ ranking over long histories is userspace .
3434
3535Ban rule (author filter, trained on the whole run range):
3636- minAuthorTrack / minAuthorHitRate — default-ban thresholds;
3737 truncated profiles prove nothing; the ban is strictly below the
3838 rate threshold.
39- - minAuthorWilson — minimum Wilson 95% lower bound of the hit
40- rate: proven quality that prices the track length in; 0
41- disables (pair-only baseline), and with the pair pinned inert
42- (track [ 0] , rate [ 0] ) the bound bans alone.
43- - authorMetric — hit definition: "close" = 5-day horizon close
44- (lock/stop do NOT affect ban training), "reach" =
45- lock-reachability against the point's lock/stop; reach with
46- lock = 0 falls back to close.
47-
48- Run-level aggregation (not swept, ignored by test()):
49- - banCriteria — which ranking winners feed result.allowedAuthors
50- (union) / bannedAuthors (banned by all); a winner elected by a
51- non-finite value (Infinity sortino/recovery) grants nothing.
52- - reportOrder — ranking criterion ordering result.reports
53- (descending, tie-guarded comparator); default "sharpe". Purely
54- presentational: never affects winners, callbacks or ban lists.
39+ - authorMetric — hit definition, ALWAYS graded inside the point's
40+ own hold window: "close" = window close (lock/stop do NOT
41+ affect ban training), "reach" = lock-reachability against the
42+ point's lock/stop, "retain" = fixation above the point's lock
43+ (median move strictly above profitLockPercent), "pnl" = fixed
44+ +1% MFE threshold, "trail" = arming reachability of the point's
45+ trailing take; reach and retain require lock > ; 0, trail
46+ requires trailing in (0, 100) — the inert combinations are
47+ excluded from the grid.
48+
49+ Run-level config (not swept, ignored by test()):
50+ - reportOrder — ranking criterion ordering each metric bucket's
51+ reports (descending, tie-guarded comparator); default "sharpe".
52+ Purely presentational: never affects winners or ban lists.
53+
54+ The result is a per-metric dictionary: every swept authorMetric
55+ gets its own bucket with its own reports, its own four ranking
56+ winners and its own trained ban dictionaries (bans — one entry
57+ per unique rule, threshold arithmetic only). Nothing is ever
58+ aggregated across metrics.
5559
5660The simulator picks candidates — honest confirmation is a
5761walk-forward test() shot, and the final arbiter for the chosen
@@ -92,11 +96,9 @@ default list; a single-value list freezes it), then every
9296point of the cartesian product is evaluated arithmetically
9397from the same profiles; see ISimulatorGridAxes for each axis'
9498tune/ignore contract. Ranking winners honor the anti-fluke
95- floor (a point below MIN_TRADES_FOR_BEST trades can win only
96- when NO point clears the floor), and the run-level author
97- lists aggregate ONLY the banCriteria winners with finite
98- ranking values — an Infinity sortino/recovery winner grants
99- no allowances.
99+ floor PER metric bucket (a point below MIN_TRADES_FOR_BEST
100+ trades can win only when NO point of its bucket clears the
101+ floor).
100102
101103### test
102104
0 commit comments