Skip to content

Commit 17b4d8c

Browse files
committed
Update divergence peak detection logic to avoid repeated triggers in the same window.
1 parent cedaffc commit 17b4d8c

File tree

3 files changed

+11
-5
lines changed

3 files changed

+11
-5
lines changed

pyindicators/indicators/divergence.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -318,14 +318,16 @@ def bullish_divergence(
318318
price_lows = df[f"{second_column}_lows"].values
319319
result = [False] * len(df)
320320

321-
for i in range(window_size - 1, len(df)):
321+
i = window_size - 1
322+
while i < len(df):
322323
window_a = indicator_lows[i - window_size + 1:i + 1]
323324
window_b = price_lows[i - window_size + 1:i + 1]
324325

325-
if check_divergence_pattern(
326-
window_a, window_b, target_a=-1, target_b=1
327-
):
326+
if check_divergence_pattern(window_a, window_b, target_a=-1, target_b=1):
328327
result[i] = True
328+
i += window_size # Skip forward to avoid repeated triggers in same window
329+
else:
330+
i += 1
329331

330332
df[result_column] = result
331333
return pl.DataFrame(df) if is_polars else df
@@ -444,12 +446,16 @@ def bearish_divergence(
444446
price_highs = df[f"{second_column}_highs"].values
445447
result = [False] * len(df)
446448

447-
for i in range(window_size - 1, len(df)):
449+
i = window_size - 1
450+
while i < len(df):
448451
window_a = indicator_highs[i - window_size + 1:i + 1]
449452
window_b = price_highs[i - window_size + 1:i + 1]
450453

451454
if check_divergence_pattern(window_a, window_b):
452455
result[i] = True
456+
i += window_size
457+
else:
458+
i += 1
453459

454460
df[result_column] = result
455461
return pl.DataFrame(df) if is_polars else df
Loading
Loading

0 commit comments

Comments
 (0)