Hikyuu教程 | 滚动回测与滚动寻优系统

前面介绍了如何使用 hikyuu 进行策略回测参数优化,同时也提到了这种简单的参数优化本质其实是对历史数据的过拟合,通常并不具备直接使用的意义。那么有什么办法来减缓这种过拟合影响,让参数优化发挥实际的作用呢?答案是——使用滚动系统,但依然需要保持谨慎的态度,因为回测是拟合的本质并没有改变。

先来看一个简单的示例,依然使用趋势双均线,标的为万科,使用2001年-2010年数据进行参数寻优,参数寻优范围为 快线 [5, 80], 慢线 [50, 250],共 14535 组参数组合,寻优结果为快线41,慢线72。对2010年至2024年9月30日数据进行回测,下图分别为:使用最优参数的回测结果(左图)、使用滚动寻优系统的回测结果(右图)。其中滚动寻优为每300个交易日寻找最优参数,并使用最优参数系统执行200天,以此滚动推进。

在这里插入图片描述
在 hikyuu 中,创建滚动寻优系统很简单,指定寻优候选系统列表,滚动训练区间长度,测试执行区间长度,有效初始账户即可。当候选系统列表中仅有一个系统时,就是普通的滚动回测。并且,候选系统列表并要求一定是同一个策略的系统示例哦,也就是说,可以在不同的系统策略中进行滚动寻优。创建后的滚动系统实例,在 PF(投资组合)中依然可用,因为滚动交易系统本质还是一个单标的的交易系统实例。

# 指明参数寻优候选系统列表,滚动训练区间长度,测试执行区间长度
my_sys = SYS_WalkForward(sys_list, crtTM(), train_len=300, test_len=200)
my_sys.name = "滚动寻优系统"
my_sys.run(stk, query)
my_sys.performance()

滚动原理

滚动回测是通过不断向前滚动的时间窗口进行回测。具体来说,将历史数据划分为多个连续的时间段,每次只使用其中一个时间段进行回测,然后逐步向前移动时间窗口,重复进行回测。这样可以观察策略在不同时间点的表现,以及对市场变化的适应性。

滚动寻优同样是不断向前的滚动窗口,和普通单交易系统策略滚动不同的地方,则在于在训练周期内按一定的评估准则,对训练周期内所有候选系统进行评估,选取绩效最优的系统,在接下来的测试周期中,使用选择的最优系统执行实际的操作。说白了,当后续系统只有一个的时候,就是普通系统的滚动回测。

在这里插入图片描述

Hikyuu 中使用滚动系统

在 hikyuu 中创建滚动系统非常简单,只需要调用 SYS_WalkForward 即可创建,其帮助信息如下:
在这里插入图片描述
参数详细说明:

  • sys_list:候选系统实例列表,系统实例可以是同一系统策略实例,也可以是不同的系统策略示例,系统示例需绑定相应的证券。
  • tm:指定的交易账户
  • train_len:滚动寻优训练周期。如上图所示。默认为 100
  • test_len:最优绩效系统执行周期。如上图所属。默认为 20。
  • se:寻优评估选择器,用于对候选系统进行绩效评估,默认为当前候选系统账户期末资产最大选择器(SE_MaxFundsOptimal)。注:此 SE 和 PF 中的SE并不相同
  • train_tm:用于滚动评估时,候选系统使用的交易账户。默认为None,表示使用 tm 的拷贝进行评估。

评估选择器

评估选择器主要用于从候选系统中评估和选取最优的系统。目前提供两个内建的评估选择器:

  • SE_MaxFundsOptimal:账户资产最大寻优选择器
  • SE_PerformanceOptimal:使用 Performance 统计结果进行寻优的选择器(支持按最大值或最小值选取)

大家可以自行在 python 中 help 相关帮助。

其中 Performance 为交易账户绩效统计,可以通过下述语句查询支持的统计项:

