跳到主要内容

超越价格的维度:一次基本面风控的价值验证之旅

引言

趋势跟踪告诉你市场要去哪里,均值回归告诉你价格是否合理,动态仓位帮你决定持有多少。但有一个问题,它们都回答不了:这个资产本身还健康吗?

均线向上、动量正常、突破有效——技术面一切正常。但与此同时,公司的 ROE 在下滑、负债率在攀升、营收增速在放缓。等到价格真正反映这些变化时,你已经在高位满仓扛了一轮回撤。这种"技术面正确但风险已经累积"的阶段,是让组合受伤最深、也最难提前感知的。

这就是原语引擎需要第三个维度的原因。趋势和回归是投资世界的两大基本力,而基本面分析为它们提供了"地基"和"安全垫"——三个正交维度一起,构成了一个几乎可以表达所有系统化投资策略的三维坐标系。

原语引擎新增了五个基本面指标(ROE、PE_TTM、营收同比、经营现金流、资产负债率)。它们不是拿来选股的,而是用来判断"是否允许暴露"和"允许暴露多少"。通过原语的组合能力,这五个基础指标可以衍生出质量过滤、风险告警、多因子动态仓位等更丰富的复合信号。

本文用一次严格的 A/B 对照实验来检验这个维度的实际价值:针对美股 AAPL 和 A 股贵州茅台,构建纯技术基线和基本面增强版本,在同口径下直接回答——在同一趋势框架下,引入基本面之后,能否优化风险暴露路径(回撤、波动、可执行性)?

结果既有惊喜也有意外:美股组实现了收益和风控的同步改善,A 股组则走出了一条截然不同的路径。

问题本质:技术信号的盲区

趋势策略擅长什么

EMA 趋势策略的逻辑非常清楚:

  • 快速均线在慢速均线上方 → 持有
  • 快速均线跌破慢速均线 → 退出

它擅长回答两个问题:价格方向是否偏多?趋势结构是否延续?

这套逻辑在趋势明确的阶段表现出色——大涨跟上,大跌躲开,简单有效。

趋势策略不擅长什么

但它有两个天然盲区:

  1. 当前风险质量是否在恶化? 价格可能还在涨,但公司的盈利能力、现金流、杠杆水平已经在变差
  2. 这次参与应该是多大仓位? 纯技术策略只有"全进"和"全出"两种状态,没有中间地带

现实中最危险的阶段,往往就是"价格趋势还在,但资产质量已经开始恶化"。技术信号在这个阶段会继续给出买入信号,策略会继续暴露在市场风险中。

等到价格终于反映基本面的恶化,回撤已经发生了。

解决思路:从二元问题到三元问题

所以这次增强的核心不是"多几个指标",而是把策略从二元决策升级为三元决策:

  1. 要不要参与?(技术趋势判断)
  2. 允不允许参与?(基本面质量检查)
  3. 参与多少?(动态仓位调节)

原语引擎提供了五个基本面指标来支撑这个框架:

指标含义典型用法
ROE净资产收益率盈利能力过滤(如 ROE > 10)
PE_TTM滚动市盈率估值约束与仓位映射
RevenueYoY营收同比增长质量判断
OperatingCashflow经营现金流利润质量验证
DebtRatio资产负债率杠杆风险告警与仓位调节

五个原子指标,无限的组合可能

看到这里,你可能会想:“只有五个指标,是不是太少了?”

这正是理解原语引擎威力的关键。我们提供的不是一个大而全、包罗万象的指标库,而是五个最核心、最通用的“原子指标”。就像乐高积木一样,最基础的砖块,反而能组合出最丰富的世界。通过与其他原语(如 Add, Multiply, And, Or, LinearScaleWeight)的自由组合,你可以轻松创造出远超这五个指标本身的复杂“分子”:

  • 构建复合“质量分”:你可以将 ROE、负债率、营收增速等通过 AddMultiply 原语组合,并赋予不同权重,创造出一个你自己的、独一无二的“综合质量评分”指标。
  • 创建“估值-增长”匹配度因子:例如,你可以创建一个信号,仅在 PE_TTM < 20 RevenueYoY > 15 时触发,实现一个简化的PEG思想(低估值-高成长匹配)。
  • 建立多维风险预警系统:使用 Or 原语,你可以定义一个“一票否决”的风险信号:只要 DebtRatio > 80 或者 OperatingCashflow < 0 或者 RevenueYoY < -10 中任何一个条件成立,就触发风险警报。

因此,这五个指标只是一个起点,它们赋予你的是创造新指标的能力。本文接下来的实验,就将展示如何用最基础的组合方式,实现强大的风险控制效果。

