记得很多年前刚入行的时候,我也特别迷信“全自动”。当时看别人晒出的量化系统界面,K线旁边一条条信号线,点击“开启策略”之后账户自己跑起来,那种感觉确实很吸引人。我曾经花了整整三个月,把一个基于均线突破的思路写成了Python脚本,回测漂亮得让人睡不着觉——年化40%,最大回撤8%,夏普比率3.2。结果一上实盘,一星期就被市场教育了。
后来做的项目多了,和不同风格的量化团队打交道也多了,我才慢慢回过味来:大家口口声声说的“全自动量化”,其实一直都是个半成品,甚至可以说是个精心包装过的幻觉。真正赚钱的策略,核心那部分从来不在代码里,全自动代码能承载的,最多是策略的“执行”和“管理”,扛不了策略的“灵魂”。
这篇文章就是想把这件事聊透。我会从Quant的角度拆一拆Alpha到底是什么、为什么它没法被写进程序里、一套真实可用的量化体系到底该怎么分配“人”和“代码”的职责,以及我亲身踩过的那些自动化陷阱。如果你正在入门量化,或者已经写了几个月策略但总感觉哪里不对,这篇文章应该能帮你省下不少弯路。
1. 先聊清楚:量化到底在赚什么钱,Alpha又是个什么东西
1.1 钱的三种来源:Beta、Alpha和纯粹的运气
想理解“Alpha为什么不能写进代码”,首先得把收益的来源拆开。任何一笔交易的盈利,在统计学上都能被分解成三部分:Beta、Alpha和残差。Beta是你承担市场风险换来的补偿,买指数基金赚到的钱就是典型Beta——大盘涨你就涨,大盘跌你也跟着跌,这部分收益本质上是用“暴露在市场中”换来的,不需要多少技巧,代码很容易实现,买个ETF躺着就行。Alpha则完全不同,它是你跑赢市场基准的那部分收益,是扣除风险之后“白赚”的部分,靠的是信息优势、定价能力、执行优势或者纯粹的洞察力。至于残差,那就是运气了,样本一变大,运气迟早会归零。
量化从业者挂在嘴边的“超额收益”,指的就是Alpha。问题是,Alpha这东西有一个非常别扭的属性:它天然带着时效性。你今天发现的一个规律,可能三个月后就失效了;你今年有效的模型,可能明年就被同类策略拥挤效应给磨平了。换句话说,Alpha不是一件可以被“固化”的静态资产,而是一个不断衰减的动态过程。既然它是动态的,那么“写死”在代码里这个动作,本身就违背了Alpha的本质。
1.2 全自动代码到底能做什么
那代码在量化里是不是就没用了?当然不是。代码擅长的是执行、计算、纪律和规模化。一台服务器可以同时监控几千只股票,可以以毫秒级的速度下单,可以严格执行止损,可以同时跑几十个策略模型并做好资产分配。这些事情是人脑永远做不到的,也是量化之所以能成为一门“生意”的根基。
但你要注意,代码做的一切,本质上都是“给定规则之后的高效执行”。规则本身是谁给的?是人给的。规则要跟着市场环境变化,这个“跟着变”的动作由谁来做?还是人。我在帮团队搭系统的时候,经常打一个比方:代码是赛车,而人是赛车手。赛车能跑300码,那是性能;但应该在哪条弯道刹车、什么时候进站换胎、雨天要不要降到200码,赛车自己回答不了。把所有决策都交给赛车,那叫自动驾驶,在封闭赛道里也许行,但到了每天都是新路况的交易市场,翻车只是时间问题。
所以“全自动代码”这个概念,在量化语境下是个伪命题。真正成熟的体系,是“人负责理解市场、更新逻辑,代码负责执行、监控和风险约束”。人机分工的边界清晰了,策略才可能活下来。
2. 为什么真正的Alpha注定无法“代码化”
2.1 能被代码化的Alpha,很快就不是Alpha了
这一条是最残酷的,也是很多量化新手最难接受的。你可能花了半年时间研究出一个因子,回测里表现优异,逻辑上也说得通——比如低波动率股票长期跑赢高波动率股票。你兴冲冲地把这个因子写进代码,开启了全自动交易。可是你有没有想过,这个因子既然能被你写出来,就说明它是可以被复制、被参数化、被别人也写进代码里的。
量化行业里的Alpha衰减,本质上是一个信息扩散的过程。一个规律刚被发现的时候,只有少数人知道,他们利用这个规律赚超额收益。随着赛道越来越拥挤,收益会被摊薄,直到这个因子的超额收益变成负的——因为套利的人太多,定价已经充分了。你代码里的逻辑没变,但市场环境变了,Alpha就蒸发了。
我见过太多这样的案例。2021年的时候,某类量价因子在中小市值股票上表现极好,很多人把因子代码化之后开了全自动,头三个月确实赚得盆满钵满。到了2023年,拥挤度已经到了一个可怕的水平,同质化策略一多,只要市场风格稍微一转向,这类因子就会集体回撤,而且是赤果果的“踩踏式回撤”。这背后的本质是:你的Alpha是自己发现的、是活的东西;而写进代码之后,它就变成了一个公开的、死的规则,迟早会被市场抹平。
2.2 市场没有常量,只有变化
如果你做过几年实盘,一定会对这句话有体感:市场是一个非平稳系统。所谓非平稳,就是统计规律本身会变。今天有效的相关性,明天可能就失效;今年市场的波动率结构,和去年完全不是一个形态。
我举一个自己经历过的例子。有一段时间,我的策略在开盘前30分钟内表现极好,因为当时的市场微观结构存在一个固定的“惯性效应”——早盘集合竞价之后价格往往延续方向运动。这个规律我写进了代码,设置了只在开盘后9:30到10:00之间开仓。实盘做了三个月,收益稳定。然后有一天,交易所调整了集合竞价的机制,具体细节不在这里展开,总之就是开盘后的流动性结构变了。那个惯性效应瞬间消失,策略在一个星期内连续止损了十二笔。代码没有错,逻辑也没错,但前提变了,规律就不再是规律。
这就是所谓的“量化泄露未来信息”的另一个变种——你以为自己在用历史规律预测未来,但实际上历史规律本身就包含了一套已经失效的假设。Alpha存在于“对未来变化的理解”里,而不存在于“对过去规律的代码化”里。只要你把Alpha理解成“写死的规律”,你就是在用后视镜开车。
2.3 规模与容量:代码可以很多,市场只有那么大
还有一个经常被忽略的约束,叫容量。任何策略都有一个资金容量的上限,超过了这个上限,策略自身的交易行为就会冲击价格,把本来属于自己的Alpha吃掉。代码可以无限扩展,可以加更多的标的、更高的交易频率,但市场的深度是有限的。
这个问题的致命之处在于,你很难在开发阶段就准确估计出策略的真实容量。回测不会告诉你,因为回测用的是历史成交数据,它假设你的交易量不会影响市场价格。但实盘不是这样。你的资金量一旦大了,滑点会急剧上升,成交率会下降,甚至你的订单本身就会成为别的策略捕捉的“猎物”。全自动代码只会忠诚地执行,它不会判断“这个策略今天还适不适合这么多资金”。需要不断根据盘口数据和实盘滑点来调整资金分配、调整交易频率的人,不是代码,只能是你自己。
2.4 直觉、判断和信息不对称:人手里最后的牌
很多人觉得量化就是完全理性,人性是弱点。这句话对了一半。人性确实容易受情绪影响,容易在亏损时恐慌、在盈利时贪婪。但如果因此走向另一个极端,认为“代码比人聪明、代码没有情绪所以更厉害”,那就走偏了——因为市场里最难得的,不是“没有情绪”的执行,而是“有理解力”的判断。
真正的Alpha,很多来源于“你看到了别人没看到的东西”。这种“看到”可能是你对某个产业的长期跟踪,可能是你对某个政策变化的敏锐嗅觉,也可能是你从某个非结构化渠道获取的独特信息。这些东西有一个共同点:它们没法标准化成数据字段。你的代码只能处理它被允许处理的信息,而市场里真正有价值的信息,往往存在于结构化数据之外。
我认识一个做商品期货的老交易员,他的核心策略很简单:根据每年气象预测和港口库存的实际情况,提前布仓。他的这套逻辑,用到的数据就是几个公共网站的化肥价格和天气预报。但真正让他持续盈利的,是积累了十几年的行业人脉和产业链感知——比如他知道某个矿场将要检修设备,比新闻提前三周知道。这种东西,代码拿什么去写?你说“信息优势”,但是你不能把“信息优势”写成一个函数。这是全自动代码无法逾越的天花板,也是人永远留在量化体系里的原因。
3. 实操拆解:一套真实的量化体系里,人和代码是怎么分工的
3.1 研究端:信号从发现到验证
聊完了理念,说点实际的。我在实际给团队搭量化体系的时候,通常会明确划分出四个环节:信号发现、策略回测、执行交易、风险评估。这四个环节里,只有第三个环节是“可以全自动”的,另外三个环节都必须有人参与。
信号发现阶段,主要靠的是研究员的主动思考。扫描市场数据时,你可能先用代码做一轮粗筛,把候选信号列出来——比如相关性矩阵、因子收益率分布、换手率变化等等。但粗筛结果只是候选,还需要人来判断这些统计规律是否有经济逻辑支持。一个没有逻辑支撑的纯统计信号,就像一条没有任何基站信号的电话线,随时都可能断掉。
我强烈建议每一个做量化的朋友,在开发一个新的策略信号时,强制自己回答三个问题:第一,这个信号背后的经济逻辑是什么?第二,这个信号会不会被其他资金迅速复制?第三,如果这个信号失效了,我要用什么指标来发现它失效了?这三个问题,代码都答不了。但如果你答不了,那这个信号就不该进入实盘。为了把这套流程固定下来,我们团队内部有一个不成文的规定:任何新因子要通过初步筛选,必须由至少两名研究员分别给出“防守型解释”和“进攻型解释”,写清楚什么情况下这个逻辑会不成立,再决定是否进入回测环节。
3.2 执行端:自动化该自动的部分
执行端是代码的主场,也是“全自动”最合理的应用场景。交易执行要解决的核心问题是:把策略产生的信号,以最优的成本变成真实的持仓。这里面涉及订单拆分算法、择时逻辑、滑点控制、部分成交处理等等。这些任务机械化程度高、实时性强、对速度和精度要求高,让代码来做是唯一正确的选择。
举个例子,假设你的策略给出一个信号:买入1000手螺纹钢。如果直接下一个1000手的大单,大概率会把价格推高几个点,你的进场成本就变差了。更合理的做法是用代码自动拆单,把大单拆成几十个中小单,在几分钟或几小时内逐步执行,尽量让整体成交均价接近当时的市场平均价。这种执行算法,人脑根本算不过来,必须交代码处理。所以我的结论是:代码要自动化的,不是“决定买什么”,而是“决定了买什么之后怎么买得更好、卖得更稳”。我把这个环节称为“把决策翻译成订单的艺术”,这部分越自动越好。
3.3 风控端:全自动代码最容易出错的地方
风控是全自动系统里最需要警惕的环节,因为代码的风控和人脑的风控完全不是一回事。代码的风控,本质上是一组预设的阈值和处置规则:达到止损线就平仓,超过杠杆限制就减仓,波动率超过某个水平就降仓位。这些规则当然有价值,但它们有一个致命的盲区——代码只会按预设行动,它不懂“意外”。
2020年原油价格出现负值的时候,很多全自动策略直接被打穿。原因很简单,代码的世界里,“价格小于零”这个状态几乎是不可想象的。如果止损规则是“价格低于某个阈值就买入”,那么当价格跌到负值时,代码的逻辑就彻底崩了——它会认为“便宜了”然后疯狂买入,结果一路买一路亏。这种情况,代码完全无法自救,它需要的是人来判断“这个市场状态已经史无前例,系统规则需要临时关闭”。
所以,我在设计所有量化系统时,永远不会允许风控这一环“完全交给代码”。代码可以做第一层风控——实时监控指标、执行止损逻辑。但我一定会在系统里留一个“人工熔断”开关,让交易员可以随时一键暂停所有策略。这个开关平时可能根本用不到,但市场一旦出现异常波动,它就是整个团队的救命稻草。做量化,宁可人肉风控慢半秒,也好过代码失控跑一天。
3.4 人工干预的边界:既不要全自动,也不要乱干预
这里要插一个反向提醒。很多人看完上面的话,可能会走另一个极端:既然代码不靠谱,那我就天天盯着盘、手动干预每一笔交易。这个想法也是错的。
人工干预必须有限度,否则你会毁掉量化最大的优势——纪律性。量化的核心优势之一就是“无情”,它不会因为连续亏损而犹豫,不会因为情绪波动而改变规则。如果交易员每五分钟就想手动改一次参数、关一次仓位,那整个系统的统计优势就荡然无存了。实盘中我发现,很多新手亏损反而比老手更严重,就是因为他们在策略回撤期“忍不住干预”,结果每次都在最不该止损的位置割肉。
我的实践经验是,人工干预只允许发生在三个层面:第一,策略逻辑本身已经失效(需要重新研究信号);第二,市场出现了极端的、历史从未出现过的状态(需要临时风控);第三,资金管理层面发生了重大变化(比如资金量翻了好几倍,需要重新评估容量)。除此之外,日常的波动、回撤、浮盈浮亏,都应该在系统设计时就算进去,然后交给代码去熬。记住那句老话:让代码执行交易,让人执行干预。
4. 全自动梦想背后的三个陷阱
4.1 过拟合陷阱:回测越好,真实越惨
量化圈子里有一句至理名言:如果你的策略在样本内表现太好,它在样本外大概率会让你怀疑人生。过拟合是量化行业里“最贵”的陷阱,无数团队都在这里烧光了预算。
过拟合的本质很好解释:你让一个模型死记硬背历史数据,而不是让它学会一般规律。比如你在某个因子上加了十几个参数,每个参数都在历史数据上反复微调,最终得到一个在回测里完美拟合的曲线。这个曲线看起来美轮美奂,实际上只是把历史数据的噪声一起拟合了。到了实盘,噪声不再重现,策略就崩了。
怎么发现过拟合?有个简单好用的习惯:不要把数据全拿去训练,一定要留出一段专门做样本外测试。比如用前三年的数据来开发策略,留下最近半年完全不看、不调参,等策略开发完成后再用这半年的数据做一次“盲测”。如果盲测结果和训练期差距很大,那很大概率是过拟合了。更进一步,使用Walk-Forward Analysis(滚动向前分析),不断用新数据重复训练和验证过程,比一次性回测要可靠得多。这些方法都不是代码要解决的问题,而是开发纪律——而纪律,只能靠人来维持。
4.2 僵尸策略陷阱:你的代码还活着,但逻辑已经死了
全自动代码还有一个隐蔽的危害,就是它会营造一种“一切正常”的幻觉。策略在跑、系统在动、账户在交易,但本质上你的Alpha可能已经消失几个月了,剩下的只是Beta和运气在维持账面。
这就是所谓“僵尸策略”的概念。代码没有任何知觉,它不管这个策略的底层逻辑是不是还成立,只要信号出现它就会执行。如果没有人周期性去检查策略的生命力,你就可能在错误的策略上持续亏损很久。实盘中最典型的表现是:净值曲线横盘震荡,偶尔小赚偶尔小亏,但成交量很大,手续费和滑点持续消耗资金。这种策略最坑的地方在于,它不会让你立刻痛得醒过来,而是慢慢磨死你。
我给自己和团队的检查频率是:每个月做一次策略体检,包含但不限于:看一下近期收益的Alpha占比、因子衰减曲线、相关性矩阵、交易成本占比。如果连续一个月超额收益接近零,并且不是因为市场整体环境高度不确定导致的,我会强制暂停这个策略,进入“观察期”,而不是继续无脑让代码跑。用代码赚钱的前提,是你先判断这个代码背后的逻辑还值不值得跑。
4.3 黑箱陷阱:代码越复杂,越容易掩盖问题
现在很多人做量化喜欢堆模型,CNN、LSTM、Transformer,恨不得把所有深度学习方法都塞进策略里。深度学习模型确实能捕捉一些线性模型抓不到的非线性关系,但问题也随之而来:这些模型的可解释性很差,你根本不知道它到底在根据什么做决策。
如果一个策略是一个黑箱,当它开始亏钱的时候,你就无法判断该怎么修复它。你不知道是特征问题、数据问题、训练方法问题,还是模型结构本身就有问题。这时候,所谓的全自动就成了一个“失控的大货车”——它在飞速前进,但你既看不到前面的路,也不知道该怎么刹车。
我的个人偏好是:实盘策略尽量使用可解释性强的模型。即使要用机器学习,也会选择特征重要性可输出的模型,并且会把模型的预测结果分解成与某个已知逻辑的关联程度来交叉验证。如果发现模型的预测与常识逻辑完全相悖,就算它在回测里表现再好,我也不会让它上实盘。为什么?因为我不需要预测完美的模型,我需要的是我亏钱时知道为什么亏钱的模型。
5. 踩坑实录与排查思路
5.1 完整复盘一次“全自动事故”
前面讲的都是理论,这一节我想分享一次真实的踩坑经历。那是前几年,我负责的一个趋势跟踪策略已经稳定运行了八个多月,净值曲线漂亮得像教科书案例。当时刚做完一轮迭代,团队给我的指令是“优化参数,提升各市场下的稳健性”。我把其中的波动率参数从固定的20日窗口调整成了自适应动态更新,回测结果非常优秀——不仅收益小幅提升,最大回撤还缩小了。于是我很放心地更新了线上代码。
结果问题出在第二周的某一天。当天市场先快速上涨,我的策略在动态波动率变大的情况下自动降低了仓位,这是符合设计的。但下午开盘后,市场突然快速反转,动态波动率模型迅速把仓位加回去,刚好加在了最高点。当天收盘时,策略一天亏损超过了前两周的全部收益。因为我用的是全自动执行,中间没有任何人工复核的环节,等我发现时已经收盘了。
复盘后发现,问題的核心在于:动态波动率模型在市场转折时会带来天然的“追涨杀跌”效应——波动率上升加仓,市场转跌时波动率更剧烈,模型再次加仓,形成了正反馈。回测里这个效应不明显,因为历史样本里极少出现这种短时间内从大涨到大跌的极端切换。这次事故给我最深的两条教训是:第一,任何参数更新都必须经过小资金实盘验证,不能光看回测;第二,真正的Alpha不在于参数的完美,而在于知道什么情况下参数会失效。
5.2 策略“还活着吗”?实用的体检清单
结合我这些年的经验,整理了一个“策略体检清单”,团队内部每周都会过一遍。你可以直接抄作业:
| 检查项 | 检查频率 | 发现问题后的处置建议 |
|---|---|---|
| 超额收益占比(Alpha vs Beta) | 每周 | 若Alpha连续四周趋近于零,强制暂停策略 |
| 滑点与手续费占比 | 每周 | 若成本吞噬毛收益超过40%,优化执行算法或降低频率 |
| 因子衰减曲线 | 每月 | 若因子IC持续下行,寻找替代因子 |
| 关联策略的拥挤度 | 每月 | 若同类型策略规模暴增,主动缩减本策略仓位 |
| 极端行情压力测试 | 每季 | 若无法通过,降低杠杆并在风控层增加熔断规则 |
这一套清单不需要多高深的数学基础,贵在坚持执行。我最常看到的团队问题不是策略太差,而是团队压根不做这种体检,或者用“长期主义”来合理化回撤——策略给你赚钱的时候你不做体检,等它开始亏钱的时候再做,大概率已经晚了。
5.3 工具选型的忠告:从Python开始,但别困在Python里
很多想进入量化领域的朋友,第一反应都是学Python、写策略。这个方向没错,Python确实是量化研究的主流语言,生态成熟,第三方库丰富,pandas做数据清洗、numpy做数值计算、backtrader或vectorbt做回测、ccxt做加密货币交易接口,基本一站到底。我个人建议初学者从Python入手,主要是它适合快速验证想法,而不是一上来就写C++高频核心。
但我想提醒你的是,Python的方便某种程度上也是它的陷阱。因为写起来太容易了,很多新手会陷入“不断写新策略、不断回测、不断修改参数”的循环,方法论却越来越混乱。真正扎实的做法是先建立自己的投研框架——把数据管理、信号库、风控规则、资金管理几个模块分清楚,再来写代码。一旦框架清晰了,Python的价值才能真正发挥出来;否则你只是在用Python制造更多的过拟合。
另外一个建议是重视基础设施。策略再厉害,如果数据源不稳定、回测环境有bug、服务器网络经常连不上,一切都是白搭。很多团队的实际瓶颈从来都不是“策略不够好”,而是工程能力撑不住投研想法。在这方面,花时间好好打磨数据和执行环节,比多写五个因子有价值得多。
6. 最后再分享一点个人体会
这些年下来,我对“量化全自动”的态度发生了很大的变化。刚入行的时候,我觉得量化就是找规律、写代码、躺着赚钱。现在我的看法是:代码是一把极度锋利的手术刀,可以让你更高效地做投资,但真正决定这把刀往哪里切、什么时候切的人,永远是你自己。所谓的Alpha,本质上是对市场的某种独特理解。这种理解会被时间刷新、被市场教育、被新的信息重塑,它不是一个静态的函数,也不是一段可以被永久封装的代码。
所以我特别想对正在学量化或者准备把自己的策略“全自动化”的朋友说一句话:别把“自动化”当作目标,把“可维护、可理解、可进化”当作目标。代码要自动化的部分,应该只是“我已经想清楚了的部分”。而那些你还没想清楚的东西、市场刚刚出现的新变化、超出历史经验的新情况,都应该留给自己来处理。一个好的量化系统,应该是一套“人机协作”的体系,而不是一台只有代码的永动机。
我自己现在设计策略时,永远会问自己一个问题:如果三个月之后这个策略失效了,我是看代码发现的,还是看市场发现的?如果答案是“看代码发现”,说明我的系统里还有一片危险的知识盲区。真正的Alpha,永远是人脑中那个关于市场的、活的、不断更新的模型,而不是代码仓库里那堆静态规则的集合。希望这篇内容能给你带来一些不一样的思考,也希望你能在量化的路上少走几个来回。