mcpField
R
rangebar-eval-metrics

rangebar-eval-metrics

github.com/terrylica数据与数据库157 次安装今天更新
代码仓库

关于 rangebar-eval-metrics

rangebar-eval-metrics 提供评估区间柱数据上机器学习模型的参考资料与脚本。它包含指标和报告流程,可考虑柱持续时间不定及自相关,用于研究评估与结果验证。

主要功能

  1. 01Sharpe 与风险指标
  2. 02预测质量指标
  3. 03PSR、DSR 和 MinTRL 检验
  4. 04按折生成报告
  5. 05指标架构验证
  6. 06按交易时段调整年化

适用场景

  1. 01评估区间柱数据上的模型
  2. 02分析 Walk-Forward Optimization 各折结果
  3. 03检验 Sharpe 的统计显著性
  4. 04生成评估报告

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/terrylica/cc-skills --skill rangebar-eval-metrics

安装后在 Claude Code 中输入/rangebar-eval-metrics确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

requirements.txt
references/
anti-patterns.md
crypto-markets.md
evolution-log.md
metrics-schema.md
ml-prediction-quality.md
risk-metrics.md
sharpe-formulas.md
sota-2025-2026.md
structured-logging.md
temporal-aggregation.md
worked-examples.md
scripts/
compute_metrics.py

详细介绍

区间棒评估指标

用于评估区间棒(基于价格的采样)数据的先进指标机器可读参考资料和计算脚本。

何时使用此技能

适用于以下情况:

  • 评估机器学习模型在区间棒数据上的表现
  • 计算具有非 IID 棒序列的夏普比率
  • 运行 Walk-Forward Optimization 指标分析
  • 计算 PSR、DSR 或 MinTRL 统计检验
  • 根据折结果生成评估报告

快速入门

# Compute metrics from predictions + actuals
python scripts/compute_metrics.py --predictions preds.npy --actuals actuals.npy --timestamps ts.npy

# Generate full evaluation report
python scripts/generate_report.py --results folds.jsonl --output report.md

指标层级

层级用途指标计算范围
主要(5 项)研究决策weekly_sharpe、hit_rate、cumulative_pnl、n_bars、positive_sharpe_rate按折 + 汇总
次要/风险(5 项)补充背景max_drawdown、bar_sharpe、return_per_bar、profit_factor、cv_fold_returns按折
机器学习质量(3 项)预测健康度ic、prediction_autocorr、is_collapsed按折
诊断(5 项)最终验证psr、dsr、autocorr_lag1、effective_n、binomial_pvalue仅汇总
扩展风险(5 项)深度风险分析var_95、cvar_95、omega_ratio、sortino_ratio、ulcer_index按折(可选)

区间棒为何需要特殊处理

区间棒违反标准 IID 假设:

  1. 持续时间不定:棒的形成取决于价格波动,而非时间
  2. 自相关:高波动时期会形成棒的聚集 → 时间相关性
  3. 信息量不恒定:波动期间棒数增加 = 每日信息量增加

标准解决方案:在计算夏普比率之前,通过 _group_by_day() 按日聚合。

参考资料

核心参考文件
主题参考文件
夏普比率计算sharpe-formulas.md
风险指标(VaR、Omega、Ulcer)risk-metrics.md
机器学习预测质量(IC、自相关)ml-prediction-quality.md
加密货币市场注意事项crypto-markets.md
时间聚合规则temporal-aggregation.md
指标 JSON Schemametrics-schema.md
反模式(交易成本)anti-patterns.md
2025-2026 年先进技术(SHAP、BOCPD 等)sota-2025-2026.md
实例演示(BTC、EUR/USD)worked-examples.md
结构化日志(NDJSON)structured-logging.md
相关技能
技能关联
adaptive-wfo-epoch使用 weekly_sharpe、psr、dsr 计算 WFE
依赖项
pip install -r requirements.txt
# Or: pip install numpy>=1.24 pandas>=2.0 scipy>=1.10

关键公式

按日聚合的夏普比率(主要指标)
def weekly_sharpe(pnl: np.ndarray, timestamps: np.ndarray) -> float:
    """Sharpe with daily aggregation for range bars."""
    daily_pnl = _group_by_day(pnl, timestamps)  # Sum PnL per calendar day
    if len(daily_pnl) < 2 or np.std(daily_pnl) == 0:
        return 0.0
    daily_sharpe = np.mean(daily_pnl) / np.std(daily_pnl)
    # For crypto (7-day week): sqrt(7). For equities: sqrt(5)
    return daily_sharpe * np.sqrt(7)  # Crypto default
信息系数(预测质量)
from scipy.stats import spearmanr

