Я хочу получать ежедневно, если цена акций находится на минимуме или максимуме за 52 недели, и для этого я написал этот фрагмент кода:
prices = yf.download(tickers, start=start, end=end)["Adj Close"]
max_min = pd.DataFrame(0, index=np.arange(len(prices)), columns=list(prices.columns))
for i in range(251, len(prices)):
for j in range(prices.shape[1]):
if prices.iloc[i, j] >= prices.iloc[:i].max()[j]:
max_min.loc[i, prices.columns[j]] = 1
elif prices.iloc[i, j] <= prices.iloc[:i].min()[j]:
max_min.loc[i, prices.columns[j]] = -1
Где «тикеры» - это список со всеми тикеры S&P 500, дата начала - октябрь 2006 г., дата окончания - сегодня.
price.shape = (3451, 505)
Это занимает вечность, и мне нужно получить эти данные ежедневно. Как я могу оптимизировать свой код?
PD: Я запускал пример с этим кодом.
a = pd.DataFrame(np.random.randint(0,200, size=(10,10)), index=np.arange(10), columns=list("ABCDEFGHIJ"))
max_min = pd.DataFrame(0, index=np.arange(len(prices)), columns=list(prices.columns))
for i in range(4, len(a)):
for j in range(a.shape[1]):
if a.iloc[i, j] >= a.iloc[:i].max()[j]:
max_min.loc[i, a.columns[j]] = 1
elif a.iloc[i, j] <= a.iloc[:i].min()[j]:
max_min.loc[i, a.columns[j]] = -1