I have a python Dataframe, which consists of 2000 rows (each row represents a day). Then, I tried to use a for-loop to loop over the Dataframe[0:252] and calculate some signals and save to a list, and then I need to do the same on Dataframe[1:253], and on Dataframe[2:254] until Dataframe[1746:2000].
This took me around 15 minutes on one file which consists of 2000 rows and I have 1000 copies of that. Does anyone give me some hints on how I can perform better?
Thank you.
Some codes samples are as follow:
data = pd.read_excel("17 HK Stocks in different sheets.xlsx",sheet_name=Sheet_Name,engine='openpyxl',parse_dates=True,index_col='Date')
# Start to divide the data into each year and loop over
for adjusting_factor in range(len(data)):
    data = pd.read_excel("17 HK Stocks in different sheets.xlsx",sheet_name=Sheet_Name,engine='openpyxl',parse_dates=True,index_col='Date')
    data['Date'] = pd.to_datetime(data.index)
    data['Date'] = data['Date'].apply(mpl_dates.date2num)
    data = data.loc[:,['Date', 'Open', 'High', 'Low', 'Close', 'Volume']]
    
    
    data['Indication_Close_Rule'] = 0
    data['Resistance_Validation'] = 0
    data['Higher_Contracting_Range'] = 0
    #data['Volume_Rolling_50'] = data['Volume'].rolling(50).mean() 
    #data['Volume_Validation'] = 0
    data['VCP_Signal'] = 0
    data['VCP_Signal_Change'] = 0
    total_numbers_signal = 0
    
    # This is the rolling of the dataframe in a range of 252 days
    data = data[(0 + adjusting_factor):252+adjusting_factor]  
    
    if len(data) < 252:
        break
    for j in range(4,data.shape[0]):
        if data['High'][j] < data['High'][j-1] and data['High'][j-1] < data['High'][j-2] and data['High'][j-2] > data['High'][j-3] and data['High'][j-3] > data['High'][j-4] :
            if len(zigzag_list) == 0:
                date_carrier_high = str(data.index.values[j-2])            
                zigzag_list.append((data['High'][j-2],j-2,'H',date_carrier_high[0:10]))
                Current_Three_Points_For_Top.append((data['High'][j-2],j-2+adjusting_factor,'H',date_carrier_high[0:10]))
            elif len(zigzag_list) != 0:
                if zigzag_list[-1][2] == 'L' and zigzag_list[-1][0] < data['High'][j-2]:
                    date_carrier_high = str(data.index.values[j-2])
                    zigzag_list.append((data['High'][j-2],j-2,'H',date_carrier_high[0:10]))
                    Current_Three_Points_For_Top.append((data['High'][j-2],j-2+adjusting_factor,'H',date_carrier_high[0:10]))
                elif zigzag_list[-1][2] == 'L' and zigzag_list[-1][0] > data['High'][j-2]:
                    pass
                elif zigzag_list[-1][2] == 'H' and zigzag_list[-1][0] > data['High'][j-2]:
                    pass
                elif zigzag_list[-1][2] == 'H' and zigzag_list[-1][0] < data['High'][j-2]:
                    zigzag_list = zigzag_list[:-1]
                    date_carrier_high = str(data.index.values[j-2])
                    zigzag_list.append((data['High'][j-2],j-2,'H',date_carrier_high[0:10]))
                    Current_Three_Points_For_Top = Current_Three_Points_For_Top[:-1]
                    Current_Three_Points_For_Top.append((data['High'][j-2],j-2+adjusting_factor,'H',date_carrier_high[0:10]))
        elif data['High'][j] > data['High'][j-1] and data['High'][j-1] < data['High'][j-2] and data['High'][j-2] > data['High'][j-3] and data['High'][j-3] > data['High'][j-4] :                                           
            if len(zigzag_list) == 0:
                date_carrier_high = str(data.index.values[j-2])            
                zigzag_list.append((data['High'][j-2],j-2,'H',date_carrier_high[0:10]))
                Current_Three_Points_For_Top.append((data['High'][j-2],j-2+adjusting_factor,'H',date_carrier_high[0:10]))
            elif len(zigzag_list) != 0:
                if zigzag_list[-1][2] == 'L' and zigzag_list[-1][0] < data['High'][j-2]:
                    date_carrier_high = str(data.index.values[j-2])
                    zigzag_list.append((data['High'][j-2],j-2,'H',date_carrier_high[0:10]))
                    Current_Three_Points_For_Top.append((data['High'][j-2],j-2+adjusting_factor,'H',date_carrier_high[0:10]))
                elif zigzag_list[-1][2] == 'L' and zigzag_list[-1][0] > data['High'][j-2]:
                    pass
                elif zigzag_list[-1][2] == 'H' and zigzag_list[-1][0] > data['High'][j-2]:
                    pass
                elif zigzag_list[-1][2] == 'H' and zigzag_list[-1][0] < data['High'][j-2]:
                    zigzag_list = zigzag_list[:-1]
                    date_carrier_high = str(data.index.values[j-2])
                    zigzag_list.append((data['High'][j-2],j-2,'H',date_carrier_high[0:10]))
                    Current_Three_Points_For_Top = Current_Three_Points_For_Top[:-1]
                    Current_Three_Points_For_Top.append((data['High'][j-2],j-2+adjusting_factor,'H',date_carrier_high[0:10]))
 
    