这五个指标不是拿来"选股"的——在原语引擎的设计哲学里,选股在外部完成,引擎内部只负责风险衡量和策略执行。基本面指标的价值是充当"慢变量",和技术面的"快变量"形成分工:

快变量(价格/趋势/波动) → 决定何时进出
慢变量(ROE/PE/营收/现金流/负债) → 决定是否允许参与、参与多大仓位

实验设计:同口径、同起点、不留解释余地

一个重要的前提:这不是一个高收益策略

在深入数据之前,必须明确本次实验的核心目的。我们选用的 EMA 双均线策略是一个非常基础的趋势跟踪模型,它本身并未经过优化,在某些市场(尤其是长期牛市)中,其表现可能远不如简单的“买入并持有”

这恰恰是实验设计的关键:我们选择这样一个简单、甚至有些“平庸”的基线,不是为了追求绝对的高收益,而是为了创造一个纯净的“实验室环境”。在这个环境中,我们可以清晰地衡量和分离出——仅仅增加基本面风控这一个维度,到底能带来多大的改善?

因此,在解读后续结果时,请将重点放在增强版(V1, V3)相对于其基线版(V0, V2)的变化上,而不是策略本身的绝对收益数字。我们关注的是风险和收益指标的改善幅度

为什么要严格控制对照条件

在策略讨论中,最常见的伪对照是"参数换了、标的换了、时间也换了"。这样的对比什么都证明不了。

为了让结论干净,本次实验统一控制以下条件:

参数设置
回测起点2020-01-02
统计日期2026-02-09
回测窗口(日历天)2230 天
资金策略RebalancingCapitalStrategy(再平衡策略)
评估指标净值、CAGR、最大回撤、年化波动率、Sharpe、Calmar、交易次数、胜率

每组 A/B 对照使用同一只标的、同一个 EMA 参数组、同一段时间窗,唯一区别是是否启用基本面层。

除了常规的收益和风险指标,本文还关注两个"可执行性指标":

  • 信号触发次数(按回测 bar 统计):买入/卖出条件分别出现了多少次
  • 平均目标仓位:策略整体暴露有多激进

因为策略能否长期执行,不只取决于收益数字,也取决于你每天需要承受的心理压力。

四个版本的定义

版本标的类型EMA 参数核心思路
V0AAPL技术基线EMA(50)/EMA(200)趋势择时 + 固定仓位 0.45
V1AAPL基本面增强EMA(50)/EMA(200)趋势 + 质量过滤 + 负债率动态仓位
V2贵州茅台技术基线EMA(40)/EMA(120)趋势择时 + 固定仓位 0.35
V3贵州茅台基本面增强EMA(40)/EMA(120)趋势 + 质量过滤 + PE/营收双因子动态仓位

两组实验分别回答两件不同的事:

  • 美股组(V0 vs V1):基本面过滤能否做到"收益和风控同步改善"?
  • A 股组(V2 vs V3):在高波动、高回撤的市场中,基本面条件能否显著压缩风险?

策略逻辑:一步步看懂原语如何搭建

V0 / V2:技术基线

基线策略的逻辑是趋势跟随的最简形式:

  • 快速 EMA 在慢速 EMA 上方 → 给出固定目标仓位(V0 为 0.45,V2 为 0.35)
  • 快速 EMA 跌破慢速 EMA → 目标仓位归零

这是通过 ConditionalWeight 原语实现的:当输入信号 trend_up 为真时输出固定权重,为假时输出 0。它非常简单、可解释,是衡量后续改进效果的完美“标尺”。

缺点:只看价格,不看质量。对“风险提前恶化”几乎没有感知能力。仓位要么是固定值,要么是零——没有中间地带。

V1:美股基本面增强(AAPL)

V1 在基线上增加了两层能力,我们来看看这是如何用原语一步步搭建的:

第一层:用 AndOr 原语构建“基本面安全门”

我们不再只依赖趋势。一个买入决策需要同时满足“趋势向上”和“基本面健康”两个条件。

  1. 定义健康门槛:我们使用多个 Constant 原语定义出每个基本面指标的“及格线”,例如 roe_min (10), debt_max (80) 等。
  2. 进行逻辑判断:通过一系列 GreaterThanLessThan 原语,我们将实时的基本面指标(如 roe_metric)与这些“及格线”进行比较,生成一系列布尔值(true/false)的是非信号,如 roe_ok, debt_ok
  3. 组合所有条件:最后,我们用一个 And 原语将所有这些是非信号(包括趋势信号 trend_up)“串”在一起,形成一个最终的 risk_gate 信号。只有当所有条件都为 true 时,这个 risk_gate 才会输出 true
  4. 升级卖出条件:卖出条件也相应升级。我们用一个 Or 原语组合 trend_downfundamental_failrisk_gate 的反向信号,通过 Not 原语生成),这意味着趋势转下或者基本面恶化,都会触发卖出。

