量化四大邪术之一:般若波罗蜜

网络相传亚洲有四大邪术,日本化妆,韩国整容,泰国变X,Z国PS。

图片

这些都是让人在颜值上看起来很美,类似地,在量化交易领域,也有四大邪术能让净值曲线看起来很美,今儿个来说量化四大邪术当中的第一个,也可能是大伙儿听到的最多的一个,它就是"未来函数",后面三个下期接着唠~

未来函数之前

图片

未来函数之后

图片

带未来函数的那条净值曲线美不美?要是有骗子用这种净值曲线去卖策略割韭菜,可能有不少不懂行的萌新上当受骗吧~

"未来函数",顾名思义,就是在量化研究和策略回测当中,使用了当前时间点还没有发生的数据,引入了未来的信息去决定当前的交易信号。

这就相当于至尊宝举起月光宝盒,大喊"般若波罗蜜",时光倒流,带着已知,穿越回去,挽救爱情,而金融的实盘行情当中,没有这种神奇外挂,也无法给你未来的信息。所以啊,有未来函数的策略,回测看起来像《安乐传》当中的迪丽热巴,实盘起来就成了《黑悟空》里面的金池长老。

图片

刚才说的都是抽象的概念,接下来我举一个实打实的例子,并且这个带未来函数的策略,还可以"巧妙"地通过量化平台的防未来检验。

这是之前群友发的一个圣杯策略,据说是非常牛逼,拿策略源码一回测,哦豁,这TM真的是小母牛坐火箭,牛逼上天了啊!!!

图片

回测从2014年开始,近10年的累计收益率是8359157.97%,年化收益率是198.49%,夏普为6.297,好嘛,10年8万多倍,每年翻2番,什么西蒙斯、巴菲特、索罗斯,仨人捆一块儿都不是对手,在这个“圣杯”面前都是渣渣。

这么逆天的收益曲线,以我多年踩坑的直觉,肯定是有猫腻啊,二话不说,先在原来策略基础上打开防未来函数功能,在回测设置部分加入以下代码。

# 打开防未来函数功能
set_option("avoid_future_data", True)
 

设置avoid_future_data为True,表示开启防未来函数功能,也就是在回测当中,使用包含时间参数的官方API去获取数据时,如果获取了当前日期之后的数据,程序则会抛出异常,无法正常回测。

重新回测后,绩效还是纹丝不动,还是10年83591倍,每年翻2番,真正的猫腻还是要耐下心来细细读代码才能发现的。

通读下来,这个"圣杯"就是一个单因子策略,大致分3步走:

(1)每5个交易日交易一次,以创业板指成分股为基础股票池,剔除停牌无法交易的股票,形成当次的可交易股票池。

(2)在可交易股票池中,以Zura Kakushadze大神《101 Formulaic Alphas》论文中的第101号因子当前值作为选股因子,数值从大到小排序,选出其中数值最大的前10支股票。

(3)对于这10支股票,等权买入,不在此列的持仓则卖出,在此列的持仓则需要重新恢复到等权。

这个策略中的"第101号因子当前值"就是带有未来函数的了,但是很“巧妙”地绕开了avoid_future_data的检查机制,下面细说。

avoid_future_data一般用来防止当天使用当天之后的数据,但是如果当天使用当天的数据呢,就不会抛出未来函数异常(至少这个策略没有),就可以正常回测。虽然是当天调用当天数据,但却是开盘时就获得了这一天的涨跌幅信息,具体情况往下看。

def get_stock_factor_values(date):no = '101'cmd = 'alpha_'+no+'(date, g.all_stocks)'df = eval(cmd)df = df.sort_values(ascending=False)return dftoday = str(context.current_dt)[0:10]
df = get_stock_factor_values(today)
 

获取因子数据时,使用的是当天的日期,而这个alpha_101因子的计算式子是:(收盘价 - 开盘价) / ((最高价 - 最低价) + 0.001)。

图片

图片

“收盘价 - 开盘价”是日线Bar中实体的长度,“最高价 - 最低价”是整个日线Bar的长度,“0.001”是防止分母为0,简单来说,这个因子就是衡量实体占整个Bar的比例,数值越大,占比越高。

那什么时候数值最大呢?如果分母里面没有那个0.001,那光头光脚的阳线数值最大,只要不是一字板,那么这个因子的数值都是1.0。但现在是有了0.001,那就是涨幅越大的光头光脚阳线的因子数值越大,举个极端的例子。

假设close - open = high - low = 0.001,则alpha_101 = 0.5;

假设close - open = high - low = 1.0,则alpha_101 = 0.999。

