Overview
Statistical arbitrage models in Systematica are designed to identify and exploit temporary price divergences between related financial instruments. The framework provides several model categories, each implementing different statistical approaches to identify trading opportunities.Copula-Based Arbitrage Models
Copula-based models use dependency structures between asset pairs to identify arbitrage opportunities. TheArbitrageClipIndex model implements various copula methods to model joint distributions and generate trading signals.
ArbitrageClipIndex
Ancestors
systematica.models.base.BaseStatArbabc.ABCsystematica.api.models.arbitrage_index.ArbitrageIndexMixin
Static methods
is_valid
| Name | Type | Default | Description |
|---|---|---|---|
model_params | tp.Kwargs | -- | Model parameters. |
signal_params | tp.Kwargs | -- | Signal parameters. |
| Type | Description |
|---|---|
ValueError | If long_entries or short_entries are not within the specified bounds. |
transform_func
| Name | Type | Default | Description |
|---|---|---|---|
model_output | tp.Array2d | -- | Model output array. *args : tp.Args Additional positional arguments. **kwargs : tp.Kwargs Additional keyword arguments. |
| Type | Description |
|---|---|
tp.Array2d | Clipped model output. |
Instance variables
-
transform_params: Dict[str, Any]: Returns the transformation parameters. -
alpha: float: Lower quantile is found withlower_quantile = np.quantile(pdfs, 1.0 - alpha), then removed from matrix. Used whencross_tail_method='quantile'. Defaults to0.9. -
bound_reversion: bool: ifbound_reversionis set toTrue, it compute the cumulative sum of negative (positive) values toward the center, ignoring mask, uppon reaching the upper or lower bound respectively. This technique increases the speed of reversion toward neutrality. Defaults toFalse. -
center: float: The center value to subtract from each prediction. Default is0.5. -
copula: str | type: The copula model to use. Default isauto, which selects the best copula model based onmethodcriterion. -
cross_tail_method: str: Mask method used to filter cross-tail concentration in the marginals. Specifies the type of mask applied to the marginal distributions. Available options arequantile(applies a quantile-based tail mask) andtriangle(applies a triangular mask). If None, the mask is ignored. Defaults toNone. -
custom_splitter: str | None: Custom splitter to use for data partitioning. Default isNone. -
custom_splitter_kwargs: Dict[str, Any]: Additional keyword arguments for the custom splitter. Default isNone. -
list_copulas: list[systematica.models.arbitrage_index.base.BaseCopula] | None: A list of copulas to consider. IfNone, the model defaults toArchimedeans. Default isNone. -
lower: float: The lower bound for resetting the accumulated sum. Default is-1.0. -
lower_triangle: float: Lower triangle coordinate point. Used whencross_tail_method='triangle'. Defaults to0.5. -
marginal_dependence: bool: IfTrue, it calculates correlation coefficient on marginals. Otherwise, onretsfeatures. Defaults toFalse. -
model_validation_method: str: The method used for model selection. Default isaic. Choices areaic,bicandaicc. -
rotation: str | systematica.models.arbitrage_index.utils.BaseCopulaRotation: Rotations allow the copula to be adapted for different types of tail dependence. - A180rotation captures extreme co-movements in the lower tail (i.e. simultaneous extreme losses). - A90rotation captures scenarios where one variable exhibits extreme losses while the other shows extreme gains. - A270rotation captures the opposite scenario, where one variable experiences extreme gains while the other suffers extreme losses. SeeBaseCopulaRotation. If set toauto, applies best fitted rotation. Defaults toBaseCopulaRotation.R0. -
sequential: bool: Transformation is applied at every split ifTrue. Otherwise, perform the transformation after computation. It Defaults toFalse. -
splitter: str: The type of data splitter. Choices arefrom_rolling,from_custom_rolling,from_expanding,from_custom_expanding. Defaults to “from_custom_rolling”. -
testing_window: int: The size of the testing window. Default is60. -
training_window: int: The size of the training window. Default is365. -
truncate: float: Truncate cross tail filter at specific point. Used whencross_tail_method='quantile'. Ignored ifNone. Defaults to0.5. -
upper: float: The upper bound for resetting the accumulated sum. Default is1.0. -
upper_triangle: float: Upper triangle coordinate point. Used whencross_tail_method='triangle'. Defaults to0.5.
ArbitrageCumulativeIndex
Ancestors
systematica.models.base.BaseStatArbabc.ABCsystematica.api.models.arbitrage_index.ArbitrageIndexMixin
Static methods
transform_func
| Name | Type | Default | Description |
|---|---|---|---|
model_output | tp.Array2d | -- | Model output array. *args : tp.Args Additional positional arguments. **kwargs : tp.Kwargs Additional keyword arguments. |
| Type | Description |
|---|---|
tp.Array2d | Transformed model output. |
Instance variables
-
transform_params: Dict[str, Any]: Returns the transformation parameters. -
alpha: float: Lower quantile is found withlower_quantile = np.quantile(pdfs, 1.0 - alpha), then removed from matrix. Used whencross_tail_method='quantile'. Defaults to0.9. -
center: float: The center value to subtract from each prediction. Default is0.5. -
copula: str | type: The copula model to use. Default isauto, which selects the best copula model based onmethodcriterion. -
cross_tail_method: str: Mask method used to filter cross-tail concentration in the marginals. Specifies the type of mask applied to the marginal distributions. Available options arequantile(applies a quantile-based tail mask) andtriangle(applies a triangular mask). If None, the mask is ignored. Defaults toNone. -
custom_splitter: str | None: Custom splitter to use for data partitioning. Default isNone. -
custom_splitter_kwargs: Dict[str, Any]: Additional keyword arguments for the custom splitter. Default isNone. -
list_copulas: list[systematica.models.arbitrage_index.base.BaseCopula] | None: A list of copulas to consider. IfNone, the model defaults toArchimedeans. Default isNone. -
lower_triangle: float: Lower triangle coordinate point. Used whencross_tail_method='triangle'. Defaults to0.5. -
marginal_dependence: bool: IfTrue, it calculates correlation coefficient on marginals. Otherwise, onretsfeatures. Defaults toFalse. -
model_validation_method: str: The method used for model selection. Default isaic. Choices areaic,bicandaicc. -
rotation: str | systematica.models.arbitrage_index.utils.BaseCopulaRotation: Rotations allow the copula to be adapted for different types of tail dependence. - A180rotation captures extreme co-movements in the lower tail (i.e. simultaneous extreme losses). - A90rotation captures scenarios where one variable exhibits extreme losses while the other shows extreme gains. - A270rotation captures the opposite scenario, where one variable experiences extreme gains while the other suffers extreme losses. SeeBaseCopulaRotation. If set toauto, applies best fitted rotation. Defaults toBaseCopulaRotation.R0. -
sequential: bool: Transformation is applied at every split ifTrue. Otherwise, perform the transformation after computation. It Defaults toFalse. -
splitter: str: The type of data splitter. Choices arefrom_rolling,from_custom_rolling,from_expanding,from_custom_expanding. Defaults tofrom_custom_rolling. -
testing_window: int: The size of the testing window. Default is60. -
training_window: int: The size of the training window. Default is365. -
truncate: float: Truncate cross tail filter at specific point. Used whencross_tail_method='quantile'. Ignored ifNone. Defaults to0.5. -
upper_triangle: float: Upper triangle coordinate point. Used whencross_tail_method='triangle'. Defaults to0.5.
ArbitrageBaseIndex
Ancestors
systematica.models.base.BaseStatArbabc.ABCsystematica.api.models.arbitrage_index.ArbitrageIndexMixin
Static methods
transform_func
| Name | Type | Default | Description |
|---|---|---|---|
model_output | tp.Array2d | -- | Model output array. *args : tp.Args Additional positional arguments. **kwargs : tp.Kwargs Additional keyword arguments. |
| Type | Description |
|---|---|
tp.Array2d | Transformed model output. |
Instance variables
-
transform_params: Dict[str, Any]: Returns the transformation parameters. -
alpha: float: Lower quantile is found withlower_quantile = np.quantile(pdfs, 1.0 - alpha), then removed from matrix. Used whencross_tail_method='quantile'. Defaults to0.9. -
copula: str | type: The copula model to use. Default isauto, which selects the best copula model based onmethodcriterion. -
cross_tail_method: str: Mask method used to filter cross-tail concentration in the marginals. Specifies the type of mask applied to the marginal distributions. Available options arequantile(applies a quantile-based tail mask) andtriangle(applies a triangular mask). If None, the mask is ignored. Defaults toNone. -
custom_splitter: str | None: Custom splitter to use for data partitioning. Default isNone. -
custom_splitter_kwargs: Dict[str, Any]: Additional keyword arguments for the custom splitter. Default isNone. -
list_copulas: list[systematica.models.arbitrage_index.base.BaseCopula] | None: A list of copulas to consider. If None, the model defaults toArchimedeans. Default isNone. -
lower_triangle: float: Lower triangle coordinate point. Used whencross_tail_method='triangle'. Defaults to0.5. -
marginal_dependence: bool: IfTrue, it calculates correlation coefficient on marginals. Otherwise, onretsfeatures. Defaults toFalse. -
model_validation_method: str: The method used for model selection. Default isaic. Choices areaic,bicandaicc. -
rotation: str | systematica.models.arbitrage_index.utils.BaseCopulaRotation: Rotations allow the copula to be adapted for different types of tail dependence. - A180rotation captures extreme co-movements in the lower tail (i.e. simultaneous extreme losses). - A90rotation captures scenarios where one variable exhibits extreme losses while the other shows extreme gains. - A270rotation captures the opposite scenario, where one variable experiences extreme gains while the other suffers extreme losses. SeeBaseCopulaRotation. If set toauto, applies best fitted rotation. Defaults toBaseCopulaRotation.R0. -
splitter: str: The type of data splitter. Choices arefrom_rolling,from_custom_rolling,from_expanding,from_custom_expanding. Defaults tofrom_custom_rolling. -
testing_window: int: The size of the testing window. Default is60. -
training_window: int: The size of the training window. Default is365. -
truncate: float: Truncate cross tail filter at specific point. Used whencross_tail_method='quantile'. Ignored ifNone. Defaults to0.5. -
upper_triangle: float: Upper triangle coordinate point. Used whencross_tail_method='triangle'. Defaults to0.5.
ArbitrageResetIndex
Ancestors
systematica.models.base.BaseStatArbabc.ABCsystematica.api.models.arbitrage_index.ArbitrageIndexMixin
Static methods
is_valid
| Name | Type | Default | Description |
|---|---|---|---|
model_params | tp.Kwargs | -- | Model parameters. |
signal_params | tp.Kwargs | -- | Signal parameters. |
| Type | Description |
|---|---|
ValueError | If long_entries or short_entries are not within the specified bounds. |
transform_func
| Name | Type | Default | Description |
|---|---|---|---|
model_output | tp.Array2d | -- | Model output array. *args : tp.Args Additional positional arguments. **kwargs : tp.Kwargs Additional keyword arguments. |
| Type | Description |
|---|---|
tp.Array2d | Transformed model output. |
Instance variables
-
transform_params: Dict[str, Any]: Returns the transformation parameters. -
alpha: float: Lower quantile is found withlower_quantile = np.quantile(pdfs, 1.0 - alpha), then removed from matrix. Used whencross_tail_method='quantile'. Defaults to0.9. -
center: float: The center value to subtract from each prediction. Default is0.5. -
copula: str | type: The copula model to use. Default isauto, which selects the best copula model based onmethodcriterion. -
cross_tail_method: str: Mask method used to filter cross-tail concentration in the marginals. Specifies the type of mask applied to the marginal distributions. Available options arequantile(applies a quantile-based tail mask) andtriangle(applies a triangular mask). If None, the mask is ignored. Defaults toNone. -
custom_splitter: str | None: Custom splitter to use for data partitioning. Default isNone. -
custom_splitter_kwargs: Dict[str, Any]: Additional keyword arguments for the custom splitter. Default isNone. -
list_copulas: list[systematica.models.arbitrage_index.base.BaseCopula] | None: A list of copulas to consider. If None, the model defaults toArchimedeans. Default isNone. -
lower: float: The lower bound for resetting the accumulated sum. Default is-1.0. -
lower_triangle: float: Lower triangle coordinate point. Used whencross_tail_method='triangle'. Defaults to0.5. -
marginal_dependence: bool: IfTrue, it calculates correlation coefficient on marginals. Otherwise, onretsfeatures. Defaults toFalse. -
model_validation_method: str: The method used for model selection. Default isaic. Choices areaic,bicandaicc. -
rotation: str | systematica.models.arbitrage_index.utils.BaseCopulaRotation: Rotations allow the copula to be adapted for different types of tail dependence. - A180rotation captures extreme co-movements in the lower tail (i.e. simultaneous extreme losses). - A90rotation captures scenarios where one variable exhibits extreme losses while the other shows extreme gains. - A270rotation captures the opposite scenario, where one variable experiences extreme gains while the other suffers extreme losses. SeeBaseCopulaRotation. If set toauto, applies best fitted rotation. Defaults toBaseCopulaRotation.R0. -
sequential: bool: Transformation is applied at every split ifTrue. Otherwise, perform the transformation after computation. It Defaults toFalse. -
splitter: str: The type of data splitter. Choices arefrom_rolling,from_custom_rolling,from_expanding,from_custom_expanding. Defaults tofrom_custom_rolling. -
testing_window: int: The size of the testing window. Default is60. -
training_window: int: The size of the training window. Default is365. -
truncate: float: Truncate cross tail filter at specific point. Used whencross_tail_method='quantile'. Ignored ifNone. Defaults to0.5. -
upper: float: The upper bound for resetting the accumulated sum. Default is1.0. -
upper_triangle: float: Upper triangle coordinate point. Used whencross_tail_method='triangle'. Defaults to0.5.
ArbitrageRollingZscoreIndex
Ancestors
systematica.models.base.BaseStatArbabc.ABCsystematica.api.models.arbitrage_index.ArbitrageIndexMixin
Static methods
transform_func
| Name | Type | Default | Description |
|---|---|---|---|
model_output | tp.Array2d | -- | Model output array. |
window | int | -- | Rolling window size. |
ddof | int | -- | Delta degrees of freedom for standard deviation calculation. |
center | float | -- | Center value to subtract from each prediction. |
| Type | Description |
|---|---|
tp.Array2d | Transformed model output. |
Instance variables
-
transform_params: Dict[str, Any]: Returns the transformation parameters. -
alpha: float: Lower quantile is found withlower_quantile = np.quantile(pdfs, 1.0 - alpha), then removed from matrix. Used whencross_tail_method='quantile'. Defaults to0.9. -
center: float: The center value to subtract from each prediction. Default is0.5. -
copula: str | type: The copula model to use. Default isauto, which selects the best copula model based onmethodcriterion. -
cross_tail_method: str: Mask method used to filter cross-tail concentration in the marginals. Specifies the type of mask applied to the marginal distributions. Available options arequantile(applies a quantile-based tail mask) andtriangle(applies a triangular mask). If None, the mask is ignored. Defaults toNone. -
custom_splitter: str | None: Custom splitter to use for data partitioning. Default isNone. -
custom_splitter_kwargs: Dict[str, Any]: Additional keyword arguments for the custom splitter. Default isNone. -
ddof: int: Delta degrees of freedom for standard deviation calculation. Default is1. -
list_copulas: list[systematica.models.arbitrage_index.base.BaseCopula] | None: A list of copulas to consider. If None, the model defaults toArchimedeans. Default isNone. -
lower_triangle: float: Lower triangle coordinate point. Used whencross_tail_method='triangle'. Defaults to0.5. -
marginal_dependence: bool: IfTrue, it calculates correlation coefficient on marginals. Otherwise, onretsfeatures. Defaults toFalse. -
model_validation_method: str: The method used for model selection. Default isaic. Choices areaic,bicandaicc. -
rotation: str | systematica.models.arbitrage_index.utils.BaseCopulaRotation: Rotations allow the copula to be adapted for different types of tail dependence. - A180rotation captures extreme co-movements in the lower tail (i.e. simultaneous extreme losses). - A90rotation captures scenarios where one variable exhibits extreme losses while the other shows extreme gains. - A270rotation captures the opposite scenario, where one variable experiences extreme gains while the other suffers extreme losses. SeeBaseCopulaRotation. If set toauto, applies best fitted rotation. Defaults toBaseCopulaRotation.R0. -
sequential: bool: Transformation is applied at every split ifTrue. Otherwise, perform the transformation after computation. It Defaults toFalse. -
splitter: str: The type of data splitter. Choices arefrom_rolling,from_custom_rolling,from_expanding,from_custom_expanding. Defaults tofrom_custom_rolling. -
testing_window: int: The size of the testing window. Default is60. -
training_window: int: The size of the training window. Default is365. -
truncate: float: Truncate cross tail filter at specific point. Used whencross_tail_method='quantile'. Ignored ifNone. Defaults to0.5. -
upper_triangle: float: Upper triangle coordinate point. Used whencross_tail_method='triangle'. Defaults to0.5. -
window: int: The rolling window size. It should be lower than testing_window. IfNone, it automatically fits to half of the testing window. Default isNone.
ArbitrageProbabilityIndex
Ancestors
systematica.models.base.BaseStatArbabc.ABCsystematica.api.models.arbitrage_index.ArbitrageIndexMixin
Static methods
transform_func
| Name | Type | Default | Description |
|---|---|---|---|
model_output | tp.Array2d | -- | Model output array. **kwargs : tp.Kwargs Additional keyword arguments. |
| Type | Description |
|---|---|
tp.Array2d | Model output. |
Instance variables
-
transform_params: Dict[str, Any]: Returns the transformation parameters. -
alpha: float: Lower quantile is found withlower_quantile = np.quantile(pdfs, 1.0 - alpha), then removed from matrix. Used whencross_tail_method='quantile'. Defaults to0.9. -
copula: str | type: The copula model to use. Default isauto, which selects the best copula model based onmethodcriterion. -
cross_tail_method: str: Mask method used to filter cross-tail concentration in the marginals. Specifies the type of mask applied to the marginal distributions. Available options arequantile(applies a quantile-based tail mask) andtriangle(applies a triangular mask). If None, the mask is ignored. Defaults toNone. -
custom_splitter: str | None: Custom splitter to use for data partitioning. Default isNone. -
custom_splitter_kwargs: Dict[str, Any]: Additional keyword arguments for the custom splitter. Default isNone. -
list_copulas: list[systematica.models.arbitrage_index.base.BaseCopula] | None: A list of copulas to consider. IfNone, the model defaults toArchimedeans. Default isNone. -
lower_triangle: float: Lower triangle coordinate point. Used whencross_tail_method='triangle'. Defaults to0.5. -
marginal_dependence: bool: IfTrue, it calculates correlation coefficient on marginals. Otherwise, onretsfeatures. Defaults toFalse. -
model_validation_method: str: The method used for model selection. Default isaic. Choices areaic,bicandaicc. -
preprocess_func: Callable: Preprocess data before calling the model. Should takepricesas input. Defaults toget_returns_nb. -
rotation: str | systematica.models.arbitrage_index.utils.BaseCopulaRotation: Rotations allow the copula to be adapted for different types of tail dependence. - A180rotation captures extreme co-movements in the lower tail (i.e. simultaneous extreme losses). - A90rotation captures scenarios where one variable exhibits extreme losses while the other shows extreme gains. - A270rotation captures the opposite scenario, where one variable experiences extreme gains while the other suffers extreme losses. SeeBaseCopulaRotation. If set toauto, applies best fitted rotation. Defaults toBaseCopulaRotation.R0. -
splitter: str: The type of data splitter. Choices arefrom_rolling,from_custom_rolling,from_expanding,from_custom_expanding. Defaults to “from_custom_rolling”. -
testing_window: int: The size of the testing window. Default is60. -
training_window: int: The size of the training window. Default is365. -
truncate: float: Truncate cross tail filter at specific point. Used whencross_tail_method='quantile'. Ignored ifNone. Defaults to0.5. -
upper_triangle: float: Upper triangle coordinate point. Used whencross_tail_method='triangle'. Defaults to0.5.

