From 22b3167cb9847fce50db529b114d85f20e860178 Mon Sep 17 00:00:00 2001 From: Mark Aron Szulyovszky Date: Sun, 9 Jan 2022 14:18:20 +0100 Subject: [PATCH] feat(Evaluate): increase transactions costs, to get a more realistic view on performance (#137) --- data_loader/load_data.py | 13 ++++++++++++- utils/evaluate.py | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/data_loader/load_data.py b/data_loader/load_data.py index e56f2b4..03595de 100644 --- a/data_loader/load_data.py +++ b/data_loader/load_data.py @@ -55,6 +55,15 @@ def __load_data(assets: DataCollection, narrow_format=narrow_format, ) for data_source in target_file] target_asset_df = ray.get(target_asset_future) + + target_asset_only_returns_future = __load_df.remote( + data_source=target_file[0], + prefix=target_file[0][1], + returns='returns', + feature_extractors=[], + narrow_format=narrow_format, + ) + df_target_asset_only_returns = ray.get(target_asset_only_returns_future) asset_futures = [__load_df.remote( data_source=data_source, @@ -86,14 +95,16 @@ def __load_data(assets: DataCollection, if index_column == 'int': dfs.reset_index(drop=True, inplace=True) + df_target_asset_only_returns.reset_index(drop=True, inplace=True) if narrow_format: dfs = dfs.drop(index=dfs.index[0], axis=0) + df_target_asset_only_returns = df_target_asset_only_returns.drop(index=dfs.index[0], axis=0) ## Create target target_col = 'target' returns_col = target_asset[1] + '_returns' - forward_returns = __create_target_cum_forward_returns(dfs, returns_col, forecasting_horizon) + forward_returns = __create_target_cum_forward_returns(df_target_asset_only_returns, returns_col, forecasting_horizon) if method == 'regression': dfs[target_col] = forward_returns elif method == 'classification': diff --git a/utils/evaluate.py b/utils/evaluate.py index e4666d3..a0d6a04 100644 --- a/utils/evaluate.py +++ b/utils/evaluate.py @@ -6,7 +6,7 @@ from utils.helpers import get_first_valid_return_index import pandas as pd import numpy as np -def backtest(returns: pd.Series, signal: pd.Series, transaction_cost = 0.002) -> pd.Series: +def backtest(returns: pd.Series, signal: pd.Series, transaction_cost = 0.008) -> pd.Series: delta_pos = signal.diff(1).abs().fillna(0.) costs = transaction_cost * delta_pos return (signal * returns) - costs