逆反因子 · Contrarian Factor
⚠️ 免责声明:本工具输出的所有信号、评分、回测与归因结果仅供参考,不构成任何投资建议、要约或承诺。市场有风险,投资须谨慎。历史回测结果不代表未来收益,任何策略均存在失效与亏损的可能。 该声明必须在每一次输出的开头或结尾原样呈现,PDF 报告首页亦须完整印出。
这是什么
一套行为金融学驱动的量化择时系统。核心假设是:当投资者的行为偏差被推到历史极端时,资产价格已偏离基本面,均值回归的力量占优 —— 因此逆着人群的极端行为下注。
工具链完整覆盖:数据采集 → 行为因子计算 → 信号生成 → walk-forward 回测 → SHAP 可解释性 → PDF 归因报告。
一、理论内核(执行任务前必须内化的数学表达)
以下公式是全部模块的设计依据。写代码、调参数、解释结果时都要能对应回这里。
1. 前景理论价值函数(Kahneman & Tversky 1979;Tversky & Kahneman 1992)
$$v(x)=\begin{cases} x^{\alpha}, & x \ge 0 \ -\lambda(-x)^{\beta}, & x < 0 \end{cases}$$
标定参数: $\alpha=\beta=0.88,\ \lambda=2.25$(损失厌恶系数)。 $\lambda>1$ 即损失厌恶:等额损失带来的负效用是等额收益正效用的 2.25 倍。 函数在原点处斜率不连续($\lambda>1$ 导致左导数更陡),这正是处置效应的数学根源。
2. 概率权重函数(Tversky & Kahneman 1992)
$$w^{+}(p)=\frac{p^{\gamma}}{\left(p^{\gamma}+(1-p)^{\gamma}\right)^{1/\gamma}},\quad \gamma=0.61$$ $$w^{-}(p)=\frac{p^{\delta}}{\left(p^{\delta}+(1-p)^{\delta}\right)^{1/\delta}},\quad \delta=0.69$$
投资者高估小概率、低估中大概率,形成"彩票偏好"与"尾部恐慌"。
3. 前景理论加权情绪(PT-Sentiment,本工具第 4 因子)
$$U_t=\sum_{k} w^{+}!\left(p_k\right)v(x_k)\cdot\mathbb{1}{x_k\ge0};+;\sum{k} w^{-}!\left(p_k\right)v(x_k)\cdot\mathbb{1}_{x_k<0}$$
$x_k$ 为滚动窗口 $W$ 内的日收益分桶取值,$p_k$ 为经验频率。$U_t$ 极高 = 主观估值被推高 = 逆反看空。
4. 处置效应(Shefrin & Statman 1985;Odean 1998)
账户级(有持仓明细时): $$PGR=\frac{RG}{RG+PG},\qquad PLR=\frac{RL}{RL+PL},\qquad DE=PGR-PLR$$ $RG/RL$ = 已实现的盈利/亏损次数,$PG/PL$ = 账面浮盈/浮亏持仓次数。$DE>0$ 即处置效应。
市场级代理(默认路径,仅需行情数据):处置效应导致上涨日成交量系统性放大: $$DEC_t = z_{W_q}!\left[\ \ln\frac{\overline{Vol}\mid_{r>0}}{\overline{Vol}\mid_{r<0}}\ \right]_{W_s}$$
5. 过度自信(Odean 1998;Gervais & Odean 2001;Daniel et al. 1998)
过度自信 → 过度交易 + 自归因偏差(把盈利归功于自己)→ 换手率与波动率同步异常放大: $$Turnover_t = a + b\cdot CumRet_{t-k,,t-1} + \varepsilon_t$$ $$OCI_t = z_{W_q}!\Big[,0.4,z!\big(\ln\frac{T_t}{MA_k(T_t)}\big) + 0.3,z!\left(\hat b_t\right) + 0.3,z!\big(\ln\frac{RV_t}{MA_k(RV_t)}\big)\Big]$$
6. 注意力驱动的价格压力(Barber & Odean 2008;Da, Engelberg & Gao 2011)
横截面赫芬达尔指数(HHI)衡量资金注意力的聚焦程度: $$s_{i,t}=\frac{Amount_{i,t}}{\sum_j Amount_{j,t}},\qquad HHI_t=\sum_i s_{i,t}^{2},\qquad ACO_t=z_{W_q}!\left(\ln HHI_t\right)$$ 时序代理(单标的):$ACO_t=z_{W_q}\big[0.5,z(\ln AT)+0.3,z(|r_t|/\sigma_t)+0.2,z(Search_t)\big]$
注意力是稀缺资源:被高度关注 → 短期价格上冲 → 后续收益更低("All That Glitters"效应)。
7. 行为资产定价模型 BAPM(Shefrin & Statman 1994)
噪声交易者(NT)与信息交易者(IT)共存,均衡价格由行为市场组合决定: $$E(R_i)-R_f=\beta_i^{C}\big[E(R_M^{C})-R_f\big]+\varepsilon_i$$ 投资者情绪(Baker & Wurgler 2006 思路)构成系统性定价因子,本工具以第一主成分构造: $$Sent_t = PC_1!\left[\ \ln AT_t,\ DEC_t,\ OCI_t,\ ACO_t,\ NHNL_t,\ LmtUp_t\ \right]$$
8. 信号合成(逆反逻辑)
各因子取滚动分位数 $\rho_{f,t}\in[0,100]$,极端度 $e_{f,t}=(\rho_{f,t}-50)/50\in[-1,1]$,逆反方向化 $d_{f,t}=-e_{f,t}$:
$$S_t=\frac{\sum_f w_f, d_{f,t}}{\sum_f w_f}\in[-1,1],\qquad n^{ext}t=#{f:\rho{f,t}\ge\theta_{hi}\ \text{或}\ \rho_{f,t}\le\theta_{lo}}$$
$$Strength_t=|S_t|\cdot\big(0.5+0.5,A_t\big)\cdot\mathbb{1}[n^{ext}t\ge 2],\quad A_t=\frac{|\sum_f w_f,\mathrm{sign}(d{f,t})|}{\sum_f w_f}$$
$$\text{Signal}_t=\begin{cases} 买入, & S_t\ge\kappa\ \wedge\ n^{ext}t\ge2 \ 卖出, & S_t\le-\kappa\ \wedge\ n^{ext}t\ge2 \ 持有, & \text{其它} \end{cases}\qquad \kappa=0.35,\ \theta{hi}=90,\ \theta{lo}=10$$
$$Confidence_t=\sigma!\Big(0.5,\hat A_t+0.3,\widehat{Str}_t+0.2,\widehat{HR}_t^{oos}\Big)$$
$\widehat{HR}^{oos}$ 为样本外滚动命中率 —— 绝不允许用全样本信息回填。
二、目录结构
~/.workbuddy/skills/contrarian-factor/
├── SKILL.md # 本文件(理论内核 + 工作流)
├── requirements.txt
├── references/
│ ├── theory-framework.md # 理论详解、参数标定依据、文献索引
│ ├── factor-formulas.md # 因子计算规格书(字段 / 公式 / 边界处理)
│ ├── backtest-guide.md # walk-forward 协议 + 过拟合诊断口径
│ ├── data-sources.md # akshare / tushare / CSV / 情绪 API 接入
│ └── output-spec.md # 输出模板(终端版 + JSON + PDF)
├── scripts/
│ ├── cf_common.py # 常量、免责声明、IO、日志、工具函数
│ ├── cf_data.py # 数据采集与标准化
│ ├── cf_factors.py # 5 类行为因子计算
│ ├── cf_signal.py # 信号生成 + 强度/置信度
│ ├── cf_backtest.py # walk-forward 回测 + 过拟合诊断
│ ├── cf_explain.py # SHAP / LOCO 因子贡献拆解
│ ├── cf_report.py # PDF 归因报告(reportlab)
│ └── run_analysis.py # 一键流水线入口
├── templates/
│ └── report_template.html # 可选 HTML 报告模板
└── examples/
└── make_sample_data.py # 生成合成行情样本(自测 / 演示)
三、工作流
Step 0 · 环境与免责
PY="C:/Users/admin/.workbuddy/binaries/python/envs/default/Scripts/python.exe"
"$PY" -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r \
"C:/Users/admin/.workbuddy/skills/contrarian-factor/requirements.txt"
首次回复用户时先输出免责声明,再进入分析。
Step 1 · 数据采集(cf_data.py)
三条数据通路,任选其一或组合:
| 通路 | 说明 | 命令范式 |
|---|---|---|
| akshare | 免费,A 股指数/个股/行业资金流 | --source akshare --symbol 000300 --start 2010-01-01 |
| tushare | 需 TUSHARE_TOKEN,数据更全 | --source tushare --symbol 000300.SH --token xxxx |
| CSV | 用户自定义数据,需含 date/open/high/low/close/volume | --source csv --csv path/to/data.csv |
| 情绪 API | 第三方搜索指数/社交热度,作为注意力代理外挂 | --sentiment-csv path.csv |
标准字段:date, open, high, low, close, volume, amount, turnover_rate, pct_chg
可选外挂:search_index(搜索指数)、news_count(新闻量)、sentiment(情绪得分)
数据卫生:自动剔除停牌(volume=0)、复权缺失、极端跳空(|r|>50% 且无分红送股标记)记录;缺失率 >5% 的字段直接停用对应因子而不是填 0。
Step 2 · 因子计算(cf_factors.py)
输出 5 个因子,默认参数:
| 因子 | 代号 | 短窗口 $W_s$ | 分位窗口 $W_q$ | 逆反方向 |
|---|---|---|---|---|
| 处置效应系数 | DEC | 60 | 750 | 高→看空 |
| 过度自信指数 | OCI | 20/120 | 750 | 高→看空 |
| 注意力集中度 | ACO | 20 | 750 | 高→看空 |
| 前景理论情绪 | PTU | 60 | 750 | 高→看空 |
| BAPM 情绪溢价 | SENT | 60 | 750 | 高→看空 |
无 turnover_rate 时用 volume/流通股本 代理;无横截面数据时 ACO 自动降级为时序代理。降级必须在输出中显式标注。
Step 3 · 信号生成(cf_signal.py)
输出每因子:当前值 / 历史分位数 / z-score / 方向 / 是否极端 + 合成信号 + 强度 + 置信度 + 一致度。
Step 4 · Walk-Forward 回测(cf_backtest.py)
"$PY" scripts/run_analysis.py --source csv --csv examples/sample_index.csv \
--mode single --walk-forward --train-window 750 --test-window 60 --horizon 20
- 滚动训练/测试切分,测试集永远在训练集之后(无前视偏差)
- 每折在训练集上网格寻优,参数锁定后用于测试集
- 指标:CAGR / Sharpe / Sortino / MaxDD / Calmar / 胜率 / 盈亏比 / 换手 / IC / IR
- 过拟合诊断:PSR、DSR(含试验次数修正)、WFE(样本外/样本内 Sharpe 比)、参数高原敏感性
- 输出必须标注:数据区间、样本容量、训练/测试折数、过拟合风险等级(低/中/高/极高)
Step 5 · SHAP 可解释性(cf_explain.py)
- 代理模型预测 $r_{t\to t+H}$,TreeExplainer(lightgbm / sklearn GBDT)优先;无 SHAP 时回退 LOCO 置换贡献
- SHAP 值只在样本外折上计算
- 输出:全局 mean|SHAP| 排名 + 单期贡献分解(正向/负向)+ 依赖方向
Step 6 · 报告(cf_report.py)
生成 PDF:封面免责 → 因子快照表 → 信号卡 → 贡献分解图 → 净值曲线/回撤 → 回测指标表 → 过拟合诊断 → 风险提示。
同时输出 analysis_result.json 供下游复用。
四、标准输出规范(每次分析必答五件事)
- 行为因子当前值 + 历史分位数
| 因子 | 当前值 | z-score | 历史分位 | 方向 | 极端? |
|------|--------|---------|----------|------|-------|
| DEC 处置效应 | 0.42 | +2.13 | 96.8% | 看空 | ⚠️ 极端 |
| OCI 过度自信 | -0.15 | -0.31 | 38.2% | 中性 | — |
| ACO 注意力 | 1.08 | +1.94 | 93.5% | 看空 | ⚠️ 极端 |
| PTU 前景情绪 | 0.21 | +0.88 | 71.4% | 偏空 | — |
| SENT BAPM情绪 | 0.66 | +1.52 | 88.0% | 偏空 | — |
- 信号 + 强度 + 置信度:
卖出 | 强度 0.72 | 置信度 0.68 | 共振因子数 2/5 - 因子贡献拆解:SHAP 值排序表 + 方向说明
- 回测摘要:数据区间 + 样本外指标 + 过拟合风险等级
- 免责声明(原样)
五、硬性约束
- 免责声明不可省略、不可弱化、不可改写。任何回测/信号输出都必须携带。
- 回测必须标注数据区间与过拟合风险。缺一不可。
- 禁止前视偏差:分位数、z-score、参数寻优、SHAP 一律只用时点之前的信息。所有滚动统计默认
min_periods ≥ 0.6×window。 - 禁止承诺收益。不用"必然""保证""稳赚"等措辞。
- 数据不足时拒绝出信号:有效样本 < 250 个交易日时,只输出因子观测,不输出信号,并提示"样本不足,结论不稳健"。
- 因子降级必须声明:任何用代理变量替代理想变量的情况都要在输出中标注
[降级]。 - 不代客理财:不提供具体仓位金额、杠杆建议、买卖点位报价。
六、常见故障
| 现象 | 原因 | 处理 |
|---|---|---|
| ModuleNotFoundError: akshare | 未装可选依赖 | 换 --source csv,或 pip install akshare |
| tushare 报 抱歉,您没有访问该接口的权限 | token 积分不足 | 改用 akshare 或 CSV |
| PDF 中文乱码 | 未注册 CID 字体 | 脚本已内置 STSong-Light 注册,勿删 |
| 回测 Sharpe > 4 | 大概率过拟合或换手成本未计 | 检查 --cost-bp,看 DSR/WFE 指标 |
| SHAP 报 Additivity check failed | 模型/数据不匹配 | 脚本自动回退 LOCO,属正常降级 |
七、参考文献
[1] Kahneman D., Tversky A. (1979) Prospect Theory. Econometrica 47(2). [2] Tversky A., Kahneman D. (1992) Advances in Prospect Theory. JRU 5(4). [3] Shefrin H., Statman M. (1985) The Disposition to Sell Winners Too Early. JF 40(3). [4] Odean T. (1998) Are Investors Reluctant to Realize Their Losses? JF 53(5). [5] Odean T. (1998) Volume, Volatility, Price, and Profit. JF 53(6). [6] Gervais S., Odean T. (2001) Learning to Be Overconfident. REFE 14(1). [7] Daniel K., Hirshleifer D., Subrahmanyam A. (1998) Investor Psychology. JF 53(6). [8] Barber B., Odean T. (2008) All That Glitters. RFS 21(4). [9] Da Z., Engelberg J., Gao P. (2011) In Search of Attention. JF 66(5). [10] Shefrin H., Statman M. (1994) Behavioral Capital Asset Pricing Theory. JFE 35(3). [11] Baker M., Wurgler J. (2006) Investor Sentiment and the Cross-Section. JF 61(4). [12] Bailey D., López de Prado M. (2012) The Sharpe Ratio Efficient Frontier. JRI 5(3). [13] Lundberg S., Lee S.I. (2017) A Unified Approach to Interpreting Model Predictions. NeurIPS. [14] Pardo R. (2008) The Evaluation and Optimization of Trading Strategies. Wiley.
详细推导与参数标定见 references/theory-framework.md。
Scan to join WeChat group