从7年的算法交易研究和发展中得到的教训

01

引言

844778b82f357d69f680469242a9be1e.png

自2016年中旬以来,我一直专注于探索算法交易的世界。这是一种将数据驱动的方法用于定义金融工具购买和出售决策的方式,也被称为定量和系统交易。值得注意的是,我并没有金融、交易、数学或统计学的背景,但我有着不满足于现状的学习热情和一股强烈的“永不放弃”的精神。我可以撰写大量篇幅,详述我在过去七年中构建交易系统的经验和遭遇的失败,但这里不打算赘述细节。

02

经验教训

1083932dcfc2d2f4e0426bc11f93708e.png

这段旅程始于我发现了一个简单的在线工具,这个工具能够帮助用户把规则应用于金融数据进行回测。随后,我购买了一些功能更强大的软件,并在我的个人电脑上运行,以便深入研发和测试交易系统的想法。我的主要任务是找到一种识别特定技术分析交易信号的方法,这些信号1)具有预测能力,2)在未曾见过的"样本外"数据上具有很高的“有效性”。大约三年的时间里,我专注于单个信号的分析,将一个交易信号及其"样本内"指标、统计特性、对噪声的敏感性以及对移动数据的价值进行深度解析,并将其分类为"可能有效"或"不太可能有效"。然而,我发现无论我对一个特定信号进行了多少次分析,市场的随机性和制度的变动总是破坏它们的未来表现。一个特定的信号可能非常"好",但仍然可能会出现大的回撤、盘整期,或者在上线后不久就失效。

此时,我开始觉得我的能力在开发预期在未来的"样本外"数据上表现优秀的交易系统上受到了挑战。此外,到目前为止,我已经上线了一些系统,并在尝试中炸了一些交易账户,这在坚持进入这个领域的人们中是无法避免的。我一直面临的一些挑战包括:

  • 克服数据挖掘的偏见

  • 对抗过度拟合

  • 创建一个能够在新数据上泛化的系统,其逻辑具体而能适应

  • 构建一个可以利用可能再次出现的信号的系统

  • 克服系统的脆弱性,即"崩溃"的可能性。

下面是一个成功实现"样本内/样本外"突破的信号/策略的例子:

00a5dd7d05f4658531b2eba4c6eb667f.png

在2021年9月,我决定投入学习Python,期望以此为我的交易技术注入新的活力。掌握了Python的基本知识后,我花了大约8个月的时间将机器学习应用到金融数据中,虽然这是一次很好的学习经历,但实际效果并不理想。这主要是因为金融数据的信噪比极低,导致机器学习模型往往只能在噪声上进行训练,而无法针对数据的真实信号进行训练

于是,我回归到基础,以更为统计和科学的方式研究和应用技术分析信号,这一方式甚至超过了我学习Python之前的日子。在掌握了集成投票系统(ensemble voting systems)的知识后,我开始将其应用到我的Python程序中,实现正向测试的结果越来越优秀。我现在将众多的"优秀"信号结合在一起,利用这些信号的集体智慧,将它们构建成一个"更优秀"的系统,从而改进整体性能,提升预测准确性

在使用集成(ensembles)时,我发现了一些非常重要的细节,其中最关键的是:1)集结许多表现欠佳的预测器,并不能形成一个优秀的系统;2)将来自相似系统的大量相似投票集结起来,也不能形成一个优秀的系统。这两个关键点都需要一种方法来区分好的信号和不好的信号,并强制实现信号的多样性。

虽然集成的主要用途是量化交易的理由,例如,200个信号中有160个是有效的,但我发现,另一种使用集成的方式就是量化不交易的理由。一个实际应用就是,当200个信号中存在大量不利于长线交易的信号时,只有当40个或更少的信号是真实有效的时候,才会进行交易,这是一种有效的策略,其威力同样强大。

回到现在,我将概述我的Python预测程序当前的工作流程。请注意,所有的分析和信号过滤都只在样本内数据上进行。步骤如下:

(1)导入36个期货市场的每日时间段数据

