发布于veighna社区公众号【vnpy-community】
原文作者:用Python的交易员 | 发布时间:2022-12-20
《30天精进Python交易GUI》课程更新27-30集,详细讲解了基于Qt表格控件来自定义开发各种交易数据的监控功能,满足量化交易中的行情、委托、策略、算法等的实时跟踪需求,感兴趣的同学请戳这里。
上周发布了VeighNa的3.5.0版本,本次更新的主要内容是优化了PortfolioStrategy模块,增加对目标调仓交易的支持。
对于已经安装了VeighNa Studio的用户,可以使用快速更新功能完成自动升级。对于没有安装的用户,请下载VeighNa Studio-3.5.0,体验一键安装的量化交易Python发行版,下载链接:
https://download.vnpy.com/veighna_studio-3.5.0.exe
目标调仓交易支持
许多VeighNa社区的用户对于PortfolioStrategy投资组合策略模块的理解,可能主要停留在【支持同时交易多标的合约的CtaStrategy版本】,但实际上两者的定位有着相当大的区别。
CtaStrategy模块主要针对的是单标的时序类的量化策略(也就是国内俗称的CTA策略),主要的Alpha盈利来源是对买卖点位的择时。因此在CtaTemplate策略模板中,提供了包括本地停止单(StopOrder)、委托更新(on_order)、成交通知(on_trade)等功能,帮助用户实现对交易执行层面比较细致的控制能力。
而PortfolioStrategy模块则针对的是多标的投资组合类的量化策略,这类策略的Alpha盈利来源除了时序上的买卖择时外,还包括截面上的资产配置(或者说大家更习惯的一个词【选股】)。这类策略在执行层面追求的是将策略投资组合的持仓调整到目标状态,而不去过多关注底层的委托交易细节。
之前在PortfolioStrategy自带的策略样例中,已经提供了目标调仓交易的样例,不过从社区反馈来看还是不那么容易理解和掌握。
所以本次3.5.0的更新,在投资组合策略模板层面(StrategyTemplate)增加了对于目标调仓交易的支持,新增的功能函数如下:
set_target
设置某个合约的目标仓位;
参数:
- vt_symbol(str):合约本地代码;
- target(int):目标仓位(正数代表做多、负数代表做空);
返回:无;
注意:目标仓位是一种持续性的状态,因此设置后在后续时间会持续保持下去,直到被再次设置修改;
get_target
查询某个合约的目标仓位;
参数:
- vt_symbol(str):合约本地代码;
返回:目标仓位(int);
注意:策略的目标仓位状态会在sync_data时(成交、停止等)自动持久化到硬盘文件,并在策略重启后恢复;
rebalance_portfolio
基于目标执行调仓交易;
参数:
- bars(dict):当前K线切片的字典;
返回:无
注意:只有当前bars字典中有K线切片的合约,才会参与本次调仓交易的执行,从而保证非交易时段(没有行情推送)的合约不会错误发出委托;
calculate_price
计算调仓委托价格;
参数:
- vt_symbol(str):合约本地代码;
- direction(Direction):委托买卖方向;
- reference(float):计算参考价格(K线切片收盘价);
返回:调仓委托价格(float);
注意:该函数支持重载实现,允许用户按需实现委托价格的计算逻辑(如固定价格超价、固定pricetick超价、百分比超价等),默认直接返回参考价格;
上述函数的具体使用方法,可以参考这里的模块自带策略样例。
本次PortfolioStrategy模块的修改仅在策略模板层面增加了功能,没有破坏老版本兼容性的内容,因此基于之前版本开发的策略代码依旧可以直接使用。
交易接口模块更新
米筐RQData行情接口
米筐RQData从2.9.38版本开始,就在其rqdatac(RQData的Python客户端库)中提供了LiveMarketDataClient组件,用于订阅获取跨市场实时行情推送。
本次更新中新增了RqdataGateway跨市场行情接口,依旧位于vnpy_rqdata模块下,可以在VeighNa Station界面上直接加载使用。目前RqdataGateway支持了股票、指数、ETF基金、期货的行情订阅获取(需要RQData账号开通了对应权限),后续我们也会根据社区反馈的需求进一步增加,如可转债、期权、黄金TD、逆回购等。
需要注意的是,RqdataGateway本身作为行情接口只提供了合约查询和行情订阅功能。有仿真交易需求的用户(主要可能是为了测试股票、ETF基金相关的策略),可以配合PaperAccount模块来实现本地仿真的跨市场模拟交易:
东方财富EMT交易接口
EMT是由东方财富证券推出面向机构投资者的极速证券柜台,除了提供广泛的交易业务支持外,也提供了EMQ极速行情服务。EMT的官方网站上(emt.18.cn)提供了在线账号开通和权限申请功能(包括测试和实盘),十分方便。
本次更新中新增的vnpy_emt模块基于2.10.0版本的EMT C++ API开发,目前支持了A股现货的行情和交易功能。
国泰君安HFT交易接口
HFT是由国泰君安证券推出的统一交易网关,实现了一套API接入多种后端极速柜台的功能,方便用户根据自己每个阶段的需求选择合适的柜台,并在后续需要切换时平滑过渡。
本次更新中将vnpy_hft模块中使用的HFT API版本升级到了2.3.6,同时添加了市价单委托的支持。
CHANGELOG
新增
新增基于米筐RQData的跨市场行情数据接口RqdataGateway
新增东方财富证券EMT柜台交易接口vnpy_emt
调整
调整vnpy_algotrading模块设计(模板、引擎),只支持单合约算法执行交易
优化vnpy_algotrading的算法状态控制,增加状态枚举值,算法支持暂停和恢复运行
升级vnpy_hft接口支持HFT国泰君安证券统一交易网关的2.0版本API
优化vnpy_portfoliostrategy的策略模板,支持持仓目标调仓交易模式
修复
修复后台线程异常捕捉钩子函数,解决Python 3.7的语法兼容性问题
修复vnpy_mysql加载历史数据时存在时段重复的问题
修复vnpy_ib由于TWS客户端升级导致的委托失败问题
修复vnpy_rest/vnpy_websocket对Python 3.10后asyncio的支持
修复vnpy_sopt由于流控导致的委托失败时,返回【提交中】状态委托的问题