第二层:用 LinearScaleWeightMultiply 原语实现动态仓位

即使条件通过,给多少仓位也需要动态调节。V1 使用 LinearScaleWeight 原语,将负债率这个“慢变量”与目标仓位进行挂钩:

  • min_indicator: 20.0 (负债率20%) → min_weight: 1.0 (仓位权重1.0)
  • max_indicator: 80.0 (负债率80%) → max_weight: 0.45 (仓位权重0.45)

最终目标仓位:我们用 Multiply 原语,将 risk_gate 的布尔输出(在计算中会自动转为 1 或 0)与 debt_scaled_weight 的输出相乘。这样,当 risk_gate 关闭时,任何仓位权重都会被乘以 0,实现一键清仓或减仓。

这个搭建过程完美体现了原语的价值:将复杂的风控逻辑拆解为“判断→组合→映射→计算”等一系列简单、可重用的步骤。

为什么 V1 用负债率做仓位映射,而不是 PE? 因为当前上游数据对美股 pe_ttm 历史点返回 None/NaN(这是为了避免把当前快照估值回填历史造成前视偏差),所以美股组合中 PE_TTM 只作为监控输出,不参与仓位计算。

V3:A 股基本面增强(贵州茅台)

V3 的思路更偏防守,其原语搭建的层次也更深。

第一层:更严格的质量门控 (quality_regime)

与 V1 类似,V3 同样使用 Constant, GreaterThan, LessThan, And 等原语搭建了一个“质量健康”门控。但阈值更严格,并且加入了 PE 估值判断(A 股有完整的 PE 历史数据):

  • ROE > 12, PE_TTM < 45, 负债率 < 20, 营收同比 > 5, 经营现金流 > 0

第二层:多因子动态仓位 (Multiply)

V3 的仓位由两个因子共同决定,这是通过组合两个 LinearScaleWeight 原语实现的:

  1. PE 估值映射:使用一个 LinearScaleWeight,将 PE_TTM 10-55 的区间映射到仓位权重 0.8-0.2(估值越高仓位越低)。
  2. 营收增长映射:使用另一个 LinearScaleWeight,将营收同比 -10% 到 20% 的区间映射到仓位权重 0.3-0.7(增速越高仓位越高)。

最终目标仓位通过一个 Multiply 原语计算得出:买入条件 × PE 权重 × 营收权重

这种乘法叠加的效果是:任何一个因子偏弱,整体仓位都会被显著压低。如果两个因子同时偏弱,仓位会被压得非常低,实现了深度的防守效果。

第三层:多重卖出触发器 (Or)

V3 的卖出条件也更激进。通过一个 Or 原语,V3 组合了四个独立的卖出触发源

  1. 趋势转下 (trend_down)
  2. 质量门控失败 (quality_fail)
  3. 估值过度泡沫化 (valuation_risk: PE_TTM > 55)
  4. 杠杆超出安全边际 (debt_risk_signal: 负债率 > 21)

这种多重独立的风险出口,构建了一个层次更深、响应更灵敏的防守体系。

策略配置:可直接复用的原语配置

以下配置均为实际回测使用的完整 trade_strategy 部分。你可以在创建原语策略时直接复用。

基本面输入配置(V1/V3 通用)

无论哪种增强模式,都需要先在策略定义中启用 fundamental_inputs

{
"fundamental_inputs": {
"metrics": ["roe", "pe_ttm", "revenue_yoy", "operating_cashflow", "debt_ratio"],
"frequency": "daily",
"point_in_time": true,
"max_staleness_days": 120,
"include_metadata": false
}
}

关键参数说明

  • point_in_time: true:只使用当时已披露的财报数据,防止回测前视偏差
  • max_staleness_days: 120:允许数据最多滞后 120 天(覆盖一个季报周期)
  • 当前基本面指标仅面向个股(CN/US stock),不建议直接用于 ETF

V0 美股技术基线(AAPL)

{
"trade_strategy": {
"indicators": [
{ "id": "ema_fast", "type": "EMA", "params": { "period": 50, "column": "Close" } },
{ "id": "ema_slow", "type": "EMA", "params": { "period": 200, "column": "Close" } }
],
"signals": [
{
"id": "trend_up",
"type": "GreaterThan",
"inputs": [{ "ref": "ema_fast" }, { "ref": "ema_slow" }]
},
{
"id": "trend_down",
"type": "LessThan",
"inputs": [{ "ref": "ema_fast" }, { "ref": "ema_slow" }]
},
{
"id": "target_weight_signal",
"type": "ConditionalWeight",
"inputs": [{ "ref": "trend_up" }],
"params": { "true_weight": 0.45, "false_weight": 0.0 }
}
],
"outputs": {
"buy_signal": "trend_up",
"sell_signal": "trend_down",
"target_weight": "target_weight_signal"
}
}
}

