Существуют ли какие-либо конкретные алгоритмы, которые позволят мне найти минимальные и максимальные точки на картинке выше?
У меня есть данные в текстовом формате, поэтому мне не нужно их искать в изображение. Проблема с акциями состоит в том, что у них так много локальных минимумов и максимумов, простые производные не работают.
Я думаю об использовании цифровых фильтров (домен z) и сглаживании графика, но у меня все еще осталось слишком много локализованные минимумы и максимумы.
Я также пытался использовать скользящее среднее, чтобы сгладить график, но опять же у меня слишком много максимумов и минимумов.
РЕДАКТИРОВАТЬ:
Я прочитал некоторые комментарии и просто случайно не обвел некоторые минимумы и максимумы.
Думаю, я придумал алгоритм, который может работать.Сначала найдите точки минимума и максимума (максимум дня и минимум дня). Затем нарисуйте три линии: от открытия до максимума или минимума, в зависимости от того, что наступит раньше, затем линию от минимума до максимума или от максимума до минимума и, наконец, до закрытия. Затем в каждой из этих трех областей найдите точку, которая наиболее удалена от линии, как мой максимум и минимум, и затем повторите цикл.
Этот код Python обнаруживает локальные экстремумы в диапазоне 5. df должен содержать столбцы OHLC
df['H_5'], df['L_5'] = df['H'].shift(-5), df['L'].shift(-5)
df['MAXH5'] = df['H'].rolling(window=5).max()
df['MINL5'] = df['L'].rolling(window=5).min()
df['MAXH_5'] = df['H_5'].rolling(window=5).max()
df['MINL_5'] = df['L_5'].rolling(window=5).min()
df.eval(" maximum5 = (MAXH5==H) & (MAXH_5==H) ")
df.eval(" minimum5 = (MINL5==L) & (MINL_5==L) ")
df.eval(" is_extremum_range5 = maximum5 | minimum5 ")
, результат находится в столбце is_extremum_range5
= {Верен | Ложь}