17 KiB
MALE5-ML — MULTIVARIATE MALE5 CLASSIFIER RESEARCH PROTOCOL (DESIGN)
Research family: MALE5-ML
Protocol version: male5-ml-v0.1.0-frozen
Status: DESIGN FROZEN — EXECUTION NOT AUTHORIZED.
Project: ARIMA_SAX_Hybrid_Forecaster
Project workspace (authoritative):
D:\TradingTerminal\MetaTrader 5\MQL5\Shared Projects\ARIMA_SAX_Hybrid_Forecaster
Project remote:
https://forge.mql5.io/chiki2bum2/ARIMA_SAX_Hybrid_Forecaster.git
This document is a design artifact only for the new, independent
MALE5-MLresearch family. It finalizes the research protocol design and records every reproducibility field. It does not execute any model, produce any prediction/experiment artifact, run a backtest, perform an OOS evaluation, or tune any parameter.R1-R (CLOSED / IMMUTABLE) and R2-H (EXECUTED / NULL) are not reopened, re-analysed, or amended. R1-R and R2-H origin/protocol/manifest artifacts are referenced only as immutable inputs, never modified or regenerated.
1. Governance status
- Dependency finalization: COMPLETE (see
MALE5_v3.2.0_CANONICAL_DEPENDENCY_FINALIZATION.md). - This session: final protocol design only.
- The required next governance gate is FORMAL DESIGN FREEZE (owner authorized), followed by a separate EXECUTION AUTHORIZATION gate before any execution.
- Git rule: the agent does not auto-commit or push. Design freeze/commit is a separate owner instruction.
2. Exact dependency identity (frozen input)
| field | value |
|---|---|
| upstream URL | https://github.com/MegaJoctan/MALE5 |
| canonical tag | v3.2.0 |
| exact commit | d6fb0695a7c2fbeaa03de379557a8b5447915384 |
| archive SHA-256 | ad161d75ae0b54ee54a1fd3b0d48c315cf776eebc97077a4b1ae7a629f0c0d4d |
| canonical local path | D:\TradingTerminal\MetaTrader 5\MQL5\Include\MALE5 |
| compile smoke | 0 errors / 0 warnings (build 6140, AVX512) |
predict_proba |
UNSUPPORTED (confirmed absent in all v3.2.0 .mqh) |
Policy:
- Use ONLY MALE5 v3.2.0 at the frozen commit.
- Do not use v3.5.0. Do not use current MALE5 HEAD. Do not mix versions. Do not patch MALE5.
- Because
predict_probais unsupported, MALE5-ML v0.1 is binary classification only.
3. Research question (final)
Can a fixed nonlinear multivariate MALE5 classifier extract out-of-sample directional information from XAUUSD (M1) that is not captured by Naive and Drift?
Scope notes:
- Single fixed classifier (
CRandomForestClassifier, frozen params). - No model comparison, no model search, no parameter search.
- This is the first member (
v0.1) of the independentMALE5-MLfamily. - Do not reopen R1-R or R2-H.
4. Primary horizon
- H60 = 60 elapsed minutes (elapsed-time horizon, not bar count).
- OOS origins: reuse frozen
results/R2-H/origins_H060.csv.- Do not regenerate, do not modify.
- Frozen provenance (R2-H screen): 3,169 origins; SHA-256
e7b5132c321f5350ec1e231d49d68dbc29468cdf9ee6a5014a2764aaf36eb9af.
5. Data provenance
- Source:
results/R1_real_data/XAUUSDc_M1_raw.json- M1, broker symbol
XAUUSDc(Gold Spot Cent), 397,558 bars, 2025-06-02 01:00 → 2026-08-24 15:19 (server trade time). - Source SHA-256 (fresh R2-H provenance, reused as frozen input identity):
5472357e67f70f7d1bfef8f9de67fcce91ee6f26208072d7a6766b06c158ee6e.
- M1, broker symbol
- Source CSV (derived, M1):
results/R1_real_data/XAUUSDc_M1.csv. - Tick data:
D:\TradingTerminal\MetaTrader 5\MQL5\Files\XAUUSD_mt5_ticks.csv— NOT used for any feature in MALE5-ML v0.1 (no tick features). - At execution, the dataset and origin hashes must be re-verified: any mismatch = HARD STOP.
6. Target definition (frozen)
y(o) = 1 if Close[t_end] > Close[o]
0 if Close[t_end] <= Close[o]
t_end = first valid M1 bar at or after timestamp(o) + 60 minutes
P(x) = close price of M1 bar x
y(o)is the binary up/down label over the 60-minute elapsed horizon.- Strict inequality (>): a zero move (
Close[t_end] == Close[o]) is class 0. - Boundary endpoint rule and gap rule mirror the frozen R2-H H60 origin rule
(tolerance 5 minutes; any inter-bar delta > 5 min within
(o, t_end]excludes the origin).
7. Feature set (frozen) — M1 only, close-based, causal, deterministic
No scaler. No global normalization. No full-dataset preprocessing. All features are computed using only bars ≤ origin (causal) and are deterministic functions of the M1 close series and bar timestamps. No tick features.
Notation: C[i] = close of M1 bar i; ATR20(i) = close-only deterministic
ATR proxy = rolling mean of |C[k] − C[k−1]| over the trailing 20 M1 bars
(matching the R2-H / src/forecasting/target.py rolling_atr definition with
high/low absent — NOT a Wilder ATR). SMA20(i) = mean of C[i−19..i].
| feat | name | definition |
|---|---|---|
| F1 | short momentum | (C[o] − C[o−5]) / C[o−5] (5-bar return) |
| F2 | medium momentum | (C[o] − C[o−15]) / C[o−15] (15-bar return) |
| F3 | trend slope | OLS slope of log(C) over trailing 30 M1 bars, scaled slope × 30 / ATR20(o) (dimensionless, ATR units) |
| F4 | distance from SMA20 | C[o] / SMA20(o) − 1 |
| F5 | recent range | (max10(o) − min10(o)) / ATR20(o), max10/min10 over trailing 10 closes |
| F6 | normalized volatility | ATR20(o) / C[o] |
| F7 | session phase | hour_of_day(o) / 24.0 (from the M1 bar timestamp; deterministic, causal) |
Max feature lookback = 30 bars (F3) / 20 bars (F4, F6) / 10 bars (F5) / 15
bars (F2). A single deterministic feature warmup W = 40 M1 bars covers
all lookbacks plus an ATR buffer. Any origin with fewer than W prior M1 bars
has its features treated as unavailable.
8. Model and exact parameters (frozen candidate)
- Class:
CRandomForestClassifier— MALE5 v3.2.0,MALE5\Ensemble\Random Forest.mqh. - API (confirmed v3.2.0): constructor
CRandomForestClassifier(uint n_trees=100, uint minsplit=NULL, uint max_depth=NULL, int random_state=-1); onlyfit(...)andpredict(...)(hard labels). Nopredict_proba. - Frozen parameter set (one, fixed before execution):
| param | value |
|---|---|
n_trees |
100 |
minsplit |
2 |
max_depth |
10 |
random_state |
42 |
- Unsupportable / prohibited:
min_samples_leaf,criterion,predict_proba,n_jobs, any non-v3.2.0 parameter. - Do not tune. These are frozen unless a formal revision is authorized.
9. Training window — deterministic causal dense-M1 construction (frozen rule)
No fixed arbitrary N_train. For every OOS origin o, the training sample
T(o) is constructed deterministically and causally as follows.
A training (origin) bar t is a valid training example for origin o iff
all of the following hold:
t >= W(feature warmupW = 40M1 bars — all F1–F7 available att).t ∉ L(L= the frozen OOS origin list; the OOS origins are reserved exclusively for evaluation and are never used as training inputs).- Target endpoint
t_end(t)resolves: there exists a first M1 bar withtimestamp >= timestamp(t) + 60 min, and no inter-bar gap> 5 minwithin(t, t_end(t)](frozen gap rule). t_end(t) < o(strictly: the training label resolves beforetimestamp(o)), so no training label ever crosses into the OOS evaluation period and no future information leaks. Equivalentlyt + 60 min < timestamp(o).
Then:
- Feature matrix
X(o)= rows[F1..F7]evaluated at each validt. - Label vector
y(o)=y(t)for each validt(binary up/down over the resolved 60-min window). - All feature information is
≤ t; all label information is within(t, t+60]and strictly< o. - The classifier is refit from scratch at each OOS origin
oonT(o)(pure deterministic causal expanding-window walk forward). No incremental tree reuse, no persistence across origins, no cross-origin state. - No shuffle, no random split, no future preprocessing.
Implementation note (execution-time, not a design change): per-origin refit over a growing dense sample is computationally heavy (≈3,169 fits with up to ≈400 k training rows × 100 trees). This does not alter the frozen design; if a future execution becomes infeasible, that is a new owner decision, not an improvised design change.
10. Preprocessing (frozen)
- SCALER = OFF.
- No global normalization, no full-dataset preprocessing, no feature scaling.
- No unnecessary preprocessing degrees of freedom (tree models are scale-invariant for thresholds; F-values are already dimensionless or price-relative).
11. Baselines (frozen)
- Majority baseline (per-origin):
- Majority label = modal class of the training labels
y(o)of that origin's own causal training windowT(o). - Tie-break (deterministic): if the counts of class 0 and class 1 are equal,
predict class
0(Down). Documented, frozen.
- Majority label = modal class of the training labels
- Drift baseline (causal, fixed):
- Existing
DriftBaseline(src/baselines.py): linear slope over the last 40 closes projectedHbars ahead. - Binary direction label:
1if projected drift> 0, else0. Causal, uses only bars ≤ origin.
- Existing
- Naive baseline: zero-return forecast — used only as the classification reference and to frame the research question; Naive is not a competing binary classifier for the paired-error decision (predicts no change).
12. Metrics (frozen)
Primary (because predict_proba is unavailable — no Brier, no log-loss, no
calibration, no synthetic probabilities):
- Balanced accuracy = mean of sensitivity (class-1 recall) and specificity (class-0 recall) over OOS origins. Reported with MBB 95% CI.
- Directional accuracy = fraction of OOS origins where MALE5 label equals the realized label. Reported with MBB 95% CI.
- Paired classification error vs Majority:
d_maj(o) = err_majority(o) − err_male5(o)per origin (err = 1 − correct). Reported with MBB 95% CI; lower bound> 0⇒ MALE5 better than Majority. - Paired classification error vs Drift:
d_drift(o) = err_drift(o) − err_male5(o)per origin. Reported with MBB 95% CI; lower bound> 0⇒ MALE5 better than Drift.
Secondary (descriptive):
- gross return/trade (sign-matched realized
tau_H, ATR units); - net return/trade (
= gross − cost_atr), ATR units; - gross/cost ratio;
- cost/range ratio;
- trade coverage (
= n_traded / n_origins; 1.0 because the binary model always emits a direction); - time-normalized economics (per 60-min holding period);
- EARLY / MIDDLE / LATE chronological descriptive results.
Gross and net are always reported separately.
13. Statistical inference (frozen)
- Method: Moving Block Bootstrap (MBB) over the chronological OOS origin series.
- Block length: B = 60 OOS origins (block unit = OOS evaluation points, each a distinct M1 elapsed origin).
- Repetitions: 10,000.
- Confidence: 95% percentile CI
[2.5%, 97.5%]. - Seed: 20260827 (independent seed for the MALE5-ML family).
- Effective sample size:
n_eff = floor(n_usable / B); withn_usable ≈ 3,169OOS origins,n_eff ≈ 52. This is consistent with the R2-H H60 power profile (moderate effective sample). Low-power limitations are reported, never hidden. - Applied to: balanced accuracy, directional accuracy, and the two paired error differences, and (secondary) gross/net return per trade.
- Coherence check (design): the paired error differences are defined per OOS
origin on a common chronological series, so block resampling of the origin
series with block length 60 is internally coherent and preserves
chronological dependence.
B, repetitions, and seed are fixed; they may not be modified after observing results. - No empirical tuning; no post-result changes.
14. Economic design (frozen)
- Frozen project round-trip cost: 7.57 bps (median tick spread ≈ 1.57 bps
- commission 6.00 bps; pre-registered global constant).
cost_atr(o) = (7.57 / 10000) × close(o) / ATR20(o).- Gross and net must remain separate.
- Economic viability requires statistical predictive support (success criteria 1–4) PLUS positive net under the frozen cost.
- Predictive but negative net ⇒ PREDICTIVE BUT NOT ECONOMICALLY VIABLE.
- Sensitivity at 0.5× and 2× cost may be reported descriptively only; it cannot alter the primary decision.
15. Success criteria (frozen) — MALE5 primary success requires ALL
- Better than Majority: MBB 95% CI lower bound of
d_maj(valid, majority-classified origins)> 0. - Better than Drift: MBB 95% CI lower bound of
d_drift> 0. - Dependence-aware statistical support: the paired-error CIs in (1)–(2) are significant, and balanced accuracy / directional accuracy CIs are reported so the improvement is not an artifact of class imbalance or trend timing.
- No material reversal across EARLY / MIDDLE / LATE: in every
chronological third, the point estimate of the advantage over both
baselines is
≥ 0(MALE5 never worse than the worse baseline in any segment, point estimate). - Positive gross for any trading claim: if an economic claim is made, MBB
95% CI lower bound of gross return/trade
> 0. - Positive net for economic viability: MBB 95% CI lower bound of net
return/trade (gross −
cost_atr)> 0.
Do not use accuracy > 50% alone. All success conditions are frozen.
16. Hard-stop conditions (frozen)
STOP (no further design/execution) if any of the following:
- MALE5 dependency identity cannot be confirmed (version/commit/SHA mismatch).
predict_probaor any non-v3.2.0 API is required.- Random Forest constructor parameters not supported by the frozen v3.2.0 API.
- Frozen origin list (
origins_H060.csv) is modified, regenerated, or its hash no longer verifies. - Source dataset hash no longer verifies.
- No-lookahead failure (mutation testing on training/target construction; any feature or label uses future info relative to its origin).
- Any attempt to tune model parameters, MBB parameters, seed, or cost from results.
- Protocol contradiction or unresolved specification.
- Any attempt to execute / backtest / forecast / tune before a separate EXECUTION AUTHORIZATION gate.
- Accidental modification of R1-R or R2-H artifacts.
An unresolved scientific ambiguity is returned to the owner — it is not resolved by improvisation.
17. No-lookahead / forensic gates (frozen, to be run at execution)
| gate | item | classification |
|---|---|---|
| F1 | feature construction (F1–F7 causal) | OBSERVED / DECISION |
| F2 | target construction (y(o)) |
OBSERVED / DECISION |
| F3 | ATR20 construction (close-only) | OBSERVED / DECISION |
| F4 | SMA20 / range / slope windows | OBSERVED / DECISION |
| F5 | training data boundary (t_end(t) < o, t ∉ L) |
OBSERVED / DECISION |
| F6 | normalization / scaler (OFF) | OBSERVED / DECISION |
| F7 | horizon endpoint determination | OBSERVED / DECISION |
| F8 | cost information (7.57 bps) | OBSERVED / DECISION |
| F9 | tick-derived information (none used) | OBSERVED / DECISION |
- Mutation testing: perturbing a future bar must not alter predictions at any tested OOS origin. Minimum spot checks: ≥ 3 origins.
- Any no-lookahead failure = INVALID / HARD STOP.
18. Reproducibility manifest
The companion MALE5_ML_MANIFEST.json records (identically to §2–§17):
- project identity/path; MALE5 upstream URL; tag; commit; archive SHA-256; canonical local path;
- relevant source hashes (RF dependency closure per the canonical report);
- source dataset + hash; OOS origin list + hash;
- target; feature definitions; model + parameters; training-window rule; preprocessing; baselines; metrics; statistical method; seed; cost; success criteria; hard-stop conditions.
19. Required outputs and exclusions (this session)
- Create only:
results/MALE5-ML/MALE5_ML_PROTOCOL.mdresults/MALE5-ML/MALE5_ML_MANIFEST.json
- These are design artifacts only.
- Do not create prediction, backtest, OOS, tuning, or experiment artifacts.
20. Outcome matrix (adopted, MALE5-ML)
| outcome | definition |
|---|---|
| SUCCESS | all 6 success criteria satisfied (predictive AND economically viable) |
| PREDICTIVE BUT NOT ECONOMICALLY VIABLE | criteria 1–4 hold but net CI lower bound ≤ 0 |
| NULL | no better-than-baseline signal (fails 1 and/or 2) |
| INCONCLUSIVE | underpowered OOS sample prevents decision; or ambiguous specification |
| INVALID | no-lookahead / provenance / protocol violation → HARD STOP |
21. Version / freeze metadata
| field | value |
|---|---|
| protocol id | male5-ml-v0.1.0-frozen |
| status | DESIGN FROZEN — EXECUTION NOT AUTHORIZED |
| design session date | 2026-08-26 |
| freeze date | 2026-08-27 |
| branch | main |
| required next gate | EXECUTION AUTHORIZATION (separate gate) |
DESIGN FROZEN — EXECUTION NOT AUTHORIZED.
End of MALE5-ML protocol design.