看到了没,这个策略相当于在开盘时就选中了今天涨幅最大的股票进行买入,变相地会卖出今天涨幅“不如意”的股票,并且策略当中是使用order_target和order_target_value函数进行交易,默认是按照开盘价成交的,这妥妥明确地吃到一整天肥美的涨幅。

那咱就把获取因子的数据调整到上一个交易日,重新回测一遍,你瞧,原形毕露了吧,10年累计收益-78.13%,年化收益-13.87%,连基准指数都没有跑过,怎一个惨字了得!

date = str(context.previous_date)[0:10]
df = get_stock_factor_values(date)

图片

图片

看到了吧,即使这个量化策略持仓周期是5天,只有1天的未来信息,但也可以带来巨大的虚假繁荣,一旦未来函数被揪出来,圣杯的光芒就会迅速地黯然褪去,如果不想中"未来函数"的邪,可以看一下之前的避坑贴《答应我,在量化策略回测里,避开未来函数这4个坑》。

最后想说的是,即使现在量化平台越来越完善,有很多功能防止用户出错,但只要是人设计的系统,总会有不完美的地方,就怕别有用心的人会利用这些漏洞和缺陷,钻未来函数的空子,构建出漂亮的“庞氏曲线”割韭菜。

人生在世,可要长点儿心呐,别中了这种邪,上了这种当~

原文首发链接:《量化四大邪术之一:般若波罗蜜》

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

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

相关文章

一文弄懂MySQL中的锁

MySQL中的锁概述 MySQL中的锁机制是数据库管理系统用于控制并发操作的一种手段,主要用于保证数据的一致性和完整性。当多个事务同时操作同一数据时,锁机制可以防止数据冲突和确保事务的隔离性。 在MySQL中,锁可以分为三大类:全局…

前端自动导入依赖

前言 开发中通常会有很多导入语句&#xff0c;如何确保一些通用的api和hook无需每次手动导入即可使用。 <script setup lang"ts"> import { ref, reactive } from "vue" import { useRoute, useRouter } from "vue-router" import { log…

在多云生态下,如何实现跨云的自动化身份管理?

在多云环境下实现跨云的自动化身份管理是一个重要的课题&#xff0c;因为这可以帮助企业确保用户和应用程序能够在不同云服务提供商之间无缝地访问资源&#xff0c;同时保持高度的安全性和合规性。以下是一些关键技术和实践方法&#xff0c;用于实现跨云环境下的自动化身份管理…

Go学习笔记(一)语法

标准库文档&#xff1a;Go语言标准库文档中文版 | Go语言中文网 | Golang中文社区 | Golang中国 B站课程&#xff1a;8小时转职Golang工程师(如果你想低成本学习Go语言) 课程作者语雀&#xff08;首页有更多内容&#xff09;&#xff1a;8小时转职Golang工程师 语雀 代码仓…

关于武汉芯景科技有限公司的多协议收发芯片XJ526(第二篇RS422模式)开发指南(兼容SP526)

一、设置芯片为RS422模式 SP526 包含高度集成的串行收发器。SP526 提供 RS-232 &#xff08;V.28&#xff09;、RS-423 &#xff08;V.10&#xff09;、RS-422 &#xff08;V.11&#xff09; 和 RS-485 的硬件接口模式。接口模式选择通过两个控制引脚D0、D1完成。 我们将D0接…

『功能项目』摄像机跟随角色【07】

我们打开上一篇06新输入系统项目&#xff0c; 本章要做的事情是摄像机跟随主角移动&#xff0c; 给主角增加一个Player标签方便主摄像机查找主角对象 在编辑场景调好角度&#xff0c;选择Main Camera对象按键盘Ctrl Shift F使运行场景与编辑场景相同 新建CameraCtrl脚本代码 …

玄机又成国漫首创!IP与AI融合,凭实力火出圈

现在国漫越来越卷了&#xff0c;不仅卷制作质量&#xff0c;还卷各种花式联动。最近玄机科技和百度文库联合举办的AI漫画大赛圆满结束&#xff0c;这还是国内的IP第一次和AI技术融合&#xff0c;而且产出了不少好作品。下面就一起来看看吧&#xff01; 提到玄机科技&#xff0c…

若依权限控制前端+后端实现思路梳理(PreAuthorize、hasPermi、v-hasPermi)

一、权限控制引发的思考 引言 最近接手了公司的一个项目&#xff0c;实施反馈说&#xff0c;客户那边要求对不同的权限的用户操作权限做限制。场景就是&#xff0c;比如一个项目列表&#xff0c;这部分数据有可能是针对某个公司某个部门的&#xff0c;对应不同的部门用户能看…

