Multi Horizon Momentum
Quick Reference
| Property | Value |
|---|---|
| Dimension | signal |
| Category | momentum |
| Version | v0.9.0 (Beta) |
| Output Column | multi_horizon_momentum |
Multi-horizon return momentum - weighted average of momentum signals across multiple timeframes
Formula
(short_weight * rolling_sum(returns, short_window) + medium_weight * rolling_sum(returns, medium_window) + long_weight * rolling_sum(returns, long_window)) / (short_weight + medium_weight + long_weight)
CDM Inputs
| Column | CDM Table | Description |
|---|---|---|
returns | cdm_* | CDM source table |
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
short_window | integer [1, 100] | 5 | Ultra-short horizon window |
medium_window | integer [2, 500] | 20 | Medium-term horizon window |
long_window | integer [2, 1000] | 60 | Long-term horizon window |
short_weight | float [0.0, 1.0] | 0.1 | Weight for ultra-short momentum signal |
medium_weight | float [0.0, 1.0] | 0.3 | Weight for medium-term momentum signal |
long_weight | float [0.0, 1.0] | 0.4 | Weight for long-term momentum signal |
Output
Column: multi_horizon_momentum
Composite momentum signal across short, medium, and long horizons
Market Intuition & Trading Rationale
Multi-horizon momentum combines momentum signals across short, medium, and long timeframes into a weighted composite. The formula (w_s × mom_s + w_m × mom_m + w_l × mom_l) / (w_s + w_m + w_l) produces a single score that captures momentum alignment across timescales. When all three horizons agree (all positive or all negative), the signal is strongest — momentum is aligned and the trend is robust. When horizons disagree (short up, long down), the signal is muted — the trend is contested and may be reversing.
The three-horizon design addresses a fundamental problem with single-horizon momentum: you don't know whether you're catching a genuine trend or a transient fluctuation. Short-horizon momentum alone is noisy and prone to whipsaws. Long-horizon momentum alone is slow to react to regime changes. Combining all three provides both responsiveness (from the short horizon) and stability (from the long horizon), with the medium horizon bridging the gap.
The default weights (0.1 short, 0.3 medium, 0.4 long) favor longer horizons, reflecting the empirical finding that longer-horizon momentum is more robust. These can be tuned per instrument: trending markets benefit from higher long_weight; mean-reverting markets benefit from higher short_weight with the sign flipped.
Usage Cases
- Momentum alignment trading: Trade when all three horizons agree — this is the highest-conviction state. When horizons disagree, reduce position size or stay flat. Alignment across timescales is a powerful filter that eliminates most false momentum signals.
- Trend reversal detection: When short-horizon momentum flips sign while long-horizon remains strong, the trend may be losing steam at the margin. Monitor for the medium horizon to follow — a cascade from short→medium→long often precedes reversals.
- Multi-timescale strategies: Use the individual horizon components (not just the composite) as features for ML models. The interaction between horizons — e.g., short_momentum × long_momentum — captures non-linear regime dynamics that the weighted average misses.
YAML Definition
name: multi_horizon_momentum
description: Multi-horizon return momentum - weighted average of momentum signals
across multiple timeframes
category: momentum
version: v0.9.0 (Beta)
dimension: signal
status: Pre-release
required_inputs:
- returns
output_column: multi_horizon_momentum
output_description: Composite momentum signal across short, medium, and long horizons
parameters:
short_window:
type: integer
description: Ultra-short horizon window
required: false
default: 5
constraints:
min: 1
max: 100
medium_window:
type: integer
description: Medium-term horizon window
required: false
default: 20
constraints:
min: 2
max: 500
long_window:
type: integer
description: Long-term horizon window
required: false
default: 60
constraints:
min: 2
max: 1000
short_weight:
type: float
description: Weight for ultra-short momentum signal
required: false
default: 0.1
constraints:
min: 0.0
max: 1.0
medium_weight:
type: float
description: Weight for medium-term momentum signal
required: false
default: 0.3
constraints:
min: 0.0
max: 1.0
long_weight:
type: float
description: Weight for long-term momentum signal
required: false
default: 0.4
constraints:
min: 0.0
max: 1.0
formula: (short_weight * rolling_sum(returns, short_window) + medium_weight * rolling_sum(returns,
medium_window) + long_weight * rolling_sum(returns, long_window)) / (short_weight
+ medium_weight + long_weight)