配置解读:纯趋势策略,EMA(50) 在 EMA(200) 上方时给固定仓位 0.45,否则为 0。没有任何基本面参与。

V1 美股基本面增强(AAPL)

{
"fundamental_inputs": {
"metrics": ["roe", "pe_ttm", "revenue_yoy", "operating_cashflow", "debt_ratio"],
"frequency": "daily",
"point_in_time": true,
"max_staleness_days": 120,
"include_metadata": false
},
"trade_strategy": {
"indicators": [
{ "id": "ema_fast", "type": "EMA", "params": { "period": 50, "column": "Close" } },
{ "id": "ema_slow", "type": "EMA", "params": { "period": 200, "column": "Close" } },
{ "id": "roe_metric", "type": "ROE" },
{ "id": "pe_metric", "type": "PE_TTM" },
{ "id": "debt_metric", "type": "DebtRatio" },
{ "id": "revenue_metric", "type": "RevenueYoY" },
{ "id": "cashflow_metric", "type": "OperatingCashflow" },
{ "id": "roe_min", "type": "Constant", "params": { "value": 10.0 } },
{ "id": "debt_max", "type": "Constant", "params": { "value": 80.0 } },
{ "id": "revenue_min", "type": "Constant", "params": { "value": -5.0 } },
{ "id": "cashflow_min", "type": "Constant", "params": { "value": 0.0 } }
],
"signals": [
{
"id": "trend_up",
"type": "GreaterThan",
"inputs": [{ "ref": "ema_fast" }, { "ref": "ema_slow" }]
},
{
"id": "trend_down",
"type": "LessThan",
"inputs": [{ "ref": "ema_fast" }, { "ref": "ema_slow" }]
},
{
"id": "roe_ok",
"type": "GreaterThan",
"inputs": [{ "ref": "roe_metric" }, { "ref": "roe_min" }]
},
{
"id": "debt_ok",
"type": "LessThan",
"inputs": [{ "ref": "debt_metric" }, { "ref": "debt_max" }]
},
{
"id": "revenue_ok",
"type": "GreaterThan",
"inputs": [{ "ref": "revenue_metric" }, { "ref": "revenue_min" }]
},
{
"id": "cashflow_ok",
"type": "GreaterThan",
"inputs": [{ "ref": "cashflow_metric" }, { "ref": "cashflow_min" }]
},
{
"id": "risk_gate",
"type": "And",
"inputs": [
{ "ref": "trend_up" },
{ "ref": "roe_ok" },
{ "ref": "debt_ok" },
{ "ref": "revenue_ok" },
{ "ref": "cashflow_ok" }
]
},
{
"id": "fundamental_fail",
"type": "Not",
"inputs": [{ "ref": "risk_gate" }]
},
{
"id": "buy_condition",
"type": "And",
"inputs": [{ "ref": "trend_up" }, { "ref": "risk_gate" }]
},
{
"id": "sell_condition",
"type": "Or",
"inputs": [{ "ref": "trend_down" }, { "ref": "fundamental_fail" }]
},
{
"id": "debt_scaled_weight",
"type": "LinearScaleWeight",
"inputs": [{ "ref": "debt_metric" }],
"params": {
"min_indicator": 20.0,
"max_indicator": 80.0,
"min_weight": 1.0,
"max_weight": 0.45,
"clip": true
}
},
{
"id": "target_weight_signal",
"type": "Multiply",
"inputs": [{ "ref": "debt_scaled_weight" }, { "ref": "buy_condition" }]
}
],
"outputs": {
"buy_signal": "buy_condition",
"sell_signal": "sell_condition",
"target_weight": "target_weight_signal",
"indicators": [
{ "id": "roe_metric", "output_name": "roe" },
{ "id": "pe_metric", "output_name": "pe_ttm" },
{ "id": "revenue_metric", "output_name": "revenue_yoy" },
{ "id": "cashflow_metric", "output_name": "operating_cashflow" },
{ "id": "debt_metric", "output_name": "debt_ratio" },
{ "id": "risk_gate", "output_name": "fundamental_gate" },
{ "id": "buy_condition", "output_name": "buy_condition" },
{ "id": "sell_condition", "output_name": "sell_condition" }
]
}
}
}

