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.5.tar.gz
(76.0 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.5-py3-none-any.whl
(139.2 kB
view details)
File details
Details for the file quant_pml-0.1.5.tar.gz.
File metadata
- Download URL: quant_pml-0.1.5.tar.gz
- Upload date:
- Size: 76.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2f8e4daa66b1541cb23cfd9d49ef4d0be2fad39fa7671bf35a5f5777d749360a
|
|
| MD5 |
d4b97809c43f42a3e6610008158e536c
|
|
| BLAKE2b-256 |
aabba1853a7b85c41cacd15ed1f8c6efdeed735d81f41d25ff2809e61998e73a
|
File details
Details for the file quant_pml-0.1.5-py3-none-any.whl.
File metadata
- Download URL: quant_pml-0.1.5-py3-none-any.whl
- Upload date:
- Size: 139.2 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 |
1278209cd26175fa9eb495ab216861b98212702d4d3514fd9215eaae27aaccb2
|
|
| MD5 |
6870a5974fc4353e1f5e43f99ffa884d
|
|
| BLAKE2b-256 |
49b7b4aa34aa87b7ebe1eb97d949dfcf02430663475c7de502798814eb1b8a09
|