Add tests for labeling schemes and fix duplicate function

- Added `pytest` to dependencies in `pyproject.toml`
- Removed duplicate `create_labels_double_barrier` function definition from `features/labeling_schemes.py`
- Added comprehensive unit tests in `tests/test_labeling_schemes.py` covering:
  - `calculate_future_returns`
  - `create_labels_multi_bar`
  - `create_labels_double_barrier`
  - `create_labels_regime_detection`
  - `create_labels_volatility`

Co-authored-by: maghdam <63883156+maghdam@users.noreply.github.com>
This commit is contained in:
google-labs-jules[bot]
2026-03-11 18:34:23 +00:00
parent 29fcbf0f9d
commit 44c4e22e2d
4 changed files with 2469 additions and 2336 deletions
-34
View File
@@ -82,40 +82,6 @@ def create_labels_double_barrier(df, up=0.005, down=0.005, horizon=20):
def create_labels_double_barrier(df, up=0.005, down=0.005, horizon=20):
"""
Double-barrier labeling:
+1 if upper barrier is touched first,
-1 if lower barrier is touched first,
0 if neither is touched within horizon.
df must have a 'close' column.
Returns a new DataFrame with a 'barrier_label' column in {-1, 0, +1}.
"""
df_copy = df.copy()
closes = df_copy["close"].values
labels = np.full(len(closes), np.nan)
for i in range(len(closes)):
current_price = closes[i]
upper_barrier = current_price * (1 + up)
lower_barrier = current_price * (1 - down)
end = min(i + horizon, len(closes))
for fwd_i in range(i+1, end):
if closes[fwd_i] >= upper_barrier:
labels[i] = 1
break
elif closes[fwd_i] <= lower_barrier:
labels[i] = -1
break
if np.isnan(labels[i]):
labels[i] = 0
df_copy["barrier_label"] = labels
return df_copy
def create_labels_regime_detection(df, short_window=20, long_window=50):
"""
Simple regime detection: