Skip to main content
Momentum factors capture price trends across multiple time horizons, incorporating volatility adjustments and weighted scoring mechanisms to generate normalized signals between -1 and 1.

Momentum Calculation Components

The momentum model computes scores based on the following key components:

API Classes for Momentum

The momentum API provides four main classes:

RollingAverageMomentumFactor

Momentum variation factor for calculating and scoring momentum between two symbols:
  • Multiple Periods: The Momentum indicator is calculated through different time horizons, giving more weight to recent data for faster response.
  • Volatility Adjustments : It incorporates both momentum and volatility adjustments to generate a normalized score.
Workflow:
  1. Trend Components Calculation: For each symbol, calculate the short, medium and long-term momentum using the average price returns over specified periods.
  2. Volatility Adjustment: Calculate the short-term and long-term volatility using the standard deviation of returns over the respective periods.
  3. Standardization: Normalize the momentum components by dividing them by the corresponding volatility values to account for risk.
  4. Scoring Mechanism: Combine the normalized scores from the short, medium and long-term periods, applying different weights to each based on their importance (e.g., more weight for short-term momentum).
  5. Signal Calculation: Amplify the combined score by a scaling factor and clip the final signal to a range between -1 and 1 to represent the direction and strength of the momentum.
  6. Handling Multiple Symbols: The process is repeated for each pair, with the final signal being the equal-weighted average, offering a broader market view.
Method generated by attrs for class RollingAverageMomentumFactor.

Ancestors

  • systematica.models.base.BaseStatArb
  • abc.ABC

Descendants

  • systematica.api.models.momentum.RollingMomentumFactor

Instance variables

  • long_term_weight: float: Long term weight coefficient. Defaults to 0.2.
  • medium_term_mom: int: Medium term momentum window. Defaults to 50.
  • medium_term_weight: float: Medium term weight coefficient. Defaults to 0.3.
  • minp: int: Mininim period. Defaults to None, which means no minimum period is applied.
  • score_scale: float: Scale final score. Defaults to 2.0. This factor amplifies the final score, enhancing the signal strength.
  • short_term_mom: int: Short term momentum window. Defaults to 30.
  • short_term_vol: int: Short term volatility window. Defaults to 30.
  • short_term_weight: float: Short term weight coeff. Defaults to 0.5.
  • window: int: The size of the rolling window. Defaults to 365.

RollingMomentumFactor

Rolling momentum variation factor for calculating and scoring momentum on mulitple symbols. See RollingAverageMomentumFactor. Method generated by attrs for class RollingMomentumFactor.

Ancestors

  • systematica.api.models.momentum.RollingAverageMomentumFactor
  • systematica.models.base.BaseStatArb
  • abc.ABC

MomentumFactorCV

Momentum cross-validation variation factor for calculating and scoring momentum between two symbols. More information, see RollingMomentumAverageFactor. Method generated by attrs for class MomentumFactorCV.

Ancestors

  • systematica.api.models.momentum.AverageMomentumFactorCV
  • systematica.models.base.BaseStatArb
  • abc.ABC

AverageMomentumFactorCV

Momentum cross-validation variation factor for calculating and scoring momentum between two symbols. More information, see RollingMomentumAverageFactor. Method generated by attrs for class AverageMomentumFactorCV.

Ancestors

  • systematica.models.base.BaseStatArb
  • abc.ABC

Descendants

  • systematica.api.models.momentum.MomentumFactorCV

Instance variables

  • custom_splitter: str | None: Custom splitter to use for data partitioning. Defaults to None. If set, it should be a string that matches a custom splitter function.
  • custom_splitter_kwargs: dict | None: Additional keyword arguments for the custom splitter. Defaults to None. If custom_splitter is set, this should contain any necessary parameters for the custom splitter function.
  • long_term_weight: float: Long term weight coeff. Defaults to 0.2. This is the weight applied to the long-term momentum in the final score calculation.
  • medium_term_mom: int: Medium term momentum window. Defaults to 50. This is the window size used for medium-term momentum calculations.
  • medium_term_weight: float: Medium term weight coeff. Defaults to 0.3. This is the weight applied to the medium-term momentum in the final score calculation.
  • score_scale: float: Scale final score. Defaults to 2.0. This factor amplifies the final score, enhancing the signal strength.
  • short_term_mom: int: Short term momentum window. Defaults to 30. This is the window size used for short-term momentum calculations.
  • short_term_vol: int: Short term volatility window. Defaults to 30. This is the window size used for short-term volatility calculations.
  • short_term_weight: float: Short term weight coeff. Defaults to 0.5. This is the weight applied to the short-term momentum in the final score calculation.
  • splitter: str: Default splitter to be used if custom_splitter is not passed. Choices are from_rolling, from_custom_rolling, from_expanding, from_custom_expanding. Defaults to from_custom_rolling.
  • testing_window: int: The size of the testing window. Defaults to 60. This is the period used for testing the model after training on the training window.
  • training_window: int: The size of the training window. Defaults to 365.