VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 4798
声望: 290

发布于veighna社区公众号【vnpy-community】
 
原文作者:用Python的交易员 | 发布时间:2023-09-15
 

2023年VeighNa小班特训营【套利价差交易】即将在10月中旬开班!对比趋势跟踪类的CTA策略,均值回归类的价差策略由于其高胜率的特征,能够实现相对更加平稳的盈利绩效,适合用于量化投资组合在市场横盘震荡期的配置优化。目前半数名额已经被报名锁定,感兴趣的同学请抓紧!内容大纲戳这里

上周发布了VeighNa的3.8.0版本,本次更新的主要内容是IB接口的整体功能强化,升级到10.19.1新版本API的同时,也进一步完善了期权相关的交易功能,包括期权链合约数据的查询获取,以及订阅获取IB实时推送的隐含波动率和希腊值风险数据。

对于已经安装了VeighNa Studio的用户,可以使用快速更新功能完成自动升级。对于没有安装的用户,请下载VeighNa Studio-3.8.0,体验一键安装的量化交易Python发行版,下载链接:

https://download.vnpy.com/veighna_studio-3.8.0.exe

使用Ubuntu或者Mac系统的用户,推荐使用VeighNa Docker量化交易容器解决方案:

https://hub.docker.com/repository/docker/veighna/veighna

 

新版本的IB接口

 

API安装方式

VeighNa平台的IB接口模块vnpy_ib,底层基于IB官方推出的ibapi接口库开发。目前ibapi的10.19.1新版本已经不再通过PyPI发布,也就是无法直接通过pip install来安装了(会安装到老版本的9.81.1.post1),同样也意味着无法在VeighNa Studio中打包提供。

用户首先需要前往IB官网的API下载页面,下载自己操作系统对应的API安装程序:

description

推荐选择Stable版本,图中这里对应的是2022年11月16日发布的10.19版本(左上红色方框),下载完成后运行安装,API开发库会被安装到指定目录(默认为C:\TWS API)。

打开该目录下的source\pythonclient文件夹,看到如下图所示的内容:

description

该文件夹中包含的就是ibapi接口库源代码,在空白处按住Shift点击鼠标右键,菜单中选择【在此处打开Powershell窗口】,在弹出的命令行中运行下述命令即可将ibapi安装到Python环境中:

python setup.py install

 

数字代码回归

由于IB接入的金融市场数量众多,导致其上可交易的合约数量非常庞大,不同交易所之间经常会出现合约代码冲突的情况。而国内金融市场大部分情况下都可以通过一个简短的代码来确定具体要交易的合约,比如IF2309.CFFEX、600036.SSE等。

VeighNa核心框架设计上遵循了这一规则,在早期vnpy_ib版本中合约代码(symbol)使用的是由IB(而非交易所)为每个合约分配的ConId,即【数字代码】(如下图中的51529211):

description

在TWS软件中【右键点击任意合约】->【金融产品信息】->【详情】,即可弹出上图中的页面。

尽管使用ConId在程序内部逻辑上非常方便,但对于交易员来说却不便记忆。基于社区用户的反馈建议,vnpy_ib后续版本中替换为了IB合约描述信息的一个字符串组合,即【描述代码】(如SPY-USD-STK、ES-202002-USD-FUT)。

使用【描述代码】2年多后,陆续收到期权交易相关的问题反馈,核心原因有两点:

  • 期权合约描述信息过多,如到期日、行权价、合约乘数等,导致代码太长使用麻烦;
  • 有些期权行权价是浮点数,使得代码中会出现【.】,进而导致vt_symbol相关字符串解析逻辑出错。

综合来看,这两种代码类型都有各自好用的场景和难用的问题,那解决方案自然就是两者一起支持。所以在3.8.0版本中,vnpy_ib接口重新引入了对于【数字代码】的支持,并且两种代码类型可以混合使用,遵循以下规则:

  • 订阅行情时,可以根据自己的习惯选择使用【数字代码】或者【描述代码】;
  • 首次订阅后,接口层会自动查询合约信息,并根据使用的代码类型缓存到文件(重启会自动加载);
  • 后续收到该合约的委托、成交、持仓等相关推送数据,都会自动使用之前选择的代码类型;
  • 如果在主动订阅某个合约行情之前就收到了推送数据,那么默认会使用【数字代码】;

建议之前已经习惯了【描述代码】的用户可以正常继续使用,对于有期权交易需求的用户则更推荐使用【数字代码】。

 

期权交易增强

