- Meridian.AI β Financial Prediction Models
Meridian.AI β Financial Prediction Models
Overview
Meridian.AI is a deep-learning system that forecasts next-day price movement for stocks and forex pairs. It reads recent market history, turns it into 44 technical indicators, and outputs a next-day return estimate plus a direction signal (up/down).
This is the v1.2.0 production release, shipping checkpoint format v7.0.0. v7 makes all 44 input features scale-invariant (raw price/volume levels mostly encoded symbol identity after cross-symbol normalisation), rescales the loss to percent units so return magnitudes are actually calibrated, and adds a 1-day embargo for forex after discovering that the source's daily forex bars leak next-day information (see Honest performance). The v6 reset that preceded it β per-symbol windowing, daily bars only, train-split-only scaling, a compact ~430K-parameter network β is retained unchanged.
The models retrain automatically every hour via GitHub Actions and publish each fresh checkpoint here. You do not need a GPU.
What changed in the v6 architecture
| Area | Before (β€ v5.x) | Now (v6) |
|---|---|---|
| Training data | Daily + hourly + weekly bars mixed in one table | Daily only β one consistent prediction target |
| Windowing | One flat array concatenated across all symbols (windows spanned symbol boundaries) | Per-symbol windowing, then sorted by date |
| Targets | Raw next-step return, clip Β±1.0 (allowed impossible +100% targets) | Next-day return, clip Β±0.25 (stocks) / Β±0.10 (forex) |
| Feature scaler | Fit on the whole dataset (val leaked into train) | Fit on the train split only |
| Price adjustment | Splits/dividends showed up as fake returns | auto_adjust=True β no fake split-day moves |
| Capacity | ~11M params (collapsed to a constant) | ~430K params (forced to extract signal) |
| Push safety | None | Sanity gate blocks degenerate models from publishing |
Honest performance
These are next-day models, evaluated truly out of sample: trained only on
data before 2025-06-01 and tested on the year after
(scripts/benchmark_model.py --holdout-start 2025-06-01).
| Model (v7) | Holdout samples | Directional accuracy | Always-up baseline | Return MAE | Zero-pred MAE floor |
|---|---|---|---|---|---|
| Stocks | 12,800 | 50.2% | 51.4% | 0.0127 | 0.0127 |
| Forex (1-day embargo) | 5,830 | 48.7% | 52.0% | 0.0031 | 0.0030 |
Magnitudes are calibrated; direction is not an edge. v7's return-size predictions sit at the zero-prediction MAE floor (v6 was up to 3.7Γ worse and predicted ~17%/day moves). Neither model beats the always-up drift baseline on next-day direction out of sample β the market-efficiency expectation for daily OHLCV + technical indicators. Treat direction as a weak tilt only.
The pre-1.2.0 forex claim (63.5%, "z = 8.4") is retracted. The daily
*=X forex bars are internally inconsistent: day-t high/low span a later
window than the stored close and leak the t+1 close (a plain OLS on day-t
OHL ratios scores 81% sign accuracy; see scripts/diag_feat_corr.py). Forex
now trains and evaluates with a 1-day embargo, which blocks the leak β and
with it, the apparent edge disappears.
Neither is a multi-day or week-ahead forecaster β daily price direction is close to efficient, error compounds quickly past one step, and any tool claiming reliable week-ahead price prediction from OHLCV alone is overfitting. Use this for a next-day directional tilt, not as a crystal ball.
Repository layout
meridianal/ARA.AI/
βββ models/
β βββ Meridian.AI_Stocks.pt β current v7 stock checkpoint
β βββ Meridian.AI_Forex.pt β current v7 forex checkpoint
βββ legacy/
βββ Meridian.AI_Stocks_v5.2.2.pt β archived pre-v6 (biased) checkpoint
βββ Meridian.AI_Forex_v5.2.2.pt β archived pre-v6 (biased) checkpoint
The loader only accepts checkpoints at version 7.0 or newer β v6
checkpoints have identical tensor shapes but incompatible feature semantics
(raw levels vs scale-invariant ratios) and are refused. The v5.x checkpoints
in legacy/ are kept only for reference β do not use them for live
prediction.
Architecture
The model is MeridianModel: a compact transformer adapted for financial time series. Each block contains:
- RMSNorm β pre-norm before attention
- Grouped Query Attention (GQA) β fewer KV heads, QK-Norm for stability, RoPE positions
- Optional Mamba SSM β vectorised selective scan (off by default on CPU)
- Layer Scale β per-block learnable scalar for stable training at depth
- Stochastic Depth β drop-path regularisation
- RMSNorm β pre-norm before the MoE
- Mixture of Experts β SwiGLU experts, top-2 routing
| Component | Implementation | Purpose |
|---|---|---|
| Attention | GQA + QK-Norm | Reduced KV cache, training stability |
| Position | RoPE | Relative temporal awareness |
| Expert routing | MoE, top-2, SwiGLU | Regime-specific specialization |
| Activations | SwiGLU | Better gradient flow vs GELU/ReLU |
| Normalisation | RMSNorm + Layer Scale | Stable training at depth |
| Regularisation | Stochastic Depth | Generalisation |
| Optional SSM | Mamba (vectorised scan) | Long-range dependencies |
| Loss | BalancedDirectionLoss | Joint regression + direction accuracy |
Model specifications (v7.0 default)
| Spec | Value |
|---|---|
| Parameters | ~430K |
| Hidden dimension | 96 |
| Layers | 3 |
| Attention heads | 4 (2 KV heads) |
| Experts | 2 (top-2) |
| Prediction heads | 2 |
| Mamba SSM | Disabled (CPU default) |
| Input features | 44 scale-invariant technical indicators |
| Sequence length | 30 timesteps (daily; forex: window ends 1 day before the prediction base) |
Available models
Meridian.AI Stocks
- File:
models/Meridian.AI_Stocks.pt - Coverage: ~50 large-cap US equities per run (AAPL, MSFT, GOOGL, AMZN, NVDA, JPM, SPY, β¦)
- Data: Max daily history, split/dividend adjusted, 44 technical indicators
- Training: Automatic hourly CI retrain (GitHub Actions)
- Tracking: Comet project
meridianalgo/meridian-ai-stock-v5
Meridian.AI Forex
- File:
models/Meridian.AI_Forex.pt - Coverage: 22 currency pairs (EUR/USD, GBP/USD, USD/JPY, AUD/USD, β¦)
- Data: Max daily history, 44 technical indicators
- Training: Automatic hourly CI retrain (GitHub Actions)
- Tracking: Comet project
meridianalgo/meridian-ai-forex-v5
Usage
from huggingface_hub import hf_hub_download
from meridianalgo.unified_ml import UnifiedStockML
model_path = hf_hub_download(
repo_id="meridianal/ARA.AI",
filename="models/Meridian.AI_Stocks.pt"
)
ml = UnifiedStockML(model_path=model_path)
prediction = ml.predict_ultimate("AAPL", days=5)
print(prediction)
from huggingface_hub import hf_hub_download
from meridianalgo.forex_ml import ForexML
model_path = hf_hub_download(
repo_id="meridianal/ARA.AI",
filename="models/Meridian.AI_Forex.pt"
)
ml = ForexML(model_path=model_path)
prediction = ml.predict_forex("EUR/USD", days=5)
print(prediction)
Note: the model needs ~200 days of price history to compute its indicators (it uses a 200-day moving average), and it outputs a single next-day return. A multi-day horizon is produced by rolling that one-step prediction forward, so confidence drops sharply after the first day.
Training configuration
| Setting | Value |
|---|---|
| Optimizer | AdamW (weight_decay=0.02, betas=(0.9, 0.95)) |
| LR warmup | Linear ramp, then CosineAnnealingWarmRestarts |
| Loss | BalancedDirectionLoss (60% Huber + 40% BCE, percent units) |
| Effective batch size | 256 via gradient accumulation |
| Gradient clipping | Max norm 1.0 |
| EMA | Decay 0.999 β used for validation and the saved checkpoint |
| Data augmentation | Gaussian noise + timestep masking |
| Train/val split | Chronological β last 20% held out (no shuffle) |
| Scaler fit | Train split only (no validation leakage) |
| Target clip | Β±0.25 (stocks) / Β±0.10 (forex) |
| Feature clamping | [-10, 10] after z-score normalisation |
| Sample cap | 60K most-recent rows per run |
| CI step budget | Up to 2000 optimizer steps per run |
| Checkpoint write | Atomic (.tmp β os.replace) |
| Push safety | Sanity gate blocks degenerate models |
| Comet logging | Every step loss/LR/grad-norm + per-epoch metrics + per-symbol dataset audit |
Checkpoint format
{
"model_state_dict": ..., # PyTorch weights
"model_type": "stock", # or "forex"
"architecture": "MeridianModel-2026",
"version": "7.0.0",
"input_size": 44,
"seq_len": 30,
"dim": 96,
"num_layers": 3,
"num_heads": 4,
"num_kv_heads": 2,
"num_experts": 2,
"num_prediction_heads": 2,
"dropout": 0.0, # saved from the live model, not hardcoded
"use_mamba": False,
"scaler_mean": Tensor, # shape (30, 44)
"scaler_std": Tensor, # shape (30, 44)
"metadata": {
"best_val_loss": float,
"training_history": [...],
"trained_symbols": [...],
"training_date": str,
}
}
Technical indicators (44 features)
| Category | Indicators |
|---|---|
| Price | Returns, Log Returns, Volatility, ATR |
| Trend | SMA (5/10/20/50/200), EMA (5/10/20/50/200) |
| Momentum | RSI, Fast RSI, Stochastic RSI, Momentum, ROC, Williams %R |
| Oscillators | MACD, MACD Signal, MACD Histogram, Stochastic K/D, CCI |
| Volatility | Bollinger Bands (Upper/Lower/Width/%B), Keltner Channels (Upper/Lower/%K) |
| Volume | Volume SMA, Volume Ratio, OBV (normalized) |
| Trend Strength | ADX, +DI, -DI, Price vs SMA50/SMA200, ATR% |
| Mean Reversion | Z-Score (20d), Distance from 52-week High |
Limitations
- Next-day model only. Multi-day output is recursive and degrades fast past day one.
- Daily direction is near-efficient; the live edge over a naive baseline is small.
- Performance degrades during black-swan events and regime shifts.
- Patterns are statistical and may not persist.
- Pre-v6 checkpoints in
legacy/have a known downward-bias bug β do not use them. - For research and educational use only β not financial advice.
Citation
@software{meridianalgo_2026,
title = {Meridian.AI: Financial Prediction Engine},
author = {MeridianAlgo},
year = {2026},
version = {1.0.0},
url = {https://github.com/MeridianAlgo/AraAI}
}
Disclaimer
These models are for research and educational purposes only. They do not constitute financial advice. Trading carries significant risk and past performance does not guarantee future results. The developers and contributors are not liable for any financial losses. All trading decisions are yours alone.
License
MIT License. See the GitHub repository for details.