per = Performance()
per.names()#output
['帐户初始金额','累计投入本金','累计投入资产','累计借入现金','累计借入资产','累计红利','现金余额','未平仓头寸净值','当前总资产','已平仓交易总成本','已平仓净利润总额','单笔交易最大占用现金比例%','交易平均占用现金比例%','已平仓帐户收益率%','帐户年复合收益率%','帐户平均年收益率%',
……

自定义评估选择器

如果上述内建的选择器还不能满足需求,比如AI评估时,可以自定义评估选择器
在这里插入图片描述

前述对比示例代码

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/882210.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

源码编译方式安装htppd软件

一.源码编译安装httpd软件 1.安装阿帕奇的依赖,安装apr软件,阿帕奇正常运行的环境这个环境就是apr。 2.安装apr-util软件,主要提供针对apr环境的管理工具, 3.安装阿帕奇软件即httpd软件。 如上图所示,就是三个软件的…

E38.【C语言】练习:数据结构时间复杂度的计算

目录 1.二分法的时间复杂度 解: 2.求阶乘的时间复杂度 解: 3.递归实现斐波那契数,求时间复杂度 解: 4.时间复杂度的排名 备注:有关时间复杂度的讲解参见80.【C语言】数据结构之时间复杂度 1.二分法的时间复杂度 (代码来自E7.【C语言】练习:在一个有序数组中…

CentOS 7 yum失效的解决办法

文章目录 一、CentOS 7停止维护导致yum失效的解决办法解决方案 提示:以下是本篇文章正文内容,下面案例可供参考 一、CentOS 7停止维护导致yum失效的解决办法 020 年,CentOS 项目与红帽联合宣布将全部投资转向 CentOS Stream,这是…

SpringBoot项目热部署-devtools

DevTools 会使用两个类加载器&#xff08;一个用于加载不变的类&#xff0c;一个用于加载可能会变化的类&#xff09;&#xff0c;每次重启只重新加载管理变化的类的加载器&#xff0c;因此会快很多 1.导入依赖 <dependency> <groupId>org.springframework.boot&l…

HCIE-Datacom题库_01_防火墙【18道题】

一、单选题 1.相比较于路由器、交接机&#xff0c;防火墙转发独有的模块为? 交换网板 MPU LPU SPU 解析&#xff1a; SFU&#xff08;Switch Fabric Unit&#xff09;&#xff1a;交换网板&#xff0c;负责整个系统的数据平面数据平面提供高速无阻塞数据通道&#xff0…

关于SOCKS协议的常见误区有哪些?

代理协议在设备与代理服务器之间的数据交换中起到了关键作用。在这方面&#xff0c;SOCKS代理协议是常见的选择之一&#xff0c;被广泛应用于下载、传输和上传网络数据的场景。然而&#xff0c;关于SOCKS代理协议存在一些常见的误解&#xff0c;让我们来逐一了解。 一、使用SO…

爬虫逆向-js进阶(续写,搭建网站)

1.搭建简单网站1 from flask import Flask,render_template import requests import json app Flask(name)# **location**的温度是**temp**度&#xff0c;天气状况&#xff1a;**desc**app.route(/) # 绑定处理函数 def index_url():location 101010100data get_weather(lo…

【学习】word保存图片

word中有想保存的照片 直接右键另存为的话&#xff0c;文件总是不清晰&#xff0c;截屏的话&#xff0c;好像也欠妥。 怎么办? 可以另存为 网页 .html 可以得到&#xff1a; 原图就放到了文件夹里面

C++简易日志系统:打造高效、线程安全的日志记录工具

目录 引言&#xff1a; 1.日志的基本概念 1.1.什么是日志&#xff1f; 1.2.我们为什么需要日志&#xff1f; 2.自己实现一个简易日志 2.1.日志的等级 2.2日志的格式 2.3.获取时间的方法 2.4.日志的主体实现 参数&#xff1a; 代码解析&#xff1a; 问题&#xff1a…

5、JavaScript(五)

28.jquery&#xff1a;js库 简化版本的js&#xff0c;封装了现成功能的js代码。 jquery就是一些封装好了的现成的方法&#xff0c;供我们直接使用。 jquery能实现的js都能实现。 在使用 记得先引入jquery&#xff1a;在菜鸟教程上直接用jquery的绝对路径引入&#xff0c;jq…

Gin框架操作指南03:HTML渲染

官方文档地址&#xff08;中文&#xff09;&#xff1a;https://gin-gonic.com/zh-cn/docs/ 注&#xff1a;本教程采用工作区机制&#xff0c;所以一个项目下载了Gin框架&#xff0c;其余项目就无需重复下载&#xff0c;想了解的读者可阅读第一节&#xff1a;Gin操作指南&#…

java游戏网站源码

题目&#xff1a;java游戏网站源码 编号B22A390 主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Mysql|大数据|SSM|SpringBoot|Vue|Jsp|MYSQL等)、学习资料、JAVA源码、技术咨询 文末联系获取 感兴趣可以先收藏起来&#xff0c;以防走丢&#xff0c;有任何选题、文档编…

什么是 BloomFilter

什么是 BloomFilter 布隆过滤器&#xff08;英语&#xff1a;Bloom Filter&#xff09;是 1970 年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。主要用于判断一个元素是否在一个集合中。 通常我们会遇到很多要判断一个元素是否在某个集合中的业务场景&a…

Cocos Creator导出obj文件用于后端寻路

Cocos Creator 3.8.0 用这个扩展插件 【杨宗宝】两年前写的网格工具&#xff0c;今天将它开源了。 - Creator 3.x - Cocos中文社区carlosyzy_extensions_mesh: Cocos Creator 3.x mesh插件&#xff0c;负责网格数据的导出。合并&#xff0c;拆封等一系列操作 (gitee.com) 下…

分类任务中评估模型性能的核心指标

在机器学习尤其是分类任务中&#xff0c;Accuracy&#xff08;准确率&#xff09;、Precision&#xff08;精确率&#xff09;、Recall&#xff08;召回率&#xff09;和F1 Score&#xff08;F1分数&#xff09;是评估模型性能的四个核心指标。每个指标都有其独特的含义和用途&…

排序基础方法

逆序&#xff08;inversion&#xff09; 一个序列中存在元素对&#xff0c;顺序与理想顺序相反 注意事项 算法的空间复杂度&#xff0c;即便graph本身要花费VE&#xff0c;但是DFS是V&#xff0c;只考虑自身要用的。 Selection Sort&#xff08;选择排序) 方法 不断选择最…

牛客编程初学者入门训练——BC53 判断是元音还是辅音

BC53 判断是元音还是辅音 描述 KiKi开始学习英文字母&#xff0c;BoBo老师告诉他&#xff0c;有五个字母A(a), E(e), I(i), O(o),U(u)称为元音&#xff0c;其他所有字母称为辅音&#xff0c;请帮他编写程序判断输入的字母是元音&#xff08;Vowel&#xff09;还是辅音&#x…

如何在算家云搭建Video-Infinity(视频生成)

一、模型介绍 Video-Infinity是一个先进的视频生成模型&#xff0c;使用多个 GPU 快速生成长视频&#xff0c;无需额外训练。它能够基于用户提供的文本或图片提示&#xff0c;创造出高质量、多样化的视频内容。 二、模型搭建流程 1.大模型 Video-Infinity 一键使用 基础环境…

Axure使用echarts详细教程

本次使用的axure版本为rp9,下面是效果图。 接下来是详细步骤 【步骤1】在axure上拖一个矩形进来&#xff0c;命名为myChart(这个根据实际情况来,和后面的代码对应就好) 【步骤2】 点击交互->选择加载时->选择打开链接->链接外部地址 点击fx这个符号 【步骤3】在弹…

【GIT】.cr、.gitattributes 、 .gitignore和.git各文件夹讲解介绍

在 Git 项目中&#xff0c;.cr、.gitattributes 和 .gitignore 文件分别用于不同的配置和管理功能。下面分别解释这些文件的作用和用途&#xff1a; 1. .gitignore 文件 作用&#xff1a; .gitignore 文件用于指定哪些文件或目录应该被 Git 忽略&#xff0c;不会被追踪或提交…