| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- {
- "audit_date": "2026-05-08",
- "verdict": "passed",
- "candidate": "trend_basket-1h-lb720-tr1440-bt2880-rb168-top2-mm0.000-bm0.000-vw336-vc0.0300-lev0.75-exp0.50-vt0.2000",
- "source": {
- "top_csv": "reports/strategy-expansion/rotation-risk-top.csv",
- "row": 1,
- "scripts_read": [
- "scripts/search_expansion_rotation.py",
- "scripts/refine_expansion_rotation_risk.py"
- ],
- "reports_read": [
- "reports/strategy-expansion/rotation-risk-total.csv",
- "reports/strategy-expansion/rotation-risk-top.csv",
- "reports/strategy-expansion/rotation-risk-horizons.csv",
- "reports/strategy-expansion/rotation-risk-monthly.csv",
- "reports/strategy-expansion/rotation-risk-report.md"
- ]
- },
- "decision_summary": "The prior trade_stats fee basis issue is fixed, regenerated reports match the repaired implementation, and the core equity curve remains free of same-row lookahead.",
- "checks": {
- "trade_stats_executed_weights": {
- "status": "passed",
- "evidence": "trade_stats computes executed = weights.shift(1).fillna(0.0), matching equity_curve."
- },
- "trade_stats_internal_vol_target_turnover": {
- "status": "passed",
- "internal_symbol_weight_turnover_accounted": 16.27442631232471,
- "evidence": "trade_stats subtracts turnover.loc[segment_index, symbol] * taker_fee * leverage for every active row, including volatility-target scale changes inside an active segment."
- },
- "trade_stats_close_turnover": {
- "status": "passed",
- "entry_turnover": 12.914991340355758,
- "internal_turnover": 16.27442631232471,
- "close_turnover": 9.128908313425487,
- "total_symbol_turnover_accounted": 38.318325966105995,
- "evidence": "When the row after an active segment is flat, trade_stats multiplies by the close-row turnover fee. No synthetic final liquidation is added because equity_curve also does not force final liquidation."
- },
- "generated_report_consistency": {
- "status": "passed",
- "top_rows_checked": 30,
- "unique_bases_checked": 10,
- "max_diffs": {
- "trades": 0,
- "win_rate": 0.0,
- "profit_factor": 8.881784197001252e-16,
- "total_return": 4.440892098500626e-16,
- "annualized_return": 8.326672684688674e-17,
- "max_drawdown": 9.71445146547012e-17,
- "calmar": 4.440892098500626e-16,
- "turnover_per_year": 8.881784197001252e-16
- },
- "report_file_mtimes": {
- "scripts/refine_expansion_rotation_risk.py": "2026-05-08 01:26:30 +0800",
- "reports/strategy-expansion/rotation-risk-total.csv": "2026-05-08 01:33:19 +0800",
- "reports/strategy-expansion/rotation-risk-top.csv": "2026-05-08 01:33:19 +0800",
- "reports/strategy-expansion/rotation-risk-horizons.csv": "2026-05-08 01:33:19 +0800",
- "reports/strategy-expansion/rotation-risk-monthly.csv": "2026-05-08 01:33:19 +0800",
- "reports/strategy-expansion/rotation-risk-report.md": "2026-05-08 01:33:19 +0800"
- }
- },
- "lookahead": {
- "status": "passed",
- "first_signal_index_utc": "2020-04-30 00:00:00+00:00",
- "first_executed_index_utc": "2020-04-30 01:00:00+00:00",
- "evidence": "Signals and volatility-target sizing are converted to returns only after equity_curve shifts weights by one row."
- },
- "return_slicing": {
- "status": "passed",
- "evidence": "Horizon returns are computed from slices of the already compounded equity series; monthly rows chain from previous month-end equity."
- }
- },
- "candidate_parameters": {
- "family": "trend_basket",
- "bar": "1h",
- "universe": "BTC-USDT-SWAP,ETH-USDT-SWAP",
- "lookback": 720,
- "trend": 1440,
- "btc_trend": 2880,
- "rebalance": 168,
- "top_n": 2,
- "min_momentum": 0.0,
- "btc_min_momentum": 0.0,
- "vol_lookback": 336,
- "max_vol": 0.03,
- "leverage": 0.75,
- "exposure": 0.5,
- "vol_target": 0.2
- },
- "recomputed_candidate_metrics": {
- "first_candle_utc": "2019-12-25 00:00:00+00:00",
- "last_candle_utc": "2026-05-03 15:00:00+00:00",
- "rows": 55720,
- "total_return": 1.520238100611786,
- "annualized_return": 0.1564147619507854,
- "max_drawdown": 0.07718283753429936,
- "calmar": 2.0265484782323027,
- "turnover_total": 38.31832596610607,
- "turnover_per_year": 6.024310117968542,
- "trades": 45,
- "win_rate": 0.5777777777777777,
- "profit_factor": 7.384619055503101,
- "old_entry_exit_only_profit_factor": 7.4386055102893875
- },
- "reported_metric_diffs": {
- "total_return": 0.0,
- "annualized_return": 0.0,
- "max_drawdown": 5.551115123125783e-17,
- "calmar": 0.0,
- "turnover_per_year": 0.0,
- "trades": 0,
- "win_rate": 0.0,
- "profit_factor": 0.0
- }
- }
|