macrosynergy.learning.forecasting.torch.losses.portfolio_losses#

class PortfolioLoss(reg_concentration=0, skip_validation=True)[source]#

Bases: Module, BaseEstimator

Base class for portfolio loss functions.

Parameters:
  • reg_concentration (float, optional) – Regularization parameter for concentration penalty. Default is 0 (no penalty).

  • skip_validation (bool, optional) – Whether to skip input validation checks for the forward method. Default is True.

Notes

This is a base class for loss functions based on portfolio optimization. It expects the model to output quantities interpretable as portfolio weights or signals.

forward(y_pred, y_true)[source]#

Calculate loss.

Parameters:
  • y_pred (torch.Tensor) – Predicted portfolio weights. Dimension: (batch_size, n_assets)

  • y_true (torch.Tensor) – True asset returns. Dimension: (batch_size, n_assets)

class NegMeanPortfolioReturn(reg_concentration=0, skip_validation=True)[source]#

Bases: PortfolioLoss

PyTorch loss function to maximise the mean return of a portfolio, or equivalently minimise the negative mean return.

Parameters:

reg_concentration (float, optional) – Regularization parameter for concentration penalty. Default is 0 (no penalty).

Notes

This loss function is designed for portfolio optimization tasks, meaning that it expects the model to output quantities interpretable as portfolio weights or signals.

class PortfolioVariance(reg_concentration=0, skip_validation=True)[source]#

Bases: PortfolioLoss

PyTorch loss function to minimise the variance of a portfolio.

Parameters:

reg_concentration (float, optional) – Regularization parameter for concentration penalty. Default is 0 (no penalty).

Notes

This loss function is designed for portfolio optimization tasks, meaning that it expects the model to output quantities interpretable as portfolio weights or signals.

class NegMeanVarianceUtility(alpha=1, reg_concentration=0, skip_validation=True)[source]#

Bases: PortfolioLoss

Pytorch loss function to maximise the mean-variance utility of a portfolio, or equivalently minimise the negative mean-variance utility.

Parameters:
  • alpha (float, optional) – Risk aversion parameter. Default is 1.

  • reg_concentration (float, optional) – Regularization parameter for concentration penalty. Default is 0 (no penalty).

  • skip_validation (bool, optional) – Whether to skip input validation checks for the forward method. Default is True.

Notes

This loss function is designed for portfolio optimization tasks, meaning that it expects the model to output quantities interpretable as portfolio weights or signals.

class NegMeanVarianceSkewnessUtility(alpha=1, reg_concentration=0, skip_validation=True)[source]#

Bases: PortfolioLoss

Pytorch loss function to maximise the mean-variance-skewness utility of a portfolio, or equivalently minimise the negative mean-variance-skewness utility.

Parameters:
  • alpha (float, optional) – Risk aversion parameter for variance. Default is 1.

  • reg_concentration (float, optional) – Regularization parameter for concentration penalty. Default is 0 (no penalty).

  • skip_validation (bool, optional) – Whether to skip input validation checks for the forward method. Default is True.

Notes

This loss function is designed for portfolio optimization tasks, meaning that it expects the model to output quantities interpretable as portfolio weights or signals.

class NegSharpeRatio(unbiased=True, reg_concentration=0, eps=1e-08, skip_validation=True)[source]#

Bases: PortfolioLoss

PyTorch loss function to maximise the Sharpe ratio of a portfolio, or equivalently minimise the negative Sharpe ratio.

Parameters:
  • unbiased (bool, optional) – Whether to use the unbiased estimator for variance. Default is True.

  • reg_concentration (float, optional) – Regularization parameter for concentration penalty. Default is 0 (no penalty).

  • eps (float, optional) – Small value to avoid division by zero. Default is 1e-8.

  • skip_validation (bool, optional) – Whether to skip input validation checks for the forward method. Default is True.

Notes

This loss function is designed for portfolio optimization tasks, meaning that it expects the model to output quantities interpretable as portfolio weights or signals.

For simplicity, we leave out the risk free rate in the Sharpe ratio calculation.