如何使用CCXT交易数字货币现货

更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流。
数字货币现货标准化接口
数字货币市场与股票、期货市场最大的不同点在于数字货币主流交易所数量很多。举个例子,如果我们需要交易螺纹钢期货(RB),我们只能选择上海期货交易所。然而,如果我们想交易比特币,有币安、欧易、火币、Coinbase、Bitmex、Bitfinix、FTX等等很多主流的数字货币交易所可供选择。
对于量化交易或程序交易者来说,数字货币市场最大的痛点在于,每一个数字货币交易所都有自己的API接口,尽管接口大致范式相似,但是细节上有很多不同点,如果交易10家交易所,我们就需要搞懂10个不同的API,并将其接入,这无疑是一件费时费力的事。那么,是否有一个统一的、通用的、标准化的接口,能让我们轻松接入几乎所有主流币圈交易所?
这时候,就需要引入一个 数字货币三方接口CCXT了,这个接口是一个支持多家主流数字货币交易所的标准化接口,CCXT在底层封装了支持主流交易所的现货API,并在表层用让用户可以同样的外接接口访问不同交易所的API,为我们开发多市场尤其是跨市场策略提供了极大的便利。

CCXT接口除了支持几乎所有主流交易所现货API的统一封装外,还支持部分交易所合约(如币安合约)交易的隐式封装,关于隐式封装的使用,大家可以参考我们的历史文章:(链接)。本文将重点介绍CCXT现货API的使用。
如何安装CCXT,如何查询帮助文档
安装CCXT
对于Python语言,安装CCXT与其他Python三分库的方式是一样的。使用语句pip install ccxt即可安装。
安装完成后,我们可以尝试使用import ccxt导入CCXT库,如果运行该语句没有报错,说明CCXT已经成功导入
CCXT Manual (帮助文档)
CCXT提供了详细的帮助文档,可以通过网址https://docs.ccxt.com/en/latest/manual.html#markets进行访问。帮助文档的侧边栏提供了不同API接口的分类,包括MarketAPI、Implicit API、Unified API、Public API、Private API等类别,方便用户根据自己的需要进行分类查询。

而对于每个API,CCXT不仅给出了调用函数名、参数、示例的说明,也给出了调用后的返回结构数据。图例是Market分类中Currency Structure的返回结构。

CCXT初始化
介绍完CCXT的安装以及如何查找帮助文档,接下来我们开始使用CCXT。CCXT的初始化可以分为三步,其中第三步可选,前两步必做。
第一步,加载ccxt模块
第二步,初始化,调用ccxt.交易所名称,其中交易所名称可以替换为任何想要的交易所
第三步,获取初始化交易所的交易市场及交易货币对(测试交易所是否加载成功)
# 加载ccxt模块
import ccxt
print(ccxt.exchanges)
# market API
exchange = ccxt.binance()
markets = exchange.load_markets()
print(exchange.fetch_markets())
print(exchange.fetchCurrencies())
运行结果:先打印CCXT支持的所有交易所,可以看到,CCXT支持的交易所数量很多,足以满足大部分量化交易员的日常开发。

然后我们以币安交易所现货为例,获取币安交易所现货支持的市场和币对。通过markets变量的总数我们可以看到,币安交易所的现货币对一共有2098个,并且这些币对的详细交易信息也由CCXT通过dict的数据格式反馈给我们了。

如何调用CCXT行情API
初始化CCXT后,接下来我们再尝试调用CCXT的现货行情API,获取各种各样的行情数据。CCXT帮我们封装好了从订单簿、ticker、到成交、K线的几乎所有能够在策略中用得到的行情数据,都可以用标准方法,一键调用。
我们通过一个循环,实现对所有币种行情数据调用查询,包括:
获取订单簿、获取公开成交数据、获取ticker数据、获取k线数据
# 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)
我们再以BTCUSDT为例,来看获取后返回的数据结构。
订单簿(以获取10档盘口数据为例)

公开成交数据

ticker数据

k线数据(以日线为例)

