量化交易笔记

数据获取和处理

能拿到什么数据,决定了能做什么策略。数据决定信息的上限,策略只能逼近,不能突破。

加工不产生信息,只会损失信息。

比如一场厄尔尼诺:哪些产区会减产?粮价会不会涨?靠粮食进口的国家,货币会不会承压?这条链上的每一环都要有数据接住,气象、产量、进出口、汇率。谁先拿到、拿得更全,谁就先下注。

获取

  • 行情数据:价格、成交量、盘口、逐笔,频率从日线到 tick
  • 财务数据:三张表、业绩预告、分红送转
  • 另类数据:卫星图、舆情、搜索指数、供应链、天气,边际信息量最大,也最贵、最脏

清洗

  • 缺失值与异常值:先区分是数据错误还是真实的极端行情,再决定剔除还是保留
  • 除权除息:价格序列要做复权,否则分红、送股会被当成暴跌
  • 退市股票:保留已退市的股票,否则会产生幸存者偏差
  • 样本范围:按需剔除 ST 股和金融行业,金融股的财报口径和其他行业不可比
  • 前视偏差:财报按实际公告日而不是报告期对齐,只用当时已经能拿到的数据

处理

  • 时间对齐:统一交易日历,不同频率的数据对齐到同一时点,停牌日做标记而不是填充
  • 截面对齐:每个时点只保留当时在样本池里的股票,整理成「日期 × 股票」的面板
  • 衍生字段:收益率、换手率、财务比率等从原始字段算出来
  • 存储:按 PIT(时点数据)存,财报修订后不覆盖旧值,回测才能还原当时看到的数字

因子(Alpha)

因子是量化投资中用于解释股票收益差异的指标。它可以是基本面因子(如市盈率、盈利增长率)、技术因子(如动量、波动率)或宏观因子(如利率、经济指标)。

要预测的是超额收益或风险调整后的收益,而不是裸的涨跌幅。通常先剥离市场、行业、风格这些系统性因子,再对剩下的残差收益做预测;另一条路线是在无套利约束下直接估计随机折现因子(SDF)。

因子加工与处理(Factor Processing)

因子处理是将原始数据(财报数据、价格数据等)转化为能用于投资决策的因子值的过程。这包括因子构建、清洗、标准化、分布调整、离散化等一系列步骤。

因子计算预处理

  • 去极值(Winsorize):百分位法、3σ 法
  • 标准化(Standardize):常用 z-score,减均值除标准差,变成均值 0、标准差 1
  • 中性化(Neutralize):剔除行业、市值、Beta 等风格因子的影响
  • 归一化:min-max,(x - min) / (max - min),压到 0 到 1

单因子

侧面 Factor 3 Factor 2 Factor 1 正面 普通人:从正面看 K 线涨涨跌跌 工程师:从侧面看 几个因子,各有多强
同一段行情,正面看是 K 线,侧面看是几个因子。
工程师看信号也一样:时间上是一条乱线,频率上是几根柱子。
Portfolio return = factor1 × factor1’s return + factor2 × factor2’s return + …… + factor n × factor n’s return + others

