{
  "review_id": "2026-07-23-riskcap-promotion",
  "hypothesis": {
    "baseline": "VolatilityBreakout",
    "candidate": "VolatilityBreakoutRiskCap",
    "single_changed_factor": "Position sizing denominator uses max(leveraged 3xATR risk, absolute hard-stop risk).",
    "pass_gate": "Same trades; PF decline no worse than 0.02; max drawdown and worst single-trade loss both improve in training and validation."
  },
  "implementation": {
    "candidate_sha256": "0f1e7df8952cbfdd1d282ea50e1f4a6cb109a035d2503920c1a2d590e8a6d155",
    "helper_sha256": "cd2a3c196818a89cd96055531220ecf078faf9658fc7736bf32c7da51b7c1dd9",
    "helper_provenance": "Repository HEAD and deployed remote file matched before promotion audit; imported helper is not embedded in the Freqtrade result zip."
  },
  "archives": {
    "training": {
      "file": "train-12pairs.zip",
      "sha256": "9424c2b059713cd4f7bc4ff7cba67bf0dcb2542ba2cbca0ebdf9eaf7c154e434",
      "strategy_sha256": {
        "backtest-result-2026-07-16_03-12-46_VolatilityBreakout.py": "db884cc34cb2502676088b4c519397bcc06a37f24ea74ac0960e27d32bec9691",
        "backtest-result-2026-07-16_03-12-46_VolatilityBreakoutRiskCap.py": "0f1e7df8952cbfdd1d282ea50e1f4a6cb109a035d2503920c1a2d590e8a6d155"
      }
    },
    "validation": {
      "file": "validation-12pairs.zip",
      "sha256": "2a6b76e733c4d7ebdb7502ec23179f2d9089c022ad43ddf42f33c6aa89025df5",
      "strategy_sha256": {
        "backtest-result-2026-07-16_03-13-47_VolatilityBreakout.py": "db884cc34cb2502676088b4c519397bcc06a37f24ea74ac0960e27d32bec9691",
        "backtest-result-2026-07-16_03-13-47_VolatilityBreakoutRiskCap.py": "0f1e7df8952cbfdd1d282ea50e1f4a6cb109a035d2503920c1a2d590e8a6d155"
      }
    }
  },
  "windows": {
    "training": {
      "baseline": {
        "trades": 335,
        "profit_pct": 19.258792420000006,
        "profit_factor": 1.1367045306435344,
        "max_drawdown_pct": 13.00738183703948,
        "winrate": 0.5522388059701493,
        "avg_stake": 188.53416136119404,
        "worst_trade_usdt": -12.46064095,
        "best_trade_usdt": 44.45372098,
        "timerange": "20260101-20260501",
        "timeframe": "5m",
        "enable_protections": true,
        "fee_open_values": [
          0.00035
        ],
        "fee_close_values": [
          0.00035
        ]
      },
      "candidate": {
        "trades": 335,
        "profit_pct": 16.686559815000003,
        "profit_factor": 1.1411983247098505,
        "max_drawdown_pct": 11.372839632390626,
        "winrate": 0.5522388059701493,
        "avg_stake": 158.13867217761194,
        "worst_trade_usdt": -9.9966135,
        "best_trade_usdt": 37.38385002,
        "timerange": "20260101-20260501",
        "timeframe": "5m",
        "enable_protections": true,
        "fee_open_values": [
          0.00035
        ],
        "fee_close_values": [
          0.00035
        ]
      },
      "gate": {
        "exact_trade_paths": true,
        "pf_delta": 0.004493794066316115,
        "drawdown_delta_percentage_points": -1.634542204648854,
        "worst_trade_delta_usdt": 2.4640274499999997,
        "passed": true
      }
    },
    "validation": {
      "baseline": {
        "trades": 175,
        "profit_pct": 13.474647659999997,
        "profit_factor": 1.2199858131427885,
        "max_drawdown_pct": 8.75125086831245,
        "winrate": 0.56,
        "avg_stake": 157.23485516285714,
        "worst_trade_usdt": -10.54890586,
        "best_trade_usdt": 49.70477005,
        "timerange": "20260501-20260710",
        "timeframe": "5m",
        "enable_protections": true,
        "fee_open_values": [
          0.00035
        ],
        "fee_close_values": [
          0.00035
        ]
      },
      "candidate": {
        "trades": 175,
        "profit_pct": 11.684296219,
        "profit_factor": 1.223113167853094,
        "max_drawdown_pct": 7.444870426179627,
        "winrate": 0.56,
        "avg_stake": 134.42655696285715,
        "worst_trade_usdt": -8.62377966,
        "best_trade_usdt": 41.09936153,
        "timerange": "20260501-20260710",
        "timeframe": "5m",
        "enable_protections": true,
        "fee_open_values": [
          0.00035
        ],
        "fee_close_values": [
          0.00035
        ]
      },
      "gate": {
        "exact_trade_paths": true,
        "pf_delta": 0.003127354710305452,
        "drawdown_delta_percentage_points": -1.3063804421328236,
        "worst_trade_delta_usdt": 1.9251261999999993,
        "passed": true
      }
    }
  },
  "decision": "PASS_OFFLINE_RISK_GATE",
  "visual_review": {
    "inspected_at": "2026-07-23T06:45:00Z",
    "status": "passed",
    "notes": [
      "Training and validation cumulative-PnL curves contain the same turns and exit timestamps, confirming identical trade paths with only stake scaling changed.",
      "RiskCap stays below the baseline in absolute PnL as expected from smaller stakes; there is no visual claim of new alpha.",
      "Both drawdown bars are lower and both PF bars are marginally higher for RiskCap, matching the archived metrics.",
      "The stake scatter lies on or below the equality line, visibly isolating the hard-stop position cap without unexplained stake expansion."
    ]
  },
  "chart": "riskcap_promotion_comparison.png"
}
