You need to enable JavaScript to run this app. 如何用Pandas实现DataFrame局部高点前向匹配0.618斐波那契回撤行
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas实现DataFrame局部高点前向匹配0.618斐波那契回撤行

问题解决方案

首先修正原代码的笔误:原代码中argrelextrema函数调用时引用的df1未定义,应改为当前的DataFrame变量df,否则会运行报错。

最简实现思路

不需要写嵌套循环,利用Pandas的自连接或者窗口函数就能快速实现需求,核心逻辑是先提取所有局部高点,再过滤符合时间先后、数值更高、0.618回撤匹配三个条件的配对。

完整可运行代码

方法1:自连接实现(灵活度最高,适合自定义配对规则)

import yfinance as yf
import numpy as np
from scipy.signal import argrelextrema
import pandas as pd

# 基础数据准备&局部高点提取
n = 2
df = yf.Ticker("INFY.NS").history(period='400d', interval='1D')
df['max'] = df.iloc[argrelextrema(df['Close'].values, np.greater_equal, order=n)[0]]['Close']

# 提取所有非空局部高点序列
highs = df[['max']].dropna().reset_index()
highs.columns = ['date', 'high_val']

# 自连接构造所有符合要求的高点对:后续时间 + 数值更高
highs['tmp_key'] = 1
high_pairs = highs.merge(highs, on='tmp_key', suffixes=('_prev', '_curr'))
high_pairs = high_pairs.query("date_curr > date_prev and high_val_curr > high_val_prev")

# 0.618回撤匹配逻辑,可根据你的实际规则调整
# 这里用的是通用斐波那契回撤规则:从后高点回落前高到后高上涨幅度的61.8%,允许1%误差
error_thresh = 0.01
high_pairs['retrace_0618_pos'] = high_pairs['high_val_curr'] - (high_pairs['high_val_curr'] - high_pairs['high_val_prev']) * 0.618

# 如果仅需要高点对的比值接近0.618,用下面的筛选逻辑即可
# matched_pairs = high_pairs[abs(high_pairs['high_val_prev']/high_pairs['high_val_curr'] - 0.618) <= error_thresh]

# 如果需要匹配实际回撤到0.618位置的所有K线,用下面的逻辑
matched_rows = df[df.apply(lambda x: any(abs(x['Close'] - high_pairs['retrace_0618_pos']) <= error_thresh * x['Close']), axis=1)]

方法2:窗口函数实现(代码最简洁)

如果你只需要标记符合条件的局部高点,不需要全量配对结果,用expanding窗口一行就能实现:

# 匹配规则:后续高点 / 当前高点 ≈ 1.618,允许1%误差
df['is_matched'] = df['max'].expanding().apply(
    lambda s: any(abs(s.iloc[-1]/prev - 1.618) <= 0.01 for prev in s.iloc[:-1].dropna())
).astype(bool)

# 直接筛选结果
result = df[df['is_matched']]

优化建议

  • 误差阈值可根据品种波动特性调整,通常波动率高的品种可以设为1%2%,波动率低的设为0.3%0.8%
  • 数据量超过10万行时,可以把配对逻辑改成numpy广播运算,速度比pandas自连接快3~5倍

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 08:45:06