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

BTCUSD图表枢轴点斜率超出-90~+90范围的解决方法咨询

问题解决步骤

1. 修复核心索引错误

你的代码存在索引匹配逻辑错误:pivots存储的是dfpl的行索引(比如[100, 200, 300]这类实际数据位置),但你取收盘价时用了循环变量i(如np.array(dfpl["close"])[i]),这会取到第i行的收盘价,而非枢轴点索引对应的收盘价,直接导致斜率计算完全错误,出现异常超大值。

修正后的代码片段:

import numpy as np
import matplotlib.pyplot as plt

if pivots:
    # 修正绘图的x/y轴数据匹配:用枢轴点索引对应的时间和收盘价
    plt.plot(dfpl.index[pivots], dfpl["close"].iloc[pivots], linestyle='-', marker='o', color='r')
    for i in range(len(pivots) - 1):
        indx1 = pivots[i]
        indx2 = pivots[i+1]
        # 取枢轴点索引对应的收盘价
        close1 = dfpl["close"].iloc[indx1]
        close2 = dfpl["close"].iloc[indx2]
        
        # 避免时间差为0导致的除以0错误
        time_diff = indx2 - indx1
        if time_diff == 0:
            continue
        
        # 计算原始斜率并转换为角度(范围-90°到+90°)
        slope = (close2 - close1) / time_diff
        angle = np.arctan(slope) * (180 / np.pi)
        
        plt.annotate(f"Angle: {angle:.2f}°", (dfpl.index[indx2], close2), xytext=(10, 10), textcoords='offset points', color='r')

2. 转换为角度实现预期范围

你要的-90至+90范围是线条倾斜角度,而非原始斜率(价格差/时间差)。原始斜率是角度的正切值(slope = tan(θ)),当角度接近±90°时,斜率会趋近于无穷大。通过np.arctan()将斜率转换为弧度,再乘以180/np.pi转为度数,就能得到你需要的范围。

3. 额外边界处理

  • 加入time_diff == 0的判断,避免两个枢轴点同索引时出现除以0的错误;
  • 绘图时用dfpl的实际索引(比如时间戳)作为x轴,保证图表展示的时间轴与枢轴点对应。

内容的提问来源于stack exchange,提问作者Milad Ebrahimi Dastgerdi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 19:07:29