From a10316409f26c95432b496ac46f267d536a2c593 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Wed, 11 Mar 2026 18:34:58 +0000 Subject: [PATCH] =?UTF-8?q?=E2=9A=A1=20Optimize=20double=20barrier=20label?= =?UTF-8?q?ing=20using=20Numba?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: maghdam <63883156+maghdam@users.noreply.github.com> --- features/__pycache__/__init__.cpython-311.pyc | Bin 168 -> 134 bytes .../feature_engineering.cpython-311.pyc | Bin 20400 -> 30940 bytes features/feature_engineering.py | 25 +++++++++++------- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/features/__pycache__/__init__.cpython-311.pyc b/features/__pycache__/__init__.cpython-311.pyc index f20d9b9d14bb3c28b2813e0aef51c4da823507d7..9ff2b1e0d5bde363f2628cce11ad007252f603b2 100644 GIT binary patch delta 39 tcmZ3%*v81SoR^o20SI<)-k3R&$An)}Ke3=dKP@$}q_iltSbt)nIRMnh3-15` delta 73 zcmZo;T*1h*oR^o20SJ0dZ%m)aV`6BXY!wq)oLW>IlbfHBm>c7tm+DfKS(X};n-iau bUlLzZl$es4mmZUrnpjd=lv*4!(cc^ZY4REL diff --git a/features/__pycache__/feature_engineering.cpython-311.pyc b/features/__pycache__/feature_engineering.cpython-311.pyc index ca342a25b4bbcd8e4644822c1beaa91549d48f08..3268db32139c854e336aec0b885ecbf4d3312a6e 100644 GIT binary patch literal 30940 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 literal 20400 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 pd.DataFrame: - dfc = df.copy() - closes = dfc["close"].values - labels = np.full(len(closes), np.nan) - - for i in range(len(closes)): +@njit +def _compute_double_barrier_labels(closes: np.ndarray, up: float, down: float, horizon: int) -> np.ndarray: + n = len(closes) + labels = np.full(n, np.nan) + for i in range(n): current = closes[i] upper = current * (1 + up) lower = current * (1 - down) - end = min(i + horizon, len(closes)) + end = min(i + horizon, n) for j in range(i + 1, end): if closes[j] >= upper: labels[i] = 1 @@ -322,6 +320,15 @@ def set_double_barrier_label( if closes[j] <= lower: labels[i] = 0 break + return labels + +def set_double_barrier_label( + df: pd.DataFrame, up: float = 0.005, down: float = 0.005, horizon: int = 50 +) -> pd.DataFrame: + dfc = df.copy() + closes = dfc["close"].values + + labels = _compute_double_barrier_labels(closes, up, down, horizon) dfc["barrier_label"] = labels dfc.dropna(subset=["barrier_label"], inplace=True)