按代码分组后查找股票价格的枢轴点。枢轴点前后 10 个值都很高

Finding Pivot Points for stock price, after grouping by symbol. Pivot Point is high for 10 values before and after point

     Date   Symbol  Close   Volume
1259    2021-10-29  AA  45.950  6350815.000
1260    2021-10-28  AA  46.450  10265029.000
1261    2021-10-27  AA  45.790  12864700.000
1262    2021-10-26  AA  49.442  6153100.000
1263    2021-10-25  AA  51.058  11070100.000
1264    2021-10-22  AA  49.143  7453300.000
1265    2021-10-21  AA  49.881  9066900.000
1266    2021-10-20  AA  52.396  7330400.000
1267    2021-10-19  AA  53.563  10860800.000
1268    2021-10-18  AA  57.115  9883800.000

也在寻找类似的结果...

    Date    Symbol  Close   Volume  High Points Pivot Point
1379    2021-05-11  AA  41.230  9042100.000 41.230  True
1568    2020-08-10  AA  15.536  8087800.000 15.536  True
1760    2019-11-04  AA  22.860  3741000.000 22.860  True
1934    2019-02-27  AA  30.912  2880100.000 30.912  True
2149    2018-04-19  AA  60.099  11779200.00 60.099  True
2213    2018-01-17  AA  56.866  8189700.000 56.866  True
2445    2017-02-14  AA  38.476  3818600.000 38.476  True
5406    2021-06-02  AAL 25.820  58094598.00 25.820  True
5461    2021-03-15  AAL 25.170  93746800.00 25.170  True
5654    2020-06-08  AAL 20.310  175418900.0 20.310  True
5734    2020-02-12  AAL 30.470  9315400.000 30.470  True
5807    2019-10-28  AAL 31.144  10298500.00 31.144  True
5874    2019-07-24  AAL 34.231  7315300.000 34.231  True
6083    2018-09-21  AAL 42.788  10743100.00 42.788  True
6257    2018-01-12  AAL 56.989  7505800.000 56.989  True
6322    2017-10-10  AAL 51.574  9387100.000 51.574  True
6383    2017-07-14  AAL 52.624  4537900.000 52.624  True
   

我是编程新手,一直在这方面苦苦挣扎。我正在尝试找到局部最大值点,该点必须高于前后 10 个收盘价。数据框上有大约 320 只股票,需要按代码分组。我已经尝试了几种不同的方法来解决这个问题,但一直无法找到可行的方法。任何见解将不胜感激。

#读入数据,vol_list 是一个现有的屏幕,用于减少不符合数量标准的库存数量

df_prices = pd.read_csv('/Users/kylemerrick/Desktop/Stock Screener/price_data.csv')
include_pivot_points = df_prices[df_prices['Symbol'].isin(vol_list)]
n=10
pivot_points = include_pivot_points.groupby('Symbol')['Close'].apply(lambda x : iloc[argrelextrema(x.values, np.greater_equal, axis=1, order=n)

我也曾尝试编写自己的函数来执行此操作,但无法弄清楚如何将当前值与前后的 10 个值进行比较

include_pivot_points.groupby('Symbol').iloc['Close'] + 10:['Close'] -10]

我最终能够用下面的代码解决,并且想分享,因为我没有收到回复。对于枢轴点或 (support/resistance 点) 存在许多其他解决方案,将每个价格点附加到列表或仅针对一个符号。我本来想保留包含多个符号的数据框。

先用apply,21再shift,这样两边都是偶数

include_pivot_points['High Points'] = include_pivot_points.groupby('Symbol').rolling(21)['Close'].max().shift(-11).reset_index(level = 'Symbol', drop = True)

如果最高点等于当前收盘价,那么我就知道这是枢轴点并为枢轴点添加了 true 或 false 列

include_pivot_points['Pivot Point'] = include_pivot_points['High Points'] == include_pivot_points['Close']

然后删除错误值以获得所有股票的所有过去枢轴点

pivot_points = include_pivot_points[include_pivot_points['Pivot Point'] == True]