VeighNa量化社区
你的开源社区量化交易平台
xiaohe's Avatar
Member
离线
4300 帖子
声望: 268

可以贴一下截图;
你的账户性质是(实盘/模拟账户)?

可以试试pip install matplotlib --force-reinstall

检查一下你的策略变量列表里是否有out_range,但是没有定义

paperaccount模块不提供资金计算功能

之前有报4040的都是和4097在一起,解决dll问题之后就没了。但是从图上看你这里行情接口还是没连上,可以咨询一下期货公司工作人员看看

如果有需要可以自己按需进行个性化修改呀

发布于vn.py社区公众号【vnpy-community】
 
原文作者:用Python的交易员 | 发布时间:2021-06-22
 
《30天掌握Python数据分析课程》更新到第40集,最新的5集重点讲解了如何基于pandas实现时间序列数据的各种操作处理,解决策略研究中对于多合约和多类型数据的排序对齐问题。详细课程大纲请戳我~~~
 

本周一发布了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回测】模块的【参数优化】对话框后,配置好要执行优化的参数空间,点击下图红框中的【遗传算法优化】按钮即可启动优化任务:

description

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

description

标准化改造

之前不少用户反映过一个问题:只有CTA策略(cta_strategy)模块内置了优化功能,而价差交易(spread_trading)和组合策略(portfolio_strategy)都需要用户自行实现(比如在Jupyter Notebook里写一个for循环来执行优化)。

所以本次更新中,我们将暴力穷举和遗传算法两套优化工具统一进行了标准化改造,从CTA策略模块中剥离,放置到了vnpy.trader.optimize模块下,后续会基于它们来实现其他策略模块的参数优化功能。

 

基于aiohttp重构RestClient和WebsocketClient

 

RestClient和WebsocketClient是目前vn.py框架中针对各类REST API和Websocket API统一开发的标准化客户端工具,在之前的版本中采用【同步调用 + 多线程】的模式来实现高性能通讯。

但由于GIL全局锁的存在,线程多了难免会出现性能下降的情况,尤其对于需要加载多个接口运行套利类策略的用户说更加敏感。因此在2.4.0版本中新增了基于aiohttp实现的【异步调用 + 协程】模式客户端,只需一个线程(运行事件循环)即可实现所有相关接口的异步事件驱动

整体的组件替换如下:

  • 事件驱动:线程池ThreadPool -> 协程asyncio
  • RestClient客户端:requests -> aiohttp
  • WebsocketClient客户端:websocket-client -> aiohttp

考虑到潜在的兼容性问题,两个新的客户端放到了全新的vnpy_rest和vnpy_websocket项目中,接下来会在剥离各个相关的交易接口时逐步替换。同时老的客户端依旧位于vnpy.api.rest和vnpy.api.websocket下,可以继续使用。

 

其他更新

 

XTP交易接口

剥离到vnpy_xtp项目中,升级到2.2.27版本的API,新增了:

  • Ubuntu上的一键自动安装功能
  • 行情接口对于本地网卡地址的支持。

 

CHANGELOG

 

新增

  1. 新增TickData的本地时间戳字段local_time(不带时区信息)
  2. 新增基于asyncio和aiohttp实现的协程异步REST API客户端vnpy_rest项目
  3. 新增基于asyncio和aiohttp实现的协程异步Websocket API客户端vnpy_websocket项目
  4. 新增基于多进程模式的遗传算法优化功能
  5. 新增XTP的API封装中,行情登录函数对于本地网卡地址的参数支持

调整

  1. 剥离CTA策略模块下的穷举和遗传优化算法到vnpy.trader.optimize模块下
  2. 遗传算法优化完成后,输出所有回测过的参数对应结果(而不只是最优结果)
  3. CTA策略引擎加载策略文件时,增加模块重载的操作,使得任何策略文件修改可以立即生效
  4. CTA策略引擎扫描特定目录下的策略文件时,使用glob函数(替换原有的os.walk),避免对子目录中文件的错误加载
  5. 将CTA策略模块剥离到vnpy_ctastrategy项目中
  6. 将CTA回测模块剥离到vnpy_ctabacktester项目中
  7. 将XTP接口剥离到vnpy_xtp项目中,并升级到2.2.27.4版本
  8. 将事前风控模块剥离到vnpy_riskmanager项目中
  9. 将数据管理模块剥离到vnpy_datamanager项目中

修复

  1. 修复MySQL和PostgreSQL数据库管理器删除K线数据时出错的问题
  2. 修复基于aiohttp的RestClient和WebsocketClient,事件循环停止后重新启动失败的问题
  3. 修复CtaBacktester基于Tick级别数据进行参数优化时,启动优化失败的问题
  4. 修复ToraStockGateway和ToraOptionGateway,调用下单函数时没有返回委托号的问题
  5. 修复InfluxDB数据管理器,导入数据时时间字段解析错误的问题

可能是传进了非交易时段的tick导致的,可以过滤一下传进来的tick试试

可以附一下完整报错截图,这样看不清楚。调节显示的方法已经在另一个帖子回复了

请先把屏幕分辨率改成1920x1080将缩放调好再试看看吧。若1080的分辨率仍显示不正常,缩放比例改成100%缩放试试看。

StopOrder是没有datetime这个字段的

看你配置图是uft接口,脚本上又连的是ctp接口。请问到底是需要连接哪个接口?是什么类型的账户(实盘或模拟)?

ctptest是做穿透式测试用的。
ctp接口不提供历史数据,如果需要在回测界面下载国内期货历史数据需要配置rqdata数据服务。
这些文档里都有写,请先看看文档吧。
https://www.vnpy.com/docs/cn/data_manager.html

是不是策略里load_bar函数没改成load_tick

可能是有非交易时间的数据进来了,可以在process_tick_event下面过滤试试

请问VN Trader的版本是?

检查一下你的参数列表吧,应该是在参数列表里写了一个没有声明的参数名strategy_name

可以自己在策略里打印一下策略变量、策略交易状态和交易信号看看

© 2015-2022 微信 18391752892
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

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