forked from MrBaro75/Warrior_EA
~2,300 lines. META had real, repeatedly measured ranking skill and ZERO
operating points that ever cleared break-even (0/350 H1 eras, 1/999 H4
pre-2-sigma, 0/8 pooled fitted points). The clinching arithmetic was edge x
width = 0.095 ATR/trade against spread 0.099 ATR/trade, and the
dose-response showed the high-conviction tail is temporally unstable -
the precision-vs-threshold slope flips sign between calib and test on 3 of
4 symbols, so no ex-ante threshold rule exists. It shipped default-off and
never gated a live entry. The self-measured tier weights are what actually
rank the vote, and all six H4 instruments converged on them alone.
RETRAIN-NEUTRAL, and that is the property that made this safe:
- The weights fingerprint emitted "|TGT:META2" or "|TGT:SWG1" from an
if/else. Every direction model already took the SWG1 arm, so
collapsing it to an unconditional append is byte-identical. No .nnw or
.cfg is orphaned or re-keyed.
- NetInputWidth() lost its "+ MetaDescWidth()" term. MetaDescWidth()
returned 0 for every direction model, so the input layer is unchanged.
- DbLegacyAiSlot()'s slot 5 was reachable only with all four Use_* NNs
off AND meta on - a config that never shipped. Every existing .db keeps
its filename.
Deleted outright: Signals/SignalMETA.mqh, Expert/Trading/MetaGate.mqh (the
directory is now empty), Expert/Training/{MetaCorpus,MetaCandidateStore,
MetaFamilies}.mqh, Tests/Test_MetaFamilies.mq5, Meta_Labeling_Design.md.
Unwound in place, the delicate part: Training.mqh carried four
IsMetaTarget() branches whose else-arm WRAPPED the direction body (pass 1
queueing, pass 2 backprop, pass 2.5 calibration, pass 3 OOS scoring). Each
wrapper is removed and the direction body promoted back to its original
nesting - the bodies were never re-indented when the wrappers were added,
so the promoted code is byte-identical to what ran before META existed.
Also gone: the ensemble verdict's meta-veto replay and its
approved/vetoed/unscored counters, the per-family/per-side OOS
decomposition arrays, the m_isTrainQueueCand parallel queue and its
lockstep shuffle, and the S2 era report.
Also removed: the CMetaGate abstraction and the live CheckOpenPosition
veto; m_gates plus AddFilter's non-voter routing and IsVotingSignal()
(META was the only non-voting child, so m_gates was always empty);
m_parentSignal/SetParentSignal (existed only to reach the root's gate);
SweepPrepare/SweepPrepareIndicator (only caller was the corpus sweep);
IsMetaTarget() from all four view interfaces and their adapters;
Use_MetaLabeling, EnableMETA, Meta_ExportDataset, m_trainTarget.
EvalShift is KEPT - HistoricalNetVote() uses it for the filtered overlay,
not just the corpus sweep; only its comment changed. The 2-output softmax
arm in NetForward.mqh is kept too: it costs nothing and is the reusable
binary-head path, now commented as unclaimed rather than as META's.
Compile-verified in _claude_stage: 0 errors, 0 warnings, matching the
pre-edit baseline.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
39 lines
3.2 KiB
MQL5
39 lines
3.2 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| Warrior_EA |
|
|
//| AnimateDread |
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
string eaName = "Warrior_EA";
|
|
//--- Version of the pattern-journaling SEMANTICS: what a row in a <Filter>_Pattern_N_<Buy|Sell> table
|
|
//--- means, which bars produce one, and what the columns are. Folded (unconditionally) into the DB
|
|
//--- filename fingerprint (ComputeDbConfigFingerprint, Warrior_EA.mq5), so bumping it re-keys every
|
|
//--- database and stale rows can never feed UpdateSignalsWeights() again. BUMP THIS whenever a signal
|
|
//--- class's pattern definitions change meaning (Signals\Signal*.mqh - e.g. b2069bc's Ichimoku models,
|
|
//--- 8710240's Sanyaku state->event), or the journaling contract in CExpertSignalCustom::Direction()
|
|
//--- changes. The config fingerprint alone cannot see code changes - it hashes inputs, and 7 months of
|
|
//--- rows recorded under three different Pattern_N meanings shared one table because nothing re-keyed.
|
|
//--- v3: per-side journaling (each side's own ladder match writes its own row; net vote is a data
|
|
//--- column, not a drop filter) + the netVote schema column.
|
|
//--- v4: a reversing signal registers its own trade after closing the opposite one (true
|
|
//--- stop-and-reverse); v3 absorbed it as an exit, which one-sided the ledger for every pure event
|
|
//--- pattern (strict alternators like MACD model 3 put all rows on whichever side fired first).
|
|
//--- v5: the OpenLongParams/OpenShortParams gate is gone from the logger - order-placement failures
|
|
//--- (stops-level, ATR warm-up, entry-mode rejection) cluster in volatility/spread conditions and
|
|
//--- were non-randomly censoring those bars out of the log. The DB logs every matched ladder,
|
|
//--- unconditionally on the decision layer.
|
|
#define SIGNAL_DB_SEMANTICS_VERSION 5
|
|
string tableschema = "year INTEGER, month INTEGER, day INTEGER, dayOfWeek INTEGER, hour INTEGER, minutes INTEGER, pattern STRING, direction STRING, entryPrice DOUBLE, exitPrice DOUBLE, result STRING, netVote DOUBLE";
|
|
bool IsBacktesting = false;
|
|
//--- EnableSessionFilter/EnableNewsFilter/EnableRiskGuard are real inputs (Variables\Inputs.mqh),
|
|
//--- consistent with every other filter's on/off toggle. EnableITF and EnableMarketDepth are gone -
|
|
//--- both modules were removed 2026-08-01, see the removal notes in that file.
|
|
//--- Direct copies of the per-NN inputs (Variables\Inputs.mqh; the AI_CHOICE preset selector is
|
|
//--- gone since 2026-08-19). The Enable* names survive because dozens of sites read them.
|
|
//--- EnableHYBRID still names the CONVLSTM topology INSTANCE (CSignalHYBRID, State\HYBRID\) - a
|
|
//--- 2026-08-15 enum-rename artifact kept so the class and its on-disk files keep their identity.
|
|
//--- Re-derived in InitializeSignal() like before (init-order safety); same values both times.
|
|
bool EnablePAI = Use_MLP;
|
|
bool EnableCONV = Use_CONV;
|
|
bool EnableLSTM = Use_LSTM;
|
|
bool EnableHYBRID = Use_CONVLSTM; // the CONVLSTM instance; see the rename note above
|
|
//+------------------------------------------------------------------+
|