Skip to main content

Multi Horizon Momentum

Quick Reference

PropertyValue
Dimensionsignal
Categorymomentum
Versionv0.9.0 (Beta)
Output Columnmulti_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

ColumnCDM TableDescription
returnscdm_*CDM source table

Parameters

ParameterTypeDefaultDescription
short_windowinteger [1, 100]5Ultra-short horizon window
medium_windowinteger [2, 500]20Medium-term horizon window
long_windowinteger [2, 1000]60Long-term horizon window
short_weightfloat [0.0, 1.0]0.1Weight for ultra-short momentum signal
medium_weightfloat [0.0, 1.0]0.3Weight for medium-term momentum signal
long_weightfloat [0.0, 1.0]0.4Weight 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)