210 lines
13 KiB
JSON
210 lines
13 KiB
JSON
{
| |||
"manifest_id": "MALE5-ML-MANIFEST-v0.1.0-frozen",
| |||
"research_family": "MALE5-ML",
| |||
"title": "MULTIVARIATE MALE5 CLASSIFIER RESEARCH PROTOCOL — design manifest",
| |||
"status": "DESIGN FROZEN — EXECUTION NOT AUTHORIZED",
| |||
"design_session_date": "2026-08-26",
| |||
"freeze_date": "2026-08-27",
| |||
"branch": "main",
| |||
"project": {
| |||
"name": "ARIMA_SAX_Hybrid_Forecaster",
| |||
"workspace": "D:\\TradingTerminal\\MetaTrader 5\\MQL5\\Shared Projects\\ARIMA_SAX_Hybrid_Forecaster",
| |||
"remote": "https://forge.mql5.io/chiki2bum2/ARIMA_SAX_Hybrid_Forecaster.git"
| |||
},
| |||
"protocol": {
| |||
"path": "results/MALE5-ML/MALE5_ML_PROTOCOL.md",
| |||
"version": "male5-ml-v0.1.0-frozen",
| |||
"sha256": "6226f12be14e1ed805542c0be84273cd20b1cee0a7ffecfb0b594eec2f5d8e7f"
| |||
},
| |||
"dependency": {
| |||
"upstream_url": "https://github.com/MegaJoctan/MALE5",
| |||
"canonical_tag": "v3.2.0",
| |||
"exact_commit": "d6fb0695a7c2fbeaa03de379557a8b5447915384",
| |||
"archive_sha256": "ad161d75ae0b54ee54a1fd3b0d48c315cf776eebc97077a4b1ae7a629f0c0d4d",
| |||
"canonical_local_path": "D:\\TradingTerminal\\MetaTrader 5\\MQL5\\Include\\MALE5",
| |||
"compile_smoke": {
| |||
"errors": 0,
| |||
"warnings": 0,
| |||
"note": "CRandomForestClassifier include/instantiate/fit/predict smoke, build 6140 AVX512"
| |||
},
| |||
"predict_proba": "UNSUPPORTED — protocol binary classification only",
| |||
"policy": "v3.2.0 only; no v3.5.0; no HEAD; no version mixing; no patching"
| |||
},
| |||
"dependency_corresponding_hashes_sha256": {
| |||
"Random_Forest_mqh": "cb0935ac6b69283ff0d2de2b2fc7c1460d14983f23a56e0b3d2e9ce8dccfc0db",
| |||
"tree_mqh": "9568b9f903876acca0cfa1340cffe19f071fcafeeb0c67ae4802974d6dd23b2a",
| |||
"correspondence_note": "RF file verified to canonical value in freeze session"
| |||
},
| |||
"source_dataset": {
| |||
"path": "results/R1_real_data/XAUUSDc_M1_raw.json",
| |||
"symbol": "XAUUSDc",
| |||
"timeframe": "M1",
| |||
"n_bars": 397558,
| |||
"source_hash_raw_json_sha256": "5472357e67f70f7d1bfef8f9de67fcce91ee6f26208072d7a6766b06c158ee6e",
| |||
"verify_status": "PASS — matches frozen R2-H identity",
| |||
"derived_csv": "results/R1_real_data/XAUUSDc_M1.csv",
| |||
"tick_data": "D:\\TradingTerminal\\MetaTrader 5\\MQL5\\Files\\XAUUSD_mt5_ticks.csv",
| |||
"tick_features": "NONE — no tick features in MALE5-ML v0.1"
| |||
},
| |||
"oos_origin_list": {
| |||
"path": "results/R2-H/origins_H060.csv",
| |||
"horizon_minutes": 60,
| |||
"n_origins": 3169,
| |||
"sha256": "e7b5132c321f5350ec1e231d49d68dbc29468cdf9ee6a5014a2764aaf36eb9af",
| |||
"verify_status": "PASS — matches frozen identity; reused, NOT modified"
| |||
},
| |||
"horizon": {
| |||
"value_minutes": 60,
| |||
"definition": "elapsed-time horizon; t_end = first valid M1 bar at/after timestamp(o)+60min; gap 5 min"
| |||
},
| |||
"target": {
| |||
"definition": "y(o) = 1 if Close[t_end] \u003e Close[o] else 0; zero move =\u003e class 0",
| |||
"binary_only": true
| |||
},
| |||
"features": {
| |||
"grid": "M1 only",
| |||
"scaler": "OFF",
| |||
"warmup_W_m1_bars": 40,
| |||
"definitions": {
| |||
"F1_short_momentum": "(C[o]-C[o-5])/C[o-5]",
| |||
"F2_medium_momentum": "(C[o]-C[o-15])/C[o-15]",
| |||
"F3_trend_slope": "OLS slope of log(C) over 30 bars, slope*30/ATR20(o)",
| |||
"F4_distance_from_SMA20": "C[o]/SMA20(o)-1",
| |||
"F5_recent_range": "(max10-min10)/ATR20(o)",
| |||
"F6_normalized_volatility": "ATR20(o)/C[o]",
| |||
"F7_session_phase": "hour_of_day(o)/24.0"
| |||
},
| |||
"atr20_definition": "close-only deterministic ATR proxy: rolling mean of |C[i]-C[i-1]| over trailing 20 M1 bars (NOT Wilder ATR)"
| |||
},
| |||
"model": {
| |||
"class": "CRandomForestClassifier",
| |||
"source": "MALE5 v3.2.0 MALE5/Ensemble/Random Forest.mqh",
| |||
"parameters": {
| |||
"n_trees": 100,
| |||
"minsplit": 2,
| |||
"max_depth": 10,
| |||
"random_state": 42
| |||
},
| |||
"supported_api": [
| |||
"fit",
| |||
"predict"
| |||
],
| |||
"prohibited": [
| |||
"min_samples_leaf",
| |||
"criterion",
| |||
"n_jobs",
| |||
"predict_proba"
| |||
],
| |||
"policy": "single fixed model; no model comparison; no tuning"
| |||
},
| |||
"training_window_rule": {
| |||
"type": "deterministic causal dense-M1 construction",
| |||
"notes": [
| |||
"per OOS origin o, valid training bar t iff:",
| |||
"1) t \u003e= W=40 M1 bars (features available)",
| |||
"2) t not in frozen OOS list L (OOS reserved for evaluation only)",
| |||
"3) target endpoint t_end(t) resolves and no gap \u003e 5 min within (t, t_end(t)]",
| |||
"4) t_end(t) \u003c o (training labels never cross into OOS; no lookahead)",
| |||
"classifier refit from scratch at each origin on T(o); causal expanding window",
| |||
"no shuffle; no random split; no future preprocessing"
| |||
]
| |||
},
| |||
"preprocessing": {
| |||
"scaler": "OFF",
| |||
"normalization": "none",
| |||
"notes": "no full-dataset preprocessing; tree scale-invariance; F-values dimensionless/price-relative"
| |||
},
| |||
"baselines": {
| |||
"majority": "modal class of that origin\u0027s causal training labels T(o); tie -\u003e class 0; per-origin, causal",
| |||
"drift": "DriftBaseline sign (last 40 closes slope projected H); label 1 if drift\u003e0 else 0; causal fixed",
| |||
"naive": "zero-return forecast; classification reference only"
| |||
},
| |||
"metrics": {
| |||
"primary": [
| |||
"balanced accuracy (MBB 95% CI)",
| |||
"directional accuracy (MBB 95% CI)",
| |||
"paired classification error vs Majority (CI lower bound \u003e 0)",
| |||
"paired classification error vs Drift (CI lower bound \u003e 0)"
| |||
],
| |||
"secondary": [
| |||
"gross return/trade (ATR units)",
| |||
"net return/trade (gross - cost, ATR units)",
| |||
"gross/cost ratio",
| |||
"cost/range ratio",
| |||
"trade coverage",
| |||
"time-normalized economics (per 60 min)",
| |||
"EARLY/MIDDLE/LATE descriptive"
| |||
],
| |||
"prohibited": [
| |||
"Brier",
| |||
"log-loss",
| |||
"calibration",
| |||
"synthetic probabilities"
| |||
]
| |||
},
| |||
"statistical_inference": {
| |||
"method": "Moving Block Bootstrap (MBB)",
| |||
"block_length_B": 60,
| |||
"block_unit": "OOS origins (chronological evaluation series)",
| |||
"repetitions": 10000,
| |||
"seed": 20260827,
| |||
"confidence_level": 0.95,
| |||
"ci_type": "percentile [2.5%, 97.5%]",
| |||
"effective_sample_size": "n_eff = floor(n_usable / B); n_origins~3169 =\u003e n_eff~52",
| |||
"coherence_check": "paired error differences defined per OOS origin on common chronological series; block resampling with B=60 preserved; fixed before execution"
| |||
},
| |||
"economic": {
| |||
"cost_bps_round_trip": 7.57,
| |||
"spread_bps": 1.57,
| |||
"commission_bps": 6.00,
| |||
"status": "PRE-REGISTERED GLOBAL CONSTANT",
| |||
"formula": "cost_atr(o) = (7.57/10000) * close(o) / ATR20(o)",
| |||
"gross_net_separate": true,
| |||
"sensitivity": {
| |||
"0.5x": "descriptive only",
| |||
"2x": "descriptive only",
| |||
"decision_impact": "none"
| |||
}
| |||
},
| |||
"success_criteria": [
| |||
"better than Majority (MBB CI lower bound of paired error difference \u003e 0)",
| |||
"better than Drift (MBB CI lower bound of paired error difference \u003e 0)",
| |||
"dependence-aware statistical support",
| |||
"no material reversal across EARLY/MIDDLE/LATE (point estimate advantage \u003e= 0 in every segment toward both baselines)",
| |||
"positive gross return/return (CI lower bound \u003e 0) for any trading claim",
| |||
"positive net return (CI lower bound \u003e 0) for economic viability"
| |||
],
| |||
"hard_stop_conditions": [
| |||
"dependency identity mismatch",
| |||
"predict_proba or non-v3.2.0 API required",
| |||
"RF params unsupported",
| |||
"origin list modified/regenerated / hash mismatch",
| |||
"dataset hash mismatch",
| |||
"no-lookahead failure (mutation testing)",
| |||
"tuning from results (model/MBB/seed/cost)",
| |||
"protocol contradiction or unresolved spec",
| |||
"any execution before separate EXECUTION COMPLETION gate",
| |||
"accidental R1-R / R2-H modification"
| |||
],
| |||
"no_lookahead_gates": {
| |||
"F1": "feature construction",
| |||
"F2": "target construction",
| |||
"F3": "ATR20 construction",
| |||
"F4": "SMA20/range/slope windows",
| |||
"F5": "training data boundary (t_end(t) \u003c o; t not in L)",
| |||
"F6": "normalization/scaler (OFF)",
| |||
"F7": "horizon endpoint determination",
| |||
"F8": "cost information",
| |||
"F9": "tick-derived information (none used)"
| |||
},
| |||
"governance": {
| |||
"freeze_commit_message": "research: freeze MALE5-ML protocol",
| |||
"push": "NOT PERFORMED — not authorized in this session",
| |||
"git_rule": "single governance commit; no history rewrite; no auto-push"
| |||
},
| |||
"generated_design_artifacts": {
| |||
"protocol": "results/MALE5-ML/MALE5_ML_PROTOCOL.md",
| |||
"manifest": "results/MALE5-ML/MALE5_ML_MANIFEST.json"
| |||
},
| |||
"note": "MALE5-ML = DESIGN FROZEN; EXECUTION NOT AUTHORIZED. No model executed, no metrics computed, no prediction/backtest/OOS/tuning artifact produced. Required next gate: EXECUTION AUTHORIZATION. Agent does not auto-git commit or push for experimental work."
| |||
}
|