diff --git a/config/preprocess.py b/config/preprocess.py index 65c9f30..75bd355 100644 --- a/config/preprocess.py +++ b/config/preprocess.py @@ -131,7 +131,7 @@ def __preprocess_transformations_config(config_dict: dict) -> dict: get_scaler(config_dict["scaler"]), get_pca( config_dict["dimensionality_reduction_ratio"], - config_dict["sliding_window_size"], + config_dict["initial_window_size"], ), get_rfe(config_dict["n_features_to_select"]), ] diff --git a/config/presets.py b/config/presets.py index e01ecc7..608aad8 100644 --- a/config/presets.py +++ b/config/presets.py @@ -16,7 +16,7 @@ def get_default_config() -> RawConfig: return RawConfig( dimensionality_reduction_ratio=0.5, n_features_to_select=50, - sliding_window_size=3800, + initial_window_size=3800, retrain_every=2000, scaler="minmax", # 'normalize' 'minmax' 'standardize' 'robust' assets=["fivemin_crypto"], diff --git a/config/sweep_ensemble.yaml b/config/sweep_ensemble.yaml index a20ed79..eca8127 100644 --- a/config/sweep_ensemble.yaml +++ b/config/sweep_ensemble.yaml @@ -12,7 +12,7 @@ parameters: value: ['daily_etf'] exogenous_data: value: ['daily_glassnode'] - sliding_window_size: + initial_window_size: value: 380 distribution: categorical n_features_to_select: diff --git a/config/types.py b/config/types.py index c52ff3f..8338c29 100644 --- a/config/types.py +++ b/config/types.py @@ -13,7 +13,7 @@ from transformations.base import Transformation class RawConfig(BaseModel): dimensionality_reduction_ratio: float n_features_to_select: int - sliding_window_size: int + initial_window_size: int retrain_every: int scaler: Literal["normalize", "minmax", "standardize", "robust"] @@ -39,7 +39,7 @@ class RawConfig(BaseModel): @dataclass class Config: - sliding_window_size: int + initial_window_size: int retrain_every: int assets: DataCollection diff --git a/data_loader/process.py b/data_loader/process.py index d7b7e62..25d2183 100644 --- a/data_loader/process.py +++ b/data_loader/process.py @@ -18,4 +18,4 @@ def check_data(X: XDataFrame, config: Config) -> bool: def has_enough_samples_to_train(X: XDataFrame, config: Config) -> bool: first_valid_index = get_first_valid_return_index(X.iloc[:, 0]) samples_to_train = len(X) - first_valid_index - return samples_to_train > (config.sliding_window_size * 2) + 100 + return samples_to_train > (config.initial_window_size * 2) + 100 diff --git a/training/bet_sizing.py b/training/bet_sizing.py index c8ec466..c36df2c 100644 --- a/training/bet_sizing.py +++ b/training/bet_sizing.py @@ -50,7 +50,7 @@ def bet_sizing_with_meta_model( X=meta_X, y=meta_y, forward_returns=forward_returns, - window_size=config.sliding_window_size, + window_size=config.initial_window_size, retrain_every=config.retrain_every, from_index=from_index, transformations=transformations, @@ -62,7 +62,7 @@ def bet_sizing_with_meta_model( y=meta_y, forward_returns=forward_returns, model=model, - sliding_window_size=config.sliding_window_size, + initial_window_size=config.initial_window_size, retrain_every=config.retrain_every, from_index=from_index, level="meta", diff --git a/training/directional_training.py b/training/directional_training.py index b625d5f..612a22c 100644 --- a/training/directional_training.py +++ b/training/directional_training.py @@ -30,7 +30,7 @@ def train_directional_model( X=X, y=y, forward_returns=forward_returns, - window_size=config.sliding_window_size, + window_size=config.initial_window_size, retrain_every=config.retrain_every, from_index=from_index, transformations=transformations, @@ -44,7 +44,7 @@ def train_directional_model( y=y, forward_returns=forward_returns, model=model, - sliding_window_size=config.sliding_window_size, + initial_window_size=config.initial_window_size, retrain_every=config.retrain_every, from_index=from_index, level="primary", diff --git a/training/train_model.py b/training/train_model.py index 098926c..0dc9669 100644 --- a/training/train_model.py +++ b/training/train_model.py @@ -19,7 +19,7 @@ def train_model( y: pd.Series, forward_returns: pd.Series, model: Model, - sliding_window_size: int, + initial_window_size: int, retrain_every: int, from_index: Optional[pd.Timestamp], level: str, @@ -42,7 +42,7 @@ def train_model( y=y, forward_returns=forward_returns, expanding_window=True, - window_size=sliding_window_size, + window_size=initial_window_size, retrain_every=retrain_every, from_index=from_index, transformations_over_time=transformations_over_time, @@ -59,7 +59,7 @@ def train_model( transformations_over_time=transformations_over_time, X=X, expanding_window=True, - window_size=sliding_window_size, + window_size=initial_window_size, retrain_every=retrain_every, from_index=from_index, ) diff --git a/transformations/pca.py b/transformations/pca.py index 5589631..5a56882 100644 --- a/transformations/pca.py +++ b/transformations/pca.py @@ -10,15 +10,15 @@ class PCATransformation(Transformation): pca: PCA - def __init__(self, ratio_components_to_keep: float, sliding_window_size: int): + def __init__(self, ratio_components_to_keep: float, initial_window_size: int): self.ratio_components_to_keep = ratio_components_to_keep - self.sliding_window_size = sliding_window_size + self.initial_window_size = initial_window_size def fit(self, X: pd.DataFrame, y: Optional[pd.Series] = None) -> None: self.pca = PCA( n_components=min( int(len(X.columns) * self.ratio_components_to_keep), - self.sliding_window_size, + self.initial_window_size, ) ) self.pca.fit(X, y) diff --git a/transformations/retrieve.py b/transformations/retrieve.py index 94fc99e..7dd7ea1 100644 --- a/transformations/retrieve.py +++ b/transformations/retrieve.py @@ -19,13 +19,13 @@ def get_rfe(n_feature_to_select: int) -> Optional[RFETransformation]: def get_pca( - ratio_components_to_keep: float, sliding_window_size: int + ratio_components_to_keep: float, initial_window_size: int ) -> Optional[PCATransformation]: if ratio_components_to_keep > 0: return PCATransformation( ratio_components_to_keep=ratio_components_to_keep, - sliding_window_size=sliding_window_size, + initial_window_size=initial_window_size, ) else: return None diff --git a/utils/evaluate.py b/utils/evaluate.py index 77ddf1e..3916670 100644 --- a/utils/evaluate.py +++ b/utils/evaluate.py @@ -44,7 +44,7 @@ def evaluate_predictions( labels: list[int], transaction_costs: float, ) -> Stats: - # ignore the predictions until we see a non-zero returns (and definitely skip the first sliding_window_size) + # ignore the predictions until we see a non-zero returns (and definitely skip the first initial_window_size) evaluate_from = max( get_first_valid_return_index(forward_returns), get_first_valid_return_index(y_pred),