如何调用CCXT交易API
在熟悉了行情API后,我们再来尝试使用CCTX的交易API。但使用交易API前必须注意的是,由于行情API是公有API,而交易API是私有API,所以我们必须调用CCXT的方法,把key传入刚才创建的交易所变量,才能实现调用私有API的权限,传入方法如下
api_key = "" # 币安的api key
secret_key = "" # 币安的secret key
exchange.apiKey = api_key
exchange.secret = secret_key
然后,我们可以开始执行一系列与私有API相关的操作,包括:
a. 资产查询
b. 订单查询(包括所有、未完成、已完成订单)
c. 成交查询
d. 报单(市价、限价、买报单、卖报单)
e. 撤单
# 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)
我们来看上述调用查询后的结果
资产查询

订单查询(所有,以symbol = BUSD/USDT为例)

成交查询(以symbol = BUSD/USDT为例)

对于报单、撤单,如果报单撤单成功,返回的信息是报单的order_id或撤单的order_id,如果错误,会返回相应错误代码及错误原因,在此不一一举例,详细可查询CCXT或交易所帮助文档错误代码描述部分。
CCXT获取行情数据并交易的小栗子
最后,将我们刚才学习的CCXT初始化、调用行情API、调用交易API结合起来,就可以完成一个简单的从初始化交易所加载Key,到获取最新行情,再到按照该行情价格下单的一个小栗子。栗子虽小,但它打通了整个CCXT的现货API。
# 加载ccxt模块
import ccxt
# 加载Key
exchange = ccxt.binance()
api_key = "" # 币安的api key
secret_key = "" # 币安的secret key
exchange.apiKey = api_key
exchange.secret = secret_key
symbol = 'BTC/USDT'
# 获取最新行情
orderbook = exchange.fetch_order_book(symbol)
orderprice = orderbook['asks'][0][0] if len(orderbook['asks']) > 0 else None
# 按照该行情价格下买单
amount = 1
exchange.createLimitBuyOrder(symbol, amount, orderprice)
值得一提的是,CCXT交易现货方便之处就在于,如果上述代码,我们不交易币安而是交易其他任何一个CCXT支持的现货交易所,我们只需要将exchange = ccxt.binance()语句ccxt.后面的交易所名称,换成其他交易所,而不改变其他任何代码,就能实现不同交易所交易的无缝切换了。CCXT交易多交易所现货的小技能,你Get到了吗


