唉~~量化策略越改越差了

最近收到藏经阁群友私信,问能不能在最近发布的轮动策略当中加入持仓时间的限制条件,买入某个ETF后,必须持有够7天才可以卖出。

其目的有二,第一是想减少市场杂音,减少不必要的交易,第二就是如果场外操作的话,交易对应的ETF联接基金(直接在支F宝里面就可以买),持满7天,就可以省去赎回费,降低交易成本。

图片

咱这里就直接开干了,不了解策略构建流程和细节的小伙伴可以看之前的两篇文章《手把手教你构建与改进轮动策略》和《换了量化平台,重新回测,还是十年10倍》,在原策略的基础上,加入了“持仓必须满7天才可以卖出”的条件,重新回测绩效如下,为了保持与原策略的可比性,回测时间范围和费率等设置皆与原策略一致。

图片

图片

原策略的累计收益是1040.55%,年化收益率是28.74%,加入这个条件后,累计收益下降到了936.09%,对应的年化收益是27.46%,对比看出,按复利计算的年化收益每年少了1.3%。

所以啊,如果不介意持仓时间和交易次数的话,还是使用原策略为好,若是在这方面有限制和要求,加入新条件的轮动策略源码也已经分享,请原路径自取、改进和优化。

针对本次修改后的策略,我再啰嗦3个点,方便量化萌新操作。

第一点,类似这种加入“持仓时间限制”条件的策略,往往都会存在着“起始点陷阱”。结合这个策略来具体说明,在原策略当中,2013年9月13日是要将原来的创业板ETF卖出,然后轮动到红利ETF的,由于加了“持仓必须满7天”的条件,就还不能完成整个轮换动作,因为创业板ETF刚买入2天,必须再等5天之后才能卖出旧仓开新仓。

试想一下,假设有人是2013年9月3日开始运行这个新策略,他在2013年9月13日的持仓就是创业板ETF,而另外一个人恰好是在2013年9月13日开始运行,由于他之前没有持仓,他就可以丝滑买入红利ETF。这种由于策略运行起始时间点不同,而造成同一日期不同交易情况的现象,就叫做“起始点陷阱”。

图片

原策略回测的起始时间点是2013年9月3日,咱把新策略的起始时间点各往后挪1~6个交易日,再跑一遍回测。

图片

横轴对应的就是相对2013年9月3日往后挪多少个交易日,0表示还是2013年9月3日,1表示的就是2013年9月4日,以此类推。纵轴对应的是策略的年化收益率,其中最大值是27.83%,最小值是26.84%,相差大概1%,虽说起始点陷阱存在,但不算太严重,将来类似的情况留意着点儿就好。

第二点就是场外ETF联接基金的选取。一些小伙伴由于自身从业的限制等原因,没办法开设股票账户,进而玩不了场内ETF,只好退而求其次交易场外基金。

简单来说,ETF联接基金就是场外跟踪场内对应ETF的基金,联接基金的绝大部分资产都会用来购买场内的ETF,以达到跟踪的目的,在交易层面的最大区别就是,ETF可以在二级市场场内实时交易,成交价格是不断变化的,而联接基金只按照当天净值成交,在支F宝上就可以交易。

那如何快速找到场内ETF对应的联接基金呢?如何让跟踪误差最小呢?

教给大伙儿一个小技巧,以黄金ETF(518880)为例,在行情软件中输入ETF代码,就可以看到ETF的行情界面,接着按F10,就可以查看该ETF的详情,黄金ETF的简称是“华安黄金易ETF”,全称是“华安易富黄金交易型开放式证券投资基金”,基金管理人是“华安基金”,基金经理是“许之彦”。

图片

在F10界面中,点击【基金经理】选项卡,就可以看到该ETF的基金经理介绍,接着往下拉,就可以看到这个基金经理管理的所有基金产品,其中就大概率包括对应的ETF联接基金。

图片

第三点就是关于是选择ETF联接基金中的A类还是C类。从上图可以看出,黄金ETF对应着有两个联接基金“华安黄金易ETF联接A”(002216)和“华安黄金易ETF联接C”(002217),那到底选哪一个呢?

简单来说,A类和C类都是同一个基金的不同份额类型,A类份额有申购赎回费,C类份额没有申购费,超过一定的持仓天数就可能免赎回费,如下所示。但C类份额并不是就没有交易费用了,只不过它的那些管理费、托管费、销售服务费等费用都是每天从资金资产中计提。

