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

使用mpl_finance绘制OHLC蜡烛图遇TypeError错误,求解决方案

解决Kraken API蜡烛图绘制的TypeError问题

嘿,我一眼就看出问题所在啦——你遇到的TypeError是因为从Kraken API获取到的OHLC数据全都是字符串类型,而candlestick_ohlc函数需要用数值类型来计算蜡烛的涨跌高度(也就是报错里的close - open这一步),字符串当然没法做减法运算啦!

核心解决方案:转换数据类型

我们需要做两件关键的转换:

  • 把价格列(Open/High/Low/Close)从字符串转成浮点型
  • 把时间戳转成matplotlib能识别的日期格式(内部用浮点数表示)

修改后的完整代码

import requests
import pandas as pd
import matplotlib
import numpy as np
from mpl_finance import candlestick_ohlc
import matplotlib.ticker as mticker
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
import datetime

# Get OHLC data from kraken api [time,open,high,low,close,vwap,volume,count]
ticker='XXBTZEUR'
period='5'
starting='1505677500'
parameters={"pair":ticker,"interval":period,"since":starting}
response=requests.get("https://api.kraken.com/0/public/OHLC", params=parameters)
krakohlc=response.json()['result'][ticker]
ohlc=[]
for i in range(len(krakohlc)):
    ohlcdata=krakohlc[i][0:5]
    ohlc.append(ohlcdata)

#Make data array (time,O,H,L,C)
labels = ['Date', 'Open', 'High', 'Low', 'Close']
ohlc_df=pd.DataFrame.from_records(ohlc, columns=labels)

# ------------------------ 新增的转换代码 ------------------------
# 把价格列转为浮点型,解决字符串减法报错
ohlc_df[['Open', 'High', 'Low', 'Close']] = ohlc_df[['Open', 'High', 'Low', 'Close']].astype(float)
# 把Unix时间戳转为matplotlib兼容的日期格式(浮点数),让x轴正常显示日期
ohlc_df['Date'] = ohlc_df['Date'].apply(lambda x: mdates.date2num(datetime.datetime.fromtimestamp(x)))
# ---------------------------------------------------------------

print(ohlc_df)

#Making plot area
fig = plt.figure()
ax1 = plt.subplot2grid((6,1), (0,0), rowspan=6, colspan=1)

#Making candlestick plot
candlestick_ohlc(ax1,ohlc_df.values,width=1, colorup='g', colordown='k',alpha=0.75)
ax1.xaxis_date()
ax1.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
ax1.xaxis.set_major_locator(mticker.MaxNLocator(10))
ax1.grid(True)
plt.xlabel("Date")
plt.ylabel("Price")
plt.show()

关键修改点说明

  1. 价格类型转换:用astype(float)把字符串格式的价格转为数值,这样candlestick_ohlc就能正常计算蜡烛的涨跌幅度了
  2. 日期格式转换:Kraken返回的是Unix时间戳(整数),我们先用datetime.datetime.fromtimestamp()把它转成Python的datetime对象,再用mdates.date2num()转成matplotlib内部使用的浮点数格式,这样x轴才能正确解析并显示日期

另外顺便提个小优化:你原来的import datetime as datetime有点冗余,改成import datetime就够用啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:44:45