pc8888888 发表于 2021-11-21 12:22

vn.py发布v2.4.0

发布于vn.py社区公众号【vnpy-community】
原文作者:用Python的交易员 | 发布时间:2021-06-22

本周一发布了vn.py的2.4.0版本,本次更新的内容主要是实现了多进程模式的遗传算法优化,在保留遗传算法对于参数优化时智能任务调度的同时,大幅提高计算性能,降低整体的优化耗时。
和之前一样,对于使用VN Studio的用户,启动VN Station后,直接点击界面右下角的【更新】按钮就能完成自动更新升级,对于没有安装的用户,请下载VN Studio-2.4.0,体验一键安装的量化交易Python发行版,下载链接:
https://download.vnpy.com/vnstudio-2.4.0.exe

多进程模式的遗传算法优化
一点背景
在之前版本的vn.py中,针对策略参数优化的需求提供了两套算法工具,分别是暴力穷举优化(Brutal Force)和遗传算法优化(Genetic Algorithm)。
其中暴力穷举优化在运行的过程中,由于每轮执行的计算任务互相之间不存在任何状态依赖,可以非常方便的使用multiprocessing库扩展到多进程模式执行,从而充分利用CPU所有核心的算力来加速。
而遗传算法优化在运行的过程中,每轮执行的计算任务中会存在相当比例的重复部分(源于优秀参数的交叉生成),因此采用了lru_cache的缓存机制来实现加速。同时lru_cache的结果缓存只能在单进程中生效,扩展到multiprocessing的多进程模式后,因为缓存失效反而会导致最终的速度变慢。
改进方案
社区里有极少数vn.py的资深用户,自行改造实现了基于Redis内存数据库缓存的重量级多进程遗传算法优化功能。但由于Redis本身安装较为麻烦,且内存开销很大,使得这个方案对于普通用户来说几乎没有可行性。
在2.4.0的更新中,我们采用multiprocessing库的Manager数据服务进程作为缓存方案,将vn.py内置的遗传算法优化功能升级到了多进程版本,实现数十倍优化速度提升的同时,还无需依赖任何外部工具,对于新手小白来说都是【开箱即用】!
实际操作
对于vn.py的用户来说,在实际操作上和之前的版本完全一致。打开【CTA回测】模块的【参数优化】对话框后,配置好要执行优化的参数空间,点击下图红框中的【遗传算法优化】按钮即可启动优化任务:


唯一的区别在于此时打开Windows系统的【任务管理器】查看CPU占用情况,会发现所有的CPU核心都已经跑满(对比之前的单进程遗传算法优化,最高只会占满一个核心):



标准化改造
之前不少用户反映过一个问题:只有CTA策略(cta_strategy)模块内置了优化功能,而价差交易(spread_trading)和组合策略(portfolio_strategy)都需要用户自行实现(比如在Jupyter Notebook里写一个for循环来执行优化)。
所以本次更新中,我们将暴力穷举和遗传算法两套优化工具统一进行了标准化改造,从CTA策略模块中剥离,放置到了vnpy.trader.optimize模块下,后续会基于它们来实现其他策略模块的参数优化功能。

基于aiohttp重构RestClient和WebsocketClien
RestClient和WebsocketClient是目前vn.py框架中针对各类REST API和Websocket API统一开发的标准化客户端工具,在之前的版本中采用【同步调用 + 多线程】的模式来实现高性能通讯。
但由于GIL全局锁的存在,线程多了难免会出现性能下降的情况,尤其对于需要加载多个接口运行套利类策略的用户说更加敏感。因此在2.4.0版本中新增了基于aiohttp实现的【异步调用 + 协程】模式客户端,只需一个线程(运行事件循环)即可实现所有相关接口的异步事件驱动。
整体的组件替换如下:
事件驱动:线程池ThreadPool -> 协程asyncioRestClient客户端:requests -> aiohttpWebsocketClient客户端:websocket-client -> aiohttp
考虑到潜在的兼容性问题,两个新的客户端放到了全新的vnpy_rest和vnpy_websocket项目中,接下来会在剥离各个相关的交易接口时逐步替换。同时老的客户端依旧位于vnpy.api.rest和vnpy.api.websocket下,可以继续使用。

其他更新
Deribit交易接口
剥离到vnpy_deribit项目中,同时升级到2.0.1版本的API。
XTP交易接口
剥离到vnpy_xtp项目中,升级到2.2.27版本的API,新增了
Ubuntu上的一键自动安装功能;行情接口对于本地网卡地址的支持。
Bybit交易接口
剥离到vnpy_bybit项目中,同时升级到2021.6.21版本的API。

CHANGELOG
新增
新增TickData的本地时间戳字段local_time(不带时区信息)新增基于asyncio和aiohttp实现的协程异步REST API客户端vnpy_rest项目新增基于asyncio和aiohttp实现的协程异步Websocket API客户端vnpy_websocket项目新增基于多进程模式的遗传算法优化功能新增XTP的API封装中,行情登录函数对于本地网卡地址的参数支持
调整
将Deribit接口剥离到vnpy_deribit项目中,并升级到2.0.1版本剥离CTA策略模块下的穷举和遗传优化算法到vnpy.trader.optimize模块下遗传算法优化完成后,输出所有回测过的参数对应结果(而不只是最优结果)CTA策略引擎加载策略文件时,增加模块重载的操作,使得任何策略文件修改可以立即生效CTA策略引擎扫描特定目录下的策略文件时,使用glob函数(替换原有的os.walk),避免对子目录中文件的错误加载将CTA策略模块剥离到vnpy_ctastrategy项目中将CTA回测模块剥离到vnpy_ctabacktester项目中将XTP接口剥离到vnpy_xtp项目中,并升级到2.2.27.4版本将事前风控模块剥离到vnpy_riskmanager项目中将数据管理模块剥离到vnpy_datamanager项目中将Deribit接口剥离到vnpy_bybit项目中,并升级到2021.6.21版本
修复
修复BinancesGateway由于撤单请求失败,导致委托持续处于【提交中】状态的问题修复MySQL和PostgreSQL数据库管理器删除K线数据时出错的问题修复基于aiohttp的RestClient和WebsocketClient,事件循环停止后重新启动失败的问题修复BinancesGateway由于保持会话流超时失败,导致的系统卡死问题修复HuobisGateway,订阅O3-USDT(代码中有数字)合约行情失败的问题修复BinanceGateway,使用市价下单报错的问题修复CtaBacktester基于Tick级别数据进行参数优化时,启动优化失败的问题修复ToraStockGateway和ToraOptionGateway,调用下单函数时没有返回委托号的问题修复InfluxDB数据管理器,导入数据时时间字段解析错误的问题

franciscochonge 发表于 2021-11-21 12:27

vn.py 与 quantaxis 相比,如何呢

pc8888888 发表于 2021-11-21 12:36

直接下载试用了对比下哪个适合自己就好吧,开源软件的好处不就是这个么
思考
页: [1]
查看完整版本: vn.py发布v2.4.0