Skip to content

VnTrader基本使用

Hunggin edited this page Mar 17, 2018 · 5 revisions

作者:绝处逢升

目录

VnTrader简介

目前VnTrader基本实现了国内外全品种的交易,包括期货、股票、贵金属、外盘交易等。对于vn.py的初学者而言,建议从项目的图形交易程序VnTrader开始学习,先了解如何通过界面来监控行情与交易信息,并进行手工交易。

VnTrader对接了目前vn.py项目中所有的交易API,包括期货、股票、贵金属、外盘、比特币等。下文以最常用的CTP交易接口为例,讲解如何配置和使用VnTrader进行期货交易。

账号配置

在开始使用VnTrader前,需要先将CTP账号信息写入到配置文件中。

打开examples/VnTrader目录下的CTP_connect.json文件,如下图所示:

账号信息

需要填写的字段说明如下:

字段名 作用
brokerID 经纪商编码
tdAddress 交易服务器地址(服务器地址:端口号)
mdAddress 行情服务器地址(服务器地址:端口号)
userID 账号
password 密码
userProductInfo 用户交易系统编码(非必填)
authCode 用户交易系统授权码(非必填)

其中userProductInfo和authCode两个字段,只有期货公司要求客户的CTP接入必须做认证时才需要填写,默认可以忽略。

对于初学者建议使用SimNow账号进行测试和开发,可以在该网站注册一个用户。SimNow的brokerID统一为9999,行情和交易服务器地址可以在SimNow官网的产品页面查询,具体如下图所示:

SimNow服务器地址

其中Trade Front和Market Front分别为交易和行情服务器地址,注意不要填反。

如果想要使用实盘账号进行交易,则brokerID需要向期货公司的客户经理咨询(比如国泰君安期货的brokerID是2071),交易和行情服务器地址可以在期货公司提供的快期客户端的登录界面上“测速与代理”功能中查找到。比如打开国泰君安期货的快期软件的测速功能,可以看到具体的服务器地址(如下图所示),用户可以根据网络状况挑选一个网速较快的地址,填写入CTP_connect.json的配置文件中。

国泰君安期货

注意事项:

  • 服务器地址务必加入 “tcp://” 的前缀
  • 编辑所有vn.py项目内的json文件时,都不要用Windows记事本或者其他IDE软件,而应该使用如Sublime Text、Notepad++、Vim、VS Code等代码编辑器,防止json文件的编码格式被修改,保证配置文件能被正确的解析。
  • 如果在打开界面后,日志/错误中出现“CTP 不合法的登录”,可能的一个原因是json文件中配置的服务器不响应,此时可以选择其他可以响应的服务器,比较简单的方法就是ping一下各个服务器,使用能够响应,而且时间最短的那一个服务器。

界面说明

启动VnTrader有三种方法:

  1. 直接双击VnTrader.bat
  2. 按住Shift点击鼠标右键,点击“在此处打开命令窗口”运行cmd,输入python run.py运行

启动后可以看到整个VnTrader的窗口分为六部分,分别对应①交易组件,②行情组件,③委托组件,④成交、日志、与错误组件,⑤持仓与资金组件,以及⑥菜单栏,如下图所示:

主界面

其中组件②③④⑤都是对当前行情和委托等信息的监控,如果通过程序化的方式自动交易,则交易的相关状态信息都会显示在这些组件中。需要手工干预时可以在窗口①进行操作,完成委托信息的输入、提交与撤单。此外,界面右下角还显示着CPU和内存的信息,便于监控系统当前的资源占用情况。

各组件的功能可以参考下表:

组件编号 名称 功能
1 交易 发送和撤销交易委托、订阅行情等
2 行情 显示行情Tick数据推送
3 委托 显示委托回报相关的数据推送
4 成交 显示成交相关的数据推送
4 错误 显示调用底层接口时由于操作失败触发的错误信息推送
4 日志 显示来自于系统内各个组件发出的日志信息
5 持仓 显示持仓数据信息(定时轮询,非实时)
5 资金 显示账户资金查询的数据结果(定时轮询,非实时)

快速上手

接下来以交易1手甲醇期货为例,展示如何进行手动交易操作。

这里我们使用的甲醇合约是MA705,则在交易组件中输入交易合约代码MA705后按回车,则会自动订阅该合约的行情。CTP接口在用户订阅某个合约的行情后,会立即推送当前交易日内最新的一条Tick数据,系统收到后会自动在右侧的行情组件中显示出接收到的该合约实时行情数据,如最新价、买一价量和卖一价量等。

假设我们要先开1手多单:

  1. 选择方向类型为多,开仓方向为开仓,数量设置为1手,价格类型设置为市价(如上图所示当前价格2860),然后点击发单
  2. 右侧的委托组件中会显示系统收到的委托回报信息
  3. 委托成交后,组件④的成交中会显示系统收到的成交回报信息
  4. 同时在组件⑤的持仓中,可以看到当前账户的持仓情况,如品种、方向和数量等

现在要将之前的1手多单平仓:

  1. 在交易合约代码中输入MA705并回车
  2. 设置方向类型为空,开仓方向为平仓,数量设置为1,价格设置为市价,点击发单
  3. 接着在委托、成交、持仓组件中会同样刷新最新的回报信息

委托组件中会显示当前交易日内提交过的所有委托信息,而成交组件中则会显示当前交易日内的所有成交记录。

