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]))