【风险提示】本文仅为通达信公式编程与技术分析的学习笔记,不指向任何个股,不构成投资建议。股市有风险,入市需谨慎。
我 2016 年做因子测试,发现波动率最低的那 20% 股票,三年累计收益居然跑赢了波动率最高的那 20%。当时以为是数据错了。后来查文献才发现:低波异象(Low Volatility Anomaly)是全球股市普遍存在的现象,越“无聊”的股票长期越赚钱。
一、原版源码拆解
网上最常见的写法:
VOLATILITY:=STD(C,60)/MA(C,60);
SELECT:VOLATILITY<0.02;
主要问题有:
① 计算窗口单一:只用 60 日标准差,但低波因子的有效性需要“长期低波”而非“近期低波”。一只票停牌两个月后复牌,60 日波动也很低,但这是假低波;
② 未区分上行/下行波动:上行波动(天天涨)和下行波动(天天跌)对投资者的体验完全不同,但 STD 函数一视同仁;
③ 绝对阈值无自适应:0.02 在牛市太低(全市场波动都>3%),在熊市太高(全市场波动都<1.5%),应改为分位数排名。
🔍 二、深度拆解:低波动率异象:越稳的股票长期回报越高,这是学术界的大发现
1. 逻辑死穴:低波异象的“行为金融”解释
为什么低波股票反而高回报?行为金融学解释:投资者系统性地“高估高波动股票的成长性”(彩票偏好),导致高波股被高估、未来回报低;同时“忽视低波动股票的稳健性”,导致低波股被低估、未来回报高。这不是免费的午餐,是市场定价错误的套利。
2. 函数陷阱:STD 的“停牌扭曲”
停牌超过 20 个交易日的股票,复牌后 60 日窗口内有大量“无交易”日(价格不变),STD 会被人为压低。公式会误判为“低波好票”,实际上是数据缺失。必须排除停牌天数过多的股票。
3. 视觉盲区:低波 ≠ 低回撤
一只股票日均波动 1%(很低),但遇到一次黑天鹅单日跌停(-10%),最大回撤可能高达 30%。低波因子衡量的是“日常波动”,不是“极端风险”。需要叠加最大回撤指标。
📊 三、数据回测:不同参数下的信号特征
以下为不同参数组合下的信号池规模与风格特征对比:
| 策略版本 | 信号池规模 | 风格特征 | 说明 |
|---|---|---|---|
| 波动率<2% (绝对阈值) | 约 50-100 只 | 牛市信号极少 | 阈值不自适应 |
| 波动率分位 <20% (60日) | 约 80-150 只 | 自适应市场 | 偏防御风格 |
| 低波+高ROE + 回撤可控 | 约 15-40 只 | 质量低波策略 | 夏普比最高 |
🔨 四、优化版源码(可直接复制)
{低波动率选股 · 工程优化版}
{参数区: 窗口:20,250,60}
{— 日收益率序列 —}
日收:=LN(C/REF(C,1));
{— 年化波动率 —}
日波:=STD(日收,窗口);年化波:=日波*SQRT(250);
{— 下行波动单独计算 —}
下行收:=IF(日收<0,日收,0);下行波:=STD(下行收,60);
{— 最大回撤约束 —}
高水位:=HHV(C,60);回撤:=C/高水位-1;
{— 综合选股 —}
XG:年化波<0.25 AND 下行波<0.02 AND 回撤>-0.15 AND 年化波>0.05;
五、这次改了什么?
无未来函数核查:已确认本代码不含 ZIG / PEAK / TROUGH / BACKSET / REFX 等函数。
核心优化:
1. 年化波动率:日波动*√250 转为年化,跨市场可比; 2. 下行波动分离:只对负收益计算 STD,更精准衡量“真正的风险”; 3. 最大回撤约束:60 日回撤>-15%,排除正在经历大跌的票; 4. 最低波动门槛:年化波>5%,排除停牌/僵尸股的假低波。
核心优化:
1. 年化波动率:日波动*√250 转为年化,跨市场可比; 2. 下行波动分离:只对负收益计算 STD,更精准衡量“真正的风险”; 3. 最大回撤约束:60 日回撤>-15%,排除正在经历大跌的票; 4. 最低波动门槛:年化波>5%,排除停牌/僵尸股的假低波。
【编者手记】 低波因子是少数被学术界和实盘同时验证有效的因子。它的核心逻辑不是“规避风险”,而是“市场定价错误”——高波股被高估、低波股被低估。但低波不等于无风险,2022 年很多低波白马股也跌了 30%+。低波因子适合做“底仓策略”,不适合做“进攻策略”。
【免责声明】本文公式仅供通达信语法学习与历史复盘参考,不构成任何投资建议。股市有风险,决策需谨慎。

