vn.py量化社区
By Traders, For Traders.
Administrator
avatar
加入于:
帖子: 198
声望: 35

数字货币方面,vn.py已经支持的接口包括:

 

  • BitMEX(bitmex):期货、期权、永续合约
  • OKEX合约(okexf):期货
  • 火币合约(hbdm):期货
  • 币安(binance):现货
  • OKEX(okex):现货
  • 火币(huobi):现货
  • Bitfinex(bitfinex):现货
  • 1Token(onetoken):多通道聚合

 

从分类上看,期货和永续合约类的接口,由于其保证金交易的模式以及允许随意做空,比较适合CTA趋势类需要双向交易的量化策略;而现货类的接口,则由于可以实现真实数字货币的转换以及提取,更加适合套利类和搬砖类的策略。
 
针对CTA类策略的研发,需要充足的历史数据来满足模型开发、策略回测的要求,以上接口中目前只有BitMEX和币安两个交易所的接口提供了较长的历史数据(超过1年的1分钟K线),所以我们这篇教程就选择BitMEX来讲解。
 
上述接口特点的分类只是最基础的规则,在真正的实盘交易中则可能面对复杂得多的情况:比如一个做市商策略可能持有一定的BTC现货多头,在火币现货交易所上进行报价做市,同时使用BitMEX的永续合约来进行做市敞口风险对冲管理。
 
注意下文中,BitMEX指带交易所自身,BITMEX则指带vn.py中的交易接口功能。

 
 

准备账号

 

和期货CTP类似,BitMEX交易所也提供了一套TESTNET仿真环境,打开官网并点击右侧的“注册”按钮,填入基本信息快速完成注册。

 

description

 

注意BitMEX网站目前在国内可能存在访问上的一些问题,需要使用科学上网或者境外的云服务器(比如香港阿里云)来解决,同时后续连接交易所进行交易也同样需要。科学上网请使用Shadowsocks,VPN、Lantern等方法都不行。

 

注册完成后,登录进入到交易主页面,点击顶部菜单栏的“API”按钮后,在左侧导航栏中找到“API密钥管理”:

 

  1. 名称随意填一个
  2. CIDR留空不填
  3. 权限选择“委托”
  4. 点击“创建API密钥”按钮

 

description

 

记录好上图中你的ID和密钥(Secret),在所有数字货币交易所的世界中,这两条信息就是你API交易时的用户名和密码了,千万不要泄露给别人!!!

 
 

接口登录

 

接下来照着入门1中的方法,启动VN Trader Pro,只加载BITMEX接口就行。

 

进入主界面后,点击菜单栏的“系统”->“连接BITMEX”,看到对话框:

 

description

 

各个字段的填写如下:

 

  • ID:上一步生成的ID
  • Secret:上一步生成的密钥
  • 会话数:3
  • 服务器:选择TESTNET(REAL为实盘环境)
  • 代理地址:127.0.0.1
  • 代理端口:1080

 

注意如果在国内的机器上运行,在点击“连接”按钮前请确保Shadowsocks客户端已经在正常运行,且检查你的代理端口是1080,不会配置的话请自行搜索Shadowsocks使用方法(安全起见我们这里就不教了)。

 

点击“连接”按钮开始登录BITMEX服务器以及相关初始化操作,在右下角的日志监控组件中,可以看到初始化相关的日志信息输出:

 

description

 

登录初始化过程中有任何异常情况,日志信息中都会看到相应的文字输出,可以根据内容自行排查。看到“Websocket API验证授权成功”这条日志后,说明已经成功完成了初始化操作。

 

 

查看合约

 

点击菜单栏“帮助”->“查询合约”,或者左侧功能导航栏的导数第二个放大镜按钮,打开合约查询对话框:

 

description

 

点击右上角的查询按钮,显示当前VN Trader内部已连接的交易接口(BITMEX)上支持的所有可交易合约。

 

几个需要关注的字段:

 

  • 合约代码symbol:该合约在某家交易所的唯一标识
  • 交易所代码exchanage:该交易所在VN Trader内的唯一标识
  • 本地代码vt_symbol:由合约代码以及交易所代码共同组成,代表该合约在VN Trader内的唯一标识符,需要交易所代码是因为跨交易所的代码可能存在重复,比如000001在上交所代表的是上证指数,在深交所代表的则是平安银行;
  • 价格跳动pricetick:意味着交易委托时价格的最小变动单位,如果精度不对则会造成委托失败

 
 

订阅行情

 

在上一步中找到自己想要订阅行情的合约信息后(或者你本来就知道),则可以在VN Trader界面左上角的交易组件框中,选择交易所、接口后,在代码框中输入合约代码后回车,即可订阅行情。

 

BitMEX交易所最主流的品种是永续合约XBTUSD和ETHUSD,永续合约可以理解为一种不会到期交割的期货,每天通过互换费率结算来实现期货和现货价格的收敛。

 

