{
  "assay": "assay-003-keel-systematic-fx-rules-eurgbp-v1",
  "config": {
    "split": 0.7,
    "stop_bps": 15.0,
    "target_bps": 25.0,
    "starting_equity": 10000.0,
    "flat_stake": 50.0,
    "quiet_hours_utc": [
      0,
      1,
      2,
      3,
      4,
      5,
      6
    ],
    "faithful_cost_bps": 2.5,
    "realistic_cost_bps_per_family": {
      "H1": {
        "momentum": 2.0668,
        "fade": 1.8041
      },
      "M30": {
        "momentum": 2.0561,
        "fade": 1.7856
      }
    }
  },
  "cells": [
    {
      "rule": "sma_cross_10_30",
      "family": "momentum",
      "timeframe": "H1",
      "cost_basis": "faithful",
      "cost_bps": 2.5,
      "in_sample": {
        "trades": 2295,
        "net_pnl": -36.9603,
        "return_pct": -0.3696,
        "profit_factor": 0.7137,
        "win_rate": 0.3569
      },
      "out_of_sample": {
        "trades": 610,
        "net_pnl": -8.6994,
        "return_pct": -0.087,
        "profit_factor": 0.7425,
        "win_rate": 0.3656
      },
      "buy_and_hold_net": {
        "in_sample": -0.4229,
        "out_of_sample": 1.9592
      },
      "oos_verdict": "fail_net"
    },
    {
      "rule": "sma_cross_10_30",
      "family": "momentum",
      "timeframe": "H1",
      "cost_basis": "realistic",
      "cost_bps": 2.0668,
      "in_sample": {
        "trades": 2295,
        "net_pnl": -31.9893,
        "return_pct": -0.3199,
        "profit_factor": 0.7459,
        "win_rate": 0.3569
      },
      "out_of_sample": {
        "trades": 610,
        "net_pnl": -7.3782,
        "return_pct": -0.0738,
        "profit_factor": 0.7761,
        "win_rate": 0.3656
      },
      "buy_and_hold_net": {
        "in_sample": -0.4207,
        "out_of_sample": 1.9614
      },
      "oos_verdict": "fail_net"
    },
    {
      "rule": "donchian_20",
      "family": "momentum",
      "timeframe": "H1",
      "cost_basis": "faithful",
      "cost_bps": 2.5,
      "in_sample": {
        "trades": 1416,
        "net_pnl": -28.9,
        "return_pct": -0.289,
        "profit_factor": 0.649,
        "win_rate": 0.3355
      },
      "out_of_sample": {
        "trades": 448,
        "net_pnl": -7.8,
        "return_pct": -0.078,
        "profit_factor": 0.6937,
        "win_rate": 0.3504
      },
      "buy_and_hold_net": {
        "in_sample": -0.4229,
        "out_of_sample": 1.9592
      },
      "oos_verdict": "fail_net"
    },
    {
      "rule": "donchian_20",
      "family": "momentum",
      "timeframe": "H1",
      "cost_basis": "realistic",
      "cost_bps": 2.0668,
      "in_sample": {
        "trades": 1416,
        "net_pnl": -25.8329,
        "return_pct": -0.2583,
        "profit_factor": 0.6783,
        "win_rate": 0.3355
      },
      "out_of_sample": {
        "trades": 448,
        "net_pnl": -6.8296,
        "return_pct": -0.0683,
        "profit_factor": 0.725,
        "win_rate": 0.3504
      },
      "buy_and_hold_net": {
        "in_sample": -0.4207,
        "out_of_sample": 1.9614
      },
      "oos_verdict": "fail_net"
    },
    {
      "rule": "zscore_fade_20_2",
      "family": "fade",
      "timeframe": "H1",
      "cost_basis": "faithful",
      "cost_bps": 2.5,
      "in_sample": {
        "trades": 67,
        "net_pnl": 0.2353,
        "return_pct": 0.0024,
        "profit_factor": 1.0747,
        "win_rate": 0.4627
      },
      "out_of_sample": {
        "trades": 25,
        "net_pnl": -0.3875,
        "return_pct": -0.0039,
        "profit_factor": 0.7232,
        "win_rate": 0.36
      },
      "buy_and_hold_net": {
        "in_sample": -0.4229,
        "out_of_sample": 1.9592
      },
      "oos_verdict": "fail_net"
    },
    {
      "rule": "zscore_fade_20_2",
      "family": "fade",
      "timeframe": "H1",
      "cost_basis": "realistic",
      "cost_bps": 1.8041,
      "in_sample": {
        "trades": 67,
        "net_pnl": 0.4684,
        "return_pct": 0.0047,
        "profit_factor": 1.1549,
        "win_rate": 0.4627
      },
      "out_of_sample": {
        "trades": 25,
        "net_pnl": -0.3005,
        "return_pct": -0.003,
        "profit_factor": 0.7765,
        "win_rate": 0.36
      },
      "buy_and_hold_net": {
        "in_sample": -0.4194,
        "out_of_sample": 1.9627
      },
      "oos_verdict": "fail_net"
    },
    {
      "rule": "rsi_fade_14_30_70",
      "family": "fade",
      "timeframe": "H1",
      "cost_basis": "faithful",
      "cost_bps": 2.5,
      "in_sample": {
        "trades": 491,
        "net_pnl": -2.1625,
        "return_pct": -0.0216,
        "profit_factor": 0.9139,
        "win_rate": 0.4155
      },
      "out_of_sample": {
        "trades": 171,
        "net_pnl": -2.0696,
        "return_pct": -0.0207,
        "profit_factor": 0.7769,
        "win_rate": 0.3801
      },
      "buy_and_hold_net": {
        "in_sample": -0.4229,
        "out_of_sample": 1.9592
      },
      "oos_verdict": "fail_net"
    },
    {
      "rule": "rsi_fade_14_30_70",
      "family": "fade",
      "timeframe": "H1",
      "cost_basis": "realistic",
      "cost_bps": 1.8041,
      "in_sample": {
        "trades": 491,
        "net_pnl": -0.4541,
        "return_pct": -0.0045,
        "profit_factor": 0.9812,
        "win_rate": 0.4155
      },
      "out_of_sample": {
        "trades": 171,
        "net_pnl": -1.4746,
        "return_pct": -0.0147,
        "profit_factor": 0.8344,
        "win_rate": 0.3801
      },
      "buy_and_hold_net": {
        "in_sample": -0.4194,
        "out_of_sample": 1.9627
      },
      "oos_verdict": "fail_net"
    },
    {
      "rule": "donchian_fade_20",
      "family": "fade",
      "timeframe": "H1",
      "cost_basis": "faithful",
      "cost_bps": 2.5,
      "in_sample": {
        "trades": 323,
        "net_pnl": 0.3375,
        "return_pct": 0.0034,
        "profit_factor": 1.0214,
        "win_rate": 0.4427
      },
      "out_of_sample": {
        "trades": 126,
        "net_pnl": -0.825,
        "return_pct": -0.0083,
        "profit_factor": 0.8743,
        "win_rate": 0.4048
      },
      "buy_and_hold_net": {
        "in_sample": -0.4229,
        "out_of_sample": 1.9592
      },
      "oos_verdict": "fail_net"
    },
    {
      "rule": "donchian_fade_20",
      "family": "fade",
      "timeframe": "H1",
      "cost_basis": "realistic",
      "cost_bps": 1.8041,
      "in_sample": {
        "trades": 323,
        "net_pnl": 1.4614,
        "return_pct": 0.0146,
        "profit_factor": 1.0966,
        "win_rate": 0.4427
      },
      "out_of_sample": {
        "trades": 126,
        "net_pnl": -0.3866,
        "return_pct": -0.0039,
        "profit_factor": 0.9387,
        "win_rate": 0.4048
      },
      "buy_and_hold_net": {
        "in_sample": -0.4194,
        "out_of_sample": 1.9627
      },
      "oos_verdict": "fail_net"
    },
    {
      "rule": "sma_cross_10_30",
      "family": "momentum",
      "timeframe": "M30",
      "cost_basis": "faithful",
      "cost_bps": 2.5,
      "in_sample": {
        "trades": 2565,
        "net_pnl": -40.9709,
        "return_pct": -0.4097,
        "profit_factor": 0.7157,
        "win_rate": 0.3575
      },
      "out_of_sample": {
        "trades": 644,
        "net_pnl": -9.4744,
        "return_pct": -0.0947,
        "profit_factor": 0.7353,
        "win_rate": 0.3634
      },
      "buy_and_hold_net": {
        "in_sample": -0.4383,
        "out_of_sample": 1.9773
      },
      "oos_verdict": "fail_net"
    },
    {
      "rule": "sma_cross_10_30",
      "family": "momentum",
      "timeframe": "M30",
      "cost_basis": "realistic",
      "cost_bps": 2.0561,
      "in_sample": {
        "trades": 2565,
        "net_pnl": -35.2779,
        "return_pct": -0.3528,
        "profit_factor": 0.7489,
        "win_rate": 0.3575
      },
      "out_of_sample": {
        "trades": 644,
        "net_pnl": -8.0451,
        "return_pct": -0.0805,
        "profit_factor": 0.7694,
        "win_rate": 0.3634
      },
      "buy_and_hold_net": {
        "in_sample": -0.4361,
        "out_of_sample": 1.9795
      },
      "oos_verdict": "fail_net"
    },
    {
      "rule": "donchian_20",
      "family": "momentum",
      "timeframe": "M30",
      "cost_basis": "faithful",
      "cost_bps": 2.5,
      "in_sample": {
        "trades": 1851,
        "net_pnl": -34.5625,
        "return_pct": -0.3456,
        "profit_factor": 0.6746,
        "win_rate": 0.3441
      },
      "out_of_sample": {
        "trades": 553,
        "net_pnl": -12.5033,
        "return_pct": -0.125,
        "profit_factor": 0.6169,
        "win_rate": 0.3237
      },
      "buy_and_hold_net": {
        "in_sample": -0.4383,
        "out_of_sample": 1.9773
      },
      "oos_verdict": "fail_net"
    },
    {
      "rule": "donchian_20",
      "family": "momentum",
      "timeframe": "M30",
      "cost_basis": "realistic",
      "cost_bps": 2.0561,
      "in_sample": {
        "trades": 1851,
        "net_pnl": -30.4542,
        "return_pct": -0.3045,
        "profit_factor": 0.7058,
        "win_rate": 0.3441
      },
      "out_of_sample": {
        "trades": 553,
        "net_pnl": -11.2759,
        "return_pct": -0.1128,
        "profit_factor": 0.6455,
        "win_rate": 0.3237
      },
      "buy_and_hold_net": {
        "in_sample": -0.4361,
        "out_of_sample": 1.9795
      },
      "oos_verdict": "fail_net"
    },
    {
      "rule": "zscore_fade_20_2",
      "family": "fade",
      "timeframe": "M30",
      "cost_basis": "faithful",
      "cost_bps": 2.5,
      "in_sample": {
        "trades": 520,
        "net_pnl": -1.1,
        "return_pct": -0.011,
        "profit_factor": 0.9578,
        "win_rate": 0.4269
      },
      "out_of_sample": {
        "trades": 177,
        "net_pnl": -1.8875,
        "return_pct": -0.0189,
        "profit_factor": 0.8021,
        "win_rate": 0.3842
      },
      "buy_and_hold_net": {
        "in_sample": -0.4383,
        "out_of_sample": 1.9773
      },
      "oos_verdict": "fail_net"
    },
    {
      "rule": "zscore_fade_20_2",
      "family": "fade",
      "timeframe": "M30",
      "cost_basis": "realistic",
      "cost_bps": 1.7856,
      "in_sample": {
        "trades": 520,
        "net_pnl": 0.7574,
        "return_pct": 0.0076,
        "profit_factor": 1.0303,
        "win_rate": 0.4269
      },
      "out_of_sample": {
        "trades": 177,
        "net_pnl": -1.2553,
        "return_pct": -0.0126,
        "profit_factor": 0.8628,
        "win_rate": 0.3842
      },
      "buy_and_hold_net": {
        "in_sample": -0.4348,
        "out_of_sample": 1.9809
      },
      "oos_verdict": "fail_net"
    },
    {
      "rule": "rsi_fade_14_30_70",
      "family": "fade",
      "timeframe": "M30",
      "cost_basis": "faithful",
      "cost_bps": 2.5,
      "in_sample": {
        "trades": 506,
        "net_pnl": -4.3514,
        "return_pct": -0.0435,
        "profit_factor": 0.8375,
        "win_rate": 0.3953
      },
      "out_of_sample": {
        "trades": 204,
        "net_pnl": -0.45,
        "return_pct": -0.0045,
        "profit_factor": 0.956,
        "win_rate": 0.4265
      },
      "buy_and_hold_net": {
        "in_sample": -0.4383,
        "out_of_sample": 1.9773
      },
      "oos_verdict": "fail_net"
    },
    {
      "rule": "rsi_fade_14_30_70",
      "family": "fade",
      "timeframe": "M30",
      "cost_basis": "realistic",
      "cost_bps": 1.7856,
      "in_sample": {
        "trades": 506,
        "net_pnl": -2.5439,
        "return_pct": -0.0254,
        "profit_factor": 0.9009,
        "win_rate": 0.3953
      },
      "out_of_sample": {
        "trades": 204,
        "net_pnl": 0.2787,
        "return_pct": 0.0028,
        "profit_factor": 1.0284,
        "win_rate": 0.4265
      },
      "buy_and_hold_net": {
        "in_sample": -0.4348,
        "out_of_sample": 1.9809
      },
      "oos_verdict": "fail_vs_buy_and_hold"
    },
    {
      "rule": "donchian_fade_20",
      "family": "fade",
      "timeframe": "M30",
      "cost_basis": "faithful",
      "cost_bps": 2.5,
      "in_sample": {
        "trades": 705,
        "net_pnl": -3.2875,
        "return_pct": -0.0329,
        "profit_factor": 0.909,
        "win_rate": 0.4142
      },
      "out_of_sample": {
        "trades": 231,
        "net_pnl": -1.2125,
        "return_pct": -0.0121,
        "profit_factor": 0.8981,
        "win_rate": 0.4113
      },
      "buy_and_hold_net": {
        "in_sample": -0.4383,
        "out_of_sample": 1.9773
      },
      "oos_verdict": "fail_net"
    },
    {
      "rule": "donchian_fade_20",
      "family": "fade",
      "timeframe": "M30",
      "cost_basis": "realistic",
      "cost_bps": 1.7856,
      "in_sample": {
        "trades": 705,
        "net_pnl": -0.7692,
        "return_pct": -0.0077,
        "profit_factor": 0.9778,
        "win_rate": 0.4142
      },
      "out_of_sample": {
        "trades": 231,
        "net_pnl": -0.3874,
        "return_pct": -0.0039,
        "profit_factor": 0.9661,
        "win_rate": 0.4113
      },
      "buy_and_hold_net": {
        "in_sample": -0.4348,
        "out_of_sample": 1.9809
      },
      "oos_verdict": "fail_net"
    }
  ]
}
