@@ -318,14 +318,16 @@ def bullish_divergence(
318
318
price_lows = df [f"{ second_column } _lows" ].values
319
319
result = [False ] * len (df )
320
320
321
- for i in range (window_size - 1 , len (df )):
321
+ i = window_size - 1
322
+ while i < len (df ):
322
323
window_a = indicator_lows [i - window_size + 1 :i + 1 ]
323
324
window_b = price_lows [i - window_size + 1 :i + 1 ]
324
325
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 ):
328
327
result [i ] = True
328
+ i += window_size # Skip forward to avoid repeated triggers in same window
329
+ else :
330
+ i += 1
329
331
330
332
df [result_column ] = result
331
333
return pl .DataFrame (df ) if is_polars else df
@@ -444,12 +446,16 @@ def bearish_divergence(
444
446
price_highs = df [f"{ second_column } _highs" ].values
445
447
result = [False ] * len (df )
446
448
447
- for i in range (window_size - 1 , len (df )):
449
+ i = window_size - 1
450
+ while i < len (df ):
448
451
window_a = indicator_highs [i - window_size + 1 :i + 1 ]
449
452
window_b = price_highs [i - window_size + 1 :i + 1 ]
450
453
451
454
if check_divergence_pattern (window_a , window_b ):
452
455
result [i ] = True
456
+ i += window_size
457
+ else :
458
+ i += 1
453
459
454
460
df [result_column ] = result
455
461
return pl .DataFrame (df ) if is_polars else df
0 commit comments