[40] 行为纪律规则引擎设计
2026-03-23
风控与心理 · 共 10 篇
tradeSys #40: 行为纪律规则引擎 — 从认知偏差到可编码规则
研究目标:将 #23 交易心理的 7 大认知偏差、#26 回撤管理的分级响应、#36 regime detection 信号,转化为一个可编码、可 cron 调度、可自动执行的行为纪律规则引擎。 研究日期:2026-03-23 前置依赖:#23 交易心理 | #26 回撤管理 | #36 Regime Detection | Plan E3-AW 账户参数:$50K 起步,季度再平衡,四标的(GLD/DBMF/sUSDe/BIL)
核心论点
行为偏差是散户投资者最大的单一收益杀手——Dalbar QAIB 30年数据显示,散户因行为问题年均少赚 3-4%,远超管理费(0.5%)和交易成本(0.3%)的总和。对于 Plan E3-AW 这样年化预期 ~6% 的策略,行为损耗如果达到 3%,等于砍掉一半收益。
本研究的核心主张:行为纪律不能靠意志力,必须靠代码。将认知偏差的触发条件量化为 IF-THEN 规则,由 cron 自动检测和干预,把人类最薄弱的环节(情绪决策)交给最擅长执行的角色(程序)。
1. 行为偏差的量化触发条件
1.1 七大偏差 → 七组 IF-THEN 规则
基于 #23 交易心理研究中识别的 7 大认知偏差,转化为可检测信号:
| # | 偏差 | 量化触发条件 | 自动干预动作 | 数据源 |
|---|---|---|---|---|
| 1 | 损失厌恶 | 组合单日跌幅 >2% 后 24h 内出现非计划卖出信号 | 🔒 锁定交易 48h + 推送"计划内吗?“提醒 | 账户API + 交易日志 |
| 2 | 处置效应 | 亏损持仓持有 >90 天且无止损触发,同时盈利持仓 <30 天即卖出 | 推送"你在卖赢家、留输家"警告 + 强制审视止损线 | 持仓记录 |
| 3 | 过度交易 | 月度 turnover >15%(Plan E3-AW 正常值 <3%) | 🔒 冻结非计划交易至月末 + 发送交易频率报告 | 交易记录 |
| 4 | 近因偏差 | 组合连涨 >3 周后出现加仓信号,或连跌 >2 周后出现减仓信号 | 推送"你在追涨/杀跌"警告 + 强制等待 72h 冷静期 | 价格数据 |
| 5 | 锚定效应 | 再平衡时偏离目标权重执行(如应调到 25% 但只调到 22%“因为买入价更高”) | 强制显示目标配比 vs 实际配比差异,要求确认偏离理由 | 再平衡执行记录 |
| 6 | 过度自信 | 连续 3 次交易盈利后仓位扩大 >20%(vs 计划仓位) | 推送"胜率偏差"警告:显示历史胜率 vs 近期胜率 | 交易记录 |
| 7 | 从众行为 | 交易指令与社交媒体热度(Twitter/Reddit 提及量)相关性 >0.6 | 推送"你在跟风吗?"+ 48h 冷静期 | 社媒API + 交易时间戳 |
反直觉发现 #1:过度交易(#3)是 Plan E3-AW 最大的行为风险,而不是恐慌卖出。原因:季度再平衡策略本应极少交易(年 4 次),但散户常因"闲着焦虑"而增加不必要的调整。Barber & Odean (2000) 发现高频交易者年化收益比低频者少 6.5%。
1.2 数据源与信号采集架构
[IBKR API] ──→ 持仓/交易数据
[Stooq/Yahoo] ──→ 价格数据(日频)
[交易日志 JSON] ──→ 计划 vs 实际执行对比
[VIX/CTS] ──→ Regime 信号(来自 #36)
│
▼
[信号采集层] ──→ 每日 cron 扫描
│
▼
[规则引擎] ──→ IF-THEN 匹配
│
▼
[动作层] ──→ 告警/锁定/报告
最简实现:一个 Python 脚本 + DuckDB 本地数据库 + cron 每日运行。无需复杂基础设施。
2. 规则引擎架构设计
2.1 整体架构:事件驱动 + 规则匹配 + 动作执行
三层设计:
- 感知层(Sensor):每日收集价格、持仓、交易记录
- 决策层(Rules Engine):用规则库匹配当前状态
- 执行层(Actuator):发送告警、锁定交易、生成报告
2.2 规则库数据结构
# rules.py - 行为纪律规则库
RULES = [
{
"id": "R001_loss_aversion",
"name": "损失厌恶检测",
"trigger": {
"condition": "portfolio_daily_return < -0.02 AND unplanned_sell_signal_in_24h",
"data_sources": ["ibkr_positions", "trade_log"]
},
"action": {
"type": "lock_and_alert",
"lock_duration_hours": 48,
"message": "⚠️ 组合今日跌幅 {drop}%,你在 24h 内发出了卖出信号。这在你的计划内吗?交易已锁定 48h。"
},
"priority": 1, # 1=最高
"cooldown_days": 7 # 触发后 7 天不重复告警
},
{
"id": "R003_overtrading",
"name": "过度交易检测",
"trigger": {
"condition": "monthly_turnover > 0.15",
"data_sources": ["trade_log"]
},
"action": {
"type": "freeze_and_report",
"freeze_until": "month_end",
"message": "🚫 本月 turnover {turnover}%,远超正常值 3%。非计划交易已冻结至月末。"
},
"priority": 1,
"cooldown_days": 30
},
{
"id": "R004_recency_bias",
"name": "近因偏差检测",
"trigger": {
"condition": "(streak_up_weeks >= 3 AND buy_signal) OR (streak_down_weeks >= 2 AND sell_signal)",
"data_sources": ["price_data", "trade_log"]
},
"action": {
"type": "cooling_period",
"wait_hours": 72,
"message": "🧊 组合连涨/跌 {weeks} 周后你想操作——72h 冷静期已启动。"
},
"priority": 2,
"cooldown_days": 14
}
]
2.3 与 cron 调度的整合
# crontab 配置
# 每日 21:00 UTC (北京时间 05:00) 运行行为检测
0 21 * * * cd ~/tradeSys && python3 behavioral_engine.py --mode=daily_scan
# 每月 1 日生成月度行为报告
0 22 1 * * cd ~/tradeSys && python3 behavioral_engine.py --mode=monthly_report
# 每季度末触发再平衡前检查
0 20 28-31 3,6,9,12 * cd ~/tradeSys && python3 behavioral_engine.py --mode=pre_rebalance_check
2.4 规则优先级与冲突解决
当多条规则同时触发时:
- 安全规则优先:锁定/冻结类(R001/R003)> 警告类(R002/R004)> 信息类(R005/R006)
- 最严格动作生效:如同时触发 48h 锁定和 72h 冷静期,取 72h
- 冲突日志:记录所有被覆盖的规则,供月度复盘分析
3. 交易日志与复盘框架
3.1 每次交易必须记录的字段
{
"timestamp": "2026-03-23T15:30:00Z",
"asset": "GLD",
"action": "sell",
"quantity": 10,
"price": 245.30,
"planned": true,
"plan_reference": "Q1_rebalance",
"pre_trade_emotion": "neutral", // calm/anxious/excited/fearful
"trigger_source": "rule_engine", // rule_engine/manual/external_signal
"market_context": {
"vix": 18.5,
"regime": "low_vol_trend",
"portfolio_dd": -1.2
},
"post_trade_note": ""
}
关键字段说明:
planned: bool——这笔交易是否在季度计划内?非计划交易是行为偏差的最强信号pre_trade_emotion: 自评情绪——事后复盘时可分析情绪与交易质量的相关性trigger_source: 区分自动执行 vs 手动干预——手动干预比例过高说明规则引擎没发挥作用
3.2 月度复盘模板
## 月度行为复盘 — YYYY-MM
### 交易统计
- 总交易次数: X(计划内: Y,计划外: Z)
- 月度 turnover: X%
- 规则触发次数: X(锁定: Y,警告: Z,信息: W)
### 行为偏差检测
- [ ] 损失厌恶事件: 0
- [ ] 过度交易: 否(turnover < 3%)
- [ ] 追涨杀跌: 0 次
- [ ] 非计划交易: 0 次
### 情绪分布
- calm: X% | anxious: X% | excited: X% | fearful: X%
### 本月教训
(自由文本,记录具体的行为发现)
### 下月计划调整
(基于本月教训,调整规则参数或新增规则)
3.3 季度深度复盘
季度复盘增加:
- 规则有效性评估:每条规则的触发次数、干预成功率(干预后是否避免了损失)
- 行为趋势分析:非计划交易的月度趋势(应逐月下降)
- 与组合表现的相关性:行为评分 vs 超额收益(或欠额)
4. 实证数据:行为干预对散户收益的量化影响
4.1 Dalbar QAIB 研究(1984-2023, 30 年跨度)
Dalbar 的 Quantitative Analysis of Investor Behavior 是该领域最权威的长期研究:
| 指标 | S&P 500 基准 | 平均散户股票基金 | 差距(行为损耗) |
|---|---|---|---|
| 30 年年化收益 | 10.2% | 6.8% | -3.4%/年 |
| 20 年年化收益 | 9.5% | 5.5% | -4.0%/年 |
| 10 年年化收益 | 12.0% | 8.0% | -4.0%/年 |
核心发现:散户在 30 年间因行为问题累计损失了 65% 的潜在财富。如果 $50K 按 10.2% 复利 30 年 = $900K;按 6.8% = $360K。差额 $540K 全部归因于行为损耗。
4.2 Barber & Odean 系列研究
Barber & Odean (2000, Journal of Finance) “Trading Is Hazardous to Your Wealth”:
- 分析 1991-1996 年 66,465 个散户账户
- 最高 turnover 五分位:年化收益 11.4%
- 最低 turnover 五分位:年化收益 18.5%
- 差距:7.1%/年
- 原因:交易成本 + 时机选择失误 + 处置效应
Barber & Odean (2001) “Boys Will Be Boys”:
- 男性散户交易频率比女性高 45%
- 男性年化收益比女性低 1.4%
- 纯粹归因于过度自信导致的过度交易
反直觉发现 #2:交易越少,赚得越多——这不是因为"买入持有"是最优策略,而是因为大多数额外交易的期望收益为负。对 Plan E3-AW,年 4 次季度再平衡已足够,任何额外交易大概率是在损害收益。
4.3 Vanguard 行为指导价值量化
Kinniry et al. (2019, Vanguard) “Putting a Value on Your Value: Quantifying Vanguard Advisor’s Alpha”:
Vanguard 量化了财务顾问通过行为指导创造的年化价值:
| 干预类型 | 年化增值 |
|---|---|
| 行为指导(防止恐慌卖出/追涨) | 1.50% |
| 再平衡纪律 | 0.35% |
| 税务优化 | 0.00-0.75% |
| 资产配置 | 0.00-0.75% |
| 总计 | 约 3% |
关键发现:行为指导贡献了 Vanguard 估算的顾问价值的 50%。而本研究的规则引擎本质上就是一个自动化的行为指导系统——用代码替代人类顾问的角色。
4.4 综合:行为干预的预期收益幅度
基于以上实证,行为纪律规则引擎对 Plan E3-AW 的预期增值:
- 保守估计:年化 +1.0-1.5%(主要来自减少过度交易和恐慌卖出)
- 乐观估计:年化 +2.0-3.0%(全面行为干预 + 再平衡纪律 + 情绪管理)
- 对终值影响:$50K 按 6% 跑 20 年 = $160K;加上行为增值 1.5% 变 7.5% = $224K(+40%)
这意味着行为规则引擎可能是 tradeSys 投入产出比最高的模块——零资金成本,年化增值 1-3%。
5. 与现有研究的整合
5.1 回撤分级响应的规则化(来自 #26)
| 回撤级别 | 触发条件 | 自动动作 |
|---|---|---|
| 绿灯 | MaxDD < 3% | 正常运行,无干预 |
| 黄灯 | 3% ≤ MaxDD < 7% | 推送提醒 + 禁止加仓 + 72h 冷静期 |
| 红灯 | MaxDD ≥ 7% | 🔒 全面冻结非再平衡交易 + 发送详细回撤分析报告 + 强制等待至下一再平衡日 |
5.2 Regime 信号的规则化(来自 #36)
| Regime 状态 | VIX + CTS 信号 | 配比调整规则 |
|---|---|---|
| 低波动趋势 | VIX < 20 & CTS > 0.5 | 维持目标配比,正常再平衡 |
| 高波动趋势 | VIX > 25 & CTS > 0.5 | GLD +5pp, DBMF +5pp, BIL -10pp |
| 高波动震荡 | VIX > 25 & CTS < 0.3 | BIL +10pp, GLD -5pp, DBMF -5pp |
| 低波动震荡 | VIX < 20 & CTS < 0.3 | 维持目标配比,延长再平衡间隔至半年度 |
5.3 统一状态机
[每日 cron 扫描]
│
├─→ 检查回撤级别(绿/黄/红)
│ │
│ └─→ 红灯 → 冻结所有非计划交易
│
├─→ 检查 Regime 状态
│ │
│ └─→ 高波动趋势 → 预设配比调整(下次再平衡时生效)
│
├─→ 检查 7 条行为规则
│ │
│ └─→ 触发 → 执行对应干预(锁定/警告/冷静期)
│
└─→ 生成每日状态摘要(一行)
│
└─→ 写入 tradeSys/logs/daily_status.jsonl
6. 部署方案与 MVP 路线图
MVP(1-2 天可完成)
- 交易日志 JSON 模板 — 手动记录每笔交易(5 分钟/笔)
- 月度复盘 Markdown 模板 — 每月 1 日填写(30 分钟)
- 一个 Python 脚本:读取交易日志 → 检测过度交易(turnover > 15%)→ 发送告警
V1.0(1-2 周)
- 接入 IBKR API 自动获取持仓/交易数据
- 实现全部 7 条行为规则的自动检测
- cron 每日扫描 + 告警推送(通过 OpenClaw 消息)
V2.0(1-2 月)
- 整合 #26 回撤分级 + #36 Regime 信号
- 自动生成月度/季度行为报告
- 交易锁定功能(通过 IBKR API 撤销非计划订单)
检查线自检
事实来源清单
- Dalbar QAIB (2023) — 30 年散户行为损耗数据
- Barber & Odean (2000) “Trading Is Hazardous to Your Wealth”, Journal of Finance
- Barber & Odean (2001) “Boys Will Be Boys”, Quarterly Journal of Economics
- Kinniry et al. (2019) “Putting a Value on Your Value”, Vanguard Research
- #23 交易心理研究 — 7 大认知偏差及量化损耗
- #26 回撤管理 — 分级响应框架
- #36 Regime Detection — VIX+CTS 双信号系统
独到见解摘要
- 行为损耗(3-4%/年)是 Plan E3-AW 预期收益(6%)的一半以上——行为纪律是投入产出比最高的模块
- 过度交易是 Plan E3-AW 最大行为风险(不是恐慌卖出)——季度再平衡策略最怕"闲着焦虑”
- 行为规则引擎 = 自动化财务顾问——用代码实现 Vanguard 估算的年化 1.5% 行为指导价值
- 交易越少赚越多——Barber & Odean 的 7.1% 差距证明额外交易期望收益为负
- MVP 只需 1 个 Python 脚本 + 交易日志模板——零基础设施成本,即刻可用
