如何用Python从币安抓取多交易对K线数据并提取OHLCV对接TA-Lib
多交易对Binance K线批量抓取及TA-Lib对接解决方案
问题根源
原代码直接将Binance接口返回的整条K线列表作为值存入DataFrame单列,每个单元格存储完整的OHLCV及附属信息数组,无法直接提取单个字段做计算。
修正后可运行代码
import pandas as pd import numpy as np import talib as ta from binance.client import Client # 初始化Binance客户端,需填入自己的API密钥 api_key = '你的API_KEY' api_secret = '你的API_SECRET' client = Client(api_key, api_secret) # 要抓取的交易对列表 symbols = ['XRPBTC','NEOBTC'] time_interval = Client.KLINE_INTERVAL_15MINUTE start_time = "1 Jul, 2021" # 存储全量数据的列表 all_kline_data = [] # K线接口返回字段对应名称 kline_columns = [ 'open_time', 'open', 'high', 'low', 'close', 'volume', 'close_time', 'quote_asset_volume', 'trade_count', 'taker_buy_base_volume', 'taker_buy_quote_volume', 'ignore' ] for symbol in symbols: # 拉取单交易对K线 klines = client.get_historical_klines(symbol, time_interval, start_time) # 转DataFrame并指定列名 df = pd.DataFrame(klines, columns=kline_columns) # 新增交易对标识列 df['symbol'] = symbol # 数值类字段转换为浮点/整数类型 numeric_cols = ['open', 'high', 'low', 'close', 'volume', 'quote_asset_volume', 'taker_buy_base_volume', 'taker_buy_quote_volume'] df[numeric_cols] = df[numeric_cols].astype(float) df[['open_time', 'close_time', 'trade_count']] = df[['open_time', 'close_time', 'trade_count']].astype(int) # 加入总数据列表 all_kline_data.append(df) # 合并所有交易对数据 total_df = pd.concat(all_kline_data, ignore_index=True) # 写入CSV total_df.to_csv("multi_symbol_15m_kline.csv", index=False)
关键逻辑说明
- 无需手动拆分列表,pandas可直接将接口返回的二维K线列表转换为结构化DataFrame,自动拆分每一列对应OHLCV等字段
- 新增
symbol字段标识不同交易对,后续可通过该字段筛选任意交易对的数据 - 数值类型转换是必要操作,Binance接口返回的价格、成交量字段均为字符串格式,无法直接用于TA-Lib计算
对接TA-Lib计算示例
以下代码可批量计算所有交易对的常用技术指标:
# 按交易对分组计算指标 def calculate_ta_indicators(group_df): # 计算5周期、10周期均线 group_df['ma5'] = ta.MA(group_df['close'], timeperiod=5) group_df['ma10'] = ta.MA(group_df['close'], timeperiod=10) # 计算14周期RSI group_df['rsi14'] = ta.RSI(group_df['close'], timeperiod=14) # 计算MACD group_df['macd'], group_df['macdsignal'], group_df['macdhist'] = ta.MACD(group_df['close']) return group_df # 对每个交易对分别计算指标 result_df = total_df.groupby('symbol', group_keys=False).apply(calculate_ta_indicators) # 包含指标的结果写入CSV result_df.to_csv("kline_with_ta_indicators.csv", index=False)
如果需要单独提取某交易对的指标,直接筛选即可:
xrp_btc_data = result_df[result_df['symbol'] == 'XRPBTC']
内容的提问来源于stack exchange,提问作者Akash Chugh
相关产品推荐
相关产品推荐