图片

所以对于交易成本而言,交易A类份额是买入卖出时各剌一刀大的,C类份额则是每天小刀慢慢剌,一般来说,A类份额比较适合长期持有(如持有时间大于1年),C类份额更适合短期交易,大部分都是持有超过7天就免申购赎回费。因此,对于本策略的持仓周期而言,更适合交易对应ETF联接基金的C类份额,例如黄金ETF就应该买“华安黄金易ETF联接C”(002217)。

不如意事常八九,可与人言无二三,开发策略就是这样,满心欢喜地以为能改进策略取得长足进步,可到头来经常是失败居多,这也是宽客资历越老,心态越平和的原因。这些都只是策略优化改进中的一朵朵小浪花,放下执念,重新出发,乘风破浪,fighting~

PS:本文提及的所有证券标的和代码,仅为举例说明,不构成任何投资建议,望诸君明察。

原文首发链接:《唉~~量化策略越改越差了》

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【JavaScript】详解Day.js:轻量级日期处理库的全面指南

文章目录 一、Day.js简介1. 什么是Day.js?2. 安装Day.js 二、Day.js的基本用法1. 创建日期对象2. 格式化日期3. 解析日期字符串4. 操作日期5. 比较日期 三、Day.js的高级功能1. 插件机制2. 国际化支持 四、实际应用案例1. 事件倒计时2. 日历应用 在JavaScript开发中…

Qt背景与环境搭建

目录 ​编辑 一、Qt背景 1.行业岗位介绍 2.什么是Qt 3.Qt的发展史 4.Qt支持的平台 5.Qt的版本和优点 5.1 版本 5.2 优点 6.Qt的应用场景 7.Qt 的成功案例 8.Qt 发展前景 二、环境搭建 1.Qt 的开发工具概述 2.Qt SDK 的下载和安装 2.1 Qt SDK 的下载 ​编辑 2…

Ascend算子开发

Device侧 1. 存储API 1.1 GlobalTensor 1.2 LocalTensor 可获取、设置值、获取大小。页可以通过[]获取 1.3 数据类型 2. Add样例 数据搬入:DataCopy调用计算接口:Add数据搬出:LocalTensor、EnQue、DeQue 2.1 核函数定义 x、y输入&#xff…

『 Linux 』线程概念

文章目录 什么是线程执行流线程与进程的关系页表构造及线程资源分配线程的轻量化线程的特点 什么是线程 线程本质上是进程的一个执行分支,用于处理进程中的代码和数据; 每个线程都可以执行独立不同的代码片段,这意味着在一个进程中可以同时执行多个任务; 同一个进程中的所有线程…

基于微信小程序+SpringBoot+Vue的社区超市管理系统(带1w+文档)

基于微信小程序SpringBootVue的社区超市管理系统(带1w文档) 基于微信小程序SpringBootVue的社区超市管理系统(带1w文档) 为了让商品信息的管理模式进行升级,也为了更好的维护商品信息,社区超市管理系统的开发运用就显得很有必要,因为它不仅可…

全球奈拉滨市场规模预测:未来六年年复合增长率CAGR为1.1%

据恒州诚思研究,2023年全球奈拉滨市场规模大约为3.8亿元,预计未来六年年复合增长率CAGR为1.1%,到2030年市场规模将接近4.2亿元。这一增长反映了奈拉滨在全球医药行业中的重要性及其在未来发展中的潜在机会。随着科学的进一步发展和市场的扩展…

全网最详细Gradio教程系列5——Gradio Client: curl

全网最详细Gradio教程系列5——Gradio Client: curl 前言本篇摘要5. Gradio Client的三种使用方式5.3 Curl查询Gradio Apps5.3.1 安装5.3.2 获取Gradio程序的URL5.3.3 HF_TOKEN和身份认证1. POST/GET示例2. 整合命令:awk和read3. HF_TOKEN4. 身份认证 5.3.4 POST&am…

21 Python常用内置函数——zip()

zip() 函数用来把多个可迭代对象中的元素压缩到一起,返回一个可迭代的 zip 对象,其中每个元素都是包含原来的多个可迭代对象对应位置上元素的元组,最终结果中包含的元素个数取决于所有参数序列或可迭代对象中最短的那个。 可以这样理解这个函…

WPF启动失败报System.Windows.Automation.Peers.AutomationPeer.Initialize()错误解决