def information_coefficient(predictions: np.ndarray, actuals: np.ndarray) -> float:
    """Spearman rank IC - captures magnitude alignment."""
    ic, _ = spearmanr(predictions, actuals)
    return ic  # Range: [-1, 1]. >0.02 acceptable, >0.05 good, >0.10 excellent
概率夏普比率(统计验证)
from scipy.stats import norm

def psr(sharpe: float, se: float, benchmark: float = 0.0) -> float:
    """P(true Sharpe > benchmark)."""
    return norm.cdf((sharpe - benchmark) / se)

年化系数

市场日 → 周日 → 年原因
加密货币(24/7)sqrt(7) = 2.65sqrt(365) = 19.1每周 7 个交易日
股票sqrt(5) = 2.24sqrt(252) = 15.9每周 5 个交易日

加密货币市场绝不能使用 sqrt(252)。

关键:时段筛选会改变年化计算

视图筛选条件days_per_week原因
时段筛选(伦敦-纽约)工作日 08:00-16:00sqrt(5)按股票市场方式交易
所有 K 线(未筛选)无sqrt(7)加密货币全天候交易

对经过时段筛选的数据使用 sqrt(7),会使夏普比率高估约 18%!

详细原因请参阅 crypto-markets.md。

双视图指标

为进行全面分析,请用两种视图计算指标:

  1. 时段筛选(伦敦 08:00 至纽约 16:00):主要策略评估
  2. 所有 K 线:市场状态检测、数据质量诊断

学术参考文献

概念引用
修正夏普比率Bailey & López de Prado (2014)
非正态分布下夏普比率的标准误Mertens (2002)
夏普比率统计Lo (2002)
Omega 比率Keating & Shadwick (2002)
Ulcer 指数Peter Martin (1987)

决策框架

通过标准(研究)
go_criteria:
  - positive_sharpe_rate > 0.55
  - mean_weekly_sharpe > 0
  - cv_fold_returns < 1.5
  - mean_hit_rate > 0.50
发表标准
publication_criteria:
  - binomial_pvalue < 0.05
  - psr > 0.85
  - dsr > 0.50 # If n_trials > 1

脚本

脚本用途
scripts/compute_metrics.py根据预测值/实际值计算所有指标
scripts/generate_report.py根据折叠结果生成 Markdown 报告
scripts/validate_schema.py根据架构验证指标 JSON

修复措施(2026-01-19 多 Agent 审计)

根据一项由 12 个子 Agent 进行的对抗性审计,应用了以下修复:

问题根本原因修复措施来源
weekly_sharpe=0预测值恒定模型坍塌检测 + 架构修复model-expert
IC=None预测值方差为零对恒定值返回 1.0(语义正确)model-expert
prediction_autocorr=NaN除以零当 std < 1e-10 时进行保护,返回 1.0model-expert
Ulcer 指数除以零峰值权益 = 0使用 np.where(peak > 1e-10, ...) 进行保护risk-analyst
Omega/Profit Factor 不可靠样本过少min_days 参数(默认值:5)robustness-analyst
BiLSTM 均值坍塌架构过小hidden_size: 16→48,dropout: 0.5→0.3model-expert
profit_factor=1.0 (n_bars=0)提前返回了错误值无数据可计算比率时返回 NaNrisk-analyst
模型坍塌检测
# ALWAYS check for model collapse after prediction
pred_std = np.std(predictions)
if pred_std < 1e-6:
    logger.warning(
        f"Constant predictions detected (std={pred_std:.2e}). "
        "Model collapsed to mean - check architecture."
    )
推荐的 BiLSTM 架构
# BEFORE (causes collapse on range bars)
HIDDEN_SIZE = 16
DROPOUT = 0.5

# AFTER (prevents collapse)
HIDDEN_SIZE = 48  # Triple capacity
DROPOUT = 0.3     # Less aggressive regularization

完整实现细节请参阅参考文档。


故障排除

问题原因解决方案
weekly_sharpe 为 0预测结果恒定检查模型是否发生坍塌,并增大 hidden_size
IC 返回 None预测结果方差为零模型已坍塌——检查架构
prediction_autocorr 为 NaN除以零在自相关计算中,对 std < 1e-10 添加保护
Ulcer Index 除法错误峰值权益为零添加保护:np.where(peak > 1e-10, ...)
profit_factor = 1.0未处理任何 bar当 n_bars 为 0 时返回 NaN
Sharpe 虚高 18%数据年化方式错误会话筛选数据使用 sqrt(5),全天候数据使用 sqrt(7)
未计算 PSR/DSR缺少 scipy安装:pip install scipy
未解析时间戳格式错误确保使用 Unix 时间戳,而非 datetime 字符串

评论

支持 Markdown