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

如何,使用,ccxt,交易,数字,货币,现货 · 浏览次数 : 180

小编点评

**CCXT现货API的使用** **1. 安装** - 使用 pip 安装 ccxt 库:``` pip install ccxt ``` **2. 获取帮助文档** - 访问 CCXT 官方文档:`https://docs.ccxt.com/en/latest/manual.html` - 在文档中查找 MarketAPI、Implicit API、Unified API、Public API、Private API 等类别,了解每个 API 的功能和调用方法。 **3. 初始化 CCXT** ```python # 获取 API key 和 API secret key api_key = "" api_secret_key = "" # 创建 CCXT 的交易所实例 exchange = ccxt.binance(api_key, api_secret_key) ``` **4. 获取最新行情数据和价格** ```python # 获取订单簿数据 orderbook = exchange.fetch_order_book(symbol) # 获取最新价格 orderprice = orderbook["asks"][0][0] ``` **5. 创建交易订单** ```python # 创建市场买单 amount = 1 # 创建 limit 买单 order = exchange.create_limitBuyOrder(symbol, amount, orderprice) # 创建 limit 卖单 order = exchange.create_limitSellOrder(symbol, amount, orderprice) # 创建市场买单 order = exchange.create_MarketBuyOrder(symbol, amount) # 创建市场卖单 order = exchange.create_MarketSellOrder(symbol, amount) ``` **6. 撤单交易** ```python # 撤销市场买单 order_id = exchange.cancel_order(order_id) # 撤销 limit 买单 order_id = exchange.cancel_order(order_id) # 撤销 limit 卖单 order_id = exchange.cancel_order(order_id) ``` **7. 示例代码** ```python import ccxt # 获取 API key 和 API secret key api_key = "" api_secret_key = "" # 创建 CCXT 的交易所实例 exchange = ccxt.binance(api_key, api_secret_key) # 获取最新行情数据和价格 orderbook = exchange.fetch_order_book(symbol) orderprice = orderbook["asks"][0][0] # 创建市场买单 amount = 1 order = exchange.create_limitBuyOrder(symbol, amount, orderprice) # 打印交易订单 ID print(order_id) ```

正文

更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号: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交易数字货币现货相似的内容:

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

更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流。 数字货币现货标准化接口 数字货币市场与股票、期货市场最大的不同点在于数字货币主流交易所数量很多。举个例子,如果我们需要交易螺纹钢期货(RB),我们只能选择上海期货交易所。然而,如果我们想交易比特币,有币安

如何使用csproj构建C#源代码组件NuGet包?

一般我们构建传统的NuGet包,都是打包和分发dll程序集文件。 至于打包和分发C#源代码文件的做法,比较少见。 那么这种打包源代码文件的做法,有什么优点和缺点呢? 优点: 方便阅读源代码。 方便断点调试。 减少 Assembly 程序集模块加载个数。 更利于发布期间的剪裁(PublishTrimm

如何使用JavaScript实现在线Excel附件的上传与下载?

前言 在本地使用Excel时,经常会有需要在Excel中添加一些附件文件的需求,例如在Excel中附带一些Word,CAD图等等。同样的,类比到Web端,现在很多人用的在线Excel是否也可以像本地一样实现附件文件的操作呢?答案是肯定的,不过和本地不同的是,Web端不会直接打开附件,而是使用超链接单

如何使用前端表格控件实现数据更新?

前言 小编之前分享过一篇文章叫《如何使用前端表格控件实现多数据源整合?》。今天,继续为大家介绍如何使用前端表格控件来更新已连接的数据源信息。 环境准备 SpreadJS在线表格编辑器: SpreadJS 前端表格控件新版本新增了一款报表插件,该插件基于 SpreadJS 本身强大的表格能力,在 Da

如何使用Node.js、TypeScript和Express实现RESTful API服务

Node.js是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Express是一个保持最小规模的灵活的 Node.js Web应用程序开发框架,为Web和移动应用程序提供一组强大的功能。使用Node

如何使用前端表格控件实现多数据源整合?

前言 作为表格产品的典型应用场景之一,几乎所有的行业都会存在类 Excel 报表开发这样的应用场景,而在这些应用场景中,经常会遇见下面的这些痛点: 报表数据往往来自多个不同的数据源,需要报表系统能够同时连接多个数据源,并融合不同的数据格式 实际的报表中需要对数据结果进行逻辑计算,例如销售的环比和同比

如何使用Python和Plotly绘制3D图形

本文分享自华为云社区《Plotly绘制3D图形》 ,作者:柠檬味拥抱。 在数据可视化领域,三维图形是一种强大的工具,可以展示数据之间的复杂关系和结构。Python语言拥有丰富的数据可视化库,其中Plotly是一款流行的工具,提供了绘制高质量三维图形的功能。本文将介绍如何使用Python和Plotly

如何使用 JS 判断用户是否处于活跃状态

有时候,我们需要在网页判断用户是否处与非活跃状态,如果用户长时间没有在页面上进行任何操作,我们则判定该用户是非活跃的。 在 javascript 中我们可以通过监听某些鼠标或键盘相关的事件来判定用户是否在活跃中。

如何使用Tushare+ Backtrader进行股票量化策略回测

更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流。 典型股票量化回测流程 典型的股票量化策略回测流程包括以下几个步骤: 数据获取:首先需要获取所需的股票市场数据,包括股票价格、交易量、财务数据等。这些数据可以从金融数据供应商、交易所、财经网站或者专门的数据

如何使用并查集解决朋友圈问题?

本文已收录到 GitHub · AndroidFamily,有 Android 进阶知识体系,欢迎 Star。技术和职场问题,请关注公众号 [彭旭锐] 私信我提问。 前言 大家好,我是小彭。 今天分享到的是一种相对冷门的数据结构 —— 并查集。虽然冷门,但是它背后体现的算法思想却非常精妙,在处理特定