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

Phemex加密货币Ichimoku指标计算出现NaN值问题求助

解决Ichimoku云指标计算中Senkou云及Chikou Span显示NaN的问题

问题根源

你的代码里有两个关键错误,直接导致了Senkou云和Chikou Span全为NaN:

  • 滚动低点计算错误:所有low10/low30/low60都误用了ohlcv.high列取最小值,完全不符合Ichimoku指标的计算逻辑,应该用ohlcv.low列计算滚动低点。
  • 数据量不足:设置的limit=50太小,Senkou B需要60周期的滚动极值,加上Senkou系列要向后偏移26行、Chikou要向前偏移26行,50行数据根本不够,移位后直接超出数据范围产生NaN。

修正后的代码

import pandas as pd
import ccxt
import nocompartir 
import onecall

# 连接Phemex交易所
phe = ccxt.phemex({
    'enableRatelimit': True,
    'apiKey': nocompartir.xP_key,
    'secret': nocompartir.secret,
})

# 获取OHLCV数据,增加数据量到100行(满足60周期滚动+移位需求)
timeframe = '4h'
limit = 100  # 至少需要60+26=86行,设100留冗余
symbol ='uBTCUSD'

ohlcv = pd.DataFrame(
    phe.fetch_ohlcv(symbol=symbol, timeframe=timeframe, limit=limit),
    columns=['time', 'open', 'high', 'low', 'close', 'volume']
)

# 修正:用high列算滚动高点,low列算滚动低点
high10 = ohlcv.high.rolling(10).max()
high30 = ohlcv.high.rolling(30).max()
high60 = ohlcv.high.rolling(60).max()
low10 = ohlcv.low.rolling(10).min()
low30 = ohlcv.low.rolling(30).min()
low60 = ohlcv.low.rolling(60).min()

# 计算Ichimoku全指标
ohlcv['tenkan_sen'] = (high10 + low10) / 2
ohlcv['kijun_sen'] = (high30 + low30) / 2
ohlcv['senkou_A'] = ((ohlcv.tenkan_sen + ohlcv.kijun_sen) / 2).shift(26)
ohlcv['senkou_B'] = ((high60 + low60) / 2).shift(26)
ohlcv['chikou'] = ohlcv.close.shift(-26)

# 过滤掉前60行(因为60周期滚动指标需要60个数据点才会有有效值)
ohlcv = ohlcv.iloc[60:]

print(ohlcv)

关键修改说明

  1. 修复滚动列错误:把所有计算低点的代码从ohlcv.high.rolling().min()改成ohlcv.low.rolling().min(),这是确保指标逻辑正确的核心。
  2. 扩容数据量:将limit提升到100,保证有足够数据支撑60周期滚动和两次移位操作,避免因数据不足产生NaN。
  3. 调整过滤起始行:从第60行开始取数据,因为60周期的滚动指标(high60/low60)需要前60个数据点才能生成第一个有效值,这样输出的所有指标列都会有正常数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:20:36