You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按股票Symbol分组计算股价Pivot Point(前后10值局部高点)实现咨询

股价Pivot Point计算实现方案

实现思路

  • 先对原始数据做预处理:将日期转为时间格式,按股票代码+日期升序排序,保证单只股票的时间序列顺序正确
  • 按Symbol分组后,对每只股票的收盘价用中心滚动窗口做判断:窗口大小为21(当前日+前10个交易日+后10个交易日),如果当日收盘价是窗口内最大值,即为符合要求的局部高点
  • 新增要求的两个输出字段:High Points存储符合条件的收盘价,Pivot Point存储布尔标记表示是否为局部高点
  • 最终筛选出标记为True的记录即可得到目标输出

完整可运行代码

import pandas as pd
import numpy as np

# 读取数据,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)].copy()

# 预处理:日期格式转换 + 按股票+日期升序排序,这步是核心前提,否则前后交易日判断完全错误
include_pivot_points['Date'] = pd.to_datetime(include_pivot_points['Date'])
include_pivot_points = include_pivot_points.sort_values(by=['Symbol', 'Date'], ascending=[True, True]).reset_index(drop=True)

n = 10 # 前后各对比10个交易日
# 定义局部高点判断函数
def is_pivot_point(close_series):
    # 中心滚动窗口,大小覆盖当前+前n+后n共2n+1天,要求窗口数据满才判断,避免边界误判
    rolling_max = close_series.rolling(window=2*n+1, center=True, min_periods=2*n+1).max()
    return close_series == rolling_max

# 分组计算标记
include_pivot_points['Pivot Point'] = include_pivot_points.groupby('Symbol')['Close'].apply(is_pivot_point).reset_index(drop=True)
# 生成High Points字段
include_pivot_points['High Points'] = np.where(include_pivot_points['Pivot Point'], include_pivot_points['Close'], np.nan)

# 提取最终结果(仅保留符合条件的记录,如需保留所有行直接用include_pivot_points即可)
final_output = include_pivot_points.loc[include_pivot_points['Pivot Point'], ['Date', 'Symbol', 'Close', 'Volume', 'High Points', 'Pivot Point']]

# 查看结果
print(final_output)

说明

  • 如果你需要允许收盘价等于前后n天的收盘价也算符合条件,把判断条件里的==改为>=即可
  • 边界的前10条和后10条数据因为没有足够的前后对比数据,不会被标记为Pivot Point,符合实际业务逻辑

内容的提问来源于stack exchange,提问作者Merrickk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 10:54:04