当收到最新行情Tick推送时,会显示在下方的深度报价中。和国内期货的CTP接口不同,BitMEX的Tick数据推送采用逐笔全推模式,也就意味着市场上的每一笔成交或者挂单变动,你都会收到对应的Tick数据推送更新。

 

description
 

如果订阅行情时,日志监控输出说找不到合约信息,那么请先检查是否搞对名命名规则。

 

description

 

所有已订阅的行情信息,都会显示在右侧顶部的行情监控组件中,方便后续快速执行手动交易。

 
 

交易下单

 

知道最新行情的价格在哪里后,就可以进行买卖下单:
 

description

 

  1. 选择交易方向:要买(多)还是要卖(空)
  2. 交易开平留空不用选
  3. 选择价格类型:BITMEX接口支持限价、市价、STOP(停止单)三种委托类型!!!
  4. 输入价格和数量后,点击“委托”按钮即可发出交易请求

 

 

委托成交

 

委托请求提交后,则会返回相应的委托回报信息,显示在委托组件中,显示当前这笔委托请求的最新状态:

 

注意委托组件分为两个:

 

  • “活动”:只显示当前处于可撤状态(提交中、未成交、部分成交)的委托信息
  • “委托”:显示所有的委托信息(包括可撤委托)

 
两个组件中,对于处于可撤状态的委托,均可双击该笔委托的单元格来实现撤单的功能(鼠标放置其上时会有文字提示)。或者也可以通过交易组件上的单击“全撤”按钮,来实现一键全撤VN Trader内当前所有可撤委托。

 

description

 

当委托发生成交后,VN Trader会收到成交推送的数据,并显示在成交监控组件中,用户可以通过每笔成交的委托号来实现和对应委托的映射。注意在实盘中,每笔委托可能和多笔反向来自其他投资者的委托发生成交,即一笔委托对应有多笔成交记录。
 
 

资金持仓

 

BitMEX交易所的结算货币采用的是XBT(BTC),也就是所谓的币本位,而非USDT(所谓的法币本位)。委托成交后,账户的资金情况将会发生变化:

 

注意这里显示的数字对应的单位为XBt,而BitMEX网页上显示的数字单位为XBT:

 

1 XBT = 1,000,000,000 XBt (9个0)

 

所以乍一看到账上数字这么大的时候不要瞎激动,没这么多钱。

 

BITMEX接口的资金和持仓信息均采用服务器推送模式,也就是任意时间点你看到的数字都是目前账户上的最新情况(和CTP的6秒查询形成鲜明对比)。

 

description

 

同时在持仓计算上,采用的净持仓模式(多空仓位自动对冲),数量为正时代表当前持有多头持仓,负则是空头持仓。
 

买入做多5手后,再卖出做空10手,此时BitMEX交易所会自动先将5手多仓平掉,再开5手新的空头仓位,形成净持仓-5手。

 
 

实盘交易

 

当你已经对TESTNET的仿真测试环境足够熟悉后,可能已经做好了实盘交易的准备。前往实盘网站注册好实盘账户后,完成入金和KYC等操作后,获取API的ID和密钥方法和TESTNET环境完全一致。注意在连接BITMEX的对话框中,服务器需要改为REAL(实盘环境)。

 

BitMEX交易所的服务器位于爱尔兰的亚马逊云AWS上,测试阶段可以用Shadowsocks科学上网来连接,但进入实盘阶段后还是推荐用境外云服务器更加稳定,当然对于交易策略延时敏感的用户,最好的选择就是爱尔兰的AWS服务器了。
 
了解更多知识,请关注vn.py社区公众号。
description

Member
avatar
加入于:
帖子: 4
声望: 0

description
大佬,我输入代码敲回车怎么无法订阅行情,获取ticker?

Administrator
avatar
加入于:
帖子: 4122
声望: 229

右上角,【帮助】->【查询合约】,看合约的代码,再来回车订阅。

另外币安接口要加SS代理,否则连接可能不稳定。

Member
avatar
加入于:
帖子: 2
声望: 0

好香 wrote:

description
大佬,我输入代码敲回车怎么无法订阅行情,获取ticker?
同问 解决了吗

Administrator
avatar
加入于:
帖子: 4122
声望: 229

请检查你的代理是否正确配置了,行情推送要通过Websocket连接,需要代理或者海外服务器

Member
avatar
加入于:
帖子: 2
声望: 0

用Python的交易员 wrote:

请检查你的代理是否正确配置了,行情推送要通过Websocket连接,需要代理或者海外服务器
如果自己导入BITMEX逐笔数据的话数据格式是什么样的,也就是表头是怎样的?

Administrator
avatar
加入于:
帖子: 4122
声望: 229

wrote:

用Python的交易员 wrote:

请检查你的代理是否正确配置了,行情推送要通过Websocket连接,需要代理或者海外服务器
如果自己导入BITMEX逐笔数据的话数据格式是什么样的,也就是表头是怎样的?

参考vnpy/trader/object.py中的BarData数据结构

© 2015-2019 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号-3