Okx_candle:高效管理OKX历史K线与实时行情数据

·

概述

Okx_candle 是一款专为量化交易者设计的Python工具库,旨在提供便捷的OKX交易所历史K线数据管理与实时行情获取功能。它支持现货交易(SPOT)、永续合约(SWAP)、交割合约(FUTURES)和期权(OPTION)等多种产品类型,满足本地模拟交易与实盘决策的数据需求。

通过简洁的API接口,用户可以轻松下载、缓存和读取历史K线数据,并获取实时行情信息。其设计与Binance_candle高度相似,大幅降低多平台量化交易者的学习成本。

核心功能

历史K线数据管理

Okx_candle 为本地模拟交易提供全面的历史数据支持:

实时行情数据服务

为实盘交易决策提供实时数据支持:

安装与快速开始

安装方法

通过pip即可快速安装:

pip3 install okx_candle

基本使用示例

以下示例展示如何维护永续合约的实时历史K线数据:

from okx_candle import CandleServer
from pprint import pprint

# 初始化永续合约服务
candleServer = CandleServer('SWAP')
# 启动实时K线维护
candleServer.run_candle_map()
# 查看实时K线数据
pprint(candleServer.candle_map)

数据格式说明

K线数据结构

Okx_candle 使用NumPy数组存储K线数据,确保运算效率。每行K线包含9个字段:

列索引参数名字段解释数据类型
0ts开盘时间戳(毫秒)np.float64
1o开盘价格np.float64
2h最高价格np.float64
3l最低价格np.float64
4c收盘价格np.float64
5vol交易量(以张为单位)np.float64
6volCcy交易量(以币为单位)np.float64
7volCcyQuote交易量(以计价货币为单位)np.float64
8confirmK线状态(0未完结,1已完结)np.float64

存储规则

历史K线数据按日期分片存储,每个CSV文件保存指定日期指定产品的全部K线数据:

产品类型支持

Okx_candle 支持以下产品类型:

产品类别代号
现货交易SPOT
永续合约SWAP
交割合约FUTURES
期权OPTION

注:目前不支持现货杠杆(Margin)产品。

服务规则配置

CandleRule 类允许用户自定义服务运行规则,以适应不同的交易场景:

from okx_candle import CandleServer, CandleRule

# 自定义规则:调整K线时间粒度为5分钟
CandleRule.BAR = '5m'
candleServer = CandleServer('SPOT', CandleRule)

关键配置参数

👉 获取实时K线工具

实时K线维护

run_candle_map 方法

该方法以阻塞模式等待第一次candle_map更新完毕,随后以异步多线程方式实时更新数据:

from okx_candle import CandleServer
import time

candleServer = CandleServer('SWAP')
candleServer.run_candle_map()

while True:
    for symbol in candleServer.candle_map.keys():
        print(symbol, candleServer.get_candle_security(symbol, security_seconds=60))
    time.sleep(1)

数据安全获取

get_candle_security 方法验证K线数据的时效性,确保数据安全可靠:

# 安全获取实时K线数据,设置安全间隔为60秒
secure_data = candleServer.get_candle_security('BTC-USDT-SWAP', security_seconds=60)

历史数据下载

按日期下载

download_candles_by_date 方法支持下载指定日期范围的历史数据:

from okx_candle import CandleServer, CandleRule

# 配置下载规则
CandleRule.BAR = '1m'
CandleRule.SYMBOLS = ['BTC-USDT', 'ETC-USDT']
CandleRule.TIMEZONE = 'Asia/Shanghai'

candleServer = CandleServer('SPOT', CandleRule)
# 下载2023年1月1日至10日的数据
candleServer.download_candles_by_date(
    start='2023-01-01',
    end='2023-01-10'
)

每日定时下载

download_daily 方法提供每日自动下载昨日数据的服务:

from okx_candle import CandleServer

candleServer = CandleServer('SPOT')
# 启动每日下载服务
candleServer.download_daily()

行情数据获取

行情信息查询

Okx_candle 提供多种行情信息获取方式:

from okx_candle import Market
from pprint import pprint

# 获取全部产品的行情列表
tickers = Market('SPOT').get_tickers()
pprint(tickers)

# 获取全部产品的行情字典
tickersMap = Market('SPOT').get_tickersMap()
pprint(tickersMap)

# 获取单个产品的行情信息
ticker = Market('SPOT').get_ticker('BTC-USDT')
pprint(ticker)

深度信息查询

获取订单簿深度信息:

# 获取指定数量的交易深度
books = Market('SPOT').get_books(symbol='BTC-USDT', sz=10)
pprint(books)

# 获取产品轻量深度
books_lite = Market('SPOT').get_books_lite(symbol='BTC-USDT')
pprint(books_lite)

高级数据管理

OkxLite 数据管理

OkxLite 基于candlelite的IO底层,提供更灵活的历史数据管理功能:

from okx_candle import OkxLite

okxLite = OkxLite()
# 读取指定日期范围的数据
candle = okxLite.load_candle_by_date(
    instType='SPOT',
    symbol='BTC-USDT',
    start='2023-02-05',
    end='2023-02-06'
)
print(candle)

多产品数据读取

load_candle_map_by_date 方法支持读取多个产品的历史数据:

from okx_candle import OkxLite

okxLite = OkxLite()
# 读取永续合约多产品数据
candle_map = okxLite.load_candle_map_by_date(
    instType='SWAP',
    symbols=[],
    start='2023-02-05',
    end='2023-02-06'
)

👉 探索更多数据管理策略

常见问题

安装与基础使用

Q1:Okx_candle 支持哪些Python版本?
A:Okx_candle 支持Python 3.6及以上版本,建议使用最新版本以获得最佳性能和稳定性。

Q2:是否需要OKX账户秘钥才能使用?
A:获取行情数据不需要秘钥,但某些高级功能可能需要配置API秘钥。

Q3:如何处理数据下载失败的情况?
A:首先检查网络连接,然后确认产品符号是否正确。如果问题持续,可以调整重试机制或联系技术支持。

数据管理与存储

Q4:历史数据存储在什么位置?
A:数据默认存储在CANDLELITE_DATA目录下,可按日期和产品类型组织。用户可以通过配置自定义存储路径。

Q5:如何共享多个项目的历史数据?
A:将CANDLE_BASE_DIR配置为绝对路径(如'/root/CANDLELITE_DATA'),这样不同项目可以访问同一数据源。

Q6:数据验证失败怎么办?
A:检查本地数据完整性,必要时重新下载。确保时间粒度和时区设置与数据采集时一致。

性能与优化

Q7:如何处理大量产品的数据维护?
A:通过SYMBOLS过滤机制只维护需要的产品,调整UPDATE_INTERVAL_SECONDS平衡实时性与资源消耗。

Q8:如何优化数据读取速度?
A:使用load_candle_map_by_date的多进程加速功能,适当设置p_num参数提高读取效率。

Q9:实时K线维护占用资源过多怎么办?
A:减少维护的产品数量,调整LENGTH参数降低内存使用,或增加UPDATE_INTERVAL_SECONDS减少更新频率。