---
name: "quant-project-audit"
description: "量化项目与回测代码审计"
---

# 量化项目与回测代码审计

## 适用场景
在将量化交易策略（A股、美股、CTA、加密量化、高频做市）投入实盘或提交给资方/投资委员会前，指导 AI 对策略源码、回测引擎、特征工程与执行逻辑进行地毯式审查，重点筛查过拟合（Overfitting）、未来函数前瞻偏差（Lookahead Bias）、幸存者偏差（Survivorship Bias）与滑点摩擦失真。

## 功能说明
> 90% 表现惊艳的“模拟神级策略”在实盘惨遭回撤，根源往往在于回测中的隐形缺陷。本技能提供投行级量化代码审计清单与自动化脚本，在真金白银入场前给策略做全面“极限压力体检”。

## 这个案例能帮你做什么
- 深度静态扫描 Python 量化源码中的时间序列穿越漏洞（如在 $t$ 时刻的信号计算中使用了收盘价、未来复权因子或未滞后的财务指标）。
- 评估特征过拟合风险：计算 White's Reality Check、Deflated Sharpe Ratio (DSR)，检测参数网格暴力调优。
- 审计撮合引擎与执行摩擦假设：滑点（Slippage）、手续费（Commission）、借贷利率、流动性上限与逐笔挂单成交概率。
- 生成包含风险评级、修改前后对比与蒙特卡洛压力测试（Monte Carlo Stress Test）的审计报告。

## 你需要的 Skills（按类型）

| 类型 | Skill / 工具 | 用途 | 来源 |
|---|---|---|---|
| 分析工具 | `ast` / `regex` | 静态代码 AST 解析与未来函数特征匹配 | Python Standard Library |
| 量化指标 | `scipy` / `numpy` / `statsmodels` | 计算 DSR、最大回撤分布与假设检验 | Python Package |
| 内置 | `filesystem` | 源码读取与审计报告生成 | Built-in |

## 快速体验版（先跑一轮）

```text
你是顶级对冲基金的高级量化风险合规官。
请审计我提供的这段量化择时与多因子回测代码：
1. 检查是否存在未来函数（Look-ahead bias）：重点检查 shift()、rolling 计算、成交价格与信号触发时间戳。
2. 检查数据清洗是否存在幸存者偏差（是否移除了历史退市股票数据）。
3. 检查过拟合风险（参数敏感度是否呈现悬崖式断崖）。
4. 评估手续费和滑点假设是否符合真实交易深度。
给出具体的致命缺陷发现、严重性等级（High/Medium/Low）及修复代码。
```

## 稳定自动版（可长期运行）

### 1) 自动化量化代码审计静态检测器 (`audit_quant_code.py`)

```python
import ast
import re

class QuantCodeAuditor(ast.NodeVisitor):
    def __init__(self):
        self.issues = []
        
    def visit_Call(self, node):
        func_name = ""
        if isinstance(node.func, ast.Name):
            func_name = node.func.id
        elif isinstance(node.func, ast.Attribute):
            func_name = node.func.attr
            
        # 1. 检查 rolling 窗口中未做 shift(1) 导致的未来函数
        if func_name in ["rolling", "mean", "std", "quantile"]:
            self.issues.append({
                "type": "Lookahead_Warning",
                "line": node.lineno,
                "msg": f"调用了 '{func_name}' 统计函数，请确认生成的因子是否已使用 .shift(1) 滞后，以避免用收盘信息决策同一根 Bar。"
            })
            
        # 2. 检查直接使用未来日期的危险属性
        if func_name in ["bfill", "backfill"]:
            self.issues.append({
                "type": "Critical_Lookahead_Bias",
                "line": node.lineno,
                "msg": "严重：检测到向前向填充数据 'bfill()'，该操作会将未来的真实行情泄露到历史时间点！"
            })
            
        self.generic_visit(node)

def run_audit(file_path):
    with open(file_path, "r", encoding="utf-8") as f:
        code = f.read()
        
    tree = ast.parse(code)
    auditor = QuantCodeAuditor()
    auditor.visit(tree)
    
    # 正则规则二次过滤
    lines = code.split("\n")
    for i, line in enumerate(lines, 1):
        # 检查是否以当天的 Close 作为买入成交价却在当天 Open 触发
        if re.search(r"price\s*=\s*(df|data)\['close'\]", line, re.IGNORECASE) and not re.search(r"shift", line):
            auditor.issues.append({
                "type": "Execution_Mismatch",
                "line": i,
                "msg": "疑似使用当前 Bar 的 Close 进行立即撮合成交，在实盘中无法实现零延迟 Close 成交。"
            })
            
    print(f"[*] 审计完毕，发现 {len(auditor.issues)} 处潜在风险：")
    for issue in auditor.issues:
        print(f"  [L{issue['line']}] [{issue['type']}] {issue['msg']}")
        
    return auditor.issues

if __name__ == '__main__':
    # 模拟审计策略源码
    test_code = """
import pandas as pd
df['signal'] = (df['close'] > df['close'].rolling(20).mean()).astype(int)
df['buy_price'] = df['close']
df['clean_data'] = df['factor'].bfill()
"""
    with open("temp_strategy.py", "w", encoding="utf-8") as f:
        f.write(test_code)
    run_audit("temp_strategy.py")
```

### 2) 蒙特卡洛执行滑点扰动评估提示词

```text
请对该策略执行蒙特卡洛交易摩擦扰动测试：
1. 原设定滑点万分之一，请对每笔交易注入正态分布随机滑点 $N(0.0003, 0.0001)$。
2. 注入 3% - 5% 的随机丢单/拒单率（模拟实盘 API 超时或瞬间买一卖一流失）。
3. 计算 1,000 次模拟后，夏普比率（Sharpe Ratio）与最大回撤（Max Drawdown）的 95% 置信区间。
4. 如果中位数夏普比率衰减超过 40%，标记该策略为“高摩擦脆弱型”，禁止实盘。
```

## 风险与边界
- 静态 AST 审计能捕获 80% 的常见低级语法穿越，但无法完全识别间接数据透传（如预先在全局对整个时间序列做了归一化 StandardScaler）。
- 多资产横截面排序策略中，若剔除了退市股票池，需要对照真实历史点位快照数据库（Point-in-Time Database）二次比对。

## 使用建议
- 在策略上线前，始终要求提供“样本外验证（Out-of-Sample）”与“走纸交易（Paper Trading）”至少 30 个交易日的对照走势。
- 因子挖掘需记录尝试的假设总数，根据试验次数强制执行夏普比率贬损校正（Bailey & López de Prado DSR 公式）。

## 成功标准
- 彻底杜绝回测代码中任何前瞻函数与未滞后因子。
- 输出结构化缺陷修复补丁（Before vs After Diff）。
- 策略经受住滑点增加 2 倍与随机延迟注入后的生存测试。

## 源文件
来源：awesome-openclaw-zh  
原始文件：quant-project-audit.md
