Я создал скрипт (показанный ниже), который помогает определять локальные максимумы, используя исторические данные о запасах. Он использует дневные максимумы, чтобы выделить локальные уровни сопротивления. Прекрасно работает, но я хотел бы, чтобы в любой данный момент времени (или строку в данных о запасах) я хотел знать, какой самый последний уровень сопротивления был непосредственно перед этой точкой. Я хочу это в своем собственном столбце в наборе данных. Например:
Верхняя серая линия - это максимумы за каждый день, а нижняя серая линия - это закрытие каждого дня. Грубо говоря, набор данных для этого раздела будет выглядеть следующим образом:
High Close
216.8099976 216.3399963
215.1499939 213.2299957
214.6999969 213.1499939
215.7299957 215.2799988 <- First blue dot at high
213.6900024 213.3699951
214.8800049 213.4100037 <- 2nd blue dot at high
214.5899963 213.4199982
216.0299988 215.8200073
217.5299988 217.1799927 <- 3rd blue dot at high
216.8800049 215.9900055
215.2299957 214.2400055
215.6799927 215.5700073
....
Сейчас этот скрипт просматривает весь набор данных одновременно, чтобы определить локальные индексы максимумов для максимумов, а затем для любого заданного точка в истории запасов (т. е. любая заданная строка), она ищет СЛЕДУЮЩИЕ максимумы в списке всех найденных максимумов. Это был бы способ определить, где находится следующий уровень сопротивления, но я не хочу этого из-за предвзятости. Я просто хочу иметь столбец самого последнего уровня сопротивления в прошлом или, может быть, даже последние 2 последних пункта в 2 столбцах. На самом деле это было бы идеально.
Таким образом, мой окончательный результат будет выглядеть так для 1 столбца:
High Close Most_Rec_Max
216.8099976 216.3399963 0
215.1499939 213.2299957 0
214.6999969 213.1499939 0
215.7299957 215.2799988 0
213.6900024 213.3699951 215.7299957
214.8800049 213.4100037 215.7299957
214.5899963 213.4199982 214.8800049
216.0299988 215.8200073 214.8800049
217.5299988 217.1799927 214.8800049
216.8800049 215.9900055 217.5299988
215.2299957 214.2400055 217.5299988
215.6799927 215.5700073 217.5299988
....
Вы заметите, что точка появляется только в самом последнем столбце после нее уже был обнаружен.
Вот код, который я использую:
real_close_prices = df['Close'].to_numpy()
highs = df['High'].to_numpy()
max_indexes = (np.diff(np.sign(np.diff(highs))) < 0).nonzero()[0] + 1 # local max
# +1 due to the fact that diff reduces the original index number
max_values_at_indexes = highs[max_indexes]
curr_high = [c for c in highs]
max_values_at_indexes.sort()
for m in max_values_at_indexes:
for i, c in enumerate(highs):
if m > c and curr_high[i] == c:
curr_high[i] = m
#print(nextbig)
df['High_Resistance'] = curr_high
# plot
plt.figure(figsize=(12, 5))
plt.plot(x, highs, color='grey')
plt.plot(x, real_close_prices, color='grey')
plt.plot(x[max_indexes], highs[max_indexes], "o", label="max", color='b')
plt.show()
Надеюсь, кто-то сможет помочь мне с этим. Спасибо!