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

如何用Python的yfinance获取股票局部高低点并写入DataFrame

实现方法

1. 拉取股票历史数据

先用yfinance获取目标股票的日线数据,示例代码如下:

import yfinance as yf
import pandas as pd
from scipy.signal import find_peaks

# 拉取AAPL的日线数据,时间范围可自行调整
ticker = "AAPL"
df = yf.download(ticker, start="2023-01-01", end="2024-01-01")

2. 计算局部高低点

Yahoo Finance图表里的红绿点是经过过滤的局部极值点,我们可以用scipy.signal.find_peaks实现类似逻辑,通过参数控制极值的筛选条件:

  • 局部最高点:直接对收盘价列找峰值,标记为1
  • 局部最低点:把收盘价取反后找峰值,对应原位置就是低点,标记为0

示例代码:

# 设置筛选参数:distance控制相邻极值点的最小交易日间隔,height控制波动幅度阈值
min_distance = 10  # 至少间隔10个交易日,避免密集标记
min_height_ratio = 0.02  # 波动幅度至少为当前收盘价的2%,过滤小噪声

# 计算局部最高点(标记为1)
peak_indices, _ = find_peaks(df['Close'], 
                             distance=min_distance, 
                             height=df['Close'] * min_height_ratio)
# 计算局部最低点(标记为0):取反收盘价后找峰值
valley_indices, _ = find_peaks(-df['Close'], 
                               distance=min_distance, 
                               height=-df['Close'] * min_height_ratio)

# 初始化标记列,默认无标记(NaN)
df['Signal'] = pd.NA
# 给局部高点赋值1
df.loc[df.index[peak_indices], 'Signal'] = 1
# 给局部低点赋值0
df.loc[df.index[valley_indices], 'Signal'] = 0

3. 验证与调整

你可以筛选出带标记的行查看结果,或者可视化验证:

import matplotlib.pyplot as plt

plt.figure(figsize=(12,6))
plt.plot(df['Close'], label='Close Price')
# 标记局部高点(红色上箭头)
plt.scatter(df.index[peak_indices], df['Close'].iloc[peak_indices], 
            color='red', marker='^', s=100, label='Local High (1)')
# 标记局部低点(绿色下箭头)
plt.scatter(df.index[valley_indices], df['Close'].iloc[valley_indices], 
            color='green', marker='v', s=100, label='Local Low (0)')
plt.legend()
plt.show()

参数调整说明

  • distance:标记太密集就调大,太稀疏就调小
  • height:可以改成固定金额(比如2美元),替代百分比,适配不同价格区间的股票
  • 还可以加prominence参数,控制极值点的突出程度,进一步过滤无关噪声

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 21:22:44