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

Pandas计算Fibonacci回撤位结果错误,求问题排查与修正

问题分析与修正

你的代码核心错误在于不必要的groupby(["DateTime"])操作,这直接导致计算范围被限制在每个DateTime分组内,而非你需要的从数据集起始到当前行的全局历史序列。

错误原因

当你使用groupby(["DateTime"])后,expanding(1)会在每个DateTime分组内部进行滚动扩展计算:

  • 如果DateTime是唯一时间戳,每个分组仅包含一行数据,此时x.max()和x.min()都是当前行的Close值,计算结果会等于Close(显然不符合你的预期);
  • 如果DateTime是日期(同一天的所有数据共用一个DateTime值),分组内的expanding只会统计当天从起始到当前点的高低点,而非整个数据集的历史高低点,这就会出现你看到的结果偏差。

修正后的代码

去掉groupby操作,直接对整个Close列应用expanding计算,这样就能获取从数据集开头到当前行的全部历史数据的高低点:

def fibonacci(x, v=0.786):
    closemax = x.max()
    closemin = x.min()
    return closemax - ((closemax - closemin) * v)

# 直接对Close列做全局expanding计算
data_2["fibonacci786up"] = data_2["Close"].expanding(1).apply(lambda x: fibonacci(x, 0.786)).values

验证逻辑

修正后,expanding(1)会逐行累积从第一行到当前行的所有Close数据,此时x.max()和x.min()就是你需要的历史高低点,代入你给出的示例数值:

0.98433 - ((0.98433 - 0.96725) * 0.786) = 0.9709051200000001

就能得到符合预期的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:15:30