身为一个有着写二十年代码经历的, 被称作老兵的人, 去年我做了一桩事, 此桩事就是用从最开始着手搭建了一个AI股票推荐系统。本篇文章要跟你分享整个事情发展的过程并且得分享那个致使我沉默了许久的结果。
为什么自己写?
当前, 在市面上, 存在着数量繁多的, 既有免费性质又有付费性质的选股工具。然而, 身为一名程序员, 我却难以克制自己内心那种想要亲自去打造一个全新工具的冲动。
扪心而论, 另外存在着一个缘由, 那便是我并不相信那些所谓的“AI智能荐股”的营销推销话语。其回测收益率常常动不动就达到年化50%以上, 而最大回撤却不到5%, 要是真的有着这般良好的状况, 那么他们还会需要去售卖软件吗?
所以我做好决定, 要自己去动手做这件事。起码我能够把控数据, 还能掌控算法, 并且能对回测的每一个环节都进行管理。
系统架构(简化版)
简单说一下技术栈:
核心的逻辑并非复杂不堪: 于每个月份之中, 运用模型针对全市场予以打分, 挑选出排名在前百分之二十的对象, 采用等权的方式进行配置。到下一个月份之时, 再次运行一次, 重新开展排名, 应当更换的便予以更换。
回测结果:让人兴奋
2019-2024 五年回测:
在完成回测的那个夜晚, 我陷入了失眠状态。并非源于激动之情, 而是由于我再三对代码进行检查, 试图弄明白究竟是何处出现了计算错误。
再次进行了三次检查, 不存在未来函数, 不存在幸存者偏差, 已将退市股票纳入考量, 且扣除了交易成本后, 数据是准确无误的。
实盘结果:一盆冷水
然后开始实盘。
第一个月:+3.2%,跑赢大盘。
前三个月:+12.7%,继续跑赢。我开始膨胀了。
当第六个月完结之际, 展现出的数据是 -4.3%, 而在相同的时期跨度之下, 沪深 300的值浮现为 +8.1%。
整整半年,我的AI系统跑输了大盘近13个点。
哪里出了问题?
复盘之后,我发现了几个教训:
1. 过拟合是魔鬼
一百多个因子于回测期间展现出完善之绝佳表现, 缘由在于模型寻觅到了数据之中存在的噪音模式, 然而一旦进入实盘操作, 这些模式全然丧失效力, 不复存在了。
2. 市场风格切换
2024年下半年起始直至2025年初这段时间, 市场风格由小盘成长转变为大盘价值。我的模型生来就倾向于小盘股, 原因在于小盘股在回测期里面表现较好, 恰好是处在风格切换的关键节点上。
3. 交易成本被低估了
在回测的过程当中设定了占据比重为0.1%的交易成本, 于实盘的情形之下每个月会调整20只股票的仓位, 然而冲击成本这一数值远远大于0.1%, 特别是针对一些流动性欠佳的标的方面。
4. 最重要的:时间不够
五年的回测, 听起来时长是比较久的, 然而呢, 这个特定的时间段, 也就是从2019年到2024年, 恰恰正好的是属于那种“量化友好”的一个周期, 要是去更换成另外的一个时间段的话, 那么最终呈现出的结果极有可能是完全不一样的。
现在我在做什么
我把系统精简了。
原本有100多个因子, 现在削减为15个, 原本是混合模型, 现在改成了单模型, 原本是月频调仓, 现在变成季频了。
复杂度是回测的伙伴, 然而却是实盘的对手, 这是我用实实在在的钱财换来的经验教训。
写在最后
这篇文章不是为了让你觉得"量化很牛"或者"量化没用"。
做投资与写代码不一样, 写代码和做投资, 乍一看都得要逻辑以及数据, 可是本质上存在着一个极大的差异, 也就是说写关于某方面领域运行的代码是能够做到精确控制的, 然而投资所涉及到的市场却没办法做到精确控制。
身为程序员, 我们已然习惯于对系统持有那种绝对的掌控态。而涉足到投资范围之内, 此种控制欲反而成了致使亏钱的根源呀。
承认自己不懂的东西,比假装什么都懂,更让你赚钱。
你瞧, 我, 乃是南山那从事程序编写工作的人员。曾经编写过二十年代码量, 而此刻, 正处于犯下新一代错误的状态。来关注我, 一块儿去减少犯下错误的数量。
此文单单是个人投资经历的分享, 并不形成任何投资方面的建议, 股票市场存在风险, 进入市场需要小心慎重。