小单资金流残差因子
小单资金流残差因子——一个用来捕捉"散户异常情绪"的信号。
听起来很高大上,但逻辑其实很朴素:
散户(小单)在疯狂买入或疯狂卖出一只股票,但这种行为又无法用股价本身的涨跌来解释——这就是一个值得关注的信号。
先聊聊背景:什么是资金流?
在 A 股,每一笔交易都可以按照挂单金额分为四类:
类型 | 挂单金额 | 代表谁 |
|---|---|---|
超大单 | > 100 万 | 机构、大户 |
大单 | 20~100 万 | 中大户 |
中单 | 4~20 万 | 小机构、活跃散户 |
小单 | < 4 万 | 普通散户 |
资金流向就是统计每类资金的净流入(买入 - 卖出)。
小单净流入多 → 散户在买;小单净流出多 → 散户在卖。
第一步:计算小单资金流强度
光看净流入金额不够用,因为不同股票体量差异很大。我们需要一个标准化的指标:
白话解释:
分子:过去 20 天,散户总体是净买入还是净卖出(有方向)
分母:过去 20 天,散户每天"动静"的绝对值之和(只看大小)
结果:一个介于 -1 到 +1 之间的数字
举个例子:
:散户过去 20 天持续猛买,情绪很高涨 :散户过去 20 天持续在卖,情绪很悲观 :散户买卖相对均衡,没有明显倾向
第二步:为什么不直接用 ,还要多做一步?
这里有个关键问题:散户跟涨跟跌是很正常的行为。
一只股票涨了 30%,散户跑去追买,
如果直接用
解决方案:回归 + 取残差
在每一天,对全市场所有股票做一个截面回归:
用涨跌幅解释资金流强度,把"正常跟涨跟跌"的部分去掉
剩下的残差
,才是无法被涨跌幅解释的散户异常行为
这个
类比理解:就像考试成绩和学习时间高度相关。如果一个学生花了很多时间学习却考了低分,这个"异常"才值得关注——残差因子就是在找这种"异常"。
代码实现
在 BigQuant 平台上,用 DAI SQL 几行就能搞定:
WITH base AS (
SELECT
date, instrument,
-- 每日小单净资金流
active_buy_amount_small - active_sell_amount_small AS net_small
FROM cn_stock_prefactors
WHERE st_status = 0 AND suspended = 0
),
intensity AS (
SELECT date, instrument,
-- 滚动20日资金流强度
m_sum(net_small, 20) / m_sum(ABS(net_small), 20) AS small_st,
-- 近20日涨跌幅
close / m_lag(close, 20) - 1 AS ret20
FROM base
)
SELECT date, instrument,
-- 截面回归取残差 = 最终因子
c_regr_residual(small_st, ret20) AS factor
FROM intensity三个核心函数:
m_sum(x, 20):时间序列上向前滚动求 20 日之和
m_lag(close, 20):取 20 日前的收盘价
c_regr_residual(y, x):截面 OLS 回归,返回残差