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:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user