vn.py量化社区
By Traders, For Traders.
Administrator
avatar
加入于:
帖子: 2085
声望: 96

上周末终于完成了v2.0.3的开发测试工作,安装使用v2.0.3最简单的方式就是VN Studio量化交易Python发行版:VNStudio-2.0.3,傻瓜式快速安装好所有环境,包括:

  1. Python 3.7(社区官方版本)
  2. vn.py框架和其他相关库
  3. VN Station量化工作站(vn.py框架的图形化管理工具)

请注意:之前基于miniconda + constructor工具打包的VNConda发行版,由于相关工具成熟度较低,导致大家在使用过程中出现了许多小问题,尝试解决后发现修复难度太大(Anaconda确实是极好用的发行版,但打包工具这块真心不行),决定不再提供支持。

请之前安装了VNConda的用户卸载后重新安装VN Studio,大家卸载时不用担心自己的历史数据和系统配置(位于用户目录下),安装VN Studio后可以无缝直接使用,给大家造成的麻烦深表歉意。

遗传算法

v2.0.3版本最重要的更新内容:正式将遗传算法参数优化功能集成到了CtaStrategy模块的回测引擎中。

首先,什么是遗传算法:

遗传算法(英语:genetic algorithm (GA) )是计算数学中用于解决最优化的搜索算法,是进化算法的一种。进化算法最初是借鉴了进化生物学中的一些现象而发展起来的,这些现象包括遗传、突变、自然选择以及杂交等。

遗传算法通常实现方式为一种计算机模拟。对于一个最优化问题,一定数量的候选解(称为个体)可抽象表示为染色体,使种群向更好的解进化。传统上,解用二进制表示(即0和1的串),但也可以用其他表示方法。进化从完全随机个体的种群开始,之后一代一代发生。在每一代中评价整个种群的适应度,从当前种群中随机地选择多个个体(基于它们的适应度),通过自然选择和突变产生新的生命种群,该种群在算法的下一次迭代中成为当前种群。

(摘自WIKI百科)

估计大部分人看完的表情如下:

lihai

但从应用的角度来讲,就完全不难理解了。与遗传算法(或者其他任何智能优化算法)对应的,叫做穷举算法(又名暴力求解,Brute-force Search),我们以vn.py中的经典CTA策略(AtrRsiStrategy)[https://github.com/vnpy/vnpy/blob/master/vnpy/app/cta_strategy/strategies/atr_rsi_strategy.py]为例做一个参数优化:

  • atr_length参数(默认22):从10到40,步进1,总样本32
  • atr_ma_length参数(默认10):从4到20,步进2,总样本9
  • rsi_length参数(默认5):从3到20,步进1,总样本18

如果用穷举算法的话,我们一共执行 32 x 9 x 18 = 5184 次回测计算(三个参数所有样本的排列组合数量),即时在一台8核机器上也要跑648轮,相当长的一段时间了。

我们知道,随着策略的参数变化,最终的优化结果(又称目标函数,比如Sharpe Ratio)的变化并不是完全随机的,而是存在着一定的相关性,比如当atr_length处于18-25范围内的优化结果可能都比较好(先不考虑另外两个参数),如果到38上方可能就全都是亏钱的情况。

那么如果在发现某一组参数的回测效果比较好的时候,在这组参数附近进一步搜索得到好参数的概率,就会远大于去找离得比较远的参数,就像自然界中生物的遗传一样:

  1. 远古时代一块地区的树都比较高(历史数据限制)
  2. 高个子的恐龙更容易吃到高处的树叶(目标函数)
  3. 高个子恐龙的生存能力更强,更有几率留下后代(符合条件的参数)
  4. 其后代中同样个子比较高的恐龙,能更好的生存下去(附近同样效果好的参数)

description

大自然高效的体现之一,就在于这些高个子恐龙的后代在身高方面的表现,绝对不会是平均分布的(暴力穷举),而是会围绕在父母恐龙的高个子身高附近分布(遗传算法)。以上的例子仅仅为了帮助大家能够对遗传算法有个比较快速直观的认识,在细节方面可能并不是那么切合,但从优化速度的对比方面就能很好的体现出其效果:

description

以布林带策略(BollStrategy)的参数优化为例:

  • 使用的机器是一台阿里云的2核4G云服务器(CPU主频2.5G)
  • 使用3年的股指连续合约的1分钟线数据,一共有三个参数参与优化,总样本空间韦13824个
  • 多进程穷举算法的总优化时间为357分钟(双核跑满)
  • 单进程遗传算法的总优化时间为27分钟(单核跑满)

所以在算力少一半的情况下,遗传算法的优势差不多是穷举算法的12倍多!!!

所以,这么牛逼的功能怎么用?

description

在CTA回测组件的参数优化对话框中,设置好要优化的参数后点击第二个按钮“遗传算法优化”就行,没有任何其他步骤(这才叫做集成~)。

当然考虑到vn.py社区总有这么一群不甘寂寞热爱折腾的用户,遗传算法优化功能也同样可以通过cta_strategy模块的BacktestingEngine调用,函数名为:run_ga_optimization,支持更多的可选参数配置。

最后,上述遗传算法优化功能基于Python数据分析生态中强大的DEAP库,除了最常用的遗传算法外,还有更多相对小众但特别的优化算法:粒子算法、蚁群算法等等,绝对能满足你的折腾爱好。

行情记录模块

用于录制Tick和K线行情的DataRecorder行情记录模块,应该大部分vn.py用户都不陌生了。在v2.0.3中完成了对其的移植,同时也遵循2.0的全UI界面配置风格,所有的录制记录添加、移除操作都可以通过界面完成,傻瓜到我就不多介绍了,放个图吧:

description

本地代码编辑框,支持对当前已经连接上接口的合约代码自动补全。

全局配置

VN Trader中的一些内部功能需要通过全局配置来管理,之前需要用户手动修改用户目录下的.vntrader/vt_setting.json,在v2.0.3中也新增了全局配置对话框,注意:所有修改保存后必须重启VN Trader才能生效

description

  • font:显示字体配置
  • log:日志记录配置
  • email:邮件引擎配置(用QQ邮箱可以给微信发信息)
  • rqdata:RQData数据服务配置
  • database:数据库相关配置

接口更新

vn.py每个版本更新不可或缺的就是新接口或者接口新功能了,v2.0.3新增了:

  • XtpGateway:中泰证券XTP柜台接口
  • FemasGateway:飞马期货柜台接口
  • HbdmGateway:火币数字货币期货合约接口,支持历史数据查询
  • OkexfGateway:OKEX数字火币期货合约接口

相关接口的使用说明请在官网文档板块查看。

最后,本周末(2019-5-25)下午将举行vn.py社区2019年第六次线下活动(上海),很荣幸能够邀请到XTP的负责人中泰证券何波总来分享相关的内容,同时也邀请到了国内最顶尖的期货量化公司之一南华期货来分享超低延时行情和交易系统的主题,报名请扫描下方二维码:

description

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

求算法交易的教程,文档?

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