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

使用pandas_ta计算BTC/USDT的EMA50全为None,数据量足够却异常

问题:计算BTC/USDT的EMA50列全为None值的原因及解决办法

我使用以下代码调用Binance API,获取BTC/USDT的最近200条1d K线数据,并尝试在DataFrame中生成EMA50列:

client = Client('PUBLIC_KEY', 'PRIVATE_KEY')
client.API_URL = 'https://testnet.binance.vision/api'
#obtain historical data for indicator calculation
klines = client.get_historical_klines('BTCUSDT', '1d', limit=200)
klines = np.array(klines)
#convert bars to df
df = pd.DataFrame(klines.reshape(-1,12),dtype=float, columns = ('Open Time',
                                                                'Open',
                                                                'High',
                                                                'Low',
                                                                'Close',
                                                                'Volume',
                                                                'Close time',
                                                                'Quote asset volume',
                                                                'Number of trades',
                                                                'Taker buy base asset volume',
                                                                'Taker buy quote asset volume',
                                                                'Ignore'))

df['Open Time'] = pd.to_datetime(df['Open Time'], unit='ms')
#run indicators
df['ema50'] =  ta.ema(df['Close'], length=50)

尽管拥有足够计算EMA的数据量,但生成的DataFrame列中全为None值,请问我哪里操作出错了?

解决办法

  • 检查ta库的参数匹配问题:不同技术分析库的EMA函数参数名不同。如果使用的是ta包(technical-analysis-library),它的EMA函数参数是window而非length,修改代码为:

    df['ema50'] = ta.ema(df['Close'], window=50)
    

    若使用的是pandas-ta库,正确调用方式为df.ta.ema(length=50),或者ta.ema(df['Close'], length=50),需确保库版本和调用方式匹配。

  • 验证Close列的数据有效性:执行print(df['Close'].isnull().sum())检查是否存在空值,若有缺失值,先通过df['Close'].fillna(method='ffill')等方式填充后再计算EMA。

  • 确认数据类型正确性:虽然代码中已指定dtype=float,仍可通过print(df['Close'].dtype)验证Close列是否为数值类型,非数值类型会导致EMA计算失败返回空值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 23:42:54