在数据中查找最大值和最小值并将 True/False 附加到相应的行 - Python

Find maxima and minima within data and append True/False to corresponding row - Python

我想在股市数据中找到摆动高点和摆动低点。我希望能够将每个点附加到一列。例如)有一个 isHigh 和 isLow 列与收盘价列对齐。因此,在接下来的每一天,如果价格不是摆动高点或低点,它就会在 isHigh/isLow 列中显示 return False。如果它是高点或低点,它将 return 正确。

我已经能够在股市数据中找到 maxima/minma 或转折点,但它 return 只是转折点的数量或每个点的数量。

我无法参考价格提取实际点数。

我用过 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)```

这个return是一个数字646,是波峰和波谷的总和

感谢任何帮助,谢谢

利用 rollingwindow=len(df)min_periods=1 的优势,让您轻松 window 到当前点。然后检查 value 是否是 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