Найдите максимумы и минимумы в данных и добавьте True/False к соответствующей строке – Python

Я хочу найти максимумы и минимумы колебаний в данных фондового рынка. Я хочу иметь возможность добавлять каждую точку в столбец. Пример.) Создайте столбец для значений isHigh и isLow, который совпадает со столбцом цены закрытия. Таким образом, каждый день, если цена не является максимумом или минимумом колебания, она будет возвращать False в столбце isHigh/isLow. Если это колебания максимума или минимума, он вернет True.

Мне удалось найти максимумы/минимумы или точки разворота в данных фондового рынка, но все, что они возвращают, — это количество точек разворота или количество каждой точки.

У меня возникли проблемы с извлечением фактических баллов по отношению к цене.

Я использовал numpy и scipy argrelextrema.

```  
import matplotlib
from scipy import signal
import numpy as np
import matplotlib.pyplot as plt
 
#Generate random data.
data_x = df['close']
data_y = df['close']
 
#Find peaks(max).
peak_indexes = signal.argrelextrema(data_y.to_numpy(), np.greater)
peak_indexes = peak_indexes[0]
 
#Find valleys(min).
valley_indexes = signal.argrelextrema(data_y.to_numpy(), np.less)
valley_indexes = valley_indexes[0]

**peak_indexes and valley_indexes only returns a numbered list of the points in numerical order.**
---

и я пробовал.

close = df['Adj Close']

def turningpoints(close):
    dx = np.diff(close)
    return np.sum(dx[1:] * dx[:-1] < 0)```

Это возвращает число 646, которое представляет собой общее количество пиков и спадов.

Любая помощь приветствуется, спасибо


person ChrisLaha    schedule 25.01.2021    source источник
comment
Добро пожаловать в Переполнение стека. Чтобы мы могли вам помочь, необходимо, чтобы вы предоставили минимальный воспроизводимый набор задач, состоящий из примера входных данных, ожидаемых выходных данных, фактических выходных данных и всего соответствующего кода, необходимого для воспроизведения примера. То, что вы предоставили, не соответствует этой цели. Пожалуйста, отредактируйте свой вопрос, чтобы показать минимальный воспроизводимый набор. См. Пример с минимальной воспроизводимостью, чтобы узнать, как лучше всего помочь нам помочь вам.   -  person itprorh66    schedule 26.01.2021
comment
Спасибо за понимание @itprorh66, я сделаю это в следующий раз. Я смог выяснить свой вопрос, так что не нужно. обновить сейчас. Спасибо еще раз.   -  person ChrisLaha    schedule 26.01.2021


Ответы (1)


Воспользуйтесь тем фактом, что rolling с window=len(df) и min_periods=1 дает вам легкое окно до текущей точки. Затем просто проверьте, является ли значение min() или max() до этого момента.

df["isHigh"] = ( df["close"].rolling(len(df),1).max() == df["close"] )
df["isLow"]  = ( df["close"].rolling(len(df),1).min() == df["close"] )

Пример:

   close  isHigh  isLow
0      0    True   True
1     11    True  False
2      2   False  False
3     22    True  False
4    -55   False   True
5     44    True  False
6     43   False  False
7     44    True  False
person noah    schedule 25.01.2021
comment
Спасибо @Ноа. Мне удалось выяснить, что я искал, но это определенно полезно и новый инструмент, который можно добавить к моему поясу. Очень признателен. - person ChrisLaha; 26.01.2021