@@ -830,3 +830,134 @@ def test_standard_situations(self):
830830 window_size = 7
831831 )
832832 self .assertTrue (any (df ["bearish_divergence" ]))
833+
834+
835+ class TestCheckDivergencePatternWithDatetimeIndex (TestCase ):
836+ """Tests to verify divergence functions work correctly with DatetimeIndex."""
837+
838+ def test_check_divergence_pattern_with_datetime_index (self ):
839+ """Test that check_divergence_pattern works with DatetimeIndex Series."""
840+ from pyindicators .indicators .divergence import check_divergence_pattern
841+
842+ series_a = pd .Series (
843+ [np .nan , - 1 , np .nan ],
844+ index = pd .date_range ('2024-01-01' , periods = 3 , freq = '1h' )
845+ )
846+ series_b = pd .Series (
847+ [np .nan , np .nan , 1 ],
848+ index = pd .date_range ('2024-01-01' , periods = 3 , freq = '1h' )
849+ )
850+
851+ result = check_divergence_pattern (series_a , series_b , target_a = - 1 , target_b = 1 )
852+ self .assertTrue (result )
853+
854+ def test_check_divergence_pattern_with_integer_index (self ):
855+ """Test that check_divergence_pattern still works with integer index."""
856+ from pyindicators .indicators .divergence import check_divergence_pattern
857+
858+ series_a = pd .Series ([np .nan , - 1 , np .nan ])
859+ series_b = pd .Series ([np .nan , np .nan , 1 ])
860+
861+ result = check_divergence_pattern (series_a , series_b , target_a = - 1 , target_b = 1 )
862+ self .assertTrue (result )
863+
864+ def test_check_divergence_pattern_with_numpy_arrays (self ):
865+ """Test that check_divergence_pattern works with numpy arrays."""
866+ from pyindicators .indicators .divergence import check_divergence_pattern
867+
868+ series_a = np .array ([np .nan , - 1 , np .nan ])
869+ series_b = np .array ([np .nan , np .nan , 1 ])
870+
871+ result = check_divergence_pattern (series_a , series_b , target_a = - 1 , target_b = 1 )
872+ self .assertTrue (result )
873+
874+ def test_bearish_divergence_multi_dataframe_with_datetime_index (self ):
875+ """Test bearish_divergence_multi_dataframe with DatetimeIndex DataFrames."""
876+ from pyindicators import macd , detect_peaks
877+
878+ # Data with DatetimeIndex (common when loading from CSV or APIs)
879+ df = pd .DataFrame ({
880+ 'Close' : [100 , 101 , 102 , 101 , 100 , 99 , 100 , 101 , 102 , 103 , 102 , 101 ]
881+ }, index = pd .date_range ('2024-01-01' , periods = 12 , freq = '1h' ))
882+
883+ # Apply indicators
884+ macd_data = macd (
885+ df .copy (),
886+ source_column = "Close" ,
887+ short_period = 3 ,
888+ long_period = 6 ,
889+ signal_period = 3
890+ )
891+ close_data = detect_peaks (
892+ df .copy (),
893+ source_column = "Close" ,
894+ number_of_neighbors_to_compare = 2 ,
895+ min_consecutive = 1
896+ )
897+ macd_data = detect_peaks (
898+ macd_data ,
899+ source_column = "macd_histogram" ,
900+ number_of_neighbors_to_compare = 2 ,
901+ min_consecutive = 1
902+ )
903+
904+ # This should not raise ValueError with DatetimeIndex
905+ divergence_data = bearish_divergence_multi_dataframe (
906+ first_df = macd_data ,
907+ second_df = close_data ,
908+ result_df = close_data .copy (),
909+ first_column = "macd_histogram" ,
910+ second_column = "Close" ,
911+ window_size = 5 ,
912+ result_column = "bearish_divergence"
913+ )
914+
915+ # Verify the result has the expected column and index
916+ self .assertIn ("bearish_divergence" , divergence_data .columns )
917+ self .assertIsInstance (divergence_data .index , pd .DatetimeIndex )
918+
919+ def test_bullish_divergence_multi_dataframe_with_datetime_index (self ):
920+ """Test bullish_divergence_multi_dataframe with DatetimeIndex DataFrames."""
921+ from pyindicators import macd , detect_peaks
922+
923+ # Data with DatetimeIndex
924+ df = pd .DataFrame ({
925+ 'Close' : [103 , 102 , 101 , 100 , 99 , 100 , 101 , 102 , 101 , 100 , 99 , 98 ]
926+ }, index = pd .date_range ('2024-01-01' , periods = 12 , freq = '1h' ))
927+
928+ # Apply indicators
929+ macd_data = macd (
930+ df .copy (),
931+ source_column = "Close" ,
932+ short_period = 3 ,
933+ long_period = 6 ,
934+ signal_period = 3
935+ )
936+ close_data = detect_peaks (
937+ df .copy (),
938+ source_column = "Close" ,
939+ number_of_neighbors_to_compare = 2 ,
940+ min_consecutive = 1
941+ )
942+ macd_data = detect_peaks (
943+ macd_data ,
944+ source_column = "macd_histogram" ,
945+ number_of_neighbors_to_compare = 2 ,
946+ min_consecutive = 1
947+ )
948+
949+ # This should not raise ValueError with DatetimeIndex
950+ divergence_data = bullish_divergence_multi_dataframe (
951+ first_df = macd_data ,
952+ second_df = close_data ,
953+ result_df = close_data .copy (),
954+ first_column = "macd_histogram" ,
955+ second_column = "Close" ,
956+ window_size = 5 ,
957+ result_column = "bullish_divergence"
958+ )
959+
960+ # Verify the result has the expected column and index
961+ self .assertIn ("bullish_divergence" , divergence_data .columns )
962+ self .assertIsInstance (divergence_data .index , pd .DatetimeIndex )
963+
0 commit comments