
双节假期终于空下来可以把后台和私信里积压很久的问题一次性整理出来了。这段时间问得最多的就是想正经学量化交易到底从哪起步网上资料东一块西一块代码抄下来跑不动概念看完了也不知道怎么拼成一套完整策略。今天借这个公开帖我把做量化交易的完整思路和框架先摆出来边写边征集各位的意见后续教程按什么顺序讲、重点拆哪些工具、每期配什么实战案例都听你们的。先说清楚这篇会覆盖什么量化交易策略怎么写、回测怎么才不算白跑、在线平台和本地代码两条路线怎么选另外还会专门补一块很多人搜错方向的“模型量化”——给大模型和扩散模型做 INT8、GPTQ 压缩其实是另一条技术线后台留言里这两拨人经常互相串台这次一次讲明白。内容偏实操适合刚开始接触量化、以及有一定代码基础但始终没形成完整闭环的朋友。1. 为什么想在这个时间点做一套民间视角的量化教程1.1 量化交易为什么突然值得普通人认真学过去几年量化交易的门槛其实被砍掉了一大截。早年间做量化数据要买数据库、行情要接专线、回测要自己写撮合引擎普通人根本玩不转。现在不一样了行情数据有各种开源接口回测框架有现成的轮子算力租一台云服务器就够Python 环境装完十分钟就能跑起第一个策略。这背后的变化本质上是两件事——数据成本趋近于零计算资源按小时计费。但这不代表“量化交易”这四个字就是提款机。恰恰相反普通人更应该把量化当成一套研究和风控的方法论而不是一夜暴富的工具。量化的核心价值是把以前凭盘感、凭消息、凭情绪做的决策变成可回测、可复现、可优化的规则。你做一件事之前先问一句“这个规则在历史数据上表现如何逻辑是否站得住”这比任何暴富故事都值钱。也因为这个原因教程的内容定位不应该停留在“帮你抄一段代码”而是帮你建立起一套能自我迭代的研究框架。代码会过时策略会失效但“数据—规则—验证—执行—反馈”这个闭环永远有用。1.2 现有资料最大的三个问题我拉了一下私信和评论区发现大家卡住的地方高度集中。第一是概念碎片化今天看一个均线策略明天看一个 MACD 指标后天又刷到机器学习预测涨跌每块单独看都懂连起来就懵。第二是代码复现难网上分享的策略源码往往缺上下文不告诉你数据长什么样、需要哪些依赖库、参数范围是多少复制下来直接报错。第三是缺少主线大部分人学了三个星期还停留在“我今天又看了一个新指标”的阶段没有真正跑通过一个完整的策略闭环。所以这套公开教程我打算按一条明确的主线来组织先讲数据怎么获取和清洗再讲因子和信号怎么构造然后讲回测怎么搭才可信接着讲绩效归因和风控最后落到模拟盘和小资金实盘。每一期都必须能独立跑通并且我会把踩过的坑同步写成“避坑实录”。2. 量化交易的核心流程从想法到可运行代码2.1 一套策略的标准生命周期任何策略不管简单还是复杂生命周期都是同一套流程。第一步是定义交易逻辑比如“双均线金叉做多、死叉做空”这是整个策略的出发点。第二步是数据准备拿到日线或者分钟线之后要做复权处理、去极值、补缺失值。第三步是因子计算把原始数据加工成可用于决策的特征比如均线、RSI、波动率、成交量异常度。第四步是信号生成根据因子值产生目标持仓方向。第五步是回测验证用历史数据模拟执行并记录收益曲线。第六步是绩效评估计算夏普比率、最大回撤、胜率、盈亏比这些指标。最后是持续迭代参数调整、逻辑修正、样本外验证。这个流程里新手最容易跳过的两步是数据清洗和样本外验证。很多人拿到数据直接算指标结果复权没做除权除息那天出现巨大的假跳空策略信号被扰动得乱七八糟。还有些人用同一段数据反复调参直到回测曲线漂亮得不行结果一上实盘就崩。这些都说明流程不能省。2.2 用 Python 写一个最小可用策略双均线版下面给一个非常精简但五脏俱全的回测示例让你先跑通最基础的逻辑。代码里假设你已经有一份包含 daily 数据的 DataFramedf至少要有close这一列最好还有date字段。import pandas as pd def backtest_ma_demo(df, short_win5, long_win20, fee_rate0.0005): df df.copy() df[short_ma] df[close].rolling(short_win).mean() df[long_ma] df[close].rolling(long_win).mean() # 信号短期均线在长期均线上方时持仓为1否则为0 df[signal] 0 df.loc[df[short_ma] df[long_ma], signal] 1 # 关键一步信号滞后一根K线避免未来函数 df[position] df[signal].shift(1).fillna(0) df[ret] df[close].pct_change().fillna(0) df[strategy_ret] df[position] * df[ret] df[strategy_ret] - fee_rate * df[position].diff().abs().fillna(0) df[nav] (1 df[strategy_ret]).cumprod() return df def evaluate_strategy(df): nav df[nav] total_return nav.iloc[-1] - 1 annual_return nav.iloc[-1] ** (252 / len(df)) - 1 daily_ret df[strategy_ret] sharpe 0 if daily_ret.std() ! 0: sharpe daily_ret.mean() / daily_ret.std() * (252 ** 0.5) max_drawdown (nav / nav.cummax() - 1).min() return { 累计收益: f{total_return:.2%}, 年化收益: f{annual_return:.2%}, 夏普比率: f{sharpe:.2f}, 最大回撤: f{max_drawdown:.2%} }调用方式很简单result backtest_ma_demo(df)然后evaluate_strategy(result)就能看到四个核心绩效指标。这个例子虽然短但已经包含了信号生成、仓位管理、手续费扣减、净值计算和绩效评估的完整链条。注意这里用了position signal.shift(1)意思是今天收盘后算出的信号最快也要到下一根K线才能生效。很多新手写的回测不做这一步直接用当天收盘信号加当天收盘价成交等于让策略“偷看”了当天行情回测收益会虚高一截。2.3 这段代码里藏着两个新手必踩的坑第一个坑就是刚刚说的未来函数。我在不少所谓的“量化源码分享”里见过这种写法当天收盘价均线金叉代码立刻按当天收盘价买入回测收益漂亮得很。但实际交易中收盘价确定的时候你已经没法再用那个价格成交了。所以正确做法是信号延迟一周期或者至少按次日开盘价成交反正不能“当天信号当天成交”。第二个坑是手续费和滑点的处理。很多入门代码完全不扣手续费短线策略回测收益率可能虚高百分之几十。上面的示例按单边万五的手续费估算而且只在仓位变化时扣费逻辑是仓位从0变成1说明交易了一次从1变成0又交易了一次。这个粗糙但合理的假设能让回测结果更接近真实。后续教程里我还会展开讲滑点模型怎么建、冲击成本怎么估算。3. 两条技术路线怎么选在线平台还是本地代码3.1 平台派聚宽、BigQuant 这类在线研究平台对大多数刚入门的人我其实是推荐从在线量化平台开始的。这些平台最大的优势是数据不要自己管。不用折腾行情数据从哪里下载、复权因子哪里找、数据库怎么建平台全都帮你处理好了。你只需要打开网页写策略、跑回测、看报告。而且平台内置了非常完整的回测框架包括撮合规则、手续费模型、基准对比、绩效归因初学者可以少踩很多工程层面的坑。平台派也有明显短板。首先是策略保密性差代码放在云端平台方理论上都能看到虽然一般不会出问题但对于严肃研究的人来说心里总有点膈应。其次是扩展性受限如果策略需要用到平台没有的数据源或者需要自己实现一套撮合逻辑和风控模块平台的框架就会成为瓶颈。最后是脱离平台之后容易手足无措因为很多人只是学会了平台封装好的 API并不理解背后的数据流和交易流是怎么走的。3.2 代码派本地 Python 环境加开源框架代码派的典型组合是 Python pandas 做数据处理Backtrader、QLIB、vn.py 等开源框架做回测和交易数据源用 akshare、tushare 这类开源接口。这条路起步慢但上限极高。这里尤其要提一下 QLIB微软开源的那套量化投资平台。它设计了一套相对完整的数据层、算子层和策略层架构内置了因子表达式引擎、风险模型、组合优化器和绩效分析工具适合对量化研究深度有要求的人。QLIB 的好处是不光能回测一个简单的双均线它把整个投研流程抽象成了可扩展的模块做机器学习因子挖掘、组合优化、风险控制的时候会顺手很多。坏处是上手陡、文档全英文、安装配置繁琐我不建议零基础的人直接啃。除了 QLIB还有两个方向值得关注一是用 Backtrader 这种更轻量的回测框架适合快速验证想法二是直接用 pandas 手写回测逻辑像上面示例那样适合彻底理解原理。手写回测本身就是一个极好的学习过程你会在写撮合逻辑的过程中明白“开盘价成交”“收盘价成交”“次日开盘成交”之间到底差多少收益。3.3 我的选型建议与常见误区我的建议可以概括成一句话先用平台派跑通流程再用代码派深挖原理最后根据自己的实际需求决定在哪条路上深耕。不要一上来就纠结“选哪条路”先跑通最小闭环比选路更重要。这里顺便破一个很常见的误区很多人以为做量化必须自己有一台很贵的服务器必须会写多线程、C、低延迟交易系统。其实对绝大多数策略研究来说一台普通的云服务器完全够用甚至本地笔记本都可以。低延迟高频交易是极小众的领域普通人的量化更多是日线、小时线级别的策略研究瓶颈根本不在算力而在数据质量和研究逻辑。真正应该花钱的地方是可靠的数据源和稳定的运行环境。4. 另一个“量化”模型量化与本地小模型实战4.1 小心交易量化和模型量化是两条完全不同的线在留言里搜“量化”两个字会发现有一大批人是奔着另一个方向来的——把深度学习模型压缩成 INT8、用 GPTQ 量化大模型、给 Stable Diffusion / FLUX 做量化版。这里的“量化”指的是模型参数量化跟交易量化风马牛不相及。我一开始也挺困惑后来发现这个现象很普遍搜索引擎里搜“量化”出来的既可能是量化交易策略也可能是大模型量化部署教程。所以这篇公开贴干脆把两条线都讲清楚。如果你关心的是模型量化下面这一节就是为你准备的如果你只对交易感兴趣可以直接跳到第 5 节。4.2 从 FP32 到 INT8模型到底经历了什么模型量化的核心原理很简单深度学习模型在训练和推理时通常用 FP32 浮点数存储参数每个参数占 4 字节。实际部署时很多场景对精度没那么敏感可以把参数从 FP32 降到 INT8也就是每个参数占 1 字节理论内存占用直接降到原来的四分之一推理速度通常也会有明显提升。最简单的入门操作是 PyTorch 提供的动态量化接口几行代码就能把一个训练好的模型压成 INT8import torch model torch.nn.Sequential( torch.nn.Linear(128, 256), torch.nn.ReLU(), torch.nn.Linear(256, 10) ).eval() quantized_model torch.quantization.quantize_dynamic( model, {torch.nn.Linear}, dtypetorch.qint8 ) # 查看量化后的模型结构 print(quantized_model)这段代码会把模型里所有 Linear 层从 FP32 动态量化到 INT8权重压缩但激活仍然按动态范围计算。对很多 NLP 模型和推荐模型来说这种量化方式精度损失很小但体积和推理速度改善明显。再往上走还有更高级的 GPTQ它按层做量化利用二阶信息补偿量化误差是目前大模型 4bit/8bit 量化部署的主流方案。网上热门的“qwen 量化版”“flux.1 dev 量化版”基本都是走这条路线。注意这类模型量化教程更新的速度非常快热点框架三个月就可能换一代我后续考虑单独开一个“模型量化部署实战”系列专门跟踪这块的进展。4.3 什么时候该用模型量化什么时候别硬上模型量化不是万能的以下几个场景可以考虑用模型大到显存放不下需要压缩体积才能部署推理性能吃紧量化可以换来明显的速度提升目标是边缘设备、浏览器端、手机端这类资源受限的环境。反过来如果显存和速度都够用就不必为了量化而量化毕竟 INT8 或多或少会带来一点精度损失尤其对敏感的小模型可能比较明显。实操中有个经验量化之后一定要用真实业务数据做精度对比不能只看测试集的一个总准确率。有些模型在平均值上只掉零点几个点但个别类别或个别输入会突然劣化这种“局部崩坏”在量化模型里并不罕见。遇到这种情况可以先尝试混合精度方案把容易出错的层保留 FP16 或 FP32其余层用 INT8在压缩和精度之间找一个平衡点。提示模型量化领域非常多坑芯片不同支持的最优量化算子也不同。同一个量化后的模型在 NVIDIA GPU、苹果芯片、高通平台上可能跑出完全不同的性能表现。所以别盲目照搬别人的部署代码要针对目标硬件做适配。5. 回测看着猛如虎实盘亏成狗一份防骗指南5.1 “高收益回测”是怎么来的——未来函数与数据泄露先讲一个反直觉的事实很多晒出来的超神回测曲线不是策略有多牛而是回测代码里不小心或者故意用了未来数据。最常见的就是我前面提到的信号偷价更隐蔽的包括用全样本的均值和标准差做归一化这等于让策略在回测第一天就“知道”了未来所有数据的分布。还有一种数据泄露隐藏在复权处理里。A 股除权除息之后股价会跳空你如果只拿原始价格计算收益率除权日会看到一个巨大的假跌幅策略可能在那个位置错误地触发买入或止损。正确做法是使用前复权或后复权数据并且回测、计算因子、生成信号都必须在同一套复权规则下进行。这个问题在股票和期货数据里都很常见新手特别容易中招。另外要警惕“未来数据发布时间差”的问题。某些宏观数据或行业数据发布是有延迟的比如 T 日的数据要到 T1 日晚上才公布。如果你的策略在 T 日就用上了这个数据那又是另一种形式的未来函数。很多人处理日线行情数据时不会遇到这个问题但一旦开始引入另类数据、财务数据就要格外小心发布时间戳到底准不准。5.2 过拟合参数调得越欢死得越快如果你的策略只有两个参数比如双均线的快线周期和慢线周期你可以把参数在 5 到 60 之间扫描一遍找到历史收益最高的一组。如果策略有 20 个参数那几乎总能找到一组在历史上表现完美的参数组合——但这就是典型的过拟合。参数越多、扫描范围越细、优化轮数越多样本内表现就越好样本外表现就越差。怎么对抗过拟合首先是留出样本外数据比如把数据按时间切成两段前 80% 用来开发策略和调参后 20% 用来做最终验证。样本外数据在整个调参过程中绝对不能碰否则它就从“检验数据”变成了“训练数据”。其次是做滚动前推walk-forward让策略在滚动的时间窗口里反复训练和验证看看在不同市场环境下是否都能保持稳定。最后是参数敏感性分析一个稳健的策略应该是参数在合理范围内变化时表现差异不大而不是只在某个特定值爆发。5.3 实盘前的三道检查清单回测做得再复杂上实盘之前我还是建议按下面这张表做一次系统体检每一项不过关都不要急着放真金白银进去。检查项检查方法常见错误数据质量核对复权方式、是否含退市股票、是否有缺失值用当前存续股票做历史回测忽略退市股产生幸存者偏差未来函数回看策略信号是否用了当天收盘后才能知道的数据当天信号当天成交、使用未来数据做归一化交易成本在回测里加入手续费、滑点、冲击成本只扣手续费不扣滑点短线策略收益虚高样本外验证预留一段时间数据不参与调参样本外数据反复使用等于无效模拟盘测试至少跑 1 个月以上的模拟盘对比真实行情和回测偏差模拟盘时间过短或没有记录信号执行偏差这五道检查里最容易被忽视的就是退市股票的幸存者偏差。如果你把股票池固定成“今天还活着的股票”拿去回测过去五年的策略每一只暴雷退市的股票都被自动剔除了回测结果自然会好看很多。这是很多“高收益回测”最隐蔽的造假手段之一也是不少策略实盘和回测差距巨大的原因。6. 学习路线建议与意见征集你想先看哪一块6.1 我建议的量化学习路线适用于零基础做技术教程最怕的是没有主线今天讲一个知识点明天又跳到另一个。根据我个人走过的弯路我给初学者设计了一条相对平滑但又不绕远的路。第一阶段第 1-2 周把 Python 和 pandas 的基础打牢重点是 DataFrame 的索引、切片、分组、滚动窗口计算。这个阶段不用写任何策略先做到能熟练处理日线行情数据。第二阶段第 2-4 周理解指标和因子动手写双均线、动量、波动率策略同时把回测代码自己写一遍。注意这个阶段的目标不是追求收益而是跑通“数据—信号—回测—绩效指标”的完整流程。第三阶段第 2-4 周学习回测框架和绩效评估搞清楚夏普比率、最大回撤、胜率、盈亏比的含义和计算方式并开始做参数敏感性分析和样本外验证。第四阶段持续进行拿一小笔资金跑模拟盘记录策略信号和实际成交之间的偏差复盘每一次滑点过大、信号延迟、数据错误再回到研究环境里迭代。这条路线里有一个贯穿始终的核心原则不要为了背公式而背公式也不要为了调参而调参。所有知识最终都服务于“数据会告诉你这个规则到底行不行”这一个目的。6.2 关于教程形式我想征集大家的意见这个帖子既然叫“征集意见贴”那我也把后续可能的教程方向列出来大家可以投票或者直接留言。APython 量化入门系列从数据获取到回测框架完整跑通双均线/TEMA/动量策略BQLIB 框架实战数据层、因子引擎、组合优化适合想深入做研究的人C因子挖掘与机器学习如何从行情和另类数据中挖掘有效因子以及如何避免过拟合D模型量化与本地部署GPTQ、INT8、ONNX 量化跟踪大模型/扩散模型压缩的最新实践E量化比赛方案拆解拿公开比赛的数据和题目完整跑一遍优秀策略的思路和代码我个人目前的计划是优先把 A 系列做完因为在所有提问里零基础入门的需求量最大。但如果你对 B、C、D、E 里某一块有强烈需求可以在评论区明说。除了投票以外你还可以直接告诉我“你最想解决的一个具体问题”比如“如何用 QLIB 做行业中性化处理”或者“怎么把 transformer 模型量化到 4bit 还保持精度”。每一个具体问题都可能直接成为下一期教程的内容。6.3 一个独家小技巧如何快速判断网络上的“量化策略源码”值不值得下最后一节分享点个人经验。这些年我见过的所谓“策略源码”没有一千也有几百份真正值得跑一遍的比例很低。判断一份源码质量我主要看三个东西。第一看有没有干净的样本外测试。如果作者只贴了那年涨了百分之几十的净值曲线却没有说明数据切分方式和样本外验证过程那这份回测的可信度要打折扣。第二看有没有解释参数选择的依据。为什么均线用 5 和 20 而不是 3 和 28如果源码只给了参数却不给敏感性分析大概率是历史数据上凑出来的最优解。第三看有没有完整的数据清洗逻辑。很多源码直接