当前位置: 首页 > news >正文

量化策略开发步骤系列(4)参数分析和过度拟合

量化策略开发步骤系列(4)参数分析和过度拟合

      • 参数分析
      • 过度拟合

这是量化交易系列文章的第二系列——量化策略开发步骤,第一系列请参考专栏: 量化交易系统。很多朋友反馈最近的文章代码太多,看不懂。

这一部分将实现零代码分享,尽可能简单地介绍量化策略开发的步骤,以便任何交易员或投资者都能理解。我们将讨论概念和结果,以文字和图表形式进行展示,而不是沉浸在代码中。

本文是量化交易系列文章的第四部分。我的目标是以简化和非程序化的方式介绍量化交易项目所涉及的步骤。在第 1 部分中,我们定义了我们的假设,即我们可以将交易结果与之进行比较的市场基准,并构建了我们的数据以在后续阶段使用。第 2 部分介绍了量化交易中的初始回测和一些隐性成本。在第 3 部分中,我们分析了一些投资组合指标,用来了解我们策略的更多细节。

以下是该系列内容大纲:

  • 第 1 部分——假设和基准(可跳转)
  • 第 2 部分——回测和隐性成本(可跳转)
  • 第 3 部分——关键投资组合指标(可跳转)
  • 第 4 部分——参数分析和过度拟合
  • 第 5 部分——前向测试和统计意义

免责声明:本文仅供参考,不构成任何交易建议。

感兴趣的关注下公众号,优先发布,接收后续的更新内容会更及时奥
公众号:码上助君

让我们回顾一下第三部分末尾回测所获得的结果:

在我看来,尽管回报高于基准,但我们的算法缺乏一致性,交易过于频繁。我相信有办法改进这一点,那么我们能做什么呢?

参数分析

参数分析是一个测试模型参数变化的过程,用来了解它们对模型属性的影响。实际上,我们希望通过改变策略参数来分析投资组合指标的行为。在许多情况下,需要更改参数以确保策略在实时交易情况下可行,同时考虑到流动性和计算能力等现实中的限制。让我们看一个使用三个不同参数集的回测性能示例:

  • 组合1:SMA_S:15,SMA_M:50,SMA_L:200
  • 组合2:SMA_S:30,SMA_M:100,SMA_L:200
  • 组合3:SMA_S:30,SMA_M:200,SMA_L:500


我们可以看到,改变参数对策略的结果有相当大的影响。为了了解这种影响的大小,我们将定义我们想要研究的参数,定义我们的移动平均线可以达到的值范围,然后运行算法,使用所有参数组合对我们的策略进行回测,存储结果以便以后进行比较。让我们使用以下值来分析移动平均线的组合:

  • SMA_S:10、20、30
  • SMA_M:50、100、150
  • SMA_L:200、400、600、800

这些值加起来有 36 种组合,结果表如下所示(截断为 20 行):


我们可以看到,分析结果呈现出了各种各样的绩效结果。所以我们必须找到结果最好的那个,并将其用于我们的交易策略,以最大化我们的利润。除此之外,模型开发中的另外一个重要主题也需要关心。

过度拟合

Investopedia 将过度拟合定义为:

过度拟合是统计学中的一种建模错误,当函数与一组有限的数据点过于接近时就会发生这种情况。因此,该模型仅适用于其初始数据集,而不适用于任何其他数据集

来源:Investopedia.com

在设计模型时,我们希望它能够适用于新数据,因此我们必须尽可能避免过度拟合,而最好的方法是进行样本外测试。简而言之,样本外测试是在处理模型开发中未使用的数据时检查模型的质量。过度拟合的模型通常会表现出较高的样本内性能和较差的样本外性能。

因此,让我们检查一下研究中是否存在过度拟合。我们将使用 2018 年至 2021 年的数据对我们的策略进行参数分析,并检查在倍数方面提供前 5 个结果的参数。

现在让我们进行样本外测试,检查最佳参数组合(20、150、600)在 2021 年至 2022 年之间的一年内的表现如何。

在那个窗口期间,我们的策略实际上亏损了。通过在这个窗口期间运行参数分析,我们可以看到我们选择的参数组合甚至不在前 5 名之内。这些结果强烈表明存在过度拟合。


现在我们知道如何检测过度拟合,但如何避免呢?

以下多年积累总结的做法,希望会对你有所帮助:

  • 尝试开发具有尽可能少参数的模型。参数越多,过度拟合就越严重。
  • 参数调整不是选择性能最佳的组合。而是了解你的假设似乎成立的领域。寻找稳健性,而不是性能。
  • 使用其他资产测试您的策略。通用模型将通过不同的资产实现一致的表现。
  • 对出色的结果持怀疑态度。制定有利可图的交易策略需要时间和实践。
  • 在实际投入资金之前,先模拟交易您的策略。

参数分析是量化交易策略开发的重要组成部分,但无论如何都要避免过度拟合。样本外测试是一种非常有用的程序,可以检查过度拟合,也可以模拟更真实的结果,我们将在第 5 部分对此进行更多讨论!

免责声明:本文仅供参考,不构成任何交易建议。

感兴趣的关注下公众号,优先发布,接收后续的更新内容会更及时奥
公众号:码上助君

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • TLE4966-3G带方向检测功能的高灵敏度汽车霍尔开关
  • 驾驭Git上游分支:高效设置与管理
  • 硬件面试经典 100 题(31~40 题)
  • AsyncTask
  • zdpgo_redis_v2 Go语言连接Redis的另一个版本,支持上下文操作,封装了一些便捷的处理操作
  • 知识学习技巧:如何从 iPhone 恢复误操作删除的视频
  • 005集——运算符和循环——C#学习笔记
  • 相机光学(三十四)——色差仪颜色观察者视角
  • 共享海外仓:海外仓也有共享经济?
  • 【智能流体力学】ANSYS Fluent流体仿真学习流程和Fluent模型方法概述
  • Django | 从中间件的角度理解跨站请求伪造(Cross-Site Request Forgey)[CSRF攻击]
  • git合入另一个分支连续的多个提交
  • 生物药物分离与纯化技术pdf文件分享
  • 前端技术-- 动画特效之AOS组件简介与使用案例
  • mac 2k显示器 配置
  • 网络传输文件的问题
  • 【Leetcode】101. 对称二叉树
  • @angular/forms 源码解析之双向绑定
  • emacs初体验
  • JAVA多线程机制解析-volatilesynchronized
  • jquery cookie
  • LeetCode18.四数之和 JavaScript
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • React16时代,该用什么姿势写 React ?
  • Solarized Scheme
  • vue 配置sass、scss全局变量
  • 阿里云Kubernetes容器服务上体验Knative
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 从零开始的无人驾驶 1
  • 基于遗传算法的优化问题求解
  • 类orAPI - 收藏集 - 掘金
  • 利用DataURL技术在网页上显示图片
  • 巧用 TypeScript (一)
  • 手写双向链表LinkedList的几个常用功能
  • 思考 CSS 架构
  • 小程序开发中的那些坑
  • - 转 Ext2.0 form使用实例
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​iOS安全加固方法及实现
  • ###C语言程序设计-----C语言学习(6)#
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • $.ajax中的eval及dataType
  • (1)svelte 教程:hello world
  • (bean配置类的注解开发)学习Spring的第十三天
  • (C)一些题4
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (二)换源+apt-get基础配置+搜狗拼音
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)fock函数详解
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)jQuery 基础
  • (转)全文检索技术学习(三)——Lucene支持中文分词