先抛一个反直觉的事实——

追涨型策略(强势股 + 主升浪 + 龙头打板组合)跑 5 年完整历史回测,累计净值曲线几乎是一根横线。

这是绝大多数 A 股散户最爱的玩法,也是被自媒体反复强化的"显学"。但当它进入工程系统的回测框架,夏普比率在所有主流风格中排名垫底

这就是认知关要解决的问题——在动手写代码之前,你"以为对"的那套策略,本身是不是站得住脚

一、为什么"认知关"必须放在第一位

大多数自学 A 股量化的工程师,第一步是这样——

选回测框架(backtrader / vnpy / zipline)
  → 接一份行情数据
  → 写一个"看起来有道理"的策略
  → 跑回测、调参数
  → 上线

这条路的问题不在工程,在第一性假设

你写的策略基于你对 A 股的某套认知。如果认知本身就是错的,回测框架再漂亮、参数调得再细,你都是在错误的前提上盖楼

# 单看代码完全没问题
def chase_momentum_strategy(df):
    cond1 = df['close'] > df['MA20'] * 1.05    # 强势股
    cond2 = df['vol_ratio'] > 1.5              # 主升浪
    cond3 = df['is_sector_leader']             # 龙头
    return df[cond1 & cond2 & cond3]

# 真正的问题在前提
# "强势 + 主升浪 + 龙头"——这套假设的长期胜率是多少?
# 5 年净值横线,夏普垫底。代码没毛病,前提塌了。

二、认知陷阱——A 股最危险的隐藏成本

认知陷阱指的是——在散户群体里被广泛相信、被自媒体反复强化的策略思路,但用长周期历史数据回测时,其实际胜率和收益曲线远低于直觉预期

A 股市场上典型的认知陷阱——

陷阱传播度直觉预期5 年回测实测
强势股可以一直强极高持续上涨净值横盘震荡
龙头打板长期有效极高高胜率夏普垫底
主升浪追入还能继续涨极高高弹性收益已被透支

「认知陷阱的危险之处不在于策略本身错,而在于它被相信的程度高于它的真实有效性,导致大量散户在错误方向上做出一致行为。」

三、5 年回测的关键发现——"反向"对照组

把追涨型策略和一种"看起来又怂又跌、散户普遍不愿持有"的反向风格做对照测试——

风格5 年累计净值夏普比率散户偏好度
追涨型横盘震荡垫底
反向(低位 / 超跌 / 防御)显著上行显著占优

两者的净值曲线在 5 年长度上完全不在一个量级

为什么?

被广泛相信的策略,往往是已经被市场充分博弈、收益被透支的策略。一个策略被传得到处都是,意味着信它的人很多,大家在同一个方向上做一致行为,把红利提前吃掉了。真正能产生长期超额收益的策略,常常在直觉上反人性、在传播上低声量——因为它"不爽",所以没人愿意推。

四、认知验证清单(5 步法)

在写第一行系统代码之前,按以下清单完成——

第 1 步|列出最坚信的 3 条 A 股策略假设
        例:"追涨有效"、"龙头延续"、"突破必涨"

第 2 步|为每条假设设计最简版可回测策略
        纯单因子规则即可,不必复杂——不要在验证认知的阶段
        就掺入参数调优、组合权重等"二阶问题"

第 3 步|用至少 5 年历史数据进行回测
        关注两个指标:
        - 累计收益曲线形状
        - 风险调整后收益排名

第 4 步|对每条假设给出"成立 / 部分成立 / 不成立"的结论
        记录数据来源、回测窗口、参数取值——
        可复现是认知验证的基本要求

第 5 步|对"不成立"的假设,反向构造对照组(反转 / 低位 / 超跌)
        看是否能得到镜像有效的结论——
        散户普遍嫌弃的方向,常常是 alpha 的来源

目的是避免错误前提,不是找完美策略

五、工程含义——认知验证产物如何落地到代码

认知关跑完,最直接的产出是一份"已验证的策略假设清单"——这是后续工程的输入。

@dataclass
class VerifiedHypothesis:
    name: str
    rule: Callable                  # 最简单因子规则
    backtest_window: tuple          # 数据窗口
    sample_size: int                # 至少 5 年
    verdict: Literal['hold', 'partial', 'reject']
    sharpe_rank: int
    notes: str

# 后续架构关的策略原型库 = 所有 verdict in ('hold', 'partial') 的假设
verified_pool = [h for h in hypotheses if h.verdict != 'reject']

没有这份清单,后面所有工程都是空中楼阁——你会在错的目标上写出正确的代码。

六、认知关的最大价值——保护你的下一年时间

工程师最贵的资源不是 CPU 也不是带宽——是时间

一年的时间写一套基于"追涨假设"的系统,上线后净值横线——这一年的工程价值约等于零。而5 年回测花掉的那 1–2 周,可能是你能为这套系统做出的最高 ROI 投入

「写代码之前先验证认知。在错误前提上盖楼,造得越快倒得越彻底。」

七、思考题

  1. 列出你目前最坚信的一条 A 股策略假设,设计一个最简单的验证方案
  2. 为什么"被广泛相信的策略"往往不再有效?从市场参与者结构的角度做一段分析
  3. 如果认知验证结果与你的直觉相反,你会选择相信哪个?请说明你的判断依据
Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