配置解读

  • 门控risk_gateAnd 组合五个条件(趋势 + ROE + 负债 + 营收 + 现金流),全部达标才放行
  • 卖出:趋势转下 Or 门控失败——基本面恶化也会触发卖出
  • 仓位debt_scaled_weight 把负债率 20%-80% 线性映射到仓位 1.0-0.45(杠杆越高仓位越低)
  • 监控outputs.indicators 输出了所有基本面字段和决策中间量,方便做信号归因与排查

V3 A 股基本面增强(贵州茅台)

{
"fundamental_inputs": {
"metrics": ["roe", "pe_ttm", "revenue_yoy", "operating_cashflow", "debt_ratio"],
"frequency": "daily",
"point_in_time": true,
"max_staleness_days": 120,
"include_metadata": false
},
"trade_strategy": {
"indicators": [
{ "id": "ema_fast", "type": "EMA", "params": { "period": 40, "column": "Close" } },
{ "id": "ema_slow", "type": "EMA", "params": { "period": 120, "column": "Close" } },
{ "id": "roe_metric", "type": "ROE" },
{ "id": "pe_metric", "type": "PE_TTM" },
{ "id": "revenue_metric", "type": "RevenueYoY" },
{ "id": "cashflow_metric", "type": "OperatingCashflow" },
{ "id": "debt_metric", "type": "DebtRatio" },
{ "id": "roe_min", "type": "Constant", "params": { "value": 12.0 } },
{ "id": "pe_max", "type": "Constant", "params": { "value": 45.0 } },
{ "id": "pe_risk", "type": "Constant", "params": { "value": 55.0 } },
{ "id": "debt_max", "type": "Constant", "params": { "value": 20.0 } },
{ "id": "debt_risk", "type": "Constant", "params": { "value": 21.0 } },
{ "id": "revenue_min", "type": "Constant", "params": { "value": 5.0 } },
{ "id": "cashflow_min", "type": "Constant", "params": { "value": 0.0 } }
],
"signals": [
{
"id": "trend_up",
"type": "GreaterThan",
"inputs": [{ "ref": "ema_fast" }, { "ref": "ema_slow" }]
},
{
"id": "trend_down",
"type": "LessThan",
"inputs": [{ "ref": "ema_fast" }, { "ref": "ema_slow" }]
},
{
"id": "roe_ok",
"type": "GreaterThan",
"inputs": [{ "ref": "roe_metric" }, { "ref": "roe_min" }]
},
{
"id": "pe_ok",
"type": "LessThan",
"inputs": [{ "ref": "pe_metric" }, { "ref": "pe_max" }]
},
{
"id": "debt_ok",
"type": "LessThan",
"inputs": [{ "ref": "debt_metric" }, { "ref": "debt_max" }]
},
{
"id": "revenue_ok",
"type": "GreaterThan",
"inputs": [{ "ref": "revenue_metric" }, { "ref": "revenue_min" }]
},
{
"id": "cashflow_ok",
"type": "GreaterThan",
"inputs": [{ "ref": "cashflow_metric" }, { "ref": "cashflow_min" }]
},
{
"id": "quality_regime",
"type": "And",
"inputs": [
{ "ref": "roe_ok" },
{ "ref": "pe_ok" },
{ "ref": "debt_ok" },
{ "ref": "revenue_ok" },
{ "ref": "cashflow_ok" }
]
},
{
"id": "quality_fail",
"type": "Not",
"inputs": [{ "ref": "quality_regime" }]
},
{
"id": "valuation_risk",
"type": "GreaterThan",
"inputs": [{ "ref": "pe_metric" }, { "ref": "pe_risk" }]
},
{
"id": "debt_risk_signal",
"type": "GreaterThan",
"inputs": [{ "ref": "debt_metric" }, { "ref": "debt_risk" }]
},
{
"id": "buy_condition",
"type": "And",
"inputs": [{ "ref": "trend_up" }, { "ref": "quality_regime" }]
},
{
"id": "sell_condition",
"type": "Or",
"inputs": [
{ "ref": "trend_down" },
{ "ref": "valuation_risk" },
{ "ref": "debt_risk_signal" },
{ "ref": "quality_fail" }
]
},
{
"id": "pe_scaled_weight",
"type": "LinearScaleWeight",
"inputs": [{ "ref": "pe_metric" }],
"params": {
"min_indicator": 10.0,
"max_indicator": 55.0,
"min_weight": 0.8,
"max_weight": 0.2,
"clip": true
}
},
{
"id": "revenue_scaled_weight",
"type": "LinearScaleWeight",
"inputs": [{ "ref": "revenue_metric" }],
"params": {
"min_indicator": -10.0,
"max_indicator": 20.0,
"min_weight": 0.3,
"max_weight": 0.7,
"clip": true
}
},
{
"id": "target_weight_signal",
"type": "Multiply",
"inputs": [
{ "ref": "buy_condition" },
{ "ref": "pe_scaled_weight" },
{ "ref": "revenue_scaled_weight" }
]
}
],
"outputs": {
"buy_signal": "buy_condition",
"sell_signal": "sell_condition",
"target_weight": "target_weight_signal",
"indicators": [
{ "id": "roe_metric", "output_name": "roe" },
{ "id": "pe_metric", "output_name": "pe_ttm" },
{ "id": "revenue_metric", "output_name": "revenue_yoy" },
{ "id": "cashflow_metric", "output_name": "operating_cashflow" },
{ "id": "debt_metric", "output_name": "debt_ratio" },
{ "id": "quality_regime", "output_name": "quality_regime" },
{ "id": "valuation_risk", "output_name": "valuation_risk" },
{ "id": "buy_condition", "output_name": "buy_condition" },
{ "id": "sell_condition", "output_name": "sell_condition" }
]
}
}
}

