No project description provided
Project description
Quantitative Portfolio Machine Learning Library
Viacheslav Buchkov
ETH Zürich
Keywords: quant; quantitative finance; portfolio management; machine learning; reinforcement learning.
Install
pip install quant-pml
How To Run A Backtest
from quant_pml.config.trading_config import TradingConfig
from quant_pml.config.russell_3000_experiment_config import Russell3000ExperimentConfig
from quant_pml.hedge.market_futures_hedge import MarketFuturesHedge
from quant_pml.runner import build_backtest
from quant_pml.strategies.factors.momentum import Momentum
# Specify the model hyperparameters
REBAL_FREQ = "D" # Rebalance frequency (Month End)
QUANTILE = 0.1 # Sorted portfolio quantile
MODE = "long_short" # Trading mode
# Specify the trading configurations
trading_config = TradingConfig(
broker_fee=0, # Broker commission in decimals
bid_ask_spread=0, # Bid-ask spread in decimals
total_exposure=1, # Budget constraint
max_exposure=None, # Maximum weight constraint
min_exposure=None, # Minimum weight constraint
trading_lag_days=1, # Trading Lag
)
# Create a strategy with logic for weights selection
strategy = Momentum(
mode=MODE,
quantile=QUANTILE,
)
# Initialize the hedger (can be set to `None` if no hedging is required)
hedger = MarketFuturesHedge(market_name="spx")
# Build the backtest pipeline
preprocessor, runner = build_backtest(
experiment_config=Russell3000ExperimentConfig(),
trading_config=trading_config,
rebal_freq=REBAL_FREQ,
)
# Run the backtest
res = runner(
feature_processor=preprocessor,
strategy=strategy,
hedger=hedger,
)
How To Create A New Strategy
import pandas as pd
from quant_pml.strategies.base_strategy import BaseStrategy
from quant_pml.strategies.optimization_data import TrainingData, PredictionData
# Create a blueprint for your strategy
class NewStrategy(BaseStrategy):
def __init__(self) -> None:
super().__init__()
# Store the data across time, if needed
def _fit(self, training_data: TrainingData) -> None:
# Specify here your fitting logic
pass
def _get_weights(self, prediction_data: PredictionData, weights_: pd.DataFrame) -> pd.DataFrame:
# Specify here your prediction logic
# Update the weights DataFrame by modifying the respective columns of stock_ids
return weights_
How To Create A New Covariance Estimator
from __future__ import annotations
from typing import TYPE_CHECKING
if TYPE_CHECKING:
import pandas as pd
from quant_pml.strategies.optimization_data import PredictionData, TrainingData
from quant_pml.cov_estimators.base_cov_estimator import BaseCovEstimator
class NewCovEstimator(BaseCovEstimator):
def __init__(self) -> None:
super().__init__()
self._fitted_cov = None
def _fit(self, training_data: TrainingData) -> None:
# Specify here your fitting logic (e.g., store a historical covmat)
...
def _predict(self, prediction_data: PredictionData) -> pd.DataFrame:
# Specify here your prediction logic (e.g., get a stored estimate)
...
How To Create A New Data-Driven Covariance Estimator
from __future__ import annotations
from typing import TYPE_CHECKING
if TYPE_CHECKING:
import pandas as pd
from quant_pml.cov_estimators.rl.base_rl_estimator import BaseRLCovEstimator
class NewRLCovEstimator(BaseRLCovEstimator):
def __init__(self, shrinkage_type: str, window_size: int | None = None) -> None:
super().__init__(shrinkage_type=shrinkage_type, window_size=window_size)
def _fit_shrinkage(
self, features: pd.DataFrame, shrinkage_target: pd.Series
) -> None:
# Specify here your model (might be classical ML / RL / etc.)
self.model = ...
self.model.fit(X=features, y=shrinkage_target)
def _predict_shrinkage(self, features: pd.DataFrame) -> float:
pred = self.model.predict(features).item()
return pred
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
quant_pml-0.1.20.tar.gz
(81.4 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
quant_pml-0.1.20-py3-none-any.whl
(152.3 kB
view details)
File details
Details for the file quant_pml-0.1.20.tar.gz.
File metadata
- Download URL: quant_pml-0.1.20.tar.gz
- Upload date:
- Size: 81.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8ce87a0d14f1063869ba4189f52c734ef52f98cf1e875bfe171a2146aa9c272d
|
|
| MD5 |
25e841ad115326f1650c74ba84f695b6
|
|
| BLAKE2b-256 |
e172fe0dc917624bae8f025eb332e909b9e7eaad1d9f1cae1b426741defa49e5
|
File details
Details for the file quant_pml-0.1.20-py3-none-any.whl.
File metadata
- Download URL: quant_pml-0.1.20-py3-none-any.whl
- Upload date:
- Size: 152.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0fa508e647b924387e93b2dc51bdc6484c97628e0af97e9f8789ea11b03ba395
|
|
| MD5 |
8c506f83130dc1e63df7550da6d57754
|
|
| BLAKE2b-256 |
5046e4631f672132408edfd4cd4d298a37a0ab61a44b6168f381c19aa16f989b
|