【Kotlin设计模式】Kotlin实现装饰器模式

前言 装饰器模式&#xff08;Decorator Pattern&#xff09;&#xff0c;用于动态地为对象添加新功能&#xff0c;而无需修改其结构&#xff0c;通过使用不用装饰类及这些装饰类的排列组合&#xff0c;可以实现不同的功能和效果&#xff0c;但是这样的效果就是会增加很多类&…

Cypress第二次安装遇到的问题

问题一&#xff1a;吐血&#xff0c;谁会想到node.js的官网访问不了呢&#xff01; 中文网站&#xff1a;http://url.nodejs.cn/download/ 官网&#xff1a;https://nodejs.org/zh-cn nodejs安装的两种方法(官网、NVM安装-node版本切换)不知道这种方式是否可行&#xff0c;还…

62. 不同路径 -dp6

. - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/unique-paths/ 输入&#xff1a;m 3, n 2 输出&#xff1a;3 解释&a…

汽车功能安全--TC3xx LBIST触发时机讨论

目录 1. LBIST架构 2. LBIST寄存器配置 3. LBIST触发时机 LBIST&#xff0c;全称Logic Built-in Self Test。 在TC3xx中&#xff0c;LBIST是一种硬件功能安全机制&#xff0c;目的是为了探测MCU内部逻辑电路的潜伏故障(latent faults)。 从使用者角度来看&#xff0c;只需…

基于x86 平台opencv的图像采集和seetaface6的图像质量评估功能

目录 一、概述二、环境要求2.1 硬件环境2.2 软件环境三、开发流程3.1 编写测试3.2 配置资源文件3.3 验证功能一、概述 本文档是针对x86 平台opencv的图像采集和seetaface6的图像质量评估功能,opencv通过摄像头采集视频图像,将采集的视频图像送给seetaface6的图像质量评估模块…

63. 不同路径 II -dp7

63. 不同路径 IIhttps://leetcode.cn/problems/unique-paths-ii/ 输入&#xff1a;obstacleGrid [[0,0,0],[0,1,0],[0,0,0]] 输出&#xff1a;2 解释&#xff1a;3x3 网格的正中间有一个障碍物。 从左上角到右下角一共有 2 条不同的路径&#xff1a; 1. 向右 -> 向右 ->…

对各项数据的统计汇总,集中展示,便于查看厂区情况的智慧物流开源了。

智慧物流视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。构建基于Ai技术的…

关于kafka的分区和消费者之间的关系

消费者和消费者组 当生产者向 Topic 写入消息的速度超过了消费者&#xff08;consumer&#xff09;的处理速度&#xff0c;导致大量的消息在 Kafka 中淤积&#xff0c;此时需要对消费者进行横向伸缩&#xff0c;用多个消费者从同一个主题读取消息&#xff0c;对消息进行分流。 …

yolov8 安装流程

1、克隆远端代码 git clone https://gitcode.com/gh_mirrors/ul/ultralytics.git 2、配置pyshon环境安装 3.10的版本&#xff0c;注意3.12后期会出现标注都在顶部的问题 使用idea可以在项目结构中直接添加python SDK 3、下载依赖&#xff0c;安装8.0210&#xff0c;注意新依赖…

脑靶向肽 ;SHp ;CLEVSRKNC ;缺血归巢肽

【脑靶向肽 SHp 简介】 SHp多肽是一种抗肿瘤多肽&#xff0c;它可以通过激活P53基因&#xff0c;调节细胞凋亡相关基因的蛋白表达&#xff0c;从而抑制肿瘤细胞的增殖并诱导细胞凋亡。在最新的研究中&#xff0c;SHp多肽被发现可以促进T细胞对肿瘤细胞的杀伤作用&#xff0c;显…

Vue3源码调试-第三篇

前言 上两篇已经调试完packages/runtime-dom/src/index.ts下的createApp函数的第一行了&#xff0c;接下来我们看下一行 injectNativeTagCheck 首先说下这个__DEV__估计也是定义在dev.js下&#xff0c;又或者是哪里的&#xff0c;这里控制台输出是true&#xff0c;那我估计是…

深入解析css-学习小结

绪论 盒模型 层叠 优先级 继承 层叠 层叠指规则冲突时&#xff0c;如何选择规则。规则冲突解决顺序&#xff1a; 样式表来源 用户代理样式 用户代理样式&#xff1a;浏览器默认样式 作者样式表&#xff1a;你自己写的css样式 作者样式表会覆盖用户代理样式&#xff0c;因…