配置解读

  • 门控quality_regime 用五个条件(ROE/PE/负债/营收/现金流)定义"质量健康状态"
  • 卖出:四重触发——趋势转下、估值泡沫化(PE > 55)、杠杆超标(负债率 > 21)、质量失败
  • 仓位:PE 权重(PE 10-55 → 0.8-0.2) × 营收权重(营收 -10%~20% → 0.3-0.7) × 买入条件
  • 效果:任何一个因子偏弱,整体仓位都会被乘法压低;两个因子同时偏弱,仓位会被压得非常低

V1 和 V3 的关键设计差异

维度V1(AAPL)V3(贵州茅台)
门控严格度ROE > 10, 负债 < 80ROE > 12, PE < 45, 负债 < 20
仓位映射因子负债率(单因子)PE + 营收增速(双因子)
卖出触发源2 个(趋势 + 门控失败)4 个(趋势 + PE泡沫 + 负债超标 + 门控失败)
PE 用法仅监控输出(美股 PE 历史为 NaN)估值阈值过滤 + 仓位映射(A 股 PE 数据完整)
整体风格均衡型增强防守型增强

回测结果:四版本表现对比

重要提示:这篇文章不是“高收益策略评选”,而是“风险暴露优化验证”。这些策略的绝对收益可能并不理想,甚至可能为负;本次 A/B 测试要看的是,在同一个趋势策略基础上,加入基本面风控后,回撤、波动率、夏普比率等风险指标是否得到相对改善。这也是我们选择不展示净值走势图的原因:绝对收益曲线会分散注意力,掩盖本文核心。如果你只关注绝对收益最大化,这篇可以先跳过;如果你关心风险控制,请聚焦 V1 vs V0、V3 vs V2 的变化。

数据来源:本地回测结果快照(统计日期:2026-02-09)。

版本净值年化收益率最大回撤回撤持续天数年化波动率SharpeCalmar交易次数*胜率
V0 AAPL 技术基线1.01600.26%-16.94%2386.68%-0.0960.015425.00%
V1 AAPL 基本面增强1.14102.18%-5.78%493.95%0.3260.378450.00%
V2 茅台技术基线0.9359-1.08%-33.05%16897.22%-0.148-0.0331010.00%
V3 茅台基本面增强0.9024-1.67%-10.08%9842.02%-1.044-0.166714.29%

* 交易次数按“交易回合”统计(一次完整的进出场计为一回合),不是订单条数。

数字已经摆在这里了。下面一组一组拆。

深度分析:美股组——进攻和防守可以同时改善

V1 相对 V0 的改善

指标V0 基线V1 增强变化
年化收益率0.26%2.18%+1.92 个百分点
最大回撤-16.94%-5.78%回撤降幅 65.88%
年化波动率6.68%3.95%波动降幅 40.87%
回撤持续天数23849缩短 189 天
Sharpe-0.0960.326从负转正
Calmar0.0150.378提升 25 倍
胜率25.00%50.00%翻倍

这组结果是典型的"进攻和防守同时改善"——收益更高、回撤更小、波动更低、恢复更快。

为什么能做到?

因为 V1 的 risk_gate 拦截了那些"趋势还在但质量已经恶化"的时段。V0 在这些时段照常给出 0.45 的固定仓位;V1 则直接拒绝入场,或者通过负债率映射压低仓位。

同时,sell_condition 包含了 fundamental_fail,意味着即使价格趋势没有明确转下,只要基本面门控失败,V1 也会主动退出——这比等待 EMA 死叉要提前得多。