问题描述 win10系统上WPF程序启动后就崩溃,通过查看崩溃日志如下: 应用程序: xxx.exe Framework 版本: v4.0.30319 说明: 由于未经处理的异常,进程终止。 异常信息: System.TypeLoadException 在 System.Windows.Automation.Peers.Automatio…

强者具备的三个思维

强者具备的三个思维,看看你占了几条? 一、不看自己需要什么,而是看环境和别人需要什么。满足他们,你就能把事情做成。 二、不追求稳定,而是享受不稳定。稳定的工作和生活,并不意味着你的技能已经娴熟。而…

SpringBoot上传超大文件导致Cannot read more than 2,147,483,647 into a byte array,问题解决办法

问题描述 报错: java.lang.IllegalArgumentException: Cannot read more than 2,147,483,647 into a byte array at org.apache.commons.io.IOUtils.lambda$toByteArray$0(IOUtils.java:2403) ~[commons-io-2.11.0.jar:2.11.0] at org.apache.commons.io.output.Thre…

C++学习日记 | LAB 10 运算符重载与友元函数

资料来源&#xff1a;南科大 于仕琪 C/C Program Design LINK&#xff1a;CPP/week10 at main ShiqiYu/CPP GitHub 一、本节内容 本节首先以一个例子具体演示和回顾操作符重载、友元函数以及重载<<操作符。习题部分则为各种运算符重载以及输入输出重载 1.1 Operator o…

支持向量机回归及其应用(附Python 案例代码)

使用支持向量机回归估计房价 让我们看看如何使用支持向量机&#xff08;SVM&#xff09;的概念构建一个回归器来估计房价。我们将使用sklearn中提供的数据集&#xff0c;其中每个数据点由13个属性定义。我们的目标是根据这些属性估计房价。 引言 支持向量回归&#xff08;SV…

WHAT - 一个 Github 仓库的 License 如何解读

目录 一、背景二、解读许可证说明的作用常见的开源许可证类型使用他人代码仓库时需要注意的事项结论 实践作为开发者1. 选择许可证类型2. 在 README 文件中编写许可证信息 作为使用者1. 确定权限2. 了解和遵守条款 总结 一、背景 我们经常在一些 Github 仓库里看到 License 部…

Cache 替换策略--PLRU算法详解

一、引言 LRU&#xff08;Least Recently Used&#xff09;是 cache 的经典替换策略之一&#xff0c;但当 Cache 的路数比较大时&#xff08;多路组相连结构&#xff09;&#xff0c;实现 LRU 的硬件开销就会变得很大。现代处理器一般会考虑使用 PLRU&#xff08;pseudo-LRU&a…

Vue.js 2 项目实战(八):小黑记事本组件版

前言 Vue.js 是一个用于构建用户界面的渐进式 JavaScript 框架。它的设计初衷是通过采用简洁且强大的结构&#xff0c;使前端开发变得更简单和高效。以下是对 Vue.js 的详细介绍&#xff1a; 核心特性 声明式渲染 Vue.js 使用声明式语法来描述用户界面&#xff0c;通过数据绑…

用Swagger进行后端接口测试的实战操作

目录 一.什么是Swagger&#xff1f; 二.Swagger的使用操作流程&#xff1a; 1.在pom.xml配置文件导入 Knife4j 的依赖&#xff1a; 2.在config配置类中加入 Knife4j 的相关配置并设置静态资源映射&#xff08;否则接口文档无法访问&#xff09;&#xff1a; 三.Swagger的四个…

xctf--debug

第一眼看着给我吓了一跳 我还以为是什么很牛逼壳 结果就是dnspy打开 这个函数什么ID都没有 只能一个一个点 但是逻辑真的很清晰 之前BUU写的题太复杂了,感觉可以看看这些题静下心 这个时候看着 攻防世界逆向高手题之debug_攻防世界debug-CSDN博客 这个博主的(我好多东西…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 亲子游戏(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…

【轨物方案】电气设备数字档案解决方案

需求痛点 传统的电气设备铭牌只能显示固定的名称、日期、型号等信息&#xff0c;不能把与设备相关的其他重要信息展现出来&#xff0c;终端用户想要了解设备信息比较困难。尤其像项目资料类的文件查看&#xff0c;更是有很多不便之处&#xff0c;当设备出现问题后&#xff0c;找…