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

从Bittrex解析JSON数据:现有Python代码相关技术问询

处理Bittrex行情数据的Python代码优化与解析指南

我看了你这段从Bittrex拉取ETH/BTC行情数据的代码,先给你梳理下几个关键的优化点,以及把未完成的数据解析和可视化部分补全——毕竟你提到data['result'][:]['V']的内容没写完,我默认是要处理成交量、OHLC(开盘/最高/最低/收盘)这些核心行情数据:

一、先解决过时库的兼容性问题

你的代码里用了几个Python2时代的库,现在Python3环境下已经不推荐甚至无法直接运行,先替换成现代替代方案:

  • urllib2 → 改用requests(更简洁的HTTP请求库)
  • matplotlib.finance → 改用mplfinance(专门用于金融数据可视化的现代库,原matplotlib.finance已被官方废弃)

二、完整的数据解析与处理

Bittrex的v2 API返回的data['result']是一个字典列表,每个字典包含以下核心字段:

  • T:ISO 8601格式的时间字符串(比如"2024-05-20T12:30:00")
  • O:开盘价
  • H:最高价
  • L:最低价
  • C:收盘价
  • V:成交量(你提到的字段)
  • BV:基准货币成交量(这里是BTC的成交量)

下面是补全后的代码,包含数据拉取、解析、可视化的完整流程:

import requests
import json
import mplfinance as mpf
import pandas as pd

# 拉取Bittrex的30分钟ETH/BTC行情数据
url = 'https://bittrex.com/Api/v2.0/pub/market/GetTicks?marketName=BTC-ETH&tickInterval=thirtyMin'
response = requests.get(url)
data = json.loads(response.text)

# 将行情数据转换为DataFrame,方便后续处理
df = pd.DataFrame(data['result'])
# 把时间字符串转换为datetime类型,并设置为索引
df['T'] = pd.to_datetime(df['T'])
df.set_index('T', inplace=True)
# 重命名列名,适配mplfinance的要求
df.rename(columns={'O': 'Open', 'H': 'High', 'L': 'Low', 'C': 'Close', 'V': 'Volume'}, inplace=True)

# 绘制蜡烛图,同时显示成交量
mpf.plot(df, type='candle', volume=True, title='BTC-ETH 30min Candlestick Chart', ylabel='Price (BTC)', ylabel_lower='Volume')

三、如果你坚持用原生matplotlib绘制(不推荐)

如果不想改用mplfinance,也可以修复原代码的问题来绘制蜡烛图,这里需要手动处理时间轴刻度:

import requests
import json
import matplotlib.pyplot as plt
from matplotlib.finance import candlestick2_ohlc
import matplotlib.ticker as ticker
import datetime as dt
import numpy as np

url = 'https://bittrex.com/Api/v2.0/pub/market/GetTicks?marketName=BTC-ETH&tickInterval=thirtyMin'
response = requests.get(url)
data = json.loads(response.text)

# 提取OHLC、成交量和时间数据
opens = [item['O'] for item in data['result']]
highs = [item['H'] for item in data['result']]
lows = [item['L'] for item in data['result']]
closes = [item['C'] for item in data['result']]
volumes = [item['V'] for item in data['result']]
times = [dt.datetime.fromisoformat(item['T']) for item in data['result']]

# 创建画布和子图
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 8), sharex=True)

# 绘制蜡烛图
candlestick2_ohlc(ax1, opens, highs, lows, closes, width=0.6, colorup='green', colordown='red')
ax1.set_title('BTC-ETH 30min Candlestick Chart')
ax1.set_ylabel('Price (BTC)')

# 绘制成交量柱状图
ax2.bar(range(len(times)), volumes, width=0.6, color=['green' if opens[i] < closes[i] else 'red' for i in range(len(times))])
ax2.set_ylabel('Volume')

# 格式化时间轴刻度
ax2.xaxis.set_major_locator(ticker.MaxNLocator(10))
def format_date(x, pos=None):
    if x < 0 or x >= len(times):
        return ''
    return times[int(x)].strftime('%Y-%m-%d %H:%M')
ax2.xaxis.set_major_formatter(ticker.FuncFormatter(format_date))
plt.xticks(rotation=45)

plt.tight_layout()
plt.show()

四、额外的小提示

  • 如果你需要把数据保存到CSV文件,可以直接用DataFrame的to_csv方法:df.to_csv('btc_eth_thirtymin.csv')
  • Bittrex的API有请求频率限制,不要频繁调用,避免被封禁IP
  • 时间间隔参数tickInterval支持的值有:oneMin, fiveMin, thirtyMin, hour, day

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:06:07