Signals

Signal architecture

Three independent signal layers feed a final composite score. Each layer is explainable, testable, and can be toggled independently in production.

Layer 01

Regime detection

The regime layer classifies each asset into one of three states: trend, mean-reversion, or neutral. The classification drives which momentum parameters and entry rules are active.

InputParameterInterpretation
ADX(14)> 25Trending regime. Momentum signals get wider stops and longer holding periods.
ADX(14)< 20 and Hurst < 0.45Mean-reverting regime. Favour short-term reversals and tighter stops.
NeitherFallbackNeutral. Reduce size, raise confirmation threshold, or stay flat.
Realised volatility percentile> 80Volatility expansion. Tighten risk, widen entry ranges, avoid new breakouts.

The Hurst exponent is estimated using the rescaled range method over a 100-day rolling window. It is robust to non-stationary variance and works well alongside ADX as a second opinion.

Layer 02

Momentum scoring

The momentum score ranks assets by recent performance, adjusted by volume and volatility. It is direction-aware and normalised across the universe.

Formula

Composite momentum score

score = 0.40 * roc_20
      + 0.30 * roc_60
      + 0.20 * volume_weighted_momentum
      - 0.10 * volatility_penalty

where volume_weighted_momentum = roc_20 * (volume_20d / volume_60d)
      volatility_penalty = max(0, realised_vol_20d - target_vol_10pct)

roc_20 and roc_60 are simple percentage changes over 20 and 60 trading days. The volume weighting rewards moves backed by sustained turnover. The volatility penalty reduces scores when recent volatility materially exceeds the 10% annualised target.

Layer 03

Order-flow confirmation

This is the TradeDNA layer. It ingests intraday tick data and produces a behavioural confirmation score. The score answers one question: is the current move supported by abnormal but non-exhaustive order flow?

SignalDescriptionWeight
Volume clusterIntraday volume exceeds 2 standard deviations above the 20-day average for the same time bucket.25%
VWAP deviationPrice sits more than 0.5 ATR above/below VWAP in the direction of the signal.25%
Tape momentumMore than 60% of intraday volume prints on the same side of the signal for at least two consecutive hours.25%
Exhaustion checkNo climactic wick or volume spike suggesting immediate reversal.25%

The confirmation score ranges from 0 to 1. A score above 0.6 is required to enter a position. Above 0.8, the position size can be scaled up subject to risk limits.

Aggregation

Final signal score

final_score = regime_weight * momentum_score
            + confirmation_weight * trade_dna_score

if regime == TREND:
    regime_weight = 0.60; confirmation_weight = 0.40
elif regime == MEAN_REVERSION:
    regime_weight = 0.40; confirmation_weight = 0.60
else:
    final_score = 0  # neutral: no new positions

Mean-reversion puts more weight on confirmation because reversals are often short-lived and need immediate behavioural support. Trending regimes put more weight on sustained momentum because the move has more room to run.

Entry rules

When to trade

Signals are evaluated after market close. An order is placed for the next open if all three conditions are met:

  1. Final score > 0.65 for trend, > 0.70 for mean-reversion.
  2. The asset is not already at maximum position size.
  3. Portfolio exposure, after the new position, stays under the regime-adjusted cap.

Intraday confirmation is checked in the first hour. If the confirmation score drops below 0.5 by 11:00 a.m., the order is cancelled and the signal is discarded.

Oction confidential