在本文样本、参数和时间窗下,如果四个版本里只选一个“综合最均衡”的,V1 更优先。

深度分析:A 股组——一条完全不同的优化路径

V3 相对 V2 的改善

指标V2 基线V3 增强变化
年化收益率-1.08%-1.67%下降 0.59 个百分点
最大回撤-33.05%-10.08%回撤降幅 69.50%
年化波动率7.22%2.02%波动降幅 72.02%
回撤持续天数1689984缩短 705 天

A 股组的结果和美股组截然不同。V3 的收益率比 V2 还低了 0.59 个百分点——年化收益是变差了的

但看风险指标:最大回撤从 33% 压到 10%,波动率从 7.2% 压到 2%。

这两个数字意味着什么?

  • -33% 的回撤:10 万本金跌到 6.7 万,需要从谷底涨 49% 才能回本。如果回撤持续 1689 天(超过 4 年半),绝大多数人在前两年就会放弃
  • -10% 的回撤:10 万本金跌到 9 万,需要涨 11% 就能回本。心理压力完全不在一个量级

为什么 V3 的风险压缩这么极端?

看 V3 的设计就能理解:五维质量门控(阈值都很严格)+ PE/营收双因子仓位映射 + 四重卖出触发。对茅台这样的标的,一旦 PE 高于 45 或者营收增速低于 5%,门控就会关闭;即使门控打开,PE 如果偏高(比如 40),PE 权重也只有约 0.33,再乘以营收权重,最终仓位会被压得很低。

V3 走的是一条典型的"波动率转化"路径:用收益空间换取风险质量的大幅改善。

这不是每个人都需要的优化方向,但对于"先求不死、再求盈利"的投资者来说,这恰恰是最有价值的改善。

可执行性分析:为什么有些策略指标还行,但你拿不住

除了收益和回撤,策略能否长期执行还取决于“行为负担”——你实际成交了几次、信号有多少天处于开启状态、平均仓位有多重。

版本成交买入次数成交卖出次数买入信号为真天数(2020后)卖出信号为真天数(2020后)平均目标仓位(2020后)
V0 AAPL 基线4312412930.1866
V1 AAPL 增强435569780.0817
V2 茅台基线10107687130.1699
V3 茅台增强7719512860.0401

口径说明:成交次数按实际成交记录统计;“信号为真天数”和“平均目标仓位”统一按 2020-01-02 及之后的回测窗口统计。

这组数字揭示了更深层的差异:

V1 比 V0 明显更克制:成交次数几乎一样(都是 4 买 3 卖),但买入信号为真天数从 1241 天降到 556 天,平均目标仓位从 18.66% 降到 8.17%。这说明 V1 不是靠“高频交易”改善结果,而是靠“更少暴露、按质量暴露”改善风险收益比。

V3 是极度防守型配置:成交次数从 V2 的 10 买 10 卖降到 7 买 7 卖;买入信号为真天数从 768 天降到 195 天,平均目标仓位仅 4.01%。这意味着 V3 在回测窗口内绝大多数时段都处于低仓位或空仓状态。

这也解释了为什么 V3 能把回撤从 33% 压到 10%——大部分时间它根本没有暴露在市场风险中

代价是收益空间被严格限制。但对于 A 股这种波动大、回撤深的市场,"先活着"可能比"多赚一点"更重要。

如何选择:按你的风险目标直接决定

目标 A:收益和风险都要改善

更适合 V1(AAPL 基本面增强)

  • 收益提升 + 回撤下降 + 波动下降,同时成立
  • Sharpe 从负转正,Calmar 提升 25 倍
  • 是四个版本中综合最均衡的

目标 B:优先降低回撤与波动

更适合 V3(茅台基本面增强)

  • 最大回撤降幅近 70%,波动率降幅超过 72%
  • 适合防守优先、风险承受能力有限的配置
  • 需要接受收益空间的收缩

目标 C:只追求收益数字,不愿用收益换风控

  • A 股场景可偏向 V2
  • 但要理解:-33% 的最大回撤和长达 4.5 年的回撤持续期,意味着实际执行中很可能提前退出

一个简单的判断标准:如果你在回测的最大回撤处,能否坚持不动?如果答案是"不确定",那你需要的不是收益最高的版本,而是回撤最小的版本。

常见误区

误区 1:把基本面当成"选股器"

基本面组件在原语引擎中的定位是风险约束,不是全市场排名。它回答的是"这个标的当前是否健康、该给多大仓位",不是"哪只股票会涨"。

选股在外部完成,风控在引擎内部——这是原语引擎的设计边界。

误区 2:只看年化收益率