Interactive Brokers(IB)创始人Thomas Peterffy,早年以期权交易所场内做市交易员身份进入金融行业,后来创建了Timber Hill这家在全球期权市场发展历史上贡献颇多的自营做市商公司,而今的IB只是其当时的副业(用于提供全球交易所的交易链路接入)。

因此IB的TWS平台期权交易方面的功能可谓十分强大,本文封面图片就是TWS平台内置的Volatility Lab(波动率实验室)截图,对内部功能细节感兴趣的话推荐可以看这里的IB官方文档

3.8.0版本的IB接口,在连接登录时提供了【查询期权】选项:

description

选择为【是】后,每次订阅标的合约行情时,均会自动发起查询其上期权链合约,从而满足期权策略交易中所需的期权产品组合信息。

同时在IB期权Tick行情数据推送中,增加了IB所提供的隐含波动率和希腊值风险数据支持,可以通过TickData.extra字典来访问获取,其中具体包括:

  • 前缀

    • bid:买1价
    • ask:卖1价
    • last:成交价
    • model:模型价
  • 后缀

    • price:价格
    • impv:隐含波动率
    • delta、gamma、theta、vega:理论希腊值

前缀和后缀两者组合为具体的数据字段,举例来说:

  • bid_impv:当前买1价对应的隐含波动率
  • last_delta:当前成交价对应的理论Delta值

以上TickData数据对象,可以通过VeighNa平台中策略模块(CtaStrategy、PortfolioStrategy等)下策略模板所提供的on_tick函数来接收获取实时推送。

 

华鑫奇点接口重构

 

之前版本中的vnpy_tora基于奇点官方提供的Python 3.7 API开发,只能在Python 3.7环境中使用,VeighNa Station因为内置环境是Python 3.10一直用不了。

本次3.8.0版本更新中使用了奇点的C++ API重构封装,对于API层和Gateway层都做了兼容性调整,目前已经可以在VeighNa Station中直接加载使用。

 

CHANGELOG

 

新增

  1. K线合成器(BarGenerator)增加对日K线的合成支持

  2. 基于华鑫奇点柜台的C++ API重构vnpy_tora,实现VeighNa Station加载支持

  3. 新增vnpy_ib对于期权合约查询、波动率和希腊值等扩展行情数据的支持

调整

  1. vnpy_rest/vnpy_websocket限制在Windows上改为必须使用Selector事件循环

  2. vnpy_rest/vnpy_websocket客户端关闭时确保所有会话结束,并等待有异步任务完成后安全退出

  3. vnpy_ctp升级6.6.9版本API

  4. vnpy_ctp支持大商所的1毫秒级别行情时间戳

  5. vnpy_tqsdk过滤不支持的K线频率查询并输出日志

  6. vnpy_datamanager增加数据频率下按交易所显示支持,优化数据加载显示速度

  7. vnpy_ctabacktester如果加载的历史数据为空,则不执行后续回测

  8. vnpy_spreadtrading采用轻量级数据结构,优化图形界面更新机制

  9. vnpy_spreadtrading价差子引擎之间的事件推送,不再经过事件引擎,降低延迟水平

  10. vnpy_rpcservice增加对下单返回委托号的gateway_name替换处理

  11. vnpy_portfoliostrategy策略模板增加引擎类型查询函数get_engine_type

  12. vnpy_sec更新行情API至1.6.45.0版本,更新交易API版本至1.6.88.18版本

  13. vnpy_ib更新10.19.1版本的API,恢复对于数字格式代码(ConId)的支持

  14. 没有配置数据服务或者加载模块失败的情况下,使用BaseDatafeed作为数据服务

  15. 遗传优化算法运行时,子进程指定使用spawn方式启动,避免数据库连接对象异常

  16. 合约管理控件,增加对于期权合约的特有数据字段显示

修复

  1. 修复vnpy_datarecorder对于新版本vnpy_spreadtrading价差数据的录制支持

  2. 修复vnpy_algotrading条件委托算法StopAlgo全部成交后状态更新可能缺失的问题

  3. 修复vnpy_ctastrategy策略初始化时,历史数据重复推送调用on_bar的问题

  4. 修复vnpy_wind查询日线历史数据时,数值存在NaN的问题
     

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

'修复vnpy_ctastrategy策略初始化时,历史数据重复推送调用on_bar的问题',请问这个问题是改的哪个文件呢,之前有什么问题呢?

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

🎉👏🍾️

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

一个小bug,如下图
description

(mac下3.7就有此问题,3.8还木有修复;设个宽度值即可)

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

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】