2.8 KiB
ARCHITECTURE.md
1. Principle
Clean separation and a common forecast interface. Both sorting well-defined and independently testable components.
/docs
/src
/forecasting common target + interface + record schema
/baselines naive + drift
/arima ARIMA component (statsmodels)
/sax SAX component (pure numpy)
/hybrid transparent evidence layer + decision states
/data data integrity checks
/evaluation forecast / distribution / economic metrics
/validation chronological walk-forward
/pipeline.py orchestration of variants -> structured records
/tests
/experiments
/results (git-ignored)
/configs
/scripts
2. Component responsibilities
ARIMA
- accept a closed-bar series up to the origin
- optional stationarity transform (differencing / log-return target)
- configured
(p,d,q); baseline config selected inconfigs/ - produce H-step forecast on the common target
- prediction interval where supported
- sequential no-lookahead out-of-sample evaluation
- refit policy (fixed vs rolling) controlled
SAX
Preserve reference properties:
- z-normalisation
- PAA dimensionality reduction
- SAX symbolic encoding
- historical analog search
- MINDIST-based pruning where used
- Euclidean re-rank/validate where used
- strict no-lookahead
- forward-outcome extraction only from historical analogs whose outcome is
known at the forecast origin (
analog_end + H <= origin) - ATR-normalized outcome
- analog count, median, P25/P75, up-rate / direction
SAX must never use the current pattern's future outcome while selecting analogs.
Hybrid evidence layer
Not a learned-weight black box in stage one. Deterministic transparent states:
- CASE1 AGREEMENT (both bullish / both bearish)
- CASE2 DISAGREEMENT (opposite directions)
- CASE3 PARTIAL (one directional, other neutral/insufficient)
- CASE4 NO EVIDENCE (both neutral/insufficient)
Outputs STRONG_AGREEMENT / WEAK_AGREEMENT / DISAGREEMENT / NO_EDGE / INSUFFICIENT.
3. Common forecast record
Each forecast record includes at minimum:
timestamp, symbol, timeframe, horizon H, target definition, direction, expected return, normalized expected return, uncertainty, confidence/evidence, model id + version, train/eval boundary, data snapshot id.
SAX adds: sax_word, analog_count, analog distance stats, up_rate, forward outcome (median + q25/q75).
ARIMA adds: p,d,q, fit_window, refit_policy, forecast_interval, status.
4. MQL5/Python boundary (phase 1)
- Python: statistical engine (ARIMA fitting, SAX experiments, walk-forward, evaluation, reporting).
- MQL5: closed-bar event capture, market data source adapter (later phase).
No live trading execution in this bootstrap. The interface is a documented
MarketDataSourcecontract (seesrc/data/).