如何使用CCXT交易数字货币现货的更多相关文章
- 如何使用交易开拓者(TB)开发数字货币策略
更多精彩内容,欢迎关注公众号:数量技术宅.想要获取本期分享的完整策略代码,请加技术宅微信:sljsz01 为何使用交易开拓者(TB)作为回测工具 交易开拓者(后文以TB简称)是一个支持国内期货市场K线 ...
- 神经网络与数字货币量化交易系列(1)——LSTM预测比特币价格
首发地址:https://www.fmz.com/digest-topic/4035 1.简单介绍 深度神经网络这些年越来越热门,在很多领域解决了过去无法解决的难题,体现了强大的能力.在时间序列的预测 ...
- BotVS数字货币现货交易类库
以下是BotVS数字货币现货交易类库模板,使用Python2语言实现 import types # 导入类型模块 import time # 导入时间模块 import platform # 版本信息 ...
- 一步步教你创建自己的数字货币(代币)进行ICO
本文从技术角度详细介绍如何基于以太坊ERC20创建代币的流程. 写在前面 本文所讲的代币是使用以太坊智能合约创建,阅读本文前,你应该对以太坊.智能合约有所了解,如果你还不了解,建议你先看以太坊是什么 ...
- ERC20数字货币ProxyOverflow存在漏洞
ERC20的ProxyOverflow漏洞造成影响广泛,本文将对其攻击方法进行分析,以便于智能合约发布者提高自身代码安全性以及其他研究人员进行测试.本文选择传播广泛.影响恶劣的SMT漏洞(CVE-20 ...
- 全球数字货币交易所TOP20安全性评级报告
链塔智库2018-05-03 10:28 分析师:常昊.王婧雯 来源: 链塔智库 全球加密数字货币市值超2.5万亿元,单日交易额超2000亿元,全球超过3000万人已投入加密数字货币领域. ...
- 【课程笔记】比特币和数字货币技术[Bitcoin and Cryptocurrency Technologies] week1
源地址(可能要FQ):https://www.coursera.org/learn/cryptocurrency/home/welcome 1.1 Cryptographic Hash Functio ...
- PAY8 数字货币支付结算系统,全球付!实时结算!秒到账!
数字货币支付是历史发展的必然 如今已经有越来越多的地方接受加密数字货币作为支付消费了,比如泰国电影院连锁店 Cineplex Group 可用加密货币买爆米花和电影票,西班牙一精品酒店接受数字货币支付 ...
- [币严区块链]数字货币交易所之瑞波(XRP)钱包对接
对接Ripple(XRP),不需要本地部署钱包,直接访问Ripple API,本文包括访问Ripple API及如何免费获取测试的XRP. 对接流程 安装Ripple API Ripple API 接 ...
- [币严区块链]数字货币交易所之比特币(BTC)钱包对接 | 自建节点JSON-RPC访问
BTC钱包对接流程 一. 部署BTC钱包节点 二. 分析BTC钱包的API 三. 通过JSON-RPC访问BTC钱包API 四. 部署测试 一.部署钱包节点 交易平台对接BTC之前,要 ...
随机推荐
- Dotnet初探: 尝试使用 dotnet6 的miniapi
引子 最近我们学校要求我们使用dotnet实现一个登录功能,由于我们学校的教程老旧(万年经典asp .net 4.x,慢的要死),我看有高性能又免费的Dotnet6不用,还又要退回几年前,于是决定另开 ...
- 浅谈php GC(垃圾回收)机制及其与CTF的一点缘分
0x00 侠客日常(一):CTF江湖试剑 众所周知,在php中,当对象被销毁时会自动调用__destruct()方法,同时也要知道,如果程序报错或者抛出异常,则就不会触发该魔术方法. 看题: < ...
- vue刷新当前组件的方法
一:v-if控制组件,先设false,再true强制刷新组件(有时会产生一种奇怪的效果) 1 <medical-record v-if="fresh" /> 2 3 t ...
- 产品质量管理利器,华为云发布CodeArts Defect缺陷管理服务
摘要:近日,华为云CodeArts Defect缺陷管理服务正式上线,提供结构化缺陷跟踪流程和标准化的质量度量模型. 本文分享自华为云社区<产品质量管理利器,华为云发布CodeArts Defe ...
- C#处理医学影像(四):基于Stitcher算法拼接人体全景脊柱骨骼影像
在拍摄脊柱或胸片时,经常会遇到因设备高度不够需要分段拍摄的情况, 对于影像科诊断查阅影像时希望将分段影像合并成一张影像,有助于更直观的观察病灶, 以下图为例的两个分段影像: 我们使用Ope ...
- PCI-5565系列反射内存卡 反射内存交换机
主要性能:1路发射,一路接收光纤高速网络2.125GHz.最大256个节点.在板128MByte SDRAM.光纤通讯协议不占用CPU资源.动态包长,每个包4 到 64 个字节.33MHz PCI 3 ...
- 2022-11-19:第二高的薪水。表结构和数据的sql语句如下,输出200,因为200是第二大的。请问sql语句如何写? DROP TABLE IF EXISTS `employee`; CREAT
2022-11-19:第二高的薪水.表结构和数据的sql语句如下,输出200,因为200是第二大的.请问sql语句如何写? DROP TABLE IF EXISTS `employee`; CREAT ...
- 2022-11-06:给定平面上n个点,x和y坐标都是整数, 找出其中的一对点的距离,使得在这n个点的所有点对中,该距离为所有点对中最小的。 返回最短距离,精确到小数点后面4位。
2022-11-06:给定平面上n个点,x和y坐标都是整数, 找出其中的一对点的距离,使得在这n个点的所有点对中,该距离为所有点对中最小的. 返回最短距离,精确到小数点后面4位. 答案2022-11- ...
- 2022-09-16:以下go语言代码输出什么?A:101;B:100;C:1;D:2。 package main import ( “fmt“ ) type MS struct {
2022-09-16:以下go语言代码输出什么?A:101:B:100:C:1:D:2. package main import ( "fmt" ) type MS struct ...
- 2021-08-07:与数组中元素的最大异或值。给你一个由非负整数组成的数组 nums 。另有一个查询数组 queries ,其中 queries[i] = [xi, mi] 。第 i 个查询的答案是
2021-08-07:与数组中元素的最大异或值.给你一个由非负整数组成的数组 nums .另有一个查询数组 queries ,其中 queries[i] = [xi, mi] .第 i 个查询的答案是 ...