You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Pandas追踪时间序列中的连续高点?

使用Pandas追踪时间序列中的连续高点(以MSFT收盘价为例)

嘿,这个需求在量化分析或者价格趋势追踪里太常见了!我来一步步带你实现,还会用微软(MSFT)的收盘价做实操演示,跟着代码走就行~

第一步:获取股票收盘价数据

首先咱们用你提到的yahooquery工具拉取MSFT的历史数据,不过要注意返回的是多层索引,得先整理一下:

from yahooquery import Ticker
import pandas as pd

# 初始化Ticker并获取历史数据
ticker = Ticker('MSFT', asynchronous=True)
df = ticker.history()

# 重置多层索引,方便后续处理
df = df.reset_index()
# 确保日期列是datetime格式
df['date'] = pd.to_datetime(df['date'])
# 只保留需要的日期和收盘价列(可选)
df = df[['date', 'close']].sort_values('date').reset_index(drop=True)

第二步:追踪连续上涨的高点区间

这里分两种常见场景,你可以根据自己的需求选:

场景1:识别连续N天上涨的区间(每日收盘价高于前一天)

这种是追踪“连续走高”的趋势,我们可以标记每日是否上涨,再把连续上涨的时段分组统计:

# 1. 标记当日收盘价是否高于前一日
df['is_higher'] = df['close'] > df['close'].shift(1)

# 2. 给连续上涨的时段分配唯一分组ID
# 当is_higher的值发生变化时,分组ID+1
df['rally_group'] = (df['is_higher'] != df['is_higher'].shift(1)).cumsum()

# 3. 统计每个连续上涨区间的关键信息
rally_summary = df[df['is_higher']].groupby('rally_group').agg(
    起始日期=('date', 'first'),
    结束日期=('date', 'last'),
    连续上涨天数=('date', 'count'),
    区间最高收盘价=('close', 'max')
).reset_index(drop=True)

print(rally_summary.head())

这段代码会输出所有连续上涨的时段,比如哪几天连续涨了、涨了几天、区间内的最高点是多少,非常直观。

场景2:追踪历史新高点(收盘价高于之前所有交易日)

如果你的需求是找“创历史新高”的点,那逻辑更简单,用滚动最大值就能实现:

# 计算从上市以来到当日的收盘价最大值
df['rolling_max'] = df['close'].cummax()

# 标记当日是否创历史新高
df['is_all_time_high'] = df['close'] == df['rolling_max']

# 筛选出所有历史新高点
all_time_highs = df[df['is_all_time_high']][['date', 'close']]

print(all_time_highs.tail())

这样你就能得到所有MSFT收盘价创历史新高的日期和价格啦。

小提示

  • 如果你的时间序列有缺失值,记得先用df.dropna()或者df.fillna()处理,避免比较时出错;
  • 可以把这些逻辑封装成函数,方便复用在其他股票或者时间序列数据上。

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

火山引擎 最新活动