下图中,我们进行了一次在2686价位开多仓,然后在同样价格平仓的操作:

快速上手

详细介绍

交易组件

交易组件

交易的方向和开平仓

  • 方向类型可设置为多/空
  • 开平中可设置为开仓/平仓/平昨/平今

在实际期货交易中,可以结合方向类型以及开平组合出各种具体的交易指令,例如:买入开仓(Buy)、卖出平仓(Sell)、卖出开仓(Short)、买入平仓(Cover)等。

注意,平昨是优先平掉昨天的仓位,而平今则是优先平掉今天的仓位,两者的具体规则各家交易所有所不同,请参考交易所发布的相关交易指令说明。

数量、价格和价格类型

  • 数量为本次委托的具体交易合约数量
  • 价格为本次委托的指定交易价格
  • 价格类型可设置为市价/限价/FAK/FOK

其中FOK(Fill or Kill)类型的委托,会检查市场上的最优对方价格是否满足委托全部成交的条件,若满足则立即成交,否则该笔委托会立即撤销作废,不会像限价单一样进入委托队列排队。

FAK(Fill and Kill)类型和FOK类似,但允许委托部分成交,未成交的部分则立即撤销。

价格一栏默认会跟随最新行情成交价实时变动,若将左侧的勾选框选中,则可手动指定价格。

委托发单和撤单

设置好合约代码、方向类型、开平、价格、数量、价格类型后,点击"发单",可以将该委托发向交易所。

若发单成功,则很快委托回报的推送更新信息会出现在委托组件中,如果没有看到更新则意味着发单失败,可以在错误或者日志组件中检查相应的报错信息。

点击"全撤",可以将当前账户内的所有活动委托一键全部撤销。

交易所、货币、产品类型和交易接口

一般来说,对于CTP接口的交易只需填入上面信息即可。对于部分外盘市场的接口(如IB),由于其支持的合约数量和类型极多,还需要填入交易所、货币和产品类型的信息以确定唯一合约。

同时IB和OANDA接口可以忽略开平信息,因为外盘交易所大多不允许锁仓交易(即多空会自动对冲,不会出现多单1手、空单1手的情况)。

行情订阅

在合约代码文本框中输入具体的合约代码后(如IF1708),按回车即可自动订阅该合约的行情。

对于证券类的接口,由于同一个合约代码可能在两家交易所同时存在(如000001在上交所代表上证指数,在深交所代表平安银行),因此用户在按回车前需要选择具体的交易所。

监控组件

####行情

行情组件

订阅合约行情后,行情服务器就会自动推送该合约的行情更新,系统收到后就会将最新的行情数据实时刷新在行情组件中。

委托

委托组件

当用户发出的委托发生状态变化时,交易服务器会实时推送委托更新,系统收到后会显示在如上图所示的委托组件中。

双击组件中的单元格,即可针对该单元格所显示的委托执行撤单操作。

持仓

持仓组件

持仓组件中显示了当前账户的持仓合约、数量和方向等信息。大部分交易接口都不会实时推送持仓数据的更新,而需要用户去主动发起查询,VnTrader中对这些接口都实现了定时自动查询持仓的功能。需要注意的是,由于是查询更新,因此如上图所示的持仓组件中的持仓更新,可能相对于委托组件中的委托更新有一定的延时。

账户

账户组件

账户组件中,显示了目前账户的市值、可用资金、手续费、保证金等资金相关的信息。和持仓数据类似,账户资金数据也需要用户主动发起查询后才会更新,因此账户组件中显示的数据同样可能有一定的延时。

错误

错误组件

错误组件中显示的主要是来自于VnTrader底层接口收到的各种错误信息,如请求失败、委托字段错误、对已撤委托重复撤单等。

日志

日志组件

日志组件中主要显示的是系统在运行过程中所执行操作的一些日志记录,同时在VnTrader本地程序中触发的一些异常和错误信息也会显示在这里。

组件的弹出与调整

VnTrader可以非常自由的调整交易、行情、委托等组件的大小和位置。注意本文开头图示中的几个组件,每个组件右上角都有一个小红圈,点击这个小红圈后该组件就会从原本位置弹出,用户可以通过鼠标拖动到期望的位置来实现对窗口布局的调整。

下图就将成交窗口移动到了右侧中部:

窗口移动

如果不小心把窗口内的组件拖动成了比较奇怪的情况,可以点击菜单栏帮助->还原,将窗口还原成默认的布局。

合约查询

用户可以通过合约查询组件来查看当前已连接的交易接口提供的所有可交易的合约信息,如合约代码、合约大小、最小价格变动等。点击菜单栏的帮助->合约查询即可打开如下图所示的合约查询组件:

合约查询

上图中第二列简写字母对应的交易所如下表:

序号 简写字母 具体名称
1 SSE 上海证券交易所
2 SZSE 深圳证券交易所
3 CFFEX 中国金融期货交易所
4 SHFE 上海期货交易所
5 CZCE 郑州商品交易所
6 DCE 大连商品交易所
7 INE 国际能源交易中心
8 SGE 上海黄金交易所
9 HKEX 香港交易所
10 SMART IB的智能路由(股票、期权)
11 GLOBEX 芝加哥商品交易所的电子交易平台
12 IDEALPRO IB的外汇ECN平台
13 OANDA OANDA外汇平台
14 UNKNOWN 未知(即以上以外的交易所)