@@ -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
0 commit comments