当下数字货币交易变得越来越火爆。在此情况下,CCXT 接口的出现给量化交易者带来了很大便利。然而,在使用它的诸多功能时,有一些要点是需要加以留意的。
CCXT库的导入
首先需将 CCXT 库导入。安装完毕后,通过“import ccxt”这一语句来尝试进行导入操作。若运行此语句未出现报错,就意味着 CCXT 库已成功导入到编程环境中。这一步是使用 CCXT 接口的起始步骤,恰似在驶向大海前启动船只引擎。在不同操作系统和编程环境中,导入该库大致遵循相同步骤,比如在多数主流 Python 开发环境下都是按此方式操作。接着便可进行后续操作。
导入这个库后,就能够开始对它的众多功能展开探索。此过程不需要进行额外的繁杂配置,只要确保安装正确就可以了。
# 加载ccxt模块
import ccxt
print(ccxt.exchanges)
# market API
exchange = ccxt.binance()
markets = exchange.load_markets()
print(exchange.fetch_markets())
print(exchange.fetchCurrencies())
查看支持的交易所
成功导入 CCXT 后,我们可以打印出它所支持的所有交易所。CCXT 支持的交易所数量众多,这极大地满足了量化交易员的日常开发需求。通过打印这一结果,能直观地看到它可以对接的交易平台范围。例如在一些测试环境中,交易者可以根据自己的偏好选择合适的交易所。这一环节有助于量化交易者规划后续的交易策略,也能明确不同交易所资源的可利用性。
交易者看到众多可被 CCXT 支持的交易所后,便能更具针对性地获取相关数据。许多交易者在进行多种交易所的交易时,无需再去寻觅大量不同的 API 接口,因为 CCXT 基本将这些都包含在内了。
币安交易所的币对情况
以币安交易所为例,从 markets 变量的总数可以得知,其目前的货币对数量为 2098 个。CCXT 能够以 dict 的数据格式将这些币对的详细交易信息反馈给我们。这种数据格式便于我们在编写交易策略时调用和分析数据。在像币安这样高流量的交易所中,如此多币对的数据量是很大的。
# quote API
# 设置间隔2秒
delay = 0.5
# 对币安所有交易的数字货币对循环
for symbol in exchange.markets:
# 打印当前数字货币对
print(symbol)
# 获取该数字货币对当前的订单簿,并打印
print(exchange.fetch_order_book(symbol, 10))
time.sleep(delay)
print(exchange.fetch_trades(symbol, limit=5))
time.sleep(delay)
print(exchange.fetch_ticker(symbol))
time.sleep(delay)
print(exchange.fetch_ohlcv(symbol, '1d'))
time.sleep(delay)
对于量化交易者来说,准确掌握这些币对数据是重要的。比如在实施多币对套利策略时,必须对不同币对的行情数据进行精确的获取与分析。通过 CCXT 所提供的这种数据反馈方式,能够把获取数据的难度降低。
调用现货行情API
初始化 CCXT 之后,便具备调用其现货行情 API 来获取各类行情数据的能力。CCXT 对从订单簿、ticker 到成交、K 线等几乎所有策略会用到的行情数据都进行了封装,并且能够用标准方法一键调用。通过一个循环,就可以对所有币种的行情数据进行调用查询。例如,在构建趋势跟踪策略时,可能就需要这些数据。
获取行情数据的时候,这种封装方式很便捷,能够为交易者节省大量时间。无需再针对每个数据源去编写繁杂的调用函数,从而使策略编写的效率获得了极大提升。
调用交易API的注意事项
使用交易 API 之前有一点需要注意。行情 API 属于公有 API,而交易 API 则是私有 API。只有通过调用 CCXT 的方法,并将 key 传入之前创建的交易所变量,才能够具备调用私有 API 的权限。这就好像打开一个加密的宝箱,必须要有对应的钥匙才行。在进行报单和撤单操作时,如果操作成功,就会返回报单或撤单的 order_id;如果操作出现错误,就会返回错误代码以及错误原因。
api_key = "" # 币安的api key
secret_key = "" # 币安的secret key
exchange.apiKey = api_key
exchange.secret = secret_key
这一权限授予过程对交易安全很重要。交易者需严格按要求操作,避免因权限问题导致交易失误。在实际交易场景中,只有严格遵循流程,才能保证交易顺利开展。
# trade API
# 资产查询
exchange.fetch_balance()
# 订单查询(依次是所有、未完成、已完成订单)
exchange.fetchOrders(symbol)
exchange.fetchOpenOrders(symbol)
exchange.fetchClosedOrders(symbol)
# 成交查询
exchange.fetchMyTrades(symbol)
# 报单(依次是市价、限价、买报单、卖报单)
exchange.create_order(symbol, 'market', 'buy', amount)
exchange.createLimitBuyOrder(symbol, amount, orderprice)
exchange.createLimitSellOrder(symbol, amount, orderprice)
exchange.createMarketBuyOrder(symbol, amount)
exchange.createMarketSellOrder(symbol, amount)
# 撤单
exchange.cancel_order(order_id)
构建交易示例
初始化 CCXT 后,调用行情 API 以及交易 API,这样就能完成一个较为简单的实例。此实例从初始化交易所并加载 Key 开始,接着获取最新行情,之后依据行情价格进行下单。CCXT 交易现货很便捷,若刚才的代码从币安转换到它所支持的其他现货交易所,只需更改“exchange = ccxt.binance()”中“ccxt.”后面的交易所名称,其余代码不用改变,就能实现不同交易所之间交易的无缝切换。
对于初级量化交易者来说,这个小实例无疑是学习的好教材。它的逻辑比较容易理解,操作流程既简单又可控,能够让初学者更快地掌握相关技能,进而投入实践。