一段声音,普通人听到的是一条起伏的波形,工程师看到的是一组不同频率的正弦波叠在一起(傅里叶变换。

多因子模型看市场也是这样。普通人看到的是一只只个股在涨跌,多因子模型看到的是背后的一组因子:每只股票的收益,都可以拆成它在各个因子上的暴露乘以因子收益,再加上一点个股自己的噪声。

市场不是一支支个股,而是一个个因子。

Factor 1 Factor 2 Factor 3 Factor 4 Factor n …… Signal 1 Signal 2 Signal 3 Signal 4 Signal 5 Signal 6 Signal 7 Signal 8 Signal 9 Signal 10 …… Signal m 市场 维度 原材料

因子分类

一只股票的收益,一部分来自所有股票共同的驱动,一部分来自它自己。解释前一部分的叫风险因子,主要是风格和行业:风格就是市场公认的那几个因子,Barra 里大约十个;行业用申万或中信一级行业的哑变量表示。它们人人都看得见,只能吃到风格溢价,所以做单因子测试前要先中性化掉,剩下的才是 Alpha。

同一个指标两边都算。动量拿来解释收益是风格,拿来预测收益就是 Alpha,看你怎么用。

所以分类不看数据从哪来,看因子凭什么赚钱。解释只有两种:

  • 风险补偿:你扛了别人不想扛的风险,收益是报酬
  • 行为偏差:别人犯了错,你站在对面

价值

回答「现在买贵不贵」。便宜的股票长期跑赢,一种解释是它们本来就更危险(风险补偿),另一种是市场对坏消息反应过度,把它们卖得太狠(行为偏差)。

  • PE(市盈率)、PB(市净率)、PS(市销率)、股息率、自由现金流收益率、EV/EBITDA(企业价值与息税折旧摊销前利润之比)
  • 数据:价格加财报

质量

回答「这家公司本身好不好」。好公司本该更贵,但市场常常给得不够,注意力被有故事的公司抢走了(行为偏差)。

  • 盈利能力:ROE(净资产收益率)、ROA(总资产收益率)、ROIC(投入资本回报率)、毛利率与净利率
  • 盈利质量:经营现金流与净利润之比、自由现金流与营收之比、应计项(盈余管理的代理指标)、盈利波动
  • 安全性:杠杆率、利息保障倍数
  • 资本配置:净回购、股本稀释、再融资频率、外部融资与总资产之比
  • 数据:财报

成长

回答「它在变好吗」。市场对盈利改善反应偏慢,好消息要几个季度才完全进价格(行为偏差)。单独用效果一般,常和质量、预期修正搭配。

  • 营收和 EPS(每股收益)的增长率
  • 数据:财报

动量与反转

回答「趋势会不会延续」。中期趋势会延续,因为信息是慢慢扩散的,投资者反应不足;极短期会反转,因为过度反应和流动性冲击会回吐。两头都是行为偏差。A 股中期动量偏弱,短期反转更强。

  • 动量:过去 12 个月剔除最近 1 个月的收益(12M-1M),6M-1M 同理
  • 短期反转:过去 1 到 5 日的收益
  • 技术指标:RSI(相对强弱指数)、KD(随机指标)、DMI(趋向指标)、MACD(平滑异同移动平均线)、OBV(能量潮),大多是动量或反转的变形
  • 数据:行情

低波动

回答「稳不稳」。波动越低,风险调整后的收益反而越高,和「高风险高收益」反着来。投资者偏爱彩票型的高波动股票,把它们买贵了(行为偏差);很多机构不能加杠杆,只能靠买高 Beta 股票放大收益,也在推高它们。

  • 历史波动率、下行波动率、特质波动率(Idio Vol)、Beta
  • 数据:行情

规模与流动性

回答「小不小、好不好买」。小盘股和难交易的股票要给更高回报,才有人愿意拿着(风险补偿)。

  • 规模:市值
  • 流动性:换手率、日均成交额、Amihud 非流动性指标
  • 数据:行情

预期修正

回答「市场对它的看法在怎么变」。分析师调预期是一点点调的,业绩超预期之后股价还会持续漂移,即 PEAD(盈余公告后漂移)。都是反应不足(行为偏差)。

  • 盈利预期修正:一致预期净利润和 EPS 的上调、下调
  • 业绩超预期:SUE(标准化意外盈余),实际公告值和一致预期的差
  • 评级与目标价:分析师评级变化、目标价调整
  • 数据:分析师预期、财报公告

资金与情绪

回答「钱和情绪往哪边走」。有的是跟着聪明钱,信息多的一方先动;有的是反着散户情绪,过度乐观之后会回落。方向要分开测。

  • 资金流向、大单买卖比率
  • 北向资金、主动基金持仓、ETF 份额变动
  • 新闻、公告、研报的文本情绪分数
  • 期权隐含情绪:偏度(Skew)、持仓量(OI)分布
  • 数据:行情、持仓、文本,大多属于另类数据

高频转低频因子:

 1. 计算每根分钟线的收益率:
          closeₜ
    rₜ = ──────── -1
         closeₜ₋₁

 2. 确定当天参与计算的时段:默认取 9:30–14:55;关闭时段过滤时,取全天。

 3. 判断当天是否上涨:把这些时段的分钟收益率相加,只有总和 大于 0 的日子继续计算。这里用的是收益率之和,不是严格的当日累计收益率。

 4. 确定放量阈值:计算当天分钟成交量的均值和标准差:
    阈值 = mean (volume)+ std (volume)

 5. 挑出放量分钟:只保留成交量严格大于阈值的分钟。这些分钟可以上涨,也可以下跌,并不要求每分钟收益为正。

 6. 计算因子值:对选中分钟的收益率求标准差,再开平方:
    factor = √(std (rₜ ∣ volumeₜ > 阈值))

 含义:在整体上涨的日子里,交易异常活跃时,价格变化有多不稳定。 值越高,放量时段的收益率差异越大;值越低,价格变化越一致。代码没有规定高值或
 低值哪一边应该买。

单因子测试流程

因子值计算 因子值预处理 因子值中性化 Alphalens 测试 因子值预处理 极值处理: Trimming 和 Winsorizing 标准化 因子值中性化 行业中性 风格中性 1、所谓中性,就是「无关」「无所谓」 2、行业中性,就是因子值当中对于 每个行业都是同等对待的 3、风格中性,因子值不包含特定的 Factor 信息 Alphalens Quantopian 三件套之一, 开源的单因子测试框架

因子评价

一句话:每个截面上,按因子值给标的排个序,看这个排序能不能预测接下来的收益。从三个角度看,越往后越接近实盘。

准备

  • 前瞻收益:同时看几个持有期,比如 1、5、10 根 bar
  • 分层:每个截面按因子值分 5 层;大量同值、分不出边界的那一期不分层
  • 清洗:因子值或前瞻收益缺失的样本剔除,丢掉超过 35% 就判这个因子不可用

IC:排序对不对

  • Rank IC:每个截面算一次因子值和前瞻收益的 Spearman 相关
  • Pearson IC:同上,换成按收益幅度算。明显低于 Rank IC,说明排序在多数小波动上是对的,决定收益的大涨大跌没跟上
  • 每个持有期汇总四个数:均值、标准差、ICIR(均值 ÷ 标准差,看稳不稳)、胜率(IC 为正的截面占比)
  • 累计 IC 曲线:斜率就是均值,走平的地方是失效期;再按月取均值,看哪段时间有效

分层收益:钱在不在头尾

  • 每层的平均收益折算到单根 bar,减去全池等权均值,看是否从低到高单调
  • 各层净值曲线:持有 k 根时,按 k 个错开建仓的子组合取平均,避免重叠持有的收益被连乘

多空组合:扣完成本还剩多少

  • 多最高层、空最低层,各半仓、组内等权,每个持有期调仓一次
  • 扣手续费(换手 × 固定费率)和资金费,和回测同一口径
  • 看扣费后的年化收益和夏普,再拆开看扣费前收益、每年手续费、资金费、日均换手

IC 再高,扣完成本不赚钱也没用。多空组合是最接近实盘的那个数。

还有一种学术上常用的检验:Fama-MacBeth 回归。每个截面用因子值对收益做一次回归,得到当期的因子收益;再看这串因子收益的均值和 t 值,t 值大于 2 才算显著。

组合

多因子框架概述

对 Signal 分类后 类内加权合成 Factor Factor 配权重 合成 Alpha 按 alpha 分值筛选 或优化组合构建 Signal Pool Signal 1 Signal 2 Signal 3 Signal 4 Signal n …… Factor Pool Factor 1 Factor 2 Factor m …… Alpha Share Pool 2.4 Share 1 2.3 Share 2 2.0 Share 3 1.9 Share 4 -3.0 Share k …… 等权组合 打分加权组合 优化组合 …… 利用归因模型 对组合归因

Signal → Factor → Alpha → 股票打分 → 组合构建

  • Signal Pool:Signal 1 到 Signal n
  • 对 Signal 分类后,类内加权合成 Factor,得到 Factor Pool:Factor 1 到 Factor m
  • Factor 配权重合成 Alpha
  • 用 Alpha 给 Share Pool 里每只股票打分(如 2.4、2.3、2.0、1.9 …… -3.0)
  • 根据 Alpha 分值筛选股票或优化组合构建:等权组合、打分加权组合、优化组合……
  • 最后利用归因模型对组合归因

组合构建

接着上面的流水线,分两步:先把多个因子合成一个 Alpha 分数,再把分数变成持仓。

因子合成 Alpha

先去重。看相关系数矩阵,高度相关的因子归成一类,类内先合成一个,避免重复押注同一个来源;因子多的时候用 PCA(主成分分析)或聚类来分类。

再合成,有两条路:

  • 手工加权:先按 IC、ICIR、多空收益筛一遍,再定权重。等权最稳;IC 加权按历史 IC 给权重;风险平价、最大分散化、最大化夏普要估因子之间的协方差,样本外容易不稳
  • 模型合成:因子当特征、前瞻收益当标签,让模型直接学权重。Ridge、Lasso 是线性的,自带筛选,Lasso 会把没用的因子系数压到 0;LightGBM 这类树模型能抓非线性和因子之间的交互,也更容易过拟合,必须留出验证段

打分变持仓

  • 选股:按 Alpha 排序,买前 N 名或最高一档,等权或按分数加权
  • 优化:最大化预期 Alpha,减去风险和交易成本,再加约束:行业和风格暴露为零(中性化)、单票权重上限、换手上限
  • 风险模型:优化要用到股票之间的协方差,几千只股票直接估不可行。Barra 这类风险模型用少数几个风格和行业因子来近似,这是它在这里的用处

例子:科技三杰指数增强

  • 范围:申万一级通信、电子、计算机三个行业,539 只股票
  • 七个因子:创新(研发费用,市值中性)、盈利(单季度 ROE)、成长(净利润同比增长)、估值(EP)、规模(流通市值)、流动性(月换手)、技术(1 月反转)
  • 合成:每个因子在全名单里排名,名次 ÷ 总数,七个相加,等权
  • 用法:看好科技板块时,用它代替直接买行业指数
  • 来源:广发证券《多因子 Alpha 系列报告之(四十)》

市场中性策略(Market Neutral)

用两个或多个相关资产构建,对冲掉市场波动。

主动选股 (α) + 市场波动 (β) 股票组合多头 − 市场波动 (β) 股指期货空头 互相抵消 = 投资收益 (α)

什么是中性策略

  • 股票组合多头 = 主动选股(α)+ 市场波动(β)
  • 股指期货空头 = 市场波动(β)
  • 两者相减:(α + β) - β = 投资收益(α)

回测

回测假设

指标好不好看,先看是在什么假设下跑出来的。

  • 成交:当根 bar 收盘产生信号,按这根 bar 的 close 成交,不单独模拟滑点
  • 成本:每笔按成交额扣一个固定比例,手续费加滑点合计约 0.03%,开仓、平仓各扣一次;永续合约逐小时结算资金费
  • 预热:正式区间之前多载一段历史,给因子算窗口,预热期不计收益
  • 幸存者偏差:已退市的标的保留到它最后一根 bar
  • 基准:等权持有同一个标的池,每根 bar 再平衡,不扣成本

评价标准

收益

  • 总收益:期末权益 ÷ 初始权益 − 1,已扣成本
  • 年化收益:(期末权益 ÷ 初始权益)^(365 ÷ 天数) − 1。加密市场 7×24,按自然日折算;A 股按 252 个交易日
  • 基准收益:同期等权持有标的池的收益,策略至少要跑赢它
  • 月度收益:每月末权益对上月末的涨跌,看收益是不是集中在某几个月

风险

  • 最大回撤:净值从历史最高点回落的最大幅度。初始权益也算一个高点,首日亏损同样计入
  • 夏普比率:日收益均值 ÷ 日收益标准差 × √365,无风险利率按 0
  • 平均多头、空头敞口:策略实际押了多少方向。多空相抵接近 0,才算市场中性

成本

  • 手续费拖累:累计手续费占初始权益的比例
  • 资金费拖累:累计资金费占初始权益的比例,多头付、空头收
  • 两项单独列出来,才看得出毛收益是不是被换手吃掉了

交易统计

  • 成交笔数:笔数太少,一两笔就能改变结果
  • 胜率:盈利的平仓笔数 ÷ 有盈亏的平仓笔数,开仓成交不计入

还可以自己补的:信息比率、Beta、盈亏比、平均持仓时间。

图形与记录

  • 净值曲线,叠加基准
  • 月度收益表
  • 多空敞口曲线
  • 成交记录:时间、标的、方向、价格、数量、单笔盈亏

归因分析

把收益和风险拆开,看钱到底是从哪来的:风险归因、收益归因、行业贡献、风格贡献。常用的尺子是 Fama-French 多因子模型:把组合收益对市场、规模、价值等因子回归,剩下的截距才是真 Alpha。

稳健性测试

  • 参数敏感性:参数稍微变一下,结果不应该大幅变化
  • 样本外测试
  • 不同市场环境:牛市、熊市、震荡市分别看
  • 数据扰动:给输入加一点噪声,看结论是否还成立

注意量化的陷阱

  1. 幸存者偏差(Survivorship Bias):只用活下来的股票回测
  2. 前视偏差(Look-ahead Bias),也叫未来函数:用了当时还拿不到的数据
  3. 后视偏差:带着对历史行情的认知去设计策略
  4. 过拟合(Overfitting)
  5. 认知偏差:回撤来临时扛不住压力

这个问题也许会击碎很多人的美梦。无论是小波分析还是经验模态分解(Empirical Mode Decomposition,EMD)这些在工程上行之有效的降噪方法,应用在时间序列中都会存在“端点效应”,也就是说这些方法对最近的趋势判断是有问题的,并不能用来指导策略交易。这个问题可以延伸到一些其他的技术,比如z-score标准化,利用隐马尔可夫模型(Hidden Markov Model,HMM)测算当前市场状态等。它们的共同特征是新的市场数据会导致模型历史状态发生变化。也就是说,所有全局优化的滤波技巧都会存在这个问题,本质上它是过度拟合的一种。

策略分类

先按信号的形状分:因子是每期给每只股票打一个分,事件是某些股票、某些时点触发,择时是一个标的决定什么时候进出。另外是套利和高频。

因子策略

AH 溢价选股(价值)

  • A 股价格 ÷(H 股价格 × 汇率),溢价最小的买入
  • 同一家公司在两个市场的相对贵贱

北上优质机构选股(资金与情绪:跟着聪明钱)

  • 先选出历史表现最好的托管机构,再买它们增仓的股票
  • 来源:开源证券《量化评论系列(7):从托管机构细窥》

北向个股(资金与情绪)

  • 因子值:每日北向流入 ÷ 流通市值
  • 也可以当事件用:超过 x%(如 0.25%),或超过近期均值 + n 倍标准差就触发

散户反买(资金与情绪:反着散户)

  • 散户净买入越多,后续表现越差,反着做

雪球热门(情绪)

  • 讨论热度高的股票往往已经涨过,通常反着用

事件驱动策略(Event-driven)

事件只在某些股票、某些时点触发。想放进多因子模型,就把它改造成因子:触发当天记 1,之后几天逐渐衰减到 0。

分析师评级(预期修正)

  • 信号:调高评级最强;其次是 n 家机构同时给买入、隔一段时间后首次覆盖、目标价远高于现价、历史收益高的资深分析师给出评级
  • 执行:报告上调评级后,下个交易日买入,资金分 2 份,持有 2 天

机构调研(资金与情绪)

  • 调研日期和公告发布日期只差 1 天,信息还新
  • 有历史超额好的基金公司参与
  • 按市值排序买 2 只,资金分 2 份,持有 2 天

公告事件

  • 业绩增长:预期修正,业绩公告后股价还会持续漂移,即 PEAD(盈余公告后漂移)
  • 高管增持:内部人信号
  • 指数调仓:被动资金被迫买卖,流动性冲击
  • 合并重组

择时策略

北向指数

  • 北向净流入大于 x 元看多,否则平仓
  • 回测年化 20%,回撤 20%
  • 只决定进出,不选股

高频交易策略(HFT)

套利策略(Arbitrage)

  • 硬搬砖
  • 软搬砖(跨市对冲套利)
  • 三角套利(跨品种套利)
  • 两品种价差回归
  • 期现套利
  • 跨期套利
  • 资金费率套利