1. 为什么"个人做量化"这件事在AI时代突然变得可行了
三年前如果有人跟我说"你一个人也能搞出一套能跑的量化策略",我大概率会笑笑不说话。那时候的量化圈子是什么状态?一个像样的策略团队至少要有数据工程师、因子研究员、回测平台开发、风控,四五个人起步,光是数据清洗和回测框架搭建就能耗掉大半年。个人想入场,光是"把数据搞到手、把回测跑通"这两件事就足以劝退九成以上的人。
但这两年情况确实变了,而且变得很彻底。我自己从最早用Excel拉数据手动算均线,到后来写Python脚本跑Backtrader,再到现在用AI辅助把整个策略开发流程压缩到几天,这个变化是亲身经历过来的。核心原因有三个,我一个个说。
第一个是数据门槛塌了。以前要拿干净的日线、分钟线数据,要么花钱买,要么自己爬然后花大量时间清洗复权、处理停牌、对齐交易日历。现在主流的开源数据接口和社区整理好的数据集已经相当成熟,akshare、tushare这类工具几行代码就能拉到可用的行情数据,复权、停牌这些坑社区也基本帮你填过了。你不需要再当数据工程师。
第二个是回测框架成熟了。Backtrader、vnpy、qlib这些框架把回测这件事标准化了。你不需要从零写撮合逻辑、写手续费模型、写滑点处理,框架里都有。你要做的只是把策略逻辑表达清楚。这就像以前做饭要自己种菜、自己打铁锅,现在菜市场买好、锅也现成,你专注炒菜就行。
第三个,也是最关键的,是AI把"写代码"和"查资料"这两件事的成本打下来了。这一点我必须展开讲,因为它直接决定了个人量化的可行性。以前你有个策略想法,比如"我想试试双均线加成交量过滤",你得自己查Backtrader的API怎么写、指标怎么注册、订单怎么下,光是把想法翻译成能跑的代码就要折腾好几天。现在你把想法描述清楚,AI能帮你把框架代码搭出来,你只需要审查逻辑、调参数、验证结果。这个效率提升不是百分之几十,是几倍到十几倍。
注意:AI帮你写代码不等于AI帮你赚钱。策略的逻辑、参数的合理性、回测结果有没有过拟合,这些判断必须你自己来做。AI是个执行力极强的助手,但它不懂市场,也不为你的账户负责。
所以"AI时代最大的红利"这个说法,我理解它的真正含义是:过去被团队和资金门槛挡在外面的个人,现在有了用一套工具链独立完成"想法到验证"全流程的可能性。注意我说的是"验证",不是"稳定盈利"。这两者之间隔着巨大的鸿沟,后面我会专门讲这个鸿沟在哪。
这篇文章适合谁看?如果你是对量化有兴趣但一直觉得"这是机构玩的东西"的个人,或者你已经会一点Python但不知道怎么把它变成一套完整策略,再或者你已经在跑策略但回测和实盘对不上、不知道问题出在哪,那接下来的内容应该对你有用。我会从策略的完整生命周期讲起,把每个环节的实操细节、我踩过的坑、以及AI在哪些环节真正帮得上忙,都摊开来说。
2. 一套个人量化策略的完整生命周期拆解
很多人对量化的理解停留在"写个策略代码然后跑回测",这其实只是中间一小段。一套策略从想法到能实盘,完整走下来有这么几个阶段,每个阶段都有它自己的坑。
2.1 从"想法"到"可验证假设"的转化
大部分人的起点是一个模糊的直觉,比如"我觉得放量上涨之后还会涨"、"均线金叉应该能赚钱"。这种直觉不能直接拿去写代码,因为它不可证伪。你得把它转化成可验证的假设。
转化的关键是把模糊描述变成明确的、可计算的规则。举个例子,"放量上涨"这个说法,你得定义清楚:放量是相对什么放量?是相对过去5日均量还是20日均量?放大多少倍算放量,1.5倍还是2倍?上涨是当日涨幅超过多少,3%还是5%?这些参数一旦定下来,假设就变得可计算、可回测了。
我自己的习惯是拿一张纸(或者一个文本文件)把假设写成这种格式:
- 入场条件:过去20日均量的1.8倍以上,且当日收盘涨幅大于3%,且收盘价站上20日均线
- 出场条件:持有5个交易日,或跌破10日均线,或盈利超过8%止盈
- 标的范围:沪深300成分股
- 时间范围:2018年至今
写清楚这些,你才知道自己要回测什么。我见过太多人上来就写代码,写到一半发现"我到底要测什么"都没想明白,最后代码跑出来了但不知道结果意味着什么。
2.2 数据准备:比你想的更重要,也比你想的更简单
数据这块,个人做量化最容易犯两个极端错误:要么觉得数据不重要随便拉一份就用,要么觉得数据太重要结果卡在数据准备阶段几个月出不来。
我的建议是:先用能拿到的最简单的数据把流程跑通,再逐步升级数据质量。第一版策略用日线数据就够了,akshare的stock_zh_a_hist接口能直接拿到前复权日线,几行代码的事。等你验证了策略逻辑本身有价值,再去考虑分钟线、财务数据、另类数据这些。
这里有个细节必须提醒:复权方式的选择会直接影响回测结果。前复权适合看历史价格走势做技术分析,后复权适合计算真实收益率。如果你用前复权数据算收益率,遇到除权除息日会出现虚假的跳空,回测结果就失真了。我早期就吃过这个亏,一个策略回测年化20%多,后来发现是复权没处理对,修正后掉到8%。
import akshare as ak import pandas as pd # 拉取前复权日线数据 df = ak.stock_zh_a_hist( symbol="000001", period="daily", start_date="20180101", end_date="20241231", adjust="qfq" # 前复权 ) df = df.rename(columns={ "日期": "date", "开盘": "open", "收盘": "close", "最高": "high", "最低": "low", "成交量": "volume" }) df["date"] = pd.to_datetime(df["date"]) df = df.set_index("date").sort_index()2.3 回测框架选型:Backtrader还是自己写
这是个人量化绕不开的一个选择。我的观点很明确:除非你有特殊需求,否则不要自己从零写回测框架。
自己写框架的诱惑在于"完全可控",但代价是你得处理撮合逻辑、手续费、滑点、停牌、涨跌停无法成交、分红除权等等一大堆细节。这些细节每一个处理错了,回测结果就是错的,而且错得很隐蔽。我见过自己写框架的人,回测里涨停板还能买入,实盘根本买不进,结果回测和实盘差出十万八千里。
Backtrader是我用得最顺手的,原因是它的抽象层次刚好:策略逻辑写在next()方法里,指标用内置的或者自己算,订单、手续费、滑点都有现成的配置。它的学习曲线不算陡,但有几个概念必须先搞懂,否则会写出看起来很对但实际有问题的代码。
| 框架 | 适合场景 | 上手难度 | 个人推荐度 |
|---|---|---|---|
| Backtrader | 日线/分钟线策略,事件驱动 | 中等 | 高 |
| vnpy | 需要实盘对接、期货为主 | 较高 | 中 |
| qlib | 因子研究、机器学习方向 | 较高 | 中 |
| 自己写 | 有非常特殊的需求 | 高 | 低 |
2.4 回测跑通不等于策略成立
这是我最想强调的一点。回测跑出来一条漂亮的资金曲线,和策略真的有效,中间隔着好几道坎。后面第4节我会专门讲怎么判断一个回测结果是不是"看起来很美但实际是幻觉"。这里先埋个引子:任何没有经过样本外验证、没有考虑交易成本、没有做过参数敏感性分析的回测结果,都不能作为策略有效的证据。
3. AI在策略开发各环节到底能帮上什么忙
这一节是这篇文章的核心之一,因为标题里"AI时代"这四个字不是装饰。但我要先把话说在前面:AI不是让你躺着赚钱的工具,它是一个把重复劳动和知识检索成本大幅降低的助手。用对了地方,效率翻几倍;用错了地方,你会得到一堆看起来专业但经不起推敲的垃圾。
3.1 代码生成:把想法翻译成可运行框架
这是AI目前最成熟、最直接的价值。你有一个策略想法,用自然语言描述清楚,AI能帮你把Backtrader的策略类骨架搭出来。比如你告诉它"我要一个双均线策略,5日均线上穿20日均线买入,下穿卖出,每次全仓",它能给你一个基本能跑的代码。
但这里有个关键:你必须能看懂它生成的代码,并且知道哪里可能有问题。我见过有人拿着AI生成的代码直接跑,结果发现它把crossover的方向搞反了,或者手续费没设置,或者用了未来数据。AI生成的代码是"看起来合理"的,不是"一定正确"的。
我的做法是:让AI生成框架,然后自己逐行审查,重点看这几个地方:
- 信号判断有没有用到未来数据(比如用当天的收盘价决定当天开盘就买入)
- 手续费、滑点有没有设置
- 仓位管理逻辑对不对
- 指标计算窗口有没有对齐
import backtrader as bt class DualMAStrategy(bt.Strategy): params = ( ("fast_period", 5), ("slow_period", 20), ("stake_pct", 0.95), # 每次用95%资金 ) def __init__(self): self.fast_ma = bt.indicators.SMA( self.data.close, period=self.p.fast_period ) self.slow_ma = bt.indicators.SMA( self.data.close, period=self.p.slow_period ) self.crossover = bt.indicators.CrossOver(self.fast_ma, self.slow_ma) def next(self): if not self.position: if self.crossover > 0: size = int( self.broker.getcash() * self.p.stake_pct / self.data.close[0] / 100 ) * 100 if size > 0: self.buy(size=size) else: if self.crossover < 0: self.close()这段代码看着简单,但里面每个细节都有讲究。stake_pct用0.95而不是1.0,是给手续费留空间;size取整到100的倍数,是因为A股一手100股;crossover用Backtrader内置的而不是自己写,是因为它处理了边界情况。这些细节AI不一定每次都帮你想到,你得自己补。
3.2 参数调优:AI能加速但不能替你决策
参数调优是量化里最容易过拟合的环节。你有一堆参数(均线周期、止损比例、持仓天数),每个参数试几个值,组合起来就是几百上千种。手动跑不现实,写循环跑又容易陷入"在历史数据上找最优"的陷阱。
AI在这个环节能帮的是:帮你写参数遍历的代码、帮你分析参数敏感性、帮你识别哪些参数是"过拟合出来的尖峰"。但它不能替你决定用哪组参数,因为这个决定涉及你对策略逻辑的理解。
我的经验是:好的策略参数应该是一个"平台"而不是一个"尖峰"。什么意思?如果你画出参数和收益的关系图,好的策略在最优参数附近一片区域表现都不错,说明策略对这个参数不敏感,鲁棒性好。如果只有某一个精确的参数点表现好,旁边稍微一动就崩,那基本可以确定是过拟合。
import itertools fast_range = [3, 5, 8, 10, 15] slow_range = [15, 20, 30, 40, 60] results = [] for fast, slow in itertools.product(fast_range, slow_range): if fast >= slow: continue cerebro = bt.Cerebro() cerebro.addstrategy( DualMAStrategy, fast_period=fast, slow_period=slow ) # ... 添加数据、设置手续费、运行 # final_value = cerebro.run()[0].broker.getvalue() # results.append((fast, slow, final_value))跑完这个遍历,你会得到一张参数热力图。重点不是找最红的那一格,而是看红色区域的面积大不大、形状连不连续。
3.3 资料检索与知识补全:省下大量翻文档的时间
量化涉及的知识面很杂:金融概念、统计方法、编程细节、市场规则。以前遇到不懂的,你得翻书、翻文档、翻论坛,一个概念可能耗掉半天。现在你可以直接问AI,让它用通俗的话解释,还能追问。
比如你不懂"夏普比率"到底怎么算、多少算好,AI能给你讲清楚公式、含义、经验阈值。你不懂"最大回撤"和"回撤持续时间"的区别,它也能解释。这个价值在于降低了你被基础概念卡住的概率,让你能把精力放在策略逻辑本身。
但同样要警惕:AI在金融概念上偶尔会给出似是而非的解释,尤其是涉及具体市场规则(比如A股的T+1、涨跌停、印花税)的时候。这些规则性的东西,最好以官方渠道或权威资料为准,AI的回答当参考。
3.4 AI帮不上忙的地方:市场理解和风险判断
说了这么多AI的好,必须说清楚它的边界。AI不懂市场,它不知道什么是"流动性枯竭",不知道"政策底"和"市场底"的区别,不知道一个策略在极端行情下会怎么表现。这些判断只能靠你自己积累。
更重要的是,AI不会为你的钱负责。它给你生成的代码、建议的参数、解释的概念,最终用不用、怎么用,责任全在你。我见过有人把AI当"投资顾问",问它"现在买什么好",这完全是方向错了。AI是工具,不是决策者。
4. 回测结果"看起来很美"的五个典型陷阱
这一节我打算讲得细一点,因为回测陷阱是个人量化亏钱的头号原因。很多人不是策略逻辑不行,是回测本身就在骗自己,实盘一跑就现原形。
4.1 未来函数:最隐蔽也最致命
未来函数指的是策略在某个时间点用到了当时还不可能知道的信息。最典型的例子:用当天的收盘价决定当天开盘就买入。你在回测里"知道"了收盘价,但实盘里开盘的时候收盘价还没出来。
这种错误在AI生成的代码里也偶尔出现,尤其是当你描述策略时没说清楚时间点。比如你说"价格突破均线就买入",AI可能理解成"用当天收盘价判断突破,然后以当天收盘价成交",这在回测里看起来没问题,但实盘你根本没法在收盘价成交。
排查方法:逐行检查每个信号判断用的数据,确认它用的是[0](当前bar)还是[-1](前一个bar)。在Backtrader里,self.data.close[0]是当前bar的收盘价,如果你在next()里用它做判断然后立即下单,默认是以下一根bar的开盘价成交,这是对的。但如果你手动设置了以当前收盘价成交,就有问题了。
4.2 幸存者偏差:你回测的股票池本身就有问题
如果你回测的股票池是"现在还在交易的股票",那你已经排除了那些退市的、暴雷的、被ST的股票。这些股票在历史上可能是你策略会买入的,但它们在回测里消失了,导致回测结果虚高。
这个问题在个人量化里很常见,因为拿"当前成分股"数据最方便。正确的做法是用"历史成分股",也就是每个时间点当时真实的成分股列表。这个数据获取难度大一些,但如果你的策略是选股类的,这个偏差必须处理。
4.3 交易成本被低估:手续费、滑点、冲击成本
回测里设置手续费0.03%、滑点0.1%,看起来合理,但实盘可能不止。尤其是小盘股、流动性差的标的,滑点可能到0.5%甚至更高。如果你的策略是高频交易,成本会吃掉大部分利润。
我的做法是:回测时把成本设置得比预期高一些,如果这样还能盈利,实盘才有希望。比如你预期手续费万三,回测就设万五;预期滑点千一,回测就设千二。这叫"压力测试",能过滤掉一批靠低成本假设撑起来的策略。
| 成本项 | 常见低估值 | 建议回测设置 |
|---|---|---|
| 手续费 | 万二 | 万五 |
| 滑点 | 千一 | 千二到千三 |
| 印花税 | 忘记算 | 卖出千一(A股) |
| 冲击成本 | 忽略 | 小盘股额外加千二 |
4.4 过拟合:在历史数据上"找"出来的规律
过拟合的本质是:你的策略不是在描述一个真实的市场规律,而是在拟合历史数据里的噪声。表现就是回测极好,实盘极差。
判断过拟合的方法有几个:一是看参数敏感性,前面说过;二是做样本外测试,把数据分成训练集和测试集,在训练集上调参数,在测试集上验证;三是看策略逻辑本身有没有经济学或行为金融学的解释,如果一个策略你说不出它为什么能赚钱,那大概率是过拟合。
4.5 回测区间选择:牛市里什么策略都赚钱
如果你回测的区间正好是一波大牛市,那大部分策略都会表现很好,因为市场本身在涨。这种结果没有意义。正确的做法是至少覆盖一轮完整的牛熊周期,比如2015年至今,包含2015年股灾、2018年熊市、2019-2020年结构牛、2022年调整、2024年的波动。只有在不同市场环境下都表现相对稳定的策略,才值得进一步研究。
5. 从回测到实盘:那些没人告诉你的落差
回测跑通了,样本外也验证了,是不是就能实盘了?还早。回测和实盘之间的落差,是个人量化最容易低估的部分。我自己从回测到实盘,中间踩的坑比回测阶段还多。
5.1 成交假设的落差
回测里你的订单总是能成交,实盘里不一定。涨停板买不进、跌停板卖不出、流动性差的股票挂单半天不成交,这些都是常态。如果你的策略依赖"信号出现就立即成交",实盘会经常错过。
应对方法:在回测里加入成交限制,比如涨停不买、跌停不卖、成交量超过当日成交量一定比例就不成交。这样回测结果会更接近实盘,虽然会难看一些,但真实。
5.2 心理落差:回撤时你扛得住吗
回测里看到20%的回撤,你觉得"正常,能扛"。实盘里真金白银亏20%,你的感受完全不同。很多人策略没问题,是自己在回撤时手动干预,把策略搞乱了。
我的建议是:实盘初期用你能承受完全亏损的小资金。不是为了赚钱,是为了让你在真实压力下体验策略的表现,建立对策略的信任(或者发现你根本不信任它)。如果小资金你都睡不着觉,那说明这个策略的回撤超出了你的承受能力,要么调整策略,要么调整仓位。
5.3 执行落差:手动还是自动
个人量化实盘有两种方式:手动执行信号和程序自动交易。手动执行的问题是延迟和情绪干扰,你看到信号可能犹豫一下,或者因为手头有事错过。程序自动交易的问题是技术风险,网络断了、程序崩了、接口限流了,都可能造成损失。
我的做法是:初期手动执行,验证信号质量和自己的执行力;稳定后再考虑半自动或全自动。不要一上来就全自动,你对策略还没建立足够信任的时候,全自动只会让你更焦虑。
5.4 持续监控与迭代:策略会失效
没有任何策略能永远有效。市场结构在变,参与者在变,曾经有效的规律可能失效。你需要持续监控策略的表现,设定一个"失效判断标准",比如连续3个月跑输基准、回撤超过历史最大回撤的1.5倍,就暂停策略重新评估。
这个监控不是让你天天盯盘调参数,那样又会陷入过拟合。而是定期(比如每月)回顾一次,看策略表现是否在合理范围内。
6. 给个人量化新手的几条实在建议
写了这么多,最后分享几条我自己踩坑总结出来的建议,不搞虚的。
第一,先跑通再优化。不要一上来就追求完美策略,先用最简单的数据、最简单的逻辑把"数据获取-回测-分析"这个流程跑通。流程通了,你才知道每个环节大概是什么感觉,后面优化才有方向。
第二,把AI当助手而不是大脑。AI能帮你写代码、查资料、解释概念,但策略逻辑、参数决策、风险判断必须你自己来。你越懂,AI越有用;你越不懂,AI越容易把你带沟里。
第三,回测结果打七折再看。回测年化20%,实盘能到14%就不错了。成本、滑点、执行落差、心理因素,每一项都会打折。用打折后的预期做决策,心态会稳很多。
第四,小资金实盘是必经之路。回测做得再好,不经过实盘验证都是纸上谈兵。用小资金跑几个月,你会学到回测里永远学不到的东西。
第五,记录一切。每个策略的想法、参数、回测结果、实盘表现,都记下来。量化是个迭代的过程,你今天觉得没用的东西,可能三个月后回头看会有新发现。我自己的策略笔记已经攒了几百页,很多现在的策略都是从以前的失败记录里翻出来的灵感。
量化这条路,个人走确实比以前容易了,但"容易"指的是工具和门槛,不是赚钱本身。市场永远是那个市场,它不会因为你有AI就对你温柔。把工具用好,把心态放平,把风险控制住,剩下的交给时间和概率。