本文共 4269 字,大约阅读时间需要 14 分钟。
目前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官网的查询,具体如下图所示:
其中Trade Front和Market Front分别为交易和行情服务器地址,注意不要填反。
如果想要使用实盘账号进行交易,则brokerID需要向期货公司的客户经理咨询(比如国泰君安期货的brokerID是2071),交易和行情服务器地址可以在期货公司提供的快期客户端的登录界面上“测速与代理”功能中查找到。比如打开国泰君安期货的快期软件的测速功能,可以看到具体的服务器地址(如下图所示),用户可以根据网络状况挑选一个网速较快的地址,填写入CTP_connect.json的配置文件中。
注意事项:
启动VnTrader有三种方法:
启动后可以看到整个VnTrader的窗口分为六部分,分别对应①交易组件,②行情组件,③委托组件,④成交、日志、与错误组件,⑤持仓与资金组件,以及⑥菜单栏,如下图所示:
其中组件②③④⑤都是对当前行情和委托等信息的监控,如果通过程序化的方式自动交易,则交易的相关状态信息都会显示在这些组件中。需要手工干预时可以在窗口①进行操作,完成委托信息的输入、提交与撤单。此外,界面右下角还显示着CPU和内存的信息,便于监控系统当前的资源占用情况。
各组件的功能可以参考下表:
组件编号 | 名称 | 功能 |
---|---|---|
1 | 交易 | 发送和撤销交易委托、订阅行情等 |
2 | 行情 | 显示行情Tick数据推送 |
3 | 委托 | 显示委托回报相关的数据推送 |
4 | 成交 | 显示成交相关的数据推送 |
4 | 错误 | 显示调用底层接口时由于操作失败触发的错误信息推送 |
4 | 日志 | 显示来自于系统内各个组件发出的日志信息 |
5 | 持仓 | 显示持仓数据信息(定时轮询,非实时) |
5 | 资金 | 显示账户资金查询的数据结果(定时轮询,非实时) |
接下来以交易1手甲醇期货为例,展示如何进行手动交易操作。
这里我们使用的甲醇合约是MA705,则在交易组件中输入交易合约代码MA705后按回车,则会自动订阅该合约的行情。CTP接口在用户订阅某个合约的行情后,会立即推送当前交易日内最新的一条Tick数据,系统收到后会自动在右侧的行情组件中显示出接收到的该合约实时行情数据,如最新价、买一价量和卖一价量等。
假设我们要先开1手多单:
现在要将之前的1手多单平仓:
委托组件中会显示当前交易日内提交过的所有委托信息,而成交组件中则会显示当前交易日内的所有成交记录。
下图中,我们进行了一次在2686价位开多仓,然后在同样价格平仓的操作:
交易的方向和开平仓
在实际期货交易中,可以结合方向类型以及开平组合出各种具体的交易指令,例如:买入开仓(Buy)、卖出平仓(Sell)、卖出开仓(Short)、买入平仓(Cover)等。
注意,平昨是优先平掉昨天的仓位,而平今则是优先平掉今天的仓位,两者的具体规则各家交易所有所不同,请参考交易所发布的相关交易指令说明。
数量、价格和价格类型
其中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 | 未知(即以上以外的交易所) |