TimePeriods2 = [1440] # other elements will be populated to this list later
MovingAverages = [50] # other elements will be populated to this list later
for Time in TimePeriods2:
k = 1
for MA in MovingAverages:
for i in range(len(df)):
if (df["Close"][i] > df[f"{MA*Time} MA"][i]) & (df["Close"][i+Time] > df[f"{MA*Time} MA"][i+Time]):
df[f"Moving Average (not crossover) Strategy {k} on {Time} Mins"][i] = "Buy"
df[f"Moving Average (not crossover) Strategy {k} on {Time} Mins"] = df[f"Moving Average (not crossover) Strategy {k} on {Time} Mins"].fillna("Sell")
df[f"Moving Average (not crossover) Strategy {k} on {Time} Mins"] = df[f"Moving Average (not crossover) Strategy {k} on {Time} Mins"].astype("category")
k += 1
print(f"Time period {Time} complete")
I tried the following:
TimePeriods2 = [1440] # other elements will be populated to this list later
MovingAverages = [50] # other elements will be populated to this list later
for Time in TimePeriods2:
k = 1
for MA in MovingAverages:
df.loc[( (df["Close"] > df[f"{MA*Time} MA"]) & (df["Close"][i+Time] > df[f"{MA*Time} MA"][i+Time]) ), f"Moving Average (not crossover) Strategy {k} on {Time} Mins"] = "Buy"
df[f"Moving Average (not crossover) Strategy {k} on {Time} Mins"] = df[f"Moving Average (not crossover) Strategy {k} on {Time} Mins"].fillna("Sell")
df[f"Moving Average (not crossover) Strategy {k} on {Time} Mins"] = df[f"Moving Average (not crossover) Strategy {k} on {Time} Mins"].astype("category")
k += 1
print(f"Time period {Time} complete")
But it seems like you cant use the .loc method like this, my dataframe has ~1.4 million rows so needless to say that first way takes forever, while the second way is much quicker except for the fact that I can't get it to work properly.