V2 的年化 -1.08% 看起来比 V3 的 -1.67% "好"。但 V2 的最大回撤是 -33%,持续 1689 天。一个持续 4 年半的 33% 回撤,大多数人根本拿不住。

策略的真实收益 = 理论收益 × 执行成功率。一个理论收益更高但你扛不住回撤的策略,实际收益可能是零。

误区 3:不区分"收益型优化"和"防守型优化"

V1 和 V3 都是基本面增强,但优化目标完全不同:

  • V1 是均衡型:收益和风控同步改善
  • V3 是防守型:大幅压缩风险,代价是收益空间收窄

把它们混为一谈,会导致错误的预期。

误区 4:忽略回撤持续时间

同样是最大回撤 -15%,持续 2 个月和持续 2 年,对执行体验完全是两回事。回撤持续时间直接决定了你在"水下"煎熬多久——这是净值曲线上看不到、但实盘中感受最深的维度。

误区 5:在 ETF 上直接用基本面指标

当前五个基本面指标的语义是"单公司财务口径",不是 ETF 成分聚合口径。在 ETF 上启用这些指标,常见现象是字段长期为 NaN,门控会失真。

实战复现:如何在平台上跑这套对照实验

建议按以下顺序操作,不要一步到位做太多版本:

  1. 先建技术基线版本(V0 或 V2):只用 EMA 趋势信号 + ConditionalWeight 固定仓位,确认基线跑通
  2. 复制出增强版本(V1 或 V3):在同标的、同时间窗下,增加 fundamental_inputs 和基本面层信号
  3. 严格保持其他条件一致:起始资金、手续费、回测区间、EMA 参数不变,只改变基本面层逻辑
  4. 对照六个核心指标:年化收益率、最大回撤、回撤持续时间、波动率、Sharpe、Calmar
  5. 用信号分析归因:验证基本面层确实在工作(门控覆盖率、仓位分布、字段覆盖率)
  6. 最后再调阈值:先看结构性改善是否存在,再做参数微调

需要注意的数据约束

  • 基本面指标当前仅面向个股,不建议直接用于 ETF
  • 美股 PE_TTM 历史点为 NaN(避免前视偏差),适合做监控输出,不建议做估值阈值过滤
  • 务必保持 point_in_time: true,否则回测会使用未来数据,结果不可信
  • 建议开启 reset_signal_state_at_start: true,避免切片起点前的历史状态干扰回测

结论:三维坐标系的最后一个维度

回到开头的框架:原语引擎以趋势、回归、基本面三个正交维度,构建了一个投资策略的三维坐标系。

在基本面维度加入之前,引擎已经能回答"市场要去哪里"(趋势)和"价格是否合理"(回归)。但它回答不了"这个资产本身是否健康"——而这恰恰是让策略在"价格看起来没问题"的阶段避免踩坑的关键。

这次四版本对照实验的核心结论很明确:这不是一场“谁收益最高”的比赛,而是一场“风险暴露能否被优化”的验证。基本面维度落地后的第一次实证检验,就是回答这个问题:

美股组证明了:在合适的市场和标的上,基本面过滤能做到收益和风控的同步改善。AAPL 的 V1 策略用 risk_gate + debt_scaled_weight 实现了回撤降幅 66%、收益提升 1.9 个百分点的结果——不需要任何取舍。

A 股组证明了:在波动更大、回撤更深的市场中,基本面层的核心价值是风险压缩。茅台的 V3 策略用五维门控 + 双因子仓位 + 四重卖出触发,把回撤从 33% 压到 10%、波动率从 7.2% 压到 2%。收益没有更好,但风险路径变得完全不同。这不是失败,而是另一种成功。

两组结果加在一起,指向同一个结论:

基本面增强的本质价值不是"让策略赚更多钱",而是让策略从二维决策(价格方向 + 价格位置)升级为三维决策(价格方向 + 价格位置 + 资产健康度)。这个升级在不同市场上会表现为不同形态——有时是全面提升,有时是风险转化——但底层逻辑是一致的。

而且,这五个基本面指标只是"原子级"的起点。通过原语的组合能力——逻辑门控(And/Or/Not)、线性映射(LinearScaleWeight)、乘法叠加(Multiply)——它们可以衍生出"质量健康状态"、"风险告警信号"、"多因子动态仓位"等更丰富的复合指标。五个原子,组合出的策略空间远大于五。

当三个维度齐备、组合方式充分,剩下的问题就回到了投资本身:

  1. 我到底优化了哪一层?
  2. 这个优化换来了什么——收益提升,还是更稳的风险路径?
  3. 这个结果是否匹配我的风险偏好和执行能力?

如果答案清楚,策略就不再是一段漂亮的回测曲线,而是一套你能理解、能接受、能长期执行的系统。