(2)确定用于生成信号的交易市场和交易产品

(3)从每个信号市场计算出大约3000个交易信号

(4)使用噪声调节的合成数据来计算相同的交易信号

(5)计算所有基础信号和噪声调节的信号的指标和边缘

(6)将所有的指标合并到一个结果数据框中

(7)在图表上展示所有的指标以进行分析

(8)创建三个带有特定功能的投票组合,例如:3天期限的积极信号(交易的理由)、1天期限的积极信号(交易的理由)、1天期限的消极信号(非交易的理由)

(9)过滤所有信号,只保留样本内交易数量Z-score达到特定阈值的信号,只使用常见的信号,剔除"稀有信号"

(10)为每个集合设置以下内容:适应性功能、需要监控的信号数量、实际交易条件下所需的信号数量

(11)通过关键的性能指标过滤每个集合中使用的信号

(11)进一步减少每个集合中使用的信号,通过相关性检查以去除相似的信号

(12)将表现最好的200个非相关信号纳入每个集合中

(12)设置多数/少数投票逻辑

(13)合并组合模型逻辑

(14)回溯测试主要的集合交易系统

对于噪声调节数据的可视化效果,请参见下面的图片。深绿色的线表示一系列信号的平均交易,浅色的线表示噪声调节的数据。区域1显示的是信号在噪声影响下退化的区域,而区域2显示的是信号在噪声影响下改善的区域。

fb749a7e22a976039b29216977461367.jpeg

以下是集成如何协同工作的解释:

(1)模型组合1:预测时间为3天,预期为正,需要200个信号中有160个为真。

(2)模型组合2:预测时间为1天,预期为正,需要200个信号中有160个为真。

(3)模型组合3:预测时间为1天,预期为负,需要200个信号中少于40个为真。

这里的逻辑是,如果3天的前景被大多数模型看好,1天的前景被大多数模型看好,而1天的负面条件被少数模型看好,那么我们就进行交易。关于主模型组合的一个关键注意点是,每个模型组合都需要单独制定,并且必须具有独立的预测能力和表现。然后通过汇集所有三个的逻辑,最终的交易系统会变得更强大。如果你使用3个依赖其他模型组合执行的弱模型组合,那么,即使在组合中,该系统仍有可能破裂。

最终的结果可能是一个更大的模型组合,它可以最大化交易机会,最大化胜率,使股票以自信且稳定的方式增长。使用模型组合的优点包括避免选择偏差,单个信号可能"断裂",但系统仍然运行,系统的泛化性好,适应性强,整个系统不太可能中断

以下是一个关于ES期货标志的模型组合系统的权益图,持有时间为1天,无止损,无盈利目标。

样本期:2004年1月5日至2017年1月3日

非样本期:2017年1月4日至2023年5月22日

交易次数:563次

胜率:58%

样本内夏普比率:0.76

样本外夏普比率:0.98

5b3230ca45b34b56a5828c0139999f6d.jpeg

03

结语

cccee12c2d2ddbaac807369220276c65.png

这篇文章中探讨了如何使用统计上可靠的技术分析信号的模型组合,并将其应用于正向和负向条件。然后讨论了如何将三个模型组合融合成一个主模型组合,用来量化3天期限的正向情况,1天期限的正向情况,以及1天期限的负向情况

英文原文链接:

https://medium.com/@josh.malizzi/lessons-from-7-years-of-algorithmic-trading-research-and-development-c63f1d319831

f7caf3f9c5e5bab79f84a858c987e21a.png

关于Python金融量化

e492e1392a2f730f628ee49d93aa70bc.png

专注于分享Python在金融量化领域的应用。加入知识星球,可以免费获取qstock源代码、30多g的量化投资视频资料、量化金融相关PDF资料、公众号文章Python完整源码、与博主直接交流、答疑解惑等。添加个人微信sky2blue2可获取八五折优惠。

3ce6e69794df567a91900f8cb0ddd1c5.jpeg

猜你喜欢

转载自blog.csdn.net/ndhtou222/article/details/131427745