因子想法整理

采样-拟合-对比 相关性矩阵

把一段口述的想法结构化:从单日序列里挑 K 个关键点 → 拟合成线 → 与原始线比较 corr / 偏差 → 不同参数组合 × 不同 K = 一个 m×n 因子矩阵。

一句话:挑 K 个点 → 连成线 → 看和原线有多像
遍历不同的「挑法 / 连法 / 量什么 / 看多还是看空」组合(行),
再遍历不同的采样数 K = 5,6,7,8,…,x(列),就得到当天该股票的一个 m×n 相关性矩阵
原始数据线 拟合线 选中的关键点 买方向 卖方向

① 核心流程:采样 → 拟合 → 对比

A. 原始序列(全天价格)
B. 按规则挑 K=5 个关键点
C. 拟合:5 点 → 一条线
D. 对比:拟合线 vs 原始线 → corr
corr ≈ 0.86

原始序列 选点 拟合 与原线对比得到一个 corr。换个 K 再算,就得到一行 corr。

② 选点逻辑:挑哪 K 个点

成交量最大的 K 次
前后几秒总成交最大的 K 个时刻
窗口聚合后找峰值
买卖订单号差最大的 K 个时刻
订单号差距的极端点

三种选点规则,挑出来的 K 个时刻不同 → 拟合线不同 → corr 不同 → 矩阵的不同行。

③ 拟合方式:把 K 个点连成线

分段直线(折线连接)
最速曲线(平滑样条拟合)
插值补全到原长度

「补全到原长度」= 把拟合线重采样回原始 x 网格(蓝点),这样两条线点对点对齐,才好逐点算 corr / 偏差。

④ 方向拆分:看多曲线 vs 看空曲线

不区分:全部点拟合一条线 仅买方向:看多的人心中的曲线 仅卖方向:看空的人心中的曲线

把"买卖订单号差最大"等按方向拆分,分别拟合 → 一条代表多头共识、一条代表空头共识,可对比两者强弱。

⑤ 七个旋钮(矩阵"行"的来源)

1数据源
逐笔成交盘口快照分钟数据
2选点规则
成交量最大的 K 次前后几秒总成交最大的时刻买卖订单号差最大的时刻
3采样数 K
5, 6, 7, 8, 9, 10 … x← 矩阵的列
4拟合变量
价格挂单失衡滚动窗口主买占比
5拟合方式
分段直线最速(平滑)曲线插值补全到原长度
6方向拆分
不区分仅买(看多曲线)仅卖(看空曲线)
7度量
相关性 corr偏差
笛卡尔积 = 矩阵的行
实际会筛掉无意义的组合
(如"分钟数据 × 订单号差"不适用)

⑥ 输出:当天该股票的 m×n 因子矩阵

参数组合(行)\ K(列)

单元格颜色越绿 = corr 越高(用越少的点就能还原原始序列)。每只股票每天 = 一个这样的矩阵。

观察:通常 K 越大 corr 越高(点越密越还原原线);不同拟合变量 / 选点规则之间的 corr 曲线形状差异,才是真正有区分度的信号。

⑦ 一个完整例子(走读)

参数组合:逐笔成交 · 价格 · 成交量最大的 K 次 · 分段直线 · 不区分 · corr

步骤动作
1. 取数取出该股票全天逐笔成交:时间、价、量、买卖方向
2. 选点对 K = 5:找出成交量最大的 5 笔成交,记录它们发生的时刻 t₁…t₅
3. 取值取这 5 个时刻的价格(旋钮④)→ 得到 5 个 (t, price) 点
4. 拟合分段直线(旋钮⑤)把这 5 点连成拟合线
5. 补全把拟合线插值到原始时间网格,与原始价格线点对点对齐
6. 打分算两条线的 corr(旋钮⑦)→ 得到 c₅
7. 遍历 KK = 5,6,7,8,10,15,20 各算一次 → 得到一行 [c₅,c₆,c₇,c₈,c₁₀,c₁₅,c₂₀]
8. 遍历旋钮换"拟合变量=挂单失衡"再算一行;换"仅买方向"再算一行……
9. 堆叠所有行堆起来 = 当天该股票的 m×n 因子矩阵

把矩阵的某个单元格(或某行的均值/斜率)当作单值因子,就能跨股票跨日期做横截面排序 → 进入因子回测。

小结
你的想法本质是一个参数化扫掠的"形状保真度"因子
「用 K 个关键点能不能还原全天走势?还原能力(corr)随 K 怎么变化?」
不同数据源 / 选点规则 / 拟合变量 / 方向的"还原能力曲线"不同 —— 这条corr 随 K 的变化曲线(或矩阵中的某一行)就是有信息量的因子。