210 lines
No EOL
13 KiB
JSON
210 lines
No EOL
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."
|
|
} |