vnpy_ctp封装了reqQryOrder函数可以请求查询报单,有需要可以自己进行个性化修改了
发布于veighna社区公众号【vnpy-community】
原文作者:用Python的交易员 | 发布时间:2023-3-30
上篇文章展示了RUMI策略在rb99.SHFE上的初步回测绩效,跑通了策略回测下一步自然就是参数优化。
《海龟交易法则》这本书的参数优化章节中提到,传统上使用较多的总收益率(total_return)、收益回撤比(return_drawdown_ratio)、夏普比率(sharpe_ratio)等指标,由于其计算公式中过度依赖【起始】和【结束】两个点的数值,导致其用于策略绩效评估中的【稳健性略有不足】。
这里用图例来说明,下图中的紫色实线为某一策略的回测资金曲线:
绿色和红色两条虚线,分别为选取不同的起始和结束时间点后,体现出的策略整体收益情况。对于同样一条资金曲线,仅仅由于所选时间段的区别,就造成了虚线斜率(总收益率,同时影响收益回撤比和夏普比率计算中的分子)相当显著的偏差,在参数优化中也就更容易导致【过度拟合】的问题。
搞清楚了问题所在,解决方案也十分简单:就是让整条资金曲线上更多的数据点能够参与斜率的计算。经典方法之一就是统计学中的线性回归(Linear Regression),体现为上图中的这条蓝色虚线,相对更能够代表策略的长期收益情况。
围绕这一思路,《海龟交易法则》的作者柯蒂斯提出了【R-Cubed】稳健优化指标:
VeighNa Elite版的CTA回测引擎中内置了R-Cubed统计指标,基于其对RUMI策略在rb99.SHFE的2010-2019时间段上进行优化后(结合使用广域遗传和分组穷举),得到的策略参数为:
以此在2010至2023年初的回测结果即为上一篇的封面图:
上一篇文章发布后,有同学反馈担心使用99这种进行了平滑处理的指数会导致结果失真,这里使用过去一年三个具体主力合约和99的回测结果做一个对比(策略参数均使用上一步优化结果):
可以看到rb2205和rb2209的绩效统计指标要好于同期的rb99,而rb2301上则差于同期的rb99,但整体还是保持了较为明显的一致性。
除了螺纹钢rb以外,我们也在其他一些品种上尝试了RUMI策略。这里我们使用2017年至2023年2月(6年多)的数据来作为总数据集,选择从2017年1月到2020年6月作为样本内进行参数优化,然后使用2020年7月至2023年2月作为样本外进行检验。
为了节约文章长度,以下回测图表和统计指标均为总数据集上的结果:
回测参数:
交易成本
策略参数
bar_window: 25
bar_interval: "1m"
bar_buffer: 204
fast_window: 2
slow_window: 10
rumi_window: 40
stop_percent: 0.04
max_holding: 100
risk_window: 20
risk_capital: 100_000
回测参数:
交易成本
策略参数
回测参数:
交易成本
策略参数
至此我们围绕RUMI策略的研究告一段落。作为一套流传甚广的CTA策略,RUMI策略的核心逻辑体现出了量化研究中典型的【渐进式优化】特征:站在前人肩膀上(均线金死叉)迈出新的一步(过滤均线缠绕),从而实现更好的风险收益比。
今年接下来的时间里【Elite量化策略实验室】系列会持续更新,努力为大家带来更多量化策略深入解析。
VeighNa Elite已于本周正式上线发布1.0.0版本,目前对量化私募机构的投研人员提供一个月免费试用,感兴趣的同学请扫码添加小助手:
免责声明
文章中的信息或观点仅供参考,作者不对其准确性或完整性做出任何保证。读者应以其独立判断做出投资决策,作者不对因使用本报告的内容而引致的损失承担任何责任。
使用组合策略模块即可
策略的on_order函数会推送委托信息及委托状态
没有配置数据服务,如果用不到数据服务忽略就行,不影响运行
应该可以通过get_datafeed获取数据服务实例然后查询数据再完成计算吧
原来的策略和现在的策略除了修改剥离后的加载路径(从vnpy.app.ctastrategy import 改成vnpy_ctastrategy import )应该没有需要修改的地方
station现在不是开源的,多账户自己维护多个.vntrader文件夹启动即可,不用安装多个程序
视频课程公众号底部选随意一个课程进小鹅通,系列课程里有【期权零基础入门】和【深入定价模型】,小班课的话目前还没有
使用源代码安装时需要进行C++编译,需要安装Visual Studio
在接口文件所有调用on_order的地方print排查
用6.6.9的api重新编译
你启动目录在E:\vnpy,那应该删除E:\vnpy.vntrader下的cta_strategy_data.json
通过调用策略update_trade函数更新了的
你的vnpy_ctptest版本是?
如果process_trade_event函数压根收不到那么需要到接口打印一下是不是被过滤了,比如通过其他客户端下单之类的情况
支持的系统需要Windows Server 2019及以上了
上根K线下的委托不能和自己撮合,要基于下根K线撮合的
具体撮合逻辑可参考cross_limit_order和cross_stop_order函数