{
  "name": "Secuora Strategy Study",
  "description": "Famous, widely taught trading strategies coded to exact mechanical rules and backtested on real market data with trading costs applied.",
  "source": "https://secuora.net/research",
  "methodology": "https://secuora.net/methodology",
  "licence": "Free to reuse with attribution to Secuora (https://secuora.net)",
  "parameters": {
    "windows": [
      "2025-01 to 2025-12",
      "2025-06 to 2026-05"
    ],
    "markets": [
      "BTC",
      "ETH",
      "Gold (PAXG)",
      "EUR"
    ],
    "dataSource": "Binance spot 1-minute klines (data-api.binance.vision), aggregated per strategy timeframe",
    "costs": "Commission 0.05% per side; no spread/slippage modeled (BTC/ETH spot spreads are sub-basis-point); position size capped at 10× notional leverage",
    "startingBalance": 10000,
    "riskPerTradePct": 1,
    "engine": "Secuora ai-strategy deterministic runner (same engine as the in-app AI backtester)"
  },
  "strategyCount": 49,
  "runCount": 154,
  "tradeCount": 127817,
  "runs": [
    {
      "runSet": "research",
      "strategy": "ict-silver-bullet",
      "name": "ICT Silver Bullet (AM)",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "5m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 105120,
      "codedRules": "FVG = 3-candle imbalance; entry at the 50% (consequent encroachment) of the freshest unfilled gap MSS = close beyond the most recent confirmed swing (fractal lookback 3) Sweep = wick through the prior swing with a close back inside Risk 1% of equity per trade",
      "netPnl": -119.95747943156348,
      "netPnlPct": -1.199574794315635,
      "totalTrades": 1,
      "wins": 0,
      "losses": 1,
      "winRate": 0,
      "profitFactor": 0,
      "grossProfit": 0,
      "grossLoss": 119.95747943156348,
      "avgWin": 0,
      "avgLoss": 119.95747943156348,
      "expectancy": -119.95747943156348,
      "avgRMultiple": -1.1995747943156347,
      "bestTrade": -119.95747943156348,
      "worstTrade": -119.95747943156348,
      "maxDrawdown": 119.95747943156312,
      "maxDrawdownPct": 1.1995747943156312,
      "sharpe": 0,
      "totalFees": 19.95747943156347,
      "maxConsecWins": 0,
      "maxConsecLosses": 1
    },
    {
      "runSet": "research",
      "strategy": "ict-silver-bullet-relaxed",
      "name": "ICT Silver Bullet (relaxed: sweep + FVG, no same-candle MSS)",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "5m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 105120,
      "codedRules": "RELAXED reading: liquidity sweep and FVG retrace must coincide on the same 5m candle; the strict recipe additionally requires a same-candle market-structure shift Published alongside the strict reading so the sample-size difference is visible",
      "netPnl": -3352.1784088900376,
      "netPnlPct": -33.521784088900375,
      "totalTrades": 46,
      "wins": 8,
      "losses": 38,
      "winRate": 17.391304347826086,
      "profitFactor": 0.13690382857927155,
      "grossProfit": 531.7206511325226,
      "grossLoss": 3883.8990600225607,
      "avgWin": 66.46508139156532,
      "avgLoss": 102.2078700005937,
      "expectancy": -72.87344367152255,
      "avgRMultiple": -7.513594176200108,
      "bestTrade": 128.686638883921,
      "worstTrade": -194.0910267925425,
      "maxDrawdown": 3352.1784088900395,
      "maxDrawdownPct": 33.5217840889004,
      "sharpe": -0.5026140698222209,
      "totalFees": 3323.439165320524,
      "maxConsecWins": 2,
      "maxConsecLosses": 15
    },
    {
      "runSet": "research",
      "strategy": "fvg-strategy",
      "name": "FVG entry after 10:00 (NY)",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "5m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 105120,
      "codedRules": "\"after 10:00\" read as the 10:00–16:00 New York session FVG entry at the 50% of the freshest unfilled gap, max 30 bars old",
      "netPnl": -9930.256864289504,
      "netPnlPct": -99.30256864289504,
      "totalTrades": 1154,
      "wins": 315,
      "losses": 839,
      "winRate": 27.29636048526863,
      "profitFactor": 0.3367034218524133,
      "grossProfit": 5040.809158728599,
      "grossLoss": 14971.066023018113,
      "avgWin": 16.00256875786857,
      "avgLoss": 17.843940432679513,
      "expectancy": -8.605075272347923,
      "avgRMultiple": -3.845815249328458,
      "bestTrade": 156.32868493660018,
      "worstTrade": -176.81003475017303,
      "maxDrawdown": 9930.256864289533,
      "maxDrawdownPct": 99.30256864289532,
      "sharpe": -0.13257111765761398,
      "totalFees": 9635.809735032724,
      "maxConsecWins": 4,
      "maxConsecLosses": 21
    },
    {
      "runSet": "research",
      "strategy": "liquidity-sweep-reversal",
      "name": "Liquidity sweep reversal",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "",
      "netPnl": -9999.999999996417,
      "netPnlPct": -99.99999999996416,
      "totalTrades": 3349,
      "wins": 707,
      "losses": 2642,
      "winRate": 21.110779337115556,
      "profitFactor": 0.21741307076867583,
      "grossProfit": 2778.1331715078077,
      "grossLoss": 12778.133171504203,
      "avgWin": 3.9294670035471113,
      "avgLoss": 4.836537915028086,
      "expectancy": -2.985965959986986,
      "avgRMultiple": -22.561926892857148,
      "bestTrade": 156.66980938523145,
      "worstTrade": -199.5009052561753,
      "maxDrawdown": 10195.320091549358,
      "maxDrawdownPct": 99.99999999996452,
      "sharpe": -0.35867788634818343,
      "totalFees": 10656.683764205965,
      "maxConsecWins": 5,
      "maxConsecLosses": 24
    },
    {
      "runSet": "research",
      "strategy": "ema-golden-cross",
      "name": "EMA 50/200 golden cross",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Stop = 1 × ATR(14) from entry",
      "netPnl": -1979.8815060258873,
      "netPnlPct": -19.798815060258875,
      "totalTrades": 55,
      "wins": 15,
      "losses": 40,
      "winRate": 27.27272727272727,
      "profitFactor": 0.5429901145168977,
      "grossProfit": 2352.369434088824,
      "grossLoss": 4332.25094011471,
      "avgWin": 156.82462893925495,
      "avgLoss": 108.30627350286775,
      "expectancy": -35.997845564107045,
      "avgRMultiple": -0.3914029128742712,
      "bestTrade": 175.81285343552474,
      "worstTrade": -141.84020544359961,
      "maxDrawdown": 2124.3523135515343,
      "maxDrawdownPct": 21.243523135515343,
      "sharpe": -0.2176926509153158,
      "totalFees": 1032.7076717526872,
      "maxConsecWins": 2,
      "maxConsecLosses": 10
    },
    {
      "runSet": "research",
      "strategy": "opening-range-breakout",
      "name": "Opening Range Breakout (NY, 30m)",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "5m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 105120,
      "codedRules": "Opening range = the high/low of 09:30–10:00 New York time Entry on the FIRST 5m close beyond the completed range (cross, no re-entry signal while price stays beyond) Entries allowed 10:00–12:00 NY; any open position closes at 12:00 Stop beyond the last opposing swing (fractal lookback 3); 2R target; 1% risk per trade Crypto trades 24/7 — the NY window captures the US-equities-open volatility, not an exchange open",
      "netPnl": -4484.87185189034,
      "netPnlPct": -44.8487185189034,
      "totalTrades": 417,
      "wins": 164,
      "losses": 253,
      "winRate": 39.328537170263786,
      "profitFactor": 0.6524287137228565,
      "grossProfit": 8418.58717640876,
      "grossLoss": 12903.459028299098,
      "avgWin": 51.332848636638786,
      "avgLoss": 51.001814341103156,
      "expectancy": -10.755088373837745,
      "avgRMultiple": -0.1431804328836399,
      "bestTrade": 175.72420228000254,
      "worstTrade": -149.76177080506102,
      "maxDrawdown": 4621.162066100383,
      "maxDrawdownPct": 45.89043717292616,
      "sharpe": -0.06377476075523276,
      "totalFees": 6568.585547738828,
      "maxConsecWins": 5,
      "maxConsecLosses": 9
    },
    {
      "runSet": "research",
      "strategy": "london-session-breakout",
      "name": "London Session Breakout (08:00, 30m range)",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "5m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 105120,
      "codedRules": "Opening range = the high/low of 08:00–08:30 London time (DST-correct) Entry on the FIRST 5m close beyond the completed range, 08:30–11:00 London; flat at 11:00 Stop beyond the last opposing swing (lookback 3); 2R target; 1% risk per trade Crypto trades 24/7 — the window captures the European-morning volatility regime",
      "netPnl": -7415.962507662956,
      "netPnlPct": -74.15962507662957,
      "totalTrades": 465,
      "wins": 159,
      "losses": 306,
      "winRate": 34.193548387096776,
      "profitFactor": 0.48858575766942197,
      "grossProfit": 7084.9291254435075,
      "grossLoss": 14500.891633106472,
      "avgWin": 44.55930267574533,
      "avgLoss": 47.38853474871396,
      "expectancy": -15.94830646809238,
      "avgRMultiple": -0.3072651795835657,
      "bestTrade": 153.5861273078735,
      "worstTrade": -191.02792395984318,
      "maxDrawdown": 7469.0154783016405,
      "maxDrawdownPct": 74.29599247229591,
      "sharpe": -0.20506514467794457,
      "totalFees": 8974.321460946314,
      "maxConsecWins": 5,
      "maxConsecLosses": 13
    },
    {
      "runSet": "research",
      "strategy": "turtle-soup",
      "name": "Turtle Soup (intraday sweep of a deeper swing)",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Intraday adaptation of Connors/Raschke Turtle Soup: the original fades a 20-DAY breakout; here a 15m wick through a deeper (lookback-10) confirmed swing that closes back inside, during NY hours Stop beyond the sweep extreme via the last opposing lookback-10 swing; 2R target; flat at 16:00 NY",
      "netPnl": -9984.78516479826,
      "netPnlPct": -99.84785164798261,
      "totalTrades": 777,
      "wins": 167,
      "losses": 610,
      "winRate": 21.492921492921493,
      "profitFactor": 0.2208186941514885,
      "grossProfit": 2829.67161163203,
      "grossLoss": 12814.456776430292,
      "avgWin": 16.944141387018142,
      "avgLoss": 21.007306190869333,
      "expectancy": -12.85043135752672,
      "avgRMultiple": -26.65467090300935,
      "bestTrade": 153.54312732676087,
      "worstTrade": -166.36387855847775,
      "maxDrawdown": 10024.713094431445,
      "maxDrawdownPct": 99.84845672888942,
      "sharpe": -0.3619259681381785,
      "totalFees": 8733.468374895207,
      "maxConsecWins": 4,
      "maxConsecLosses": 19
    },
    {
      "runSet": "research",
      "strategy": "rsi-mean-reversion",
      "name": "RSI(14) mean reversion (30/70 cross)",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Long when RSI(14) crosses back UP through 30; short when it crosses back DOWN through 70 (cross semantics, not level-touch) Stop 1.5×ATR(14); target 1.5R; no session filter (24/7)",
      "netPnl": -9886.786325134362,
      "netPnlPct": -98.86786325134362,
      "totalTrades": 1338,
      "wins": 514,
      "losses": 824,
      "winRate": 38.41554559043348,
      "profitFactor": 0.5400234544730496,
      "grossProfit": 11607.323366497898,
      "grossLoss": 21494.109691632242,
      "avgWin": 22.582341179956998,
      "avgLoss": 26.085084577223594,
      "expectancy": -7.389227447783529,
      "avgRMultiple": -0.3301877882287403,
      "bestTrade": 131.24541070250126,
      "worstTrade": -163.4046811581454,
      "maxDrawdown": 9987.615469128355,
      "maxDrawdownPct": 98.894434966718,
      "sharpe": -0.19576869437822245,
      "totalFees": 9219.92217508819,
      "maxConsecWins": 6,
      "maxConsecLosses": 11
    },
    {
      "runSet": "research",
      "strategy": "ny-opening-drive",
      "name": "NY Opening Drive (displacement + breakout, 09:30–10:30)",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "5m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 105120,
      "codedRules": "“Opening drive” read mechanically: an outsized momentum candle (body > 1.5×ATR(14)) that also closes beyond the prior hour’s (12×5m) high/low, inside 09:30–10:30 NY Stop 1×ATR(14); 2R target; flat at 10:30",
      "netPnl": -8618.143169807596,
      "netPnlPct": -86.18143169807595,
      "totalTrades": 307,
      "wins": 92,
      "losses": 215,
      "winRate": 29.967426710097723,
      "profitFactor": 0.3338525053443905,
      "grossProfit": 4319.146603027283,
      "grossLoss": 12937.289772834874,
      "avgWin": 46.94724568507917,
      "avgLoss": 60.17344080388314,
      "expectancy": -28.072127588949822,
      "avgRMultiple": -0.7747616968230906,
      "bestTrade": 145.8109061182475,
      "worstTrade": -180.76142873356667,
      "maxDrawdown": 8618.143169807592,
      "maxDrawdownPct": 86.18143169807591,
      "sharpe": -0.3506697587337512,
      "totalFees": 7824.283372221496,
      "maxConsecWins": 5,
      "maxConsecLosses": 13
    },
    {
      "runSet": "research",
      "strategy": "macd-zero-cross",
      "name": "MACD zero-line cross (≡ EMA 12/26 cross)",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "The MACD line is EMA(12)−EMA(26), so the MACD ZERO-LINE cross is mathematically identical to the EMA 12/26 cross — that is what this run tests The signal-line (9-EMA of MACD) cross is a different trigger and is not yet a supported primitive Stop 1×ATR(14); 2R target; 24/7",
      "netPnl": -6129.736778519861,
      "netPnlPct": -61.29736778519861,
      "totalTrades": 293,
      "wins": 87,
      "losses": 206,
      "winRate": 29.692832764505116,
      "profitFactor": 0.6177099045412544,
      "grossProfit": 9904.517970257297,
      "grossLoss": 16034.254748777163,
      "avgWin": 113.84503414088847,
      "avgLoss": 77.83618810086001,
      "expectancy": -20.92060333965823,
      "avgRMultiple": -0.31411409359831133,
      "bestTrade": 174.48621889594,
      "worstTrade": -136.86155587301636,
      "maxDrawdown": 6193.555723748603,
      "maxDrawdownPct": 61.58227575936158,
      "sharpe": -0.22719561865546406,
      "totalFees": 4034.24665626615,
      "maxConsecWins": 3,
      "maxConsecLosses": 13
    },
    {
      "runSet": "research",
      "strategy": "momentum-scalping-1m",
      "name": "Momentum scalping (1m displacement + breakout)",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "1m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 525600,
      "codedRules": "Scalp read mechanically: a 1m candle with body > 2×ATR(14) closing beyond the prior 20-minute high/low; 1.5×ATR stop, 2R target When one 1-minute bar touches BOTH stop and target, the engine counts the stop (worst-case convention) — at this timescale that convention materially shapes the result, which is itself a lesson about 1m backtests This run also measures what FEES do to 1-minute scalping — watch the fees column",
      "netPnl": -9999.999999999945,
      "netPnlPct": -99.99999999999946,
      "totalTrades": 15653,
      "wins": 2377,
      "losses": 13276,
      "winRate": 15.185587427330224,
      "profitFactor": 0.05193124771074747,
      "grossProfit": 547.7582462806779,
      "grossLoss": 10547.758246280615,
      "avgWin": 0.2304409954903988,
      "avgLoss": 0.7944982107773889,
      "expectancy": -0.6388551715326101,
      "avgRMultiple": -3.718069736501927,
      "bestTrade": 62.7333181323947,
      "worstTrade": -155.57303022638519,
      "maxDrawdown": 10000.000000000007,
      "maxDrawdownPct": 100.00000000000007,
      "sharpe": -0.8176865161927325,
      "totalFees": 10849.803279352514,
      "maxConsecWins": 7,
      "maxConsecLosses": 328
    },
    {
      "runSet": "research",
      "strategy": "power-hour",
      "name": "Power Hour momentum (15:00–16:00 NY)",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "5m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 105120,
      "codedRules": "“Power hour” read mechanically: an outsized momentum candle (body > 1.5×ATR(14)) closing beyond the prior hour’s (12×5m) high/low, inside 15:00–16:00 New York Stop 1×ATR(14); 2R target; flat at 16:00 NY Crypto trades 24/7 — the window captures the US-equities-close volatility regime",
      "netPnl": -6273.101398829845,
      "netPnlPct": -62.73101398829844,
      "totalTrades": 143,
      "wins": 43,
      "losses": 100,
      "winRate": 30.069930069930066,
      "profitFactor": 0.32268128245519123,
      "grossProfit": 2988.5670540500805,
      "grossLoss": 9261.668452879923,
      "avgWin": 69.5015593965135,
      "avgLoss": 92.61668452879923,
      "expectancy": -43.867841949859056,
      "avgRMultiple": -1.1478991776330452,
      "bestTrade": 133.47904817055672,
      "worstTrade": -191.01586096747494,
      "maxDrawdown": 6273.101398829838,
      "maxDrawdownPct": 62.73101398829838,
      "sharpe": -0.3319901271782701,
      "totalFees": 7139.093745214019,
      "maxConsecWins": 4,
      "maxConsecLosses": 15
    },
    {
      "runSet": "research",
      "strategy": "ict-silver-bullet",
      "name": "ICT Silver Bullet (AM)",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "5m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 105120,
      "codedRules": "FVG = 3-candle imbalance; entry at the 50% (consequent encroachment) of the freshest unfilled gap MSS = close beyond the most recent confirmed swing (fractal lookback 3) Sweep = wick through the prior swing with a close back inside Risk 1% of equity per trade",
      "netPnl": -176.3395226608779,
      "netPnlPct": -1.763395226608779,
      "totalTrades": 1,
      "wins": 0,
      "losses": 1,
      "winRate": 0,
      "profitFactor": 0,
      "grossProfit": 0,
      "grossLoss": 176.3395226608779,
      "avgWin": 0,
      "avgLoss": 176.3395226608779,
      "expectancy": -176.3395226608779,
      "avgRMultiple": -2.3087824858757195,
      "bestTrade": -176.3395226608779,
      "worstTrade": -176.3395226608779,
      "maxDrawdown": 176.33952266087726,
      "maxDrawdownPct": 1.7633952266087727,
      "sharpe": 0,
      "totalFees": 99.9618111442417,
      "maxConsecWins": 0,
      "maxConsecLosses": 1
    },
    {
      "runSet": "research",
      "strategy": "ict-silver-bullet-relaxed",
      "name": "ICT Silver Bullet (relaxed: sweep + FVG, no same-candle MSS)",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "5m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 105120,
      "codedRules": "RELAXED reading: liquidity sweep and FVG retrace must coincide on the same 5m candle; the strict recipe additionally requires a same-candle market-structure shift Published alongside the strict reading so the sample-size difference is visible",
      "netPnl": -4182.139593470172,
      "netPnlPct": -41.82139593470172,
      "totalTrades": 47,
      "wins": 4,
      "losses": 43,
      "winRate": 8.51063829787234,
      "profitFactor": 0.08461278007277527,
      "grossProfit": 386.571332822486,
      "grossLoss": 4568.710926292657,
      "avgWin": 96.6428332056215,
      "avgLoss": 106.24909130913156,
      "expectancy": -88.98169347808877,
      "avgRMultiple": -8.548410806098996,
      "bestTrade": 167.4214765100663,
      "worstTrade": -185.25760961781037,
      "maxDrawdown": 4349.561069980232,
      "maxDrawdownPct": 42.779391805769855,
      "sharpe": -0.8623404653723602,
      "totalFees": 3016.6958477697485,
      "maxConsecWins": 1,
      "maxConsecLosses": 14
    },
    {
      "runSet": "research",
      "strategy": "fvg-strategy",
      "name": "FVG entry after 10:00 (NY)",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "5m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 105120,
      "codedRules": "\"after 10:00\" read as the 10:00–16:00 New York session FVG entry at the 50% of the freshest unfilled gap, max 30 bars old",
      "netPnl": -9551.480280999376,
      "netPnlPct": -95.51480280999375,
      "totalTrades": 1078,
      "wins": 341,
      "losses": 737,
      "winRate": 31.63265306122449,
      "profitFactor": 0.5046555655127245,
      "grossProfit": 9731.022187986657,
      "grossLoss": 19282.50246898604,
      "avgWin": 28.53672195890515,
      "avgLoss": 26.163504028474954,
      "expectancy": -8.86037131818124,
      "avgRMultiple": -0.7803790126954372,
      "bestTrade": 187.0961687196308,
      "worstTrade": -165.25051709128672,
      "maxDrawdown": 9700.769963003853,
      "maxDrawdownPct": 95.62626918685989,
      "sharpe": -0.06331890655662893,
      "totalFees": 8837.362517927128,
      "maxConsecWins": 7,
      "maxConsecLosses": 17
    },
    {
      "runSet": "research",
      "strategy": "liquidity-sweep-reversal",
      "name": "Liquidity sweep reversal",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "",
      "netPnl": -9999.999999960562,
      "netPnlPct": -99.99999999960562,
      "totalTrades": 3282,
      "wins": 777,
      "losses": 2505,
      "winRate": 23.6745886654479,
      "profitFactor": 0.29133836480638736,
      "grossProfit": 4111.106772777983,
      "grossLoss": 14111.106772738536,
      "avgWin": 5.290999707564971,
      "avgLoss": 5.633176356382649,
      "expectancy": -3.046922608153736,
      "avgRMultiple": -3.6496562449688605,
      "bestTrade": 151.54278116692018,
      "worstTrade": -173.39066869627138,
      "maxDrawdown": 9999.999999960593,
      "maxDrawdownPct": 99.99999999960593,
      "sharpe": -0.23262114612046633,
      "totalFees": 9154.375532036973,
      "maxConsecWins": 5,
      "maxConsecLosses": 25
    },
    {
      "runSet": "research",
      "strategy": "ema-golden-cross",
      "name": "EMA 50/200 golden cross",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Stop = 1 × ATR(14) from entry",
      "netPnl": -1350.9285679560323,
      "netPnlPct": -13.509285679560323,
      "totalTrades": 52,
      "wins": 15,
      "losses": 37,
      "winRate": 28.846153846153843,
      "profitFactor": 0.647914311996666,
      "grossProfit": 2486.002650739911,
      "grossLoss": 3836.931218695943,
      "avgWin": 165.7335100493274,
      "avgLoss": 103.700843748539,
      "expectancy": -25.979395537616007,
      "avgRMultiple": -0.269694826801888,
      "bestTrade": 189.75769727790052,
      "worstTrade": -130.51527819128057,
      "maxDrawdown": 1690.1254877836636,
      "maxDrawdownPct": 16.766820300604248,
      "sharpe": -0.2669035753257953,
      "totalFees": 640.4300735786143,
      "maxConsecWins": 2,
      "maxConsecLosses": 8
    },
    {
      "runSet": "research",
      "strategy": "opening-range-breakout",
      "name": "Opening Range Breakout (NY, 30m)",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "5m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 105120,
      "codedRules": "Opening range = the high/low of 09:30–10:00 New York time Entry on the FIRST 5m close beyond the completed range (cross, no re-entry signal while price stays beyond) Entries allowed 10:00–12:00 NY; any open position closes at 12:00 Stop beyond the last opposing swing (fractal lookback 3); 2R target; 1% risk per trade Crypto trades 24/7 — the NY window captures the US-equities-open volatility, not an exchange open",
      "netPnl": -2686.9545479886174,
      "netPnlPct": -26.869545479886174,
      "totalTrades": 403,
      "wins": 170,
      "losses": 233,
      "winRate": 42.18362282878412,
      "profitFactor": 0.8040991961872558,
      "grossProfit": 11028.938882224124,
      "grossLoss": 13715.893430212736,
      "avgWin": 64.8761110719066,
      "avgLoss": 58.86649540863835,
      "expectancy": -6.667381012378703,
      "avgRMultiple": -0.07464403071338463,
      "bestTrade": 193.46039150966922,
      "worstTrade": -182.9565048587386,
      "maxDrawdown": 3268.4262163783587,
      "maxDrawdownPct": 31.727652192741413,
      "sharpe": -0.021312567689894327,
      "totalFees": 4733.324020644889,
      "maxConsecWins": 5,
      "maxConsecLosses": 12
    },
    {
      "runSet": "research",
      "strategy": "london-session-breakout",
      "name": "London Session Breakout (08:00, 30m range)",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "5m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 105120,
      "codedRules": "Opening range = the high/low of 08:00–08:30 London time (DST-correct) Entry on the FIRST 5m close beyond the completed range, 08:30–11:00 London; flat at 11:00 Stop beyond the last opposing swing (lookback 3); 2R target; 1% risk per trade Crypto trades 24/7 — the window captures the European-morning volatility regime",
      "netPnl": -4020.160472704483,
      "netPnlPct": -40.201604727044824,
      "totalTrades": 452,
      "wins": 179,
      "losses": 273,
      "winRate": 39.60176991150443,
      "profitFactor": 0.7546623545351336,
      "grossProfit": 12366.075178522504,
      "grossLoss": 16386.235651226983,
      "avgWin": 69.08421887442739,
      "avgLoss": 60.02284121328565,
      "expectancy": -8.894160337841775,
      "avgRMultiple": -0.10870930477907617,
      "bestTrade": 181.9123128379468,
      "worstTrade": -157.1189197508361,
      "maxDrawdown": 4479.5738204453555,
      "maxDrawdownPct": 43.239352300854584,
      "sharpe": -0.11630812444709354,
      "totalFees": 7342.7423793826665,
      "maxConsecWins": 7,
      "maxConsecLosses": 9
    },
    {
      "runSet": "research",
      "strategy": "turtle-soup",
      "name": "Turtle Soup (intraday sweep of a deeper swing)",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Intraday adaptation of Connors/Raschke Turtle Soup: the original fades a 20-DAY breakout; here a 15m wick through a deeper (lookback-10) confirmed swing that closes back inside, during NY hours Stop beyond the sweep extreme via the last opposing lookback-10 swing; 2R target; flat at 16:00 NY",
      "netPnl": -9991.587393176971,
      "netPnlPct": -99.91587393176971,
      "totalTrades": 823,
      "wins": 169,
      "losses": 654,
      "winRate": 20.534629404617256,
      "profitFactor": 0.23261504414110748,
      "grossProfit": 3028.7191907512106,
      "grossLoss": 13020.3065839282,
      "avgWin": 17.92141532988882,
      "avgLoss": 19.908725663498778,
      "expectancy": -12.14044640726242,
      "avgRMultiple": -3.5956982980422914,
      "bestTrade": 157.68780047209694,
      "worstTrade": -182.69347394280427,
      "maxDrawdown": 10049.33189143596,
      "maxDrawdownPct": 99.9163569245126,
      "sharpe": -0.33243940893569524,
      "totalFees": 7266.092565532041,
      "maxConsecWins": 3,
      "maxConsecLosses": 28
    },
    {
      "runSet": "research",
      "strategy": "rsi-mean-reversion",
      "name": "RSI(14) mean reversion (30/70 cross)",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Long when RSI(14) crosses back UP through 30; short when it crosses back DOWN through 70 (cross semantics, not level-touch) Stop 1.5×ATR(14); target 1.5R; no session filter (24/7)",
      "netPnl": -8733.211942559568,
      "netPnlPct": -87.33211942559569,
      "totalTrades": 1336,
      "wins": 543,
      "losses": 793,
      "winRate": 40.6437125748503,
      "profitFactor": 0.7533633879913322,
      "grossProfit": 26676.015711981134,
      "grossLoss": 35409.22765454067,
      "avgWin": 49.127100758712956,
      "avgLoss": 44.65224168290123,
      "expectancy": -6.5368352863469825,
      "avgRMultiple": -0.14697617424182902,
      "bestTrade": 145.30899012089523,
      "worstTrade": -131.62353278671685,
      "maxDrawdown": 9520.014025983144,
      "maxDrawdownPct": 88.77251997632436,
      "sharpe": -0.0890895370024378,
      "totalFees": 8125.744792286788,
      "maxConsecWins": 9,
      "maxConsecLosses": 16
    },
    {
      "runSet": "research",
      "strategy": "ny-opening-drive",
      "name": "NY Opening Drive (displacement + breakout, 09:30–10:30)",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "5m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 105120,
      "codedRules": "“Opening drive” read mechanically: an outsized momentum candle (body > 1.5×ATR(14)) that also closes beyond the prior hour’s (12×5m) high/low, inside 09:30–10:30 NY Stop 1×ATR(14); 2R target; flat at 10:30",
      "netPnl": -6358.721774255734,
      "netPnlPct": -63.58721774255734,
      "totalTrades": 261,
      "wins": 88,
      "losses": 173,
      "winRate": 33.71647509578544,
      "profitFactor": 0.5217524730434796,
      "grossProfit": 6937.158320977537,
      "grossLoss": 13295.880095233277,
      "avgWin": 78.83134455656293,
      "avgLoss": 76.85479823834264,
      "expectancy": -24.362918675309327,
      "avgRMultiple": -0.389029245492338,
      "bestTrade": 166.52634223016724,
      "worstTrade": -165.94073937675904,
      "maxDrawdown": 6358.7217742557405,
      "maxDrawdownPct": 63.5872177425574,
      "sharpe": -0.19376625764650268,
      "totalFees": 5791.976968159854,
      "maxConsecWins": 5,
      "maxConsecLosses": 14
    },
    {
      "runSet": "research",
      "strategy": "macd-zero-cross",
      "name": "MACD zero-line cross (≡ EMA 12/26 cross)",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "The MACD line is EMA(12)−EMA(26), so the MACD ZERO-LINE cross is mathematically identical to the EMA 12/26 cross — that is what this run tests The signal-line (9-EMA of MACD) cross is a different trigger and is not yet a supported primitive Stop 1×ATR(14); 2R target; 24/7",
      "netPnl": -3521.6360129248437,
      "netPnlPct": -35.216360129248436,
      "totalTrades": 266,
      "wins": 86,
      "losses": 180,
      "winRate": 32.33082706766917,
      "profitFactor": 0.785485676419498,
      "grossProfit": 12895.15123999377,
      "grossLoss": 16416.787252918613,
      "avgWin": 149.943619069695,
      "avgLoss": 91.20437362732562,
      "expectancy": -13.239233131296405,
      "avgRMultiple": -0.15325351062668302,
      "bestTrade": 190.23853020536302,
      "worstTrade": -123.43463965968414,
      "maxDrawdown": 4295.180285465287,
      "maxDrawdownPct": 42.34997586368975,
      "sharpe": -0.0955501533910634,
      "totalFees": 2630.7076024018656,
      "maxConsecWins": 11,
      "maxConsecLosses": 11
    },
    {
      "runSet": "research",
      "strategy": "momentum-scalping-1m",
      "name": "Momentum scalping (1m displacement + breakout)",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "1m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 525600,
      "codedRules": "Scalp read mechanically: a 1m candle with body > 2×ATR(14) closing beyond the prior 20-minute high/low; 1.5×ATR stop, 2R target When one 1-minute bar touches BOTH stop and target, the engine counts the stop (worst-case convention) — at this timescale that convention materially shapes the result, which is itself a lesson about 1m backtests This run also measures what FEES do to 1-minute scalping — watch the fees column",
      "netPnl": -9999.999999999996,
      "netPnlPct": -99.99999999999997,
      "totalTrades": 11133,
      "wins": 3118,
      "losses": 8015,
      "winRate": 28.006826551693166,
      "profitFactor": 0.27193068915859475,
      "grossProfit": 3734.9560695579007,
      "grossLoss": 13734.95606955789,
      "avgWin": 1.1978691691975307,
      "avgLoss": 1.7136564029392252,
      "expectancy": -0.8982304859426926,
      "avgRMultiple": -1.3429756494929923,
      "bestTrade": 119.32061489094608,
      "worstTrade": -186.65168146828117,
      "maxDrawdown": 10000.000000000005,
      "maxDrawdownPct": 100.00000000000004,
      "sharpe": -0.43583839990034845,
      "totalFees": 9530.015008161101,
      "maxConsecWins": 9,
      "maxConsecLosses": 94
    },
    {
      "runSet": "research",
      "strategy": "power-hour",
      "name": "Power Hour momentum (15:00–16:00 NY)",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "5m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 105120,
      "codedRules": "“Power hour” read mechanically: an outsized momentum candle (body > 1.5×ATR(14)) closing beyond the prior hour’s (12×5m) high/low, inside 15:00–16:00 New York Stop 1×ATR(14); 2R target; flat at 16:00 NY Crypto trades 24/7 — the window captures the US-equities-close volatility regime",
      "netPnl": -4589.638616156127,
      "netPnlPct": -45.89638616156127,
      "totalTrades": 139,
      "wins": 44,
      "losses": 95,
      "winRate": 31.654676258992804,
      "profitFactor": 0.46703141309972035,
      "grossProfit": 4021.823164076087,
      "grossLoss": 8611.46178023222,
      "avgWin": 91.40507191082015,
      "avgLoss": 90.64696610770757,
      "expectancy": -33.018982850044075,
      "avgRMultiple": -0.47496011753756573,
      "bestTrade": 136.72674518097517,
      "worstTrade": -155.0241140865257,
      "maxDrawdown": 4589.63861615613,
      "maxDrawdownPct": 45.8963861615613,
      "sharpe": -0.1908829891238725,
      "totalFees": 4740.789893090753,
      "maxConsecWins": 4,
      "maxConsecLosses": 14
    },
    {
      "runSet": "research",
      "strategy": "donchian-breakout",
      "name": "Donchian 20-bar breakout",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Close beyond the 20-bar high (long) or low (short); 1.5x ATR stop; 2R target",
      "netPnl": -5111.4005948760105,
      "netPnlPct": -51.1140059487601,
      "totalTrades": 414,
      "wins": 134,
      "losses": 280,
      "winRate": 32.367149758454104,
      "profitFactor": 0.7643922275099609,
      "grossProfit": 16583.132403147632,
      "grossLoss": 21694.532998023627,
      "avgWin": 123.75471942647486,
      "avgLoss": 77.48047499294152,
      "expectancy": -12.34637824849278,
      "avgRMultiple": -0.16284671665659317,
      "bestTrade": 183.4657896346641,
      "worstTrade": -135.53972775268466,
      "maxDrawdown": 5220.62119400819,
      "maxDrawdownPct": 52.2062119400819,
      "sharpe": -0.06493691744863052,
      "totalFees": 3754.711332257207,
      "maxConsecWins": 4,
      "maxConsecLosses": 13
    },
    {
      "runSet": "research",
      "strategy": "stochastic-cross",
      "name": "Stochastic %K/%D cross",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "%K crosses %D inside the oversold (long) or overbought (short) zone; 1.5x ATR stop; 1.5R",
      "netPnl": -3799.0609739756483,
      "netPnlPct": -37.99060973975648,
      "totalTrades": 509,
      "wins": 211,
      "losses": 298,
      "winRate": 41.45383104125737,
      "profitFactor": 0.8610527904647599,
      "grossProfit": 23542.6969978685,
      "grossLoss": 27341.757971844152,
      "avgWin": 111.57676302307347,
      "avgLoss": 91.75086567732937,
      "expectancy": -7.46377401566925,
      "avgRMultiple": -0.08622621779164069,
      "bestTrade": 140.1326735880585,
      "worstTrade": -124.73431120239812,
      "maxDrawdown": 4312.843684042704,
      "maxDrawdownPct": 41.447440577980494,
      "sharpe": -0.04163196464441334,
      "totalFees": 5107.953884118785,
      "maxConsecWins": 6,
      "maxConsecLosses": 9
    },
    {
      "runSet": "research",
      "strategy": "vwap-trend",
      "name": "VWAP trend (hold above/below)",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "5m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 105120,
      "codedRules": "Enter on the cross of the day-anchored VWAP; flat at session end; 1.5x ATR stop; 1.5R",
      "netPnl": -9999.999554443466,
      "netPnlPct": -99.99999554443465,
      "totalTrades": 2902,
      "wins": 1110,
      "losses": 1792,
      "winRate": 38.24948311509304,
      "profitFactor": 0.33993098664793336,
      "grossProfit": 5149.930759145838,
      "grossLoss": 15149.930313589279,
      "avgWin": 4.6395772604917465,
      "avgLoss": 8.454202183922588,
      "expectancy": -3.4458992262038133,
      "avgRMultiple": -0.6746004355334032,
      "bestTrade": 103.64382981061455,
      "worstTrade": -193.79233523251895,
      "maxDrawdown": 9999.999562795398,
      "maxDrawdownPct": 99.99999562795398,
      "sharpe": -0.2924247823257218,
      "totalFees": 11174.167053472485,
      "maxConsecWins": 9,
      "maxConsecLosses": 28
    },
    {
      "runSet": "research",
      "strategy": "prev-day-break",
      "name": "Previous-day high/low break",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Break of the previous-day high (long) or low (short); structure stop; 2R",
      "netPnl": -345.0679623174853,
      "netPnlPct": -3.450679623174853,
      "totalTrades": 69,
      "wins": 23,
      "losses": 46,
      "winRate": 33.33333333333333,
      "profitFactor": 0.9282205999673855,
      "grossProfit": 4462.271778063425,
      "grossLoss": 4807.339740380911,
      "avgWin": 194.0118164375402,
      "avgLoss": 104.50738566045459,
      "expectancy": -5.000984961122976,
      "avgRMultiple": -0.04105299641685709,
      "bestTrade": 207.6443873156797,
      "worstTrade": -117.54089151922555,
      "maxDrawdown": 1449.8276756762934,
      "maxDrawdownPct": 13.407702110190453,
      "sharpe": -0.052412788643207475,
      "totalFees": 364.80414350442527,
      "maxConsecWins": 3,
      "maxConsecLosses": 8
    },
    {
      "runSet": "research",
      "strategy": "ma-distance-reversion",
      "name": "Over-extension mean reversion",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Fade when close stretches >=3% from the 50 SMA; 1.5x ATR stop; 1.5R",
      "netPnl": -587.2228883155061,
      "netPnlPct": -5.872228883155061,
      "totalTrades": 96,
      "wins": 40,
      "losses": 56,
      "winRate": 41.66666666666667,
      "profitFactor": 0.902430613680331,
      "grossProfit": 5431.292862020126,
      "grossLoss": 6018.515750335637,
      "avgWin": 135.78232155050316,
      "avgLoss": 107.4734955417078,
      "expectancy": -6.116905086619855,
      "avgRMultiple": -0.055403276601729,
      "bestTrade": 147.0180077464205,
      "worstTrade": -120.23805673263027,
      "maxDrawdown": 1285.0124600447398,
      "maxDrawdownPct": 12.199780459981957,
      "sharpe": 0.00556661789993197,
      "totalFees": 908.3442202140543,
      "maxConsecWins": 3,
      "maxConsecLosses": 7
    },
    {
      "runSet": "research",
      "strategy": "roc-momentum",
      "name": "Rate-of-change momentum",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "ROC over 24 bars beyond +/-5%; 1.5x ATR stop; 2R",
      "netPnl": -1076.1489324264237,
      "netPnlPct": -10.761489324264236,
      "totalTrades": 58,
      "wins": 17,
      "losses": 41,
      "winRate": 29.310344827586203,
      "profitFactor": 0.7310996046642431,
      "grossProfit": 2925.886583671321,
      "grossLoss": 4002.035516097745,
      "avgWin": 172.1109755100777,
      "avgLoss": 97.61062234384744,
      "expectancy": -18.554291938386616,
      "avgRMultiple": -0.1868315388653736,
      "bestTrade": 181.65762908315708,
      "worstTrade": -112.63499400857084,
      "maxDrawdown": 1610.4418191228287,
      "maxDrawdownPct": 16.104418191228287,
      "sharpe": -0.08678438471184677,
      "totalFees": 349.2872160892499,
      "maxConsecWins": 3,
      "maxConsecLosses": 7
    },
    {
      "runSet": "research",
      "strategy": "bollinger-squeeze",
      "name": "Bollinger squeeze breakout",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Close beyond the band after a squeeze; 1.5x ATR; 2R",
      "netPnl": -5873.876143185475,
      "netPnlPct": -58.73876143185475,
      "totalTrades": 505,
      "wins": 164,
      "losses": 341,
      "winRate": 32.475247524752476,
      "profitFactor": 0.7719077004203282,
      "grossProfit": 19878.31344852729,
      "grossLoss": 25752.189591712737,
      "avgWin": 121.20922834467859,
      "avgLoss": 75.5196175710051,
      "expectancy": -11.63143790729797,
      "avgRMultiple": -0.16531205524393272,
      "bestTrade": 192.39619899637566,
      "worstTrade": -150.4086002495056,
      "maxDrawdown": 6337.173823888141,
      "maxDrawdownPct": 60.67468382654141,
      "sharpe": -0.09048094543056855,
      "totalFees": 4686.192794405854,
      "maxConsecWins": 4,
      "maxConsecLosses": 11
    },
    {
      "runSet": "research",
      "strategy": "htf-trend-pullback",
      "name": "HTF trend + EMA pullback",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Higher-timeframe trend filter + 20 EMA pullback in trend direction; structure stop; 2R",
      "netPnl": -8867.35087270412,
      "netPnlPct": -88.67350872704121,
      "totalTrades": 670,
      "wins": 205,
      "losses": 465,
      "winRate": 30.597014925373134,
      "profitFactor": 0.5687110237739065,
      "grossProfit": 11692.76394937198,
      "grossLoss": 20560.11482207612,
      "avgWin": 57.037872923765754,
      "avgLoss": 44.215300692636816,
      "expectancy": -13.23485204881212,
      "avgRMultiple": -1.2221155390359177,
      "bestTrade": 171.5237407529629,
      "worstTrade": -188.97569937685856,
      "maxDrawdown": 8916.449265914893,
      "maxDrawdownPct": 89.16449265914893,
      "sharpe": -0.08740604659028385,
      "totalFees": 7906.384246263817,
      "maxConsecWins": 5,
      "maxConsecLosses": 14
    },
    {
      "runSet": "research",
      "strategy": "donchian-breakout",
      "name": "Donchian 20-bar breakout",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Close beyond the 20-bar high (long) or low (short); 1.5x ATR stop; 2R target",
      "netPnl": -966.0293419195515,
      "netPnlPct": -9.660293419195515,
      "totalTrades": 389,
      "wins": 138,
      "losses": 251,
      "winRate": 35.47557840616967,
      "profitFactor": 0.9675055783795553,
      "grossProfit": 28763.05318194748,
      "grossLoss": 29729.08252386701,
      "avgWin": 208.42792160831507,
      "avgLoss": 118.44255985604387,
      "expectancy": -2.4833659175309806,
      "avgRMultiple": -0.015855935873161087,
      "bestTrade": 235.298724561893,
      "worstTrade": -139.54940079733043,
      "maxDrawdown": 3398.850248021994,
      "maxDrawdownPct": 27.337723865657278,
      "sharpe": -0.0076292168005246234,
      "totalFees": 3365.0695089457677,
      "maxConsecWins": 6,
      "maxConsecLosses": 10
    },
    {
      "runSet": "research",
      "strategy": "stochastic-cross",
      "name": "Stochastic %K/%D cross",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "%K crosses %D inside the oversold (long) or overbought (short) zone; 1.5x ATR stop; 1.5R",
      "netPnl": -5416.103075502631,
      "netPnlPct": -54.16103075502632,
      "totalTrades": 506,
      "wins": 188,
      "losses": 318,
      "winRate": 37.15415019762846,
      "profitFactor": 0.7563864249234382,
      "grossProfit": 16816.250247995395,
      "grossLoss": 22232.35332349803,
      "avgWin": 89.44813961699678,
      "avgLoss": 69.91306076571708,
      "expectancy": -10.703761018779904,
      "avgRMultiple": -0.14676245228629192,
      "bestTrade": 153.68975311377076,
      "worstTrade": -121.42134648844747,
      "maxDrawdown": 6538.135070029326,
      "maxDrawdownPct": 59.50958312846456,
      "sharpe": -0.11299758762188968,
      "totalFees": 2432.268774470627,
      "maxConsecWins": 8,
      "maxConsecLosses": 9
    },
    {
      "runSet": "research",
      "strategy": "vwap-trend",
      "name": "VWAP trend (hold above/below)",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "5m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 105120,
      "codedRules": "Enter on the cross of the day-anchored VWAP; flat at session end; 1.5x ATR stop; 1.5R",
      "netPnl": -9999.809101314382,
      "netPnlPct": -99.99809101314382,
      "totalTrades": 2752,
      "wins": 1094,
      "losses": 1658,
      "winRate": 39.752906976744185,
      "profitFactor": 0.6462761668484661,
      "grossProfit": 18270.29362888683,
      "grossLoss": 28270.102730201263,
      "avgWin": 16.700451214704596,
      "avgLoss": 17.050725410254078,
      "expectancy": -3.63365156297761,
      "avgRMultiple": -0.39701807262722627,
      "bestTrade": 127.65180200783946,
      "worstTrade": -172.60266355384454,
      "maxDrawdown": 10185.609509243819,
      "maxDrawdownPct": 99.99812583520212,
      "sharpe": -0.19993326624726257,
      "totalFees": 12485.563899899358,
      "maxConsecWins": 9,
      "maxConsecLosses": 22
    },
    {
      "runSet": "research",
      "strategy": "prev-day-break",
      "name": "Previous-day high/low break",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Break of the previous-day high (long) or low (short); structure stop; 2R",
      "netPnl": -22.55161220683595,
      "netPnlPct": -0.2255161220683595,
      "totalTrades": 76,
      "wins": 26,
      "losses": 50,
      "winRate": 34.21052631578947,
      "profitFactor": 0.9955917752186393,
      "grossProfit": 5093.25198796198,
      "grossLoss": 5115.803600168819,
      "avgWin": 195.89430722930695,
      "avgLoss": 102.31607200337638,
      "expectancy": -0.2967317395636309,
      "avgRMultiple": 0.006973921203101203,
      "bestTrade": 208.03111727420372,
      "worstTrade": -109.72224414860523,
      "maxDrawdown": 1304.3537979638822,
      "maxDrawdownPct": 12.138395170412805,
      "sharpe": -0.08687956194871516,
      "totalFees": 225.1930161172957,
      "maxConsecWins": 3,
      "maxConsecLosses": 10
    },
    {
      "runSet": "research",
      "strategy": "ma-distance-reversion",
      "name": "Over-extension mean reversion",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Fade when close stretches >=3% from the 50 SMA; 1.5x ATR stop; 1.5R",
      "netPnl": -5327.978529941681,
      "netPnlPct": -53.2797852994168,
      "totalTrades": 349,
      "wins": 122,
      "losses": 227,
      "winRate": 34.95702005730659,
      "profitFactor": 0.6691593735387151,
      "grossProfit": 10776.387451136401,
      "grossLoss": 16104.365981078077,
      "avgWin": 88.33104468144592,
      "avgLoss": 70.94434352897831,
      "expectancy": -15.266414125907394,
      "avgRMultiple": -0.21073015031185072,
      "bestTrade": 142.75670321849486,
      "worstTrade": -115.02913434403911,
      "maxDrawdown": 5665.667957206819,
      "maxDrawdownPct": 55.89384596408043,
      "sharpe": -0.14781197479647998,
      "totalFees": 1904.541455123286,
      "maxConsecWins": 3,
      "maxConsecLosses": 7
    },
    {
      "runSet": "research",
      "strategy": "roc-momentum",
      "name": "Rate-of-change momentum",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "ROC over 24 bars beyond +/-5%; 1.5x ATR stop; 2R",
      "netPnl": -3631.325990477568,
      "netPnlPct": -36.31325990477568,
      "totalTrades": 203,
      "wins": 57,
      "losses": 146,
      "winRate": 28.078817733990146,
      "profitFactor": 0.6906234571581115,
      "grossProfit": 8106.234837892702,
      "grossLoss": 11737.56082837027,
      "avgWin": 142.21464627881932,
      "avgLoss": 80.39425224911143,
      "expectancy": -17.88830537181068,
      "avgRMultiple": -0.21300162400293737,
      "bestTrade": 193.71679859934122,
      "worstTrade": -107.6732651728006,
      "maxDrawdown": 3962.1896682461775,
      "maxDrawdownPct": 39.28377685151086,
      "sharpe": -0.13548904366902784,
      "totalFees": 850.2739218572195,
      "maxConsecWins": 3,
      "maxConsecLosses": 11
    },
    {
      "runSet": "research",
      "strategy": "bollinger-squeeze",
      "name": "Bollinger squeeze breakout",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Close beyond the band after a squeeze; 1.5x ATR; 2R",
      "netPnl": -5139.827332298943,
      "netPnlPct": -51.39827332298943,
      "totalTrades": 505,
      "wins": 160,
      "losses": 345,
      "winRate": 31.683168316831683,
      "profitFactor": 0.799053547440062,
      "grossProfit": 20438.26706459428,
      "grossLoss": 25578.094396893197,
      "avgWin": 127.73916915371426,
      "avgLoss": 74.13940404896579,
      "expectancy": -10.17787590554246,
      "avgRMultiple": -0.1331571955647852,
      "bestTrade": 198.23886761476524,
      "worstTrade": -117.8525843473021,
      "maxDrawdown": 6217.675592543863,
      "maxDrawdownPct": 58.76395713415343,
      "sharpe": -0.10978344550704601,
      "totalFees": 2766.413383983052,
      "maxConsecWins": 5,
      "maxConsecLosses": 15
    },
    {
      "runSet": "research",
      "strategy": "htf-trend-pullback",
      "name": "HTF trend + EMA pullback",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Higher-timeframe trend filter + 20 EMA pullback in trend direction; structure stop; 2R",
      "netPnl": -6913.041304053475,
      "netPnlPct": -69.13041304053476,
      "totalTrades": 582,
      "wins": 190,
      "losses": 392,
      "winRate": 32.64604810996563,
      "profitFactor": 0.7592782327750182,
      "grossProfit": 21804.932079684768,
      "grossLoss": 28717.973383738226,
      "avgWin": 114.76280041939351,
      "avgLoss": 73.26013618300568,
      "expectancy": -11.87807784201628,
      "avgRMultiple": -0.2679812063814513,
      "bestTrade": 188.52109106570927,
      "worstTrade": -165.2120539857963,
      "maxDrawdown": 7025.382789537591,
      "maxDrawdownPct": 70.2538278953759,
      "sharpe": -0.06509530164662938,
      "totalFees": 7745.608559871728,
      "maxConsecWins": 6,
      "maxConsecLosses": 12
    },
    {
      "runSet": "social",
      "strategy": "rsi-2-reversion",
      "name": "Connors RSI(2) mean reversion",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Long when RSI(2) crosses back above 10 from oversold; short when it crosses below 90; 1.5x ATR stop; 1.5R target",
      "netPnl": -6005.91126337935,
      "netPnlPct": -60.0591126337935,
      "totalTrades": 651,
      "wins": 257,
      "losses": 394,
      "winRate": 39.477726574500764,
      "profitFactor": 0.8060145018757853,
      "grossProfit": 24954.708584263062,
      "grossLoss": 30960.61984764243,
      "avgWin": 97.1000334018018,
      "avgLoss": 78.58025342041226,
      "expectancy": -9.225670143439862,
      "avgRMultiple": -0.1334726998070909,
      "bestTrade": 144.75838006949377,
      "worstTrade": -129.17131489056243,
      "maxDrawdown": 6929.137843172801,
      "maxDrawdownPct": 64.15285755822818,
      "sharpe": -0.12911780275929152,
      "totalFees": 5611.439437264929,
      "maxConsecWins": 6,
      "maxConsecLosses": 19
    },
    {
      "runSet": "social",
      "strategy": "macd-signal-cross",
      "name": "MACD signal-line crossover",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Enter when the MACD line crosses its 9-period signal line (up = long, down = short); 1.5x ATR stop; 2R target",
      "netPnl": -4531.384072451293,
      "netPnlPct": -45.31384072451293,
      "totalTrades": 366,
      "wins": 118,
      "losses": 248,
      "winRate": 32.240437158469945,
      "profitFactor": 0.7976890517531726,
      "grossProfit": 17866.73185611839,
      "grossLoss": 22398.115928569692,
      "avgWin": 151.4129818315118,
      "avgLoss": 90.3149835829423,
      "expectancy": -12.38083079904725,
      "avgRMultiple": -0.15505461728435888,
      "bestTrade": 202.5221310025021,
      "worstTrade": -144.18660565613783,
      "maxDrawdown": 5574.578247994764,
      "maxDrawdownPct": 51.51766875376861,
      "sharpe": -0.1172334337096477,
      "totalFees": 3766.503010014679,
      "maxConsecWins": 4,
      "maxConsecLosses": 18
    },
    {
      "runSet": "social",
      "strategy": "engulfing-reversal",
      "name": "Bullish/bearish engulfing reversal",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Enter on a bullish (long) or bearish (short) engulfing candle; 1.5x ATR stop; 1.5R target",
      "netPnl": -3550.397160718637,
      "netPnlPct": -35.50397160718637,
      "totalTrades": 335,
      "wins": 134,
      "losses": 201,
      "winRate": 40,
      "profitFactor": 0.8113869798593067,
      "grossProfit": 15273.314787005202,
      "grossLoss": 18823.71194772385,
      "avgWin": 113.97996109705375,
      "avgLoss": 93.65030819763109,
      "expectancy": -10.598200479757127,
      "avgRMultiple": -0.12337165942269789,
      "bestTrade": 139.79197174250473,
      "worstTrade": -122.27998163986229,
      "maxDrawdown": 3764.094764264104,
      "maxDrawdownPct": 37.15488771773465,
      "sharpe": -0.07586057636501406,
      "totalFees": 3519.826632110679,
      "maxConsecWins": 6,
      "maxConsecLosses": 16
    },
    {
      "runSet": "social",
      "strategy": "pin-bar-reversal",
      "name": "Pin bar (hammer / shooting star) reversal",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Enter on a pin bar with a wick at least 2x the body (hammer = long, shooting star = short); 1.5x ATR stop; 1.5R target",
      "netPnl": -6468.078647914068,
      "netPnlPct": -64.68078647914068,
      "totalTrades": 585,
      "wins": 223,
      "losses": 362,
      "winRate": 38.11965811965812,
      "profitFactor": 0.7196482810267346,
      "grossProfit": 16603.2214732415,
      "grossLoss": 23071.30012115557,
      "avgWin": 74.45390795175561,
      "avgLoss": 63.73287326286069,
      "expectancy": -11.056544697289006,
      "avgRMultiple": -0.1703893516387683,
      "bestTrade": 140.33440906980198,
      "worstTrade": -122.40670036875666,
      "maxDrawdown": 7005.328708214887,
      "maxDrawdownPct": 68.8774433603042,
      "sharpe": -0.10154168011323464,
      "totalFees": 4137.670693998681,
      "maxConsecWins": 8,
      "maxConsecLosses": 11
    },
    {
      "runSet": "social",
      "strategy": "inside-bar-breakout",
      "name": "Inside-bar breakout",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Enter on a break of the inside-bar range (above = long, below = short); structure stop; 2R target",
      "netPnl": -71.14591558896237,
      "netPnlPct": -0.7114591558896236,
      "totalTrades": 140,
      "wins": 45,
      "losses": 95,
      "winRate": 32.142857142857146,
      "profitFactor": 0.9919962032448776,
      "grossProfit": 8817.87485363941,
      "grossLoss": 8889.020769228377,
      "avgWin": 195.95277452532022,
      "avgLoss": 93.56863967608817,
      "expectancy": -0.5081851113497312,
      "avgRMultiple": -0.11348622133036557,
      "bestTrade": 211.1879179472259,
      "worstTrade": -154.06088342990404,
      "maxDrawdown": 1207.2559349079584,
      "maxDrawdownPct": 10.91929599540589,
      "sharpe": -0.030649506640058465,
      "totalFees": 1708.2355408510198,
      "maxConsecWins": 3,
      "maxConsecLosses": 10
    },
    {
      "runSet": "social",
      "strategy": "volume-spike-breakout",
      "name": "Volume-spike breakout",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Break of the 20-bar high/low confirmed by volume >= 2x the 20-bar average; 1.5x ATR stop; 2R target",
      "netPnl": -9703.158257280247,
      "netPnlPct": -97.03158257280248,
      "totalTrades": 1113,
      "wins": 370,
      "losses": 743,
      "winRate": 33.24348607367475,
      "profitFactor": 0.6343635862742728,
      "grossProfit": 16834.565812398396,
      "grossLoss": 26537.724069678585,
      "avgWin": 45.49882651999567,
      "avgLoss": 35.71699067251492,
      "expectancy": -8.71802179450157,
      "avgRMultiple": -0.3085136447128614,
      "bestTrade": 163.20994839932385,
      "worstTrade": -152.3634275645188,
      "maxDrawdown": 9713.104207626862,
      "maxDrawdownPct": 97.03453201253812,
      "sharpe": -0.13919845793395705,
      "totalFees": 10178.348626847923,
      "maxConsecWins": 5,
      "maxConsecLosses": 12
    },
    {
      "runSet": "social",
      "strategy": "three-bar-reversion",
      "name": "Three-bar mean reversion",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Buy after 3 consecutive red candles, sell short after 3 green; 1.5x ATR stop; 1.5R target",
      "netPnl": -6050.258987023081,
      "netPnlPct": -60.502589870230814,
      "totalTrades": 608,
      "wins": 238,
      "losses": 370,
      "winRate": 39.14473684210527,
      "profitFactor": 0.7747891563427928,
      "grossProfit": 20814.60634882275,
      "grossLoss": 26864.865335845854,
      "avgWin": 87.45632919673423,
      "avgLoss": 72.60774415093474,
      "expectancy": -9.95108386023533,
      "avgRMultiple": -0.14524546359867804,
      "bestTrade": 140.0033203080752,
      "worstTrade": -141.04093712951828,
      "maxDrawdown": 6289.54945510122,
      "maxDrawdownPct": 62.24173318152737,
      "sharpe": -0.10760675043581562,
      "totalFees": 4919.740436097469,
      "maxConsecWins": 7,
      "maxConsecLosses": 12
    },
    {
      "runSet": "social",
      "strategy": "ema-200-pullback",
      "name": "200 EMA bounce (trend + pullback)",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "In the direction of the 200 EMA, enter when price pulls back and touches the 200 EMA; 1.5x ATR stop; 2R target",
      "netPnl": -3456.2388958969377,
      "netPnlPct": -34.56238895896938,
      "totalTrades": 175,
      "wins": 52,
      "losses": 123,
      "winRate": 29.714285714285715,
      "profitFactor": 0.6917241943298806,
      "grossProfit": 7755.276352222814,
      "grossLoss": 11211.515248119762,
      "avgWin": 149.13992985043873,
      "avgLoss": 91.15053047251838,
      "expectancy": -19.7499365479825,
      "avgRMultiple": -0.23270207824548736,
      "bestTrade": 194.10245245495818,
      "worstTrade": -124.35567199360185,
      "maxDrawdown": 3877.741747451184,
      "maxDrawdownPct": 37.68389266293033,
      "sharpe": -0.17821175875280387,
      "totalFees": 1772.6091510456995,
      "maxConsecWins": 4,
      "maxConsecLosses": 9
    },
    {
      "runSet": "social",
      "strategy": "bollinger-bounce",
      "name": "Bollinger band bounce",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Fade a touch of the lower band (long) or upper band (short), 20-period / 2 SD; 1.5x ATR stop; 1.5R target",
      "netPnl": -7025.545920424192,
      "netPnlPct": -70.25545920424192,
      "totalTrades": 773,
      "wins": 305,
      "losses": 468,
      "winRate": 39.45666235446313,
      "profitFactor": 0.7876153045089432,
      "grossProfit": 26053.795809827927,
      "grossLoss": 33079.341730252134,
      "avgWin": 85.42228134369812,
      "avgLoss": 70.68235412447036,
      "expectancy": -9.088675188129615,
      "avgRMultiple": -0.14926697941315825,
      "bestTrade": 143.36734968899222,
      "worstTrade": -127.9959729163126,
      "maxDrawdown": 7947.561015656787,
      "maxDrawdownPct": 73.30898385213838,
      "sharpe": -0.0921948208908376,
      "totalFees": 6777.101840228547,
      "maxConsecWins": 6,
      "maxConsecLosses": 11
    },
    {
      "runSet": "social",
      "strategy": "vwap-bounce",
      "name": "VWAP bounce",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "5m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 105120,
      "codedRules": "Fade a touch of the day-anchored VWAP back toward the mean; flat at session end; 1.5x ATR stop; 1.5R target",
      "netPnl": -9999.999994743555,
      "netPnlPct": -99.99999994743555,
      "totalTrades": 3703,
      "wins": 1425,
      "losses": 2278,
      "winRate": 38.48231163921145,
      "profitFactor": 0.3263181765872947,
      "grossProfit": 4843.802594564904,
      "grossLoss": 14843.802589308474,
      "avgWin": 3.399159715484143,
      "avgLoss": 6.516155658168777,
      "expectancy": -2.700513096069013,
      "avgRMultiple": -0.6558642072648753,
      "bestTrade": 99.05889813267328,
      "worstTrade": -182.60074683978974,
      "maxDrawdown": 10068.918997959558,
      "maxDrawdownPct": 99.9999999487738,
      "sharpe": -0.2885322814807853,
      "totalFees": 10532.295364957086,
      "maxConsecWins": 9,
      "maxConsecLosses": 28
    },
    {
      "runSet": "social",
      "strategy": "ema-8-21-cross",
      "name": "8/21 EMA crossover",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Enter when the 8 EMA crosses the 21 EMA (up = long, down = short); 1.5x ATR stop; 2R target",
      "netPnl": -9659.804747315571,
      "netPnlPct": -96.59804747315572,
      "totalTrades": 1059,
      "wins": 353,
      "losses": 706,
      "winRate": 33.33333333333333,
      "profitFactor": 0.5978274726870209,
      "grossProfit": 14359.251979048277,
      "grossLoss": 24019.05672636383,
      "avgWin": 40.67776764602911,
      "avgLoss": 34.021326807880776,
      "expectancy": -9.1216286565775,
      "avgRMultiple": -0.30996749060933276,
      "bestTrade": 185.2608766932457,
      "worstTrade": -176.07908877611533,
      "maxDrawdown": 10356.210602230178,
      "maxDrawdownPct": 96.8625976558673,
      "sharpe": -0.16035386455297254,
      "totalFees": 9243.936090082896,
      "maxConsecWins": 7,
      "maxConsecLosses": 11
    },
    {
      "runSet": "social",
      "strategy": "break-of-structure",
      "name": "Break of structure (BOS)",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Enter on a confirmed break of the most recent swing high (long) or swing low (short); structure stop; 2R target",
      "netPnl": -2941.2802804289972,
      "netPnlPct": -29.412802804289974,
      "totalTrades": 168,
      "wins": 51,
      "losses": 117,
      "winRate": 30.357142857142854,
      "profitFactor": 0.7526912118069431,
      "grossProfit": 8951.86877391413,
      "grossLoss": 11893.14905434313,
      "avgWin": 175.5268387041986,
      "avgLoss": 101.65084661831735,
      "expectancy": -17.50762071683927,
      "avgRMultiple": -0.1976614350666828,
      "bestTrade": 215.338799619492,
      "worstTrade": -182.7010776268134,
      "maxDrawdown": 4259.537947855812,
      "maxDrawdownPct": 38.271491626198554,
      "sharpe": 0.00435906207495999,
      "totalFees": 1570.6125388283267,
      "maxConsecWins": 4,
      "maxConsecLosses": 13
    },
    {
      "runSet": "social",
      "strategy": "rsi-2-reversion",
      "name": "Connors RSI(2) mean reversion",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Long when RSI(2) crosses back above 10 from oversold; short when it crosses below 90; 1.5x ATR stop; 1.5R target",
      "netPnl": -3898.376057583804,
      "netPnlPct": -38.98376057583804,
      "totalTrades": 637,
      "wins": 256,
      "losses": 381,
      "winRate": 40.1883830455259,
      "profitFactor": 0.8556679891762433,
      "grossProfit": 23111.40531616938,
      "grossLoss": 27009.781373753234,
      "avgWin": 90.27892701628664,
      "avgLoss": 70.89181462927358,
      "expectancy": -6.119899619440822,
      "avgRMultiple": -0.0700460837098644,
      "bestTrade": 146.91044697719764,
      "worstTrade": -119.2534489227486,
      "maxDrawdown": 5143.440384047415,
      "maxDrawdownPct": 49.728891198997374,
      "sharpe": -0.05601156841526362,
      "totalFees": 3061.8675739023447,
      "maxConsecWins": 5,
      "maxConsecLosses": 10
    },
    {
      "runSet": "social",
      "strategy": "macd-signal-cross",
      "name": "MACD signal-line crossover",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Enter when the MACD line crosses its 9-period signal line (up = long, down = short); 1.5x ATR stop; 2R target",
      "netPnl": -6498.399920496757,
      "netPnlPct": -64.98399920496757,
      "totalTrades": 352,
      "wins": 93,
      "losses": 259,
      "winRate": 26.420454545454547,
      "profitFactor": 0.6033636380173245,
      "grossProfit": 9885.372580877198,
      "grossLoss": 16383.772501373967,
      "avgWin": 106.29432882663653,
      "avgLoss": 63.25780888561378,
      "expectancy": -18.46136341050215,
      "avgRMultiple": -0.2890864505133151,
      "bestTrade": 194.68044120332743,
      "worstTrade": -109.83305193095245,
      "maxDrawdown": 6935.014465424209,
      "maxDrawdownPct": 68.044735469526,
      "sharpe": -0.22061408348831513,
      "totalFees": 1510.9458324769296,
      "maxConsecWins": 4,
      "maxConsecLosses": 16
    },
    {
      "runSet": "social",
      "strategy": "engulfing-reversal",
      "name": "Bullish/bearish engulfing reversal",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Enter on a bullish (long) or bearish (short) engulfing candle; 1.5x ATR stop; 1.5R target",
      "netPnl": 1903.638508543462,
      "netPnlPct": 19.03638508543462,
      "totalTrades": 306,
      "wins": 140,
      "losses": 166,
      "winRate": 45.751633986928105,
      "profitFactor": 1.1083219727563849,
      "grossProfit": 19477.529198521228,
      "grossLoss": 17573.89068997777,
      "avgWin": 139.1252085608659,
      "avgLoss": 105.86681138540824,
      "expectancy": 6.221040877593013,
      "avgRMultiple": 0.06468836016513144,
      "bestTrade": 179.89742231501793,
      "worstTrade": -153.19081417391703,
      "maxDrawdown": 1816.5754294963644,
      "maxDrawdownPct": 17.851081996852503,
      "sharpe": 0.05231381936747646,
      "totalFees": 2350.5757620928107,
      "maxConsecWins": 6,
      "maxConsecLosses": 9
    },
    {
      "runSet": "social",
      "strategy": "pin-bar-reversal",
      "name": "Pin bar (hammer / shooting star) reversal",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Enter on a pin bar with a wick at least 2x the body (hammer = long, shooting star = short); 1.5x ATR stop; 1.5R target",
      "netPnl": -4930.704763334237,
      "netPnlPct": -49.30704763334237,
      "totalTrades": 585,
      "wins": 226,
      "losses": 359,
      "winRate": 38.63247863247864,
      "profitFactor": 0.8455556984295505,
      "grossProfit": 26994.751295561655,
      "grossLoss": 31925.45605889591,
      "avgWin": 119.44580219275069,
      "avgLoss": 88.92884696071285,
      "expectancy": -8.428555150998696,
      "avgRMultiple": -0.10870456246448619,
      "bestTrade": 160.81887349320124,
      "worstTrade": -128.62895047737797,
      "maxDrawdown": 6565.326146515886,
      "maxDrawdownPct": 57.72301078688081,
      "sharpe": -0.08170800341953927,
      "totalFees": 3488.6200612947273,
      "maxConsecWins": 6,
      "maxConsecLosses": 13
    },
    {
      "runSet": "social",
      "strategy": "inside-bar-breakout",
      "name": "Inside-bar breakout",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Enter on a break of the inside-bar range (above = long, below = short); structure stop; 2R target",
      "netPnl": -815.3095208615647,
      "netPnlPct": -8.153095208615648,
      "totalTrades": 105,
      "wins": 30,
      "losses": 75,
      "winRate": 28.57142857142857,
      "profitFactor": 0.8750273033350404,
      "grossProfit": 5708.591640104322,
      "grossLoss": 6523.90116096589,
      "avgWin": 190.2863880034774,
      "avgLoss": 86.98534881287854,
      "expectancy": -7.764852579633949,
      "avgRMultiple": -0.18882861998595427,
      "bestTrade": 207.64380872612472,
      "worstTrade": -135.6460451977382,
      "maxDrawdown": 1578.917828566442,
      "maxDrawdownPct": 14.867139749196037,
      "sharpe": 0.003114882991262288,
      "totalFees": 613.5251546518803,
      "maxConsecWins": 3,
      "maxConsecLosses": 8
    },
    {
      "runSet": "social",
      "strategy": "volume-spike-breakout",
      "name": "Volume-spike breakout",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Break of the 20-bar high/low confirmed by volume >= 2x the 20-bar average; 1.5x ATR stop; 2R target",
      "netPnl": -7555.424246346744,
      "netPnlPct": -75.55424246346745,
      "totalTrades": 1150,
      "wins": 410,
      "losses": 740,
      "winRate": 35.65217391304348,
      "profitFactor": 0.8549395597277667,
      "grossProfit": 44529.239443957376,
      "grossLoss": 52084.66369030409,
      "avgWin": 108.60790108282286,
      "avgLoss": 70.3846806625731,
      "expectancy": -6.569934127258039,
      "avgRMultiple": -0.11207228102060257,
      "bestTrade": 183.9758647834507,
      "worstTrade": -124.25035048554281,
      "maxDrawdown": 7758.882285796621,
      "maxDrawdownPct": 76.12457859378753,
      "sharpe": -0.046770504911873276,
      "totalFees": 11972.691552888418,
      "maxConsecWins": 5,
      "maxConsecLosses": 12
    },
    {
      "runSet": "social",
      "strategy": "three-bar-reversion",
      "name": "Three-bar mean reversion",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Buy after 3 consecutive red candles, sell short after 3 green; 1.5x ATR stop; 1.5R target",
      "netPnl": -3158.8929768576804,
      "netPnlPct": -31.588929768576808,
      "totalTrades": 620,
      "wins": 254,
      "losses": 366,
      "winRate": 40.96774193548387,
      "profitFactor": 0.9103694730849374,
      "grossProfit": 32084.601461718365,
      "grossLoss": 35243.49443857601,
      "avgWin": 126.31732858944238,
      "avgLoss": 96.29370065184702,
      "expectancy": -5.094988672351097,
      "avgRMultiple": -0.05368658364129343,
      "bestTrade": 163.08479720210136,
      "worstTrade": -139.12783906037794,
      "maxDrawdown": 5198.649048255628,
      "maxDrawdownPct": 43.99254677846713,
      "sharpe": -0.03337232759032728,
      "totalFees": 4188.444383136011,
      "maxConsecWins": 6,
      "maxConsecLosses": 11
    },
    {
      "runSet": "social",
      "strategy": "ema-200-pullback",
      "name": "200 EMA bounce (trend + pullback)",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "In the direction of the 200 EMA, enter when price pulls back and touches the 200 EMA; 1.5x ATR stop; 2R target",
      "netPnl": -1470.5868317869206,
      "netPnlPct": -14.705868317869205,
      "totalTrades": 188,
      "wins": 63,
      "losses": 125,
      "winRate": 33.51063829787234,
      "profitFactor": 0.8749655767132328,
      "grossProfit": 10290.868878806585,
      "grossLoss": 11761.455710593496,
      "avgWin": 163.34712506042197,
      "avgLoss": 94.09164568474797,
      "expectancy": -7.822270381845322,
      "avgRMultiple": -0.07463901447216968,
      "bestTrade": 198.54938960691783,
      "worstTrade": -115.70658834944756,
      "maxDrawdown": 3236.6481907728803,
      "maxDrawdownPct": 30.81339572095913,
      "sharpe": -0.0719809828363988,
      "totalFees": 1296.153347969173,
      "maxConsecWins": 3,
      "maxConsecLosses": 8
    },
    {
      "runSet": "social",
      "strategy": "bollinger-bounce",
      "name": "Bollinger band bounce",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Fade a touch of the lower band (long) or upper band (short), 20-period / 2 SD; 1.5x ATR stop; 1.5R target",
      "netPnl": -7126.714422748423,
      "netPnlPct": -71.26714422748424,
      "totalTrades": 746,
      "wins": 274,
      "losses": 472,
      "winRate": 36.72922252010724,
      "profitFactor": 0.7319882174579672,
      "grossProfit": 19464.334504851475,
      "grossLoss": 26591.048927599946,
      "avgWin": 71.03771717099079,
      "avgLoss": 56.33696806694904,
      "expectancy": -9.55323649161987,
      "avgRMultiple": -0.15979588915488485,
      "bestTrade": 140.6207500834702,
      "worstTrade": -112.79880865770485,
      "maxDrawdown": 7502.768236467963,
      "maxDrawdownPct": 73.9886274928615,
      "sharpe": -0.12231108167060654,
      "totalFees": 2930.1841093263847,
      "maxConsecWins": 5,
      "maxConsecLosses": 14
    },
    {
      "runSet": "social",
      "strategy": "vwap-bounce",
      "name": "VWAP bounce",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "5m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 105120,
      "codedRules": "Fade a touch of the day-anchored VWAP back toward the mean; flat at session end; 1.5x ATR stop; 1.5R target",
      "netPnl": -9999.985901656533,
      "netPnlPct": -99.99985901656532,
      "totalTrades": 3653,
      "wins": 1484,
      "losses": 2169,
      "winRate": 40.62414453873529,
      "profitFactor": 0.6682741986086966,
      "grossProfit": 20145.350577191974,
      "grossLoss": 30145.336478848476,
      "avgWin": 13.57503408166575,
      "avgLoss": 13.898264858851302,
      "expectancy": -2.7374721876968335,
      "avgRMultiple": -0.37058490936223204,
      "bestTrade": 134.65545334575575,
      "worstTrade": -171.86329132945974,
      "maxDrawdown": 10431.809266172953,
      "maxDrawdownPct": 99.99986485254792,
      "sharpe": -0.17525078999650237,
      "totalFees": 13476.238316867848,
      "maxConsecWins": 9,
      "maxConsecLosses": 15
    },
    {
      "runSet": "social",
      "strategy": "ema-8-21-cross",
      "name": "8/21 EMA crossover",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Enter when the 8 EMA crosses the 21 EMA (up = long, down = short); 1.5x ATR stop; 2R target",
      "netPnl": -8774.765823661906,
      "netPnlPct": -87.74765823661906,
      "totalTrades": 1091,
      "wins": 367,
      "losses": 724,
      "winRate": 33.638863428047664,
      "profitFactor": 0.7783622871476409,
      "grossProfit": 30815.815177808585,
      "grossLoss": 39590.581001470586,
      "avgWin": 83.96679884961468,
      "avgLoss": 54.68312293020799,
      "expectancy": -8.042865099598448,
      "avgRMultiple": -0.18219097387605482,
      "bestTrade": 185.81741572998615,
      "worstTrade": -122.70714686707902,
      "maxDrawdown": 9239.737755987917,
      "maxDrawdownPct": 88.67498224304978,
      "sharpe": -0.089774504061151,
      "totalFees": 9173.165682405175,
      "maxConsecWins": 6,
      "maxConsecLosses": 15
    },
    {
      "runSet": "social",
      "strategy": "break-of-structure",
      "name": "Break of structure (BOS)",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Enter on a confirmed break of the most recent swing high (long) or swing low (short); structure stop; 2R target",
      "netPnl": 2454.157590621619,
      "netPnlPct": 24.54157590621619,
      "totalTrades": 99,
      "wins": 42,
      "losses": 57,
      "winRate": 42.42424242424242,
      "profitFactor": 1.3437282474286691,
      "grossProfit": 9593.976936225175,
      "grossLoss": 7139.819345603557,
      "avgWin": 228.4280222910756,
      "avgLoss": 125.25998851936065,
      "expectancy": 24.789470612339585,
      "avgRMultiple": 0.23278557138706107,
      "bestTrade": 271.3935098302611,
      "worstTrade": -144.2982728041638,
      "maxDrawdown": 1730.981362864528,
      "maxDrawdownPct": 12.484759922741057,
      "sharpe": 0.15497140945184637,
      "totalFees": 554.5181140983298,
      "maxConsecWins": 6,
      "maxConsecLosses": 8
    },
    {
      "runSet": "social",
      "strategy": "rsi-2-reversion",
      "name": "Connors RSI(2) mean reversion",
      "market": "Gold (PAXG)",
      "symbol": "PAXGUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Long when RSI(2) crosses back above 10 from oversold; short when it crosses below 90; 1.5x ATR stop; 1.5R target",
      "netPnl": -8302.24092259225,
      "netPnlPct": -83.02240922592249,
      "totalTrades": 590,
      "wins": 225,
      "losses": 365,
      "winRate": 38.13559322033898,
      "profitFactor": 0.5638031035372622,
      "grossProfit": 10731.00069356279,
      "grossLoss": 19033.241616155046,
      "avgWin": 47.69333641583462,
      "avgLoss": 52.14586744152067,
      "expectancy": -14.07159478405466,
      "avgRMultiple": -0.2924529729688665,
      "bestTrade": 123.94943026425983,
      "worstTrade": -156.64265991203376,
      "maxDrawdown": 8330.633737879278,
      "maxDrawdownPct": 83.30633737879279,
      "sharpe": -0.1287638429717819,
      "totalFees": 6514.154213156217,
      "maxConsecWins": 5,
      "maxConsecLosses": 12
    },
    {
      "runSet": "social",
      "strategy": "macd-signal-cross",
      "name": "MACD signal-line crossover",
      "market": "Gold (PAXG)",
      "symbol": "PAXGUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Enter when the MACD line crosses its 9-period signal line (up = long, down = short); 1.5x ATR stop; 2R target",
      "netPnl": -5900.633456153256,
      "netPnlPct": -59.00633456153256,
      "totalTrades": 335,
      "wins": 110,
      "losses": 225,
      "winRate": 32.83582089552239,
      "profitFactor": 0.637431322261354,
      "grossProfit": 10373.89277417564,
      "grossLoss": 16274.5262303289,
      "avgWin": 94.30811612886946,
      "avgLoss": 72.33122769035067,
      "expectancy": -17.613831212397777,
      "avgRMultiple": -0.2581463638553587,
      "bestTrade": 177.04228153679392,
      "worstTrade": -131.46959036144347,
      "maxDrawdown": 6147.942539401995,
      "maxDrawdownPct": 60.42065279206701,
      "sharpe": -0.07994317089723772,
      "totalFees": 4826.8683804272605,
      "maxConsecWins": 4,
      "maxConsecLosses": 10
    },
    {
      "runSet": "social",
      "strategy": "engulfing-reversal",
      "name": "Bullish/bearish engulfing reversal",
      "market": "Gold (PAXG)",
      "symbol": "PAXGUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Enter on a bullish (long) or bearish (short) engulfing candle; 1.5x ATR stop; 1.5R target",
      "netPnl": -6210.719230901711,
      "netPnlPct": -62.10719230901711,
      "totalTrades": 365,
      "wins": 144,
      "losses": 221,
      "winRate": 39.45205479452055,
      "profitFactor": 0.6452762557984476,
      "grossProfit": 11297.889460860419,
      "grossLoss": 17508.60869176212,
      "avgWin": 78.45756570041958,
      "avgLoss": 79.22447371838064,
      "expectancy": -17.015669125758112,
      "avgRMultiple": -0.2631185443934226,
      "bestTrade": 122.91405190069827,
      "worstTrade": -156.09418857485855,
      "maxDrawdown": 6298.949902917466,
      "maxDrawdownPct": 62.98949902917465,
      "sharpe": -0.143210389653785,
      "totalFees": 5877.683864823553,
      "maxConsecWins": 9,
      "maxConsecLosses": 9
    },
    {
      "runSet": "social",
      "strategy": "pin-bar-reversal",
      "name": "Pin bar (hammer / shooting star) reversal",
      "market": "Gold (PAXG)",
      "symbol": "PAXGUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Enter on a pin bar with a wick at least 2x the body (hammer = long, shooting star = short); 1.5x ATR stop; 1.5R target",
      "netPnl": -5864.882891942617,
      "netPnlPct": -58.648828919426165,
      "totalTrades": 512,
      "wins": 219,
      "losses": 293,
      "winRate": 42.7734375,
      "profitFactor": 0.7538325217144058,
      "grossProfit": 17959.884428208436,
      "grossLoss": 23824.76732015105,
      "avgWin": 82.00860469501569,
      "avgLoss": 81.31319904488413,
      "expectancy": -11.454849398325424,
      "avgRMultiple": -0.16543186065146084,
      "bestTrade": 130.4998872031638,
      "worstTrade": -163.41458408628998,
      "maxDrawdown": 6153.158604461104,
      "maxDrawdownPct": 61.53158604461104,
      "sharpe": -0.05221232368357146,
      "totalFees": 8253.411039181567,
      "maxConsecWins": 8,
      "maxConsecLosses": 10
    },
    {
      "runSet": "social",
      "strategy": "inside-bar-breakout",
      "name": "Inside-bar breakout",
      "market": "Gold (PAXG)",
      "symbol": "PAXGUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Enter on a break of the inside-bar range (above = long, below = short); structure stop; 2R target",
      "netPnl": 3666.1251586487697,
      "netPnlPct": 36.661251586487694,
      "totalTrades": 100,
      "wins": 45,
      "losses": 55,
      "winRate": 45,
      "profitFactor": 1.6592659445886473,
      "grossProfit": 9227.045131447105,
      "grossLoss": 5560.919972798335,
      "avgWin": 205.0454473654912,
      "avgLoss": 101.10763586906064,
      "expectancy": 36.661251586487694,
      "avgRMultiple": 0.29778890969630367,
      "bestTrade": 259.19479342516854,
      "worstTrade": -200.3577363822153,
      "maxDrawdown": 807.5539627715534,
      "maxDrawdownPct": 7.785694795442498,
      "sharpe": 0.2557426448706624,
      "totalFees": 1851.2587053911607,
      "maxConsecWins": 3,
      "maxConsecLosses": 5
    },
    {
      "runSet": "social",
      "strategy": "volume-spike-breakout",
      "name": "Volume-spike breakout",
      "market": "Gold (PAXG)",
      "symbol": "PAXGUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Break of the 20-bar high/low confirmed by volume >= 2x the 20-bar average; 1.5x ATR stop; 2R target",
      "netPnl": -9976.826084416953,
      "netPnlPct": -99.76826084416953,
      "totalTrades": 1064,
      "wins": 330,
      "losses": 734,
      "winRate": 31.015037593984964,
      "profitFactor": 0.32735244913472455,
      "grossProfit": 4855.34876195398,
      "grossLoss": 14832.174846370928,
      "avgWin": 14.713178066527213,
      "avgLoss": 20.207322678979466,
      "expectancy": -9.376716244752775,
      "avgRMultiple": -0.9911677640947174,
      "bestTrade": 149.3715935170345,
      "worstTrade": -187.0976600328374,
      "maxDrawdown": 9976.826084416982,
      "maxDrawdownPct": 99.76826084416982,
      "sharpe": -0.20355920859750004,
      "totalFees": 9094.562406871182,
      "maxConsecWins": 8,
      "maxConsecLosses": 15
    },
    {
      "runSet": "social",
      "strategy": "three-bar-reversion",
      "name": "Three-bar mean reversion",
      "market": "Gold (PAXG)",
      "symbol": "PAXGUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Buy after 3 consecutive red candles, sell short after 3 green; 1.5x ATR stop; 1.5R target",
      "netPnl": -8227.762343190903,
      "netPnlPct": -82.27762343190903,
      "totalTrades": 558,
      "wins": 211,
      "losses": 347,
      "winRate": 37.81362007168459,
      "profitFactor": 0.5790178334747519,
      "grossProfit": 11316.44403282298,
      "grossLoss": 19544.206376013863,
      "avgWin": 53.63243617451649,
      "avgLoss": 56.32336131416099,
      "expectancy": -14.745093805001618,
      "avgRMultiple": -0.3028135865935827,
      "bestTrade": 134.9090205707359,
      "worstTrade": -174.53268233184647,
      "maxDrawdown": 8510.662866220373,
      "maxDrawdownPct": 82.81771927535306,
      "sharpe": -0.14901797010445345,
      "totalFees": 6671.617426948433,
      "maxConsecWins": 7,
      "maxConsecLosses": 11
    },
    {
      "runSet": "social",
      "strategy": "ema-200-pullback",
      "name": "200 EMA bounce (trend + pullback)",
      "market": "Gold (PAXG)",
      "symbol": "PAXGUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "In the direction of the 200 EMA, enter when price pulls back and touches the 200 EMA; 1.5x ATR stop; 2R target",
      "netPnl": -2030.703328913392,
      "netPnlPct": -20.30703328913392,
      "totalTrades": 126,
      "wins": 45,
      "losses": 81,
      "winRate": 35.714285714285715,
      "profitFactor": 0.7688714175619797,
      "grossProfit": 6755.329568847966,
      "grossLoss": 8786.03289776136,
      "avgWin": 150.11843486328812,
      "avgLoss": 108.46954194767112,
      "expectancy": -16.116693086614223,
      "avgRMultiple": -0.16950135466117916,
      "bestTrade": 177.05770440303039,
      "worstTrade": -152.56732012019123,
      "maxDrawdown": 2156.045306041123,
      "maxDrawdownPct": 21.560453060411227,
      "sharpe": -0.021464257917492246,
      "totalFees": 2763.4305255855525,
      "maxConsecWins": 5,
      "maxConsecLosses": 10
    },
    {
      "runSet": "social",
      "strategy": "bollinger-bounce",
      "name": "Bollinger band bounce",
      "market": "Gold (PAXG)",
      "symbol": "PAXGUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Fade a touch of the lower band (long) or upper band (short), 20-period / 2 SD; 1.5x ATR stop; 1.5R target",
      "netPnl": -8834.303707929772,
      "netPnlPct": -88.34303707929772,
      "totalTrades": 750,
      "wins": 298,
      "losses": 452,
      "winRate": 39.733333333333334,
      "profitFactor": 0.60819492363436,
      "grossProfit": 13713.397281236139,
      "grossLoss": 22547.7009891659,
      "avgWin": 46.018111682000466,
      "avgLoss": 49.884294223818365,
      "expectancy": -11.779071610573029,
      "avgRMultiple": -0.2786385330554112,
      "bestTrade": 132.82905879543202,
      "worstTrade": -170.91625846206,
      "maxDrawdown": 8854.971110429666,
      "maxDrawdownPct": 88.54971110429666,
      "sharpe": -0.12099248583957598,
      "totalFees": 8835.381491828757,
      "maxConsecWins": 9,
      "maxConsecLosses": 11
    },
    {
      "runSet": "social",
      "strategy": "vwap-bounce",
      "name": "VWAP bounce",
      "market": "Gold (PAXG)",
      "symbol": "PAXGUSDT",
      "timeframe": "5m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 105120,
      "codedRules": "Fade a touch of the day-anchored VWAP back toward the mean; flat at session end; 1.5x ATR stop; 1.5R target",
      "netPnl": -9999.999999999947,
      "netPnlPct": -99.99999999999946,
      "totalTrades": 4030,
      "wins": 927,
      "losses": 3103,
      "winRate": 23.002481389578165,
      "profitFactor": 0.10335077034986742,
      "grossProfit": 1152.6332364127886,
      "grossLoss": 11152.63323641271,
      "avgWin": 1.2434015495283588,
      "avgLoss": 3.594145419404676,
      "expectancy": -2.4813895781637587,
      "avgRMultiple": -2.260576477706447,
      "bestTrade": 66.05503439236708,
      "worstTrade": -174.34954047880206,
      "maxDrawdown": 10000.000000000005,
      "maxDrawdownPct": 100.00000000000004,
      "sharpe": -0.48831675690533877,
      "totalFees": 9884.879852942535,
      "maxConsecWins": 8,
      "maxConsecLosses": 50
    },
    {
      "runSet": "social",
      "strategy": "ema-8-21-cross",
      "name": "8/21 EMA crossover",
      "market": "Gold (PAXG)",
      "symbol": "PAXGUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Enter when the 8 EMA crosses the 21 EMA (up = long, down = short); 1.5x ATR stop; 2R target",
      "netPnl": -9997.365780689071,
      "netPnlPct": -99.97365780689071,
      "totalTrades": 1162,
      "wins": 319,
      "losses": 843,
      "winRate": 27.452667814113596,
      "profitFactor": 0.2843605411751612,
      "grossProfit": 3972.4700876487072,
      "grossLoss": 13969.835868337774,
      "avgWin": 12.452884287300023,
      "avgLoss": 16.571572797553706,
      "expectancy": -8.603585009198857,
      "avgRMultiple": -1.06639486791274,
      "bestTrade": 155.70457570911174,
      "worstTrade": -189.57694198185936,
      "maxDrawdown": 9997.365780689046,
      "maxDrawdownPct": 99.97365780689046,
      "sharpe": -0.23179418357567658,
      "totalFees": 8625.014671210085,
      "maxConsecWins": 5,
      "maxConsecLosses": 26
    },
    {
      "runSet": "social",
      "strategy": "break-of-structure",
      "name": "Break of structure (BOS)",
      "market": "Gold (PAXG)",
      "symbol": "PAXGUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Enter on a confirmed break of the most recent swing high (long) or swing low (short); structure stop; 2R target",
      "netPnl": 2575.5163115211667,
      "netPnlPct": 25.755163115211666,
      "totalTrades": 168,
      "wins": 74,
      "losses": 94,
      "winRate": 44.047619047619044,
      "profitFactor": 1.2314322269139228,
      "grossProfit": 13704.1147174773,
      "grossLoss": 11128.598405956138,
      "avgWin": 185.19073942536892,
      "avgLoss": 118.38934474421423,
      "expectancy": 15.330454235245039,
      "avgRMultiple": 0.14765373913501875,
      "bestTrade": 241.48386310296226,
      "worstTrade": -166.6235040859705,
      "maxDrawdown": 1584.2589572133566,
      "maxDrawdownPct": 14.498109163188177,
      "sharpe": 0.15576824057597652,
      "totalFees": 2852.625945283459,
      "maxConsecWins": 6,
      "maxConsecLosses": 9
    },
    {
      "runSet": "social",
      "strategy": "rsi-2-reversion",
      "name": "Connors RSI(2) mean reversion",
      "market": "EUR",
      "symbol": "EURUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Long when RSI(2) crosses back above 10 from oversold; short when it crosses below 90; 1.5x ATR stop; 1.5R target",
      "netPnl": -9150.86015179924,
      "netPnlPct": -91.50860151799239,
      "totalTrades": 464,
      "wins": 202,
      "losses": 262,
      "winRate": 43.53448275862069,
      "profitFactor": 0.43248811488570477,
      "grossProfit": 6973.665856949069,
      "grossLoss": 16124.5260087483,
      "avgWin": 34.52309830172806,
      "avgLoss": 61.543992399802676,
      "expectancy": -19.721681361636293,
      "avgRMultiple": -0.552915623661629,
      "bestTrade": 100.8431674823398,
      "worstTrade": -189.46523896920823,
      "maxDrawdown": 9155.537052910418,
      "maxDrawdownPct": 91.55537052910418,
      "sharpe": -0.250061535583138,
      "totalFees": 10641.42811891009,
      "maxConsecWins": 7,
      "maxConsecLosses": 8
    },
    {
      "runSet": "social",
      "strategy": "macd-signal-cross",
      "name": "MACD signal-line crossover",
      "market": "EUR",
      "symbol": "EURUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Enter when the MACD line crosses its 9-period signal line (up = long, down = short); 1.5x ATR stop; 2R target",
      "netPnl": -7297.659625541624,
      "netPnlPct": -72.97659625541625,
      "totalTrades": 238,
      "wins": 87,
      "losses": 151,
      "winRate": 36.554621848739494,
      "profitFactor": 0.48305867370172473,
      "grossProfit": 6819.338289480701,
      "grossLoss": 14116.997915022332,
      "avgWin": 78.38319872966323,
      "avgLoss": 93.49005241736643,
      "expectancy": -30.662435401435395,
      "avgRMultiple": -0.5827177978182896,
      "bestTrade": 167.2194510535183,
      "worstTrade": -173.39543646538692,
      "maxDrawdown": 7748.481405992738,
      "maxDrawdownPct": 74.36714777922444,
      "sharpe": -0.18834318508657705,
      "totalFees": 8501.87299785543,
      "maxConsecWins": 5,
      "maxConsecLosses": 9
    },
    {
      "runSet": "social",
      "strategy": "engulfing-reversal",
      "name": "Bullish/bearish engulfing reversal",
      "market": "EUR",
      "symbol": "EURUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Enter on a bullish (long) or bearish (short) engulfing candle; 1.5x ATR stop; 1.5R target",
      "netPnl": -8028.92248361513,
      "netPnlPct": -80.28922483615129,
      "totalTrades": 229,
      "wins": 83,
      "losses": 146,
      "winRate": 36.24454148471616,
      "profitFactor": 0.3064002932652633,
      "grossProfit": 3546.806868135804,
      "grossLoss": 11575.729351750939,
      "avgWin": 42.73261286910607,
      "avgLoss": 79.28581747774615,
      "expectancy": -35.06079687168179,
      "avgRMultiple": -0.7747032409123644,
      "bestTrade": 104.81396540842846,
      "worstTrade": -166.14126061278566,
      "maxDrawdown": 8028.922483615125,
      "maxDrawdownPct": 80.28922483615125,
      "sharpe": -0.48142045903825226,
      "totalFees": 7526.911669999763,
      "maxConsecWins": 5,
      "maxConsecLosses": 10
    },
    {
      "runSet": "social",
      "strategy": "pin-bar-reversal",
      "name": "Pin bar (hammer / shooting star) reversal",
      "market": "EUR",
      "symbol": "EURUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Enter on a pin bar with a wick at least 2x the body (hammer = long, shooting star = short); 1.5x ATR stop; 1.5R target",
      "netPnl": -9334.763486541447,
      "netPnlPct": -93.34763486541448,
      "totalTrades": 436,
      "wins": 171,
      "losses": 265,
      "winRate": 39.22018348623853,
      "profitFactor": 0.36988015307129396,
      "grossProfit": 5479.503247065522,
      "grossLoss": 14814.266733606966,
      "avgWin": 32.043878637810074,
      "avgLoss": 55.90289333436591,
      "expectancy": -21.410007996654695,
      "avgRMultiple": -0.6401734416582334,
      "bestTrade": 97.26286502419455,
      "worstTrade": -188.81310394360278,
      "maxDrawdown": 9336.278222133327,
      "maxDrawdownPct": 93.36278222133328,
      "sharpe": -0.31702774341450213,
      "totalFees": 9167.565640746825,
      "maxConsecWins": 5,
      "maxConsecLosses": 12
    },
    {
      "runSet": "social",
      "strategy": "inside-bar-breakout",
      "name": "Inside-bar breakout",
      "market": "EUR",
      "symbol": "EURUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Enter on a break of the inside-bar range (above = long, below = short); structure stop; 2R target",
      "netPnl": -3266.415505818611,
      "netPnlPct": -32.66415505818611,
      "totalTrades": 53,
      "wins": 11,
      "losses": 42,
      "winRate": 20.754716981132077,
      "profitFactor": 0.280973335526141,
      "grossProfit": 1276.4139429456845,
      "grossLoss": 4542.829448764295,
      "avgWin": 116.03763117688041,
      "avgLoss": 108.16260592295941,
      "expectancy": -61.630481241860586,
      "avgRMultiple": -0.9009609006445424,
      "bestTrade": 167.53269335578298,
      "worstTrade": -179.40869675663873,
      "maxDrawdown": 3393.963935688417,
      "maxDrawdownPct": 33.93963935688417,
      "sharpe": -0.3008103294165702,
      "totalFees": 2172.4826162406866,
      "maxConsecWins": 3,
      "maxConsecLosses": 12
    },
    {
      "runSet": "social",
      "strategy": "volume-spike-breakout",
      "name": "Volume-spike breakout",
      "market": "EUR",
      "symbol": "EURUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Break of the 20-bar high/low confirmed by volume >= 2x the 20-bar average; 1.5x ATR stop; 2R target",
      "netPnl": -9926.632989128217,
      "netPnlPct": -99.26632989128217,
      "totalTrades": 505,
      "wins": 128,
      "losses": 377,
      "winRate": 25.346534653465348,
      "profitFactor": 0.22919836421576528,
      "grossProfit": 2951.690730344158,
      "grossLoss": 12878.323719472373,
      "avgWin": 23.060083830813735,
      "avgLoss": 34.160009865974466,
      "expectancy": -19.656698988372707,
      "avgRMultiple": -1.525520014893458,
      "bestTrade": 132.05936419990954,
      "worstTrade": -197.00514477190117,
      "maxDrawdown": 9979.908701584322,
      "maxDrawdownPct": 99.27021785763937,
      "sharpe": -0.7381295541606459,
      "totalFees": 10533.083829419047,
      "maxConsecWins": 5,
      "maxConsecLosses": 16
    },
    {
      "runSet": "social",
      "strategy": "three-bar-reversion",
      "name": "Three-bar mean reversion",
      "market": "EUR",
      "symbol": "EURUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Buy after 3 consecutive red candles, sell short after 3 green; 1.5x ATR stop; 1.5R target",
      "netPnl": -9604.503571858886,
      "netPnlPct": -96.04503571858885,
      "totalTrades": 441,
      "wins": 157,
      "losses": 284,
      "winRate": 35.600907029478456,
      "profitFactor": 0.34700086495429594,
      "grossProfit": 5103.790905723632,
      "grossLoss": 14708.294477582529,
      "avgWin": 32.508222329449886,
      "avgLoss": 51.78976928726242,
      "expectancy": -21.77891966407911,
      "avgRMultiple": -0.7663637476684645,
      "bestTrade": 102.94359316248094,
      "worstTrade": -170.57505255931503,
      "maxDrawdown": 9604.503571858904,
      "maxDrawdownPct": 96.04503571858905,
      "sharpe": -0.4194854267520674,
      "totalFees": 8865.208297542493,
      "maxConsecWins": 5,
      "maxConsecLosses": 12
    },
    {
      "runSet": "social",
      "strategy": "ema-200-pullback",
      "name": "200 EMA bounce (trend + pullback)",
      "market": "EUR",
      "symbol": "EURUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "In the direction of the 200 EMA, enter when price pulls back and touches the 200 EMA; 1.5x ATR stop; 2R target",
      "netPnl": -6159.200671019551,
      "netPnlPct": -61.59200671019551,
      "totalTrades": 175,
      "wins": 67,
      "losses": 108,
      "winRate": 38.285714285714285,
      "profitFactor": 0.5045003352435533,
      "grossProfit": 6271.08154531048,
      "grossLoss": 12430.282216330032,
      "avgWin": 93.5982320195594,
      "avgLoss": 115.09520570675956,
      "expectancy": -35.195432405826004,
      "avgRMultiple": -0.5858453383953164,
      "bestTrade": 181.85011401124584,
      "worstTrade": -183.74423688224906,
      "maxDrawdown": 6671.954201748271,
      "maxDrawdownPct": 63.785143072722306,
      "sharpe": -0.2454484787767931,
      "totalFees": 8254.142689028387,
      "maxConsecWins": 4,
      "maxConsecLosses": 10
    },
    {
      "runSet": "social",
      "strategy": "bollinger-bounce",
      "name": "Bollinger band bounce",
      "market": "EUR",
      "symbol": "EURUSDT",
      "timeframe": "1h",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 8760,
      "codedRules": "Fade a touch of the lower band (long) or upper band (short), 20-period / 2 SD; 1.5x ATR stop; 1.5R target",
      "netPnl": -9876.344416251039,
      "netPnlPct": -98.76344416251038,
      "totalTrades": 587,
      "wins": 212,
      "losses": 375,
      "winRate": 36.11584327086882,
      "profitFactor": 0.2970868783826514,
      "grossProfit": 4174.246065722524,
      "grossLoss": 14050.590481973577,
      "avgWin": 19.689839932653413,
      "avgLoss": 37.46824128526287,
      "expectancy": -16.82511825596429,
      "avgRMultiple": -0.8299409322088107,
      "bestTrade": 87.70839127254732,
      "worstTrade": -185.78414911637734,
      "maxDrawdown": 9877.08472471115,
      "maxDrawdownPct": 98.7708472471115,
      "sharpe": -0.39788414900612157,
      "totalFees": 8490.384910031848,
      "maxConsecWins": 6,
      "maxConsecLosses": 14
    },
    {
      "runSet": "social",
      "strategy": "vwap-bounce",
      "name": "VWAP bounce",
      "market": "EUR",
      "symbol": "EURUSDT",
      "timeframe": "5m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 105120,
      "codedRules": "Fade a touch of the day-anchored VWAP back toward the mean; flat at session end; 1.5x ATR stop; 1.5R target",
      "netPnl": -9999.999999791415,
      "netPnlPct": -99.99999999791414,
      "totalTrades": 2415,
      "wins": 158,
      "losses": 2257,
      "winRate": 6.542443064182195,
      "profitFactor": 0.01937403888594986,
      "grossProfit": 197.56808053027356,
      "grossLoss": 10197.568080321695,
      "avgWin": 1.2504308894321112,
      "avgLoss": 4.518195870767255,
      "expectancy": -4.140786749396031,
      "avgRMultiple": -2.701813343789461,
      "bestTrade": 46.63646543121312,
      "worstTrade": -139.26448880400847,
      "maxDrawdown": 9999.999999791416,
      "maxDrawdownPct": 99.99999999791417,
      "sharpe": -0.8018523468444186,
      "totalFees": 9866.089757164375,
      "maxConsecWins": 3,
      "maxConsecLosses": 142
    },
    {
      "runSet": "social",
      "strategy": "ema-8-21-cross",
      "name": "8/21 EMA crossover",
      "market": "EUR",
      "symbol": "EURUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Enter when the 8 EMA crosses the 21 EMA (up = long, down = short); 1.5x ATR stop; 2R target",
      "netPnl": -9451.509252682617,
      "netPnlPct": -94.51509252682617,
      "totalTrades": 325,
      "wins": 104,
      "losses": 221,
      "winRate": 32,
      "profitFactor": 0.20633515016945272,
      "grossProfit": 2457.181493418306,
      "grossLoss": 11908.690746100925,
      "avgWin": 23.626745129022176,
      "avgLoss": 53.885478489144454,
      "expectancy": -29.081566931331132,
      "avgRMultiple": -1.2340945554898837,
      "bestTrade": 112.54690439535841,
      "worstTrade": -184.9101951275615,
      "maxDrawdown": 9454.055623175238,
      "maxDrawdownPct": 94.54055623175238,
      "sharpe": -0.5118164220576483,
      "totalFees": 9466.059104631084,
      "maxConsecWins": 6,
      "maxConsecLosses": 14
    },
    {
      "runSet": "social",
      "strategy": "break-of-structure",
      "name": "Break of structure (BOS)",
      "market": "EUR",
      "symbol": "EURUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Enter on a confirmed break of the most recent swing high (long) or swing low (short); structure stop; 2R target",
      "netPnl": -3492.637272428826,
      "netPnlPct": -34.92637272428826,
      "totalTrades": 126,
      "wins": 43,
      "losses": 83,
      "winRate": 34.12698412698413,
      "profitFactor": 0.6179276490405984,
      "grossProfit": 5648.66087086432,
      "grossLoss": 9141.298143293145,
      "avgWin": 131.36420629917023,
      "avgLoss": 110.13612220835114,
      "expectancy": -27.719343431974806,
      "avgRMultiple": -0.5805680648372996,
      "bestTrade": 192.73011884671314,
      "worstTrade": -198.2648073758987,
      "maxDrawdown": 4329.2680643699105,
      "maxDrawdownPct": 40.292588267034354,
      "sharpe": -0.20300396005598095,
      "totalFees": 4217.843210747451,
      "maxConsecWins": 5,
      "maxConsecLosses": 10
    },
    {
      "runSet": "ict",
      "strategy": "liquidity-sweep",
      "name": "Liquidity sweep reversal",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Enter when price sweeps a recent swing high/low then reverses; structure stop; 2R target",
      "netPnl": -9999.998070404235,
      "netPnlPct": -99.99998070404236,
      "totalTrades": 2140,
      "wins": 428,
      "losses": 1712,
      "winRate": 20,
      "profitFactor": 0.21537514737683558,
      "grossProfit": 2744.94371543413,
      "grossLoss": 12744.941785838375,
      "avgWin": 6.413419895874135,
      "avgLoss": 7.444475342195313,
      "expectancy": -4.6728962945814185,
      "avgRMultiple": -19.261493887640395,
      "bestTrade": 168.75875006351148,
      "worstTrade": -186.93687486389788,
      "maxDrawdown": 10078.804401583364,
      "maxDrawdownPct": 99.999980854918,
      "sharpe": -0.258093442915572,
      "totalFees": 9482.783607457566,
      "maxConsecWins": 4,
      "maxConsecLosses": 29
    },
    {
      "runSet": "ict",
      "strategy": "fvg-retrace",
      "name": "Fair value gap retrace",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Enter when price retraces 50% into a fresh fair value gap; structure stop; 2R target",
      "netPnl": -5804.374419608614,
      "netPnlPct": -58.04374419608613,
      "totalTrades": 370,
      "wins": 104,
      "losses": 266,
      "winRate": 28.10810810810811,
      "profitFactor": 0.6796697609265984,
      "grossProfit": 12315.595884782699,
      "grossLoss": 18119.970304391303,
      "avgWin": 118.41919119983365,
      "avgLoss": 68.12018911425302,
      "expectancy": -15.687498431374632,
      "avgRMultiple": -0.40350995341283075,
      "bestTrade": 187.39488274301874,
      "worstTrade": -171.171313145166,
      "maxDrawdown": 5981.7547158895595,
      "maxDrawdownPct": 59.81754715889559,
      "sharpe": 0.012539243667446917,
      "totalFees": 6336.4457720303835,
      "maxConsecWins": 4,
      "maxConsecLosses": 15
    },
    {
      "runSet": "ict",
      "strategy": "displacement-fvg",
      "name": "Displacement into FVG",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Require a displacement candle, then enter on the retrace into the FVG it left; 1.5x ATR stop; 2R target",
      "netPnl": -7109.577369231734,
      "netPnlPct": -71.09577369231734,
      "totalTrades": 294,
      "wins": 93,
      "losses": 201,
      "winRate": 31.63265306122449,
      "profitFactor": 0.5180969296240787,
      "grossProfit": 7643.549984129423,
      "grossLoss": 14753.127353361153,
      "avgWin": 82.18870950676799,
      "avgLoss": 73.39864354906047,
      "expectancy": -24.182235949767804,
      "avgRMultiple": -0.4261587193474279,
      "bestTrade": 163.81985414435178,
      "worstTrade": -153.50165472052004,
      "maxDrawdown": 7132.372469033731,
      "maxDrawdownPct": 71.32372469033731,
      "sharpe": -0.22466427250082813,
      "totalFees": 6032.278903573219,
      "maxConsecWins": 4,
      "maxConsecLosses": 15
    },
    {
      "runSet": "ict",
      "strategy": "silver-bullet",
      "name": "ICT Silver Bullet (NY AM window)",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "5m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 105120,
      "codedRules": "Only between 10:00–11:00 New York time, enter on an FVG retrace; structure stop; 2R target; flat at session end",
      "netPnl": -3228.7055639947257,
      "netPnlPct": -32.28705563994726,
      "totalTrades": 110,
      "wins": 34,
      "losses": 76,
      "winRate": 30.909090909090907,
      "profitFactor": 0.5480787930201564,
      "grossProfit": 3915.693756346822,
      "grossLoss": 7144.399320341549,
      "avgWin": 115.16746342196535,
      "avgLoss": 94.00525421502039,
      "expectancy": -29.351868763588417,
      "avgRMultiple": -0.8955931880222844,
      "bestTrade": 163.6225653879885,
      "worstTrade": -167.78926065766603,
      "maxDrawdown": 3450.6331037781656,
      "maxDrawdownPct": 34.506331037781656,
      "sharpe": -0.02058358657632854,
      "totalFees": 3711.3096861624194,
      "maxConsecWins": 3,
      "maxConsecLosses": 12
    },
    {
      "runSet": "ict",
      "strategy": "liquidity-sweep",
      "name": "Liquidity sweep reversal",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Enter when price sweeps a recent swing high/low then reverses; structure stop; 2R target",
      "netPnl": -9999.964998846093,
      "netPnlPct": -99.99964998846093,
      "totalTrades": 2066,
      "wins": 469,
      "losses": 1597,
      "winRate": 22.700871248789934,
      "profitFactor": 0.3463384517485163,
      "grossProfit": 5298.418431532471,
      "grossLoss": 15298.383430378573,
      "avgWin": 11.297267444632134,
      "avgLoss": 9.57945111482691,
      "expectancy": -4.840254113671874,
      "avgRMultiple": -2.7766786131097048,
      "bestTrade": 168.23708768096537,
      "worstTrade": -177.8039731729963,
      "maxDrawdown": 9999.964998846111,
      "maxDrawdownPct": 99.99964998846112,
      "sharpe": -0.1507496487738201,
      "totalFees": 8995.432689018031,
      "maxConsecWins": 5,
      "maxConsecLosses": 20
    },
    {
      "runSet": "ict",
      "strategy": "fvg-retrace",
      "name": "Fair value gap retrace",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Enter when price retraces 50% into a fresh fair value gap; structure stop; 2R target",
      "netPnl": -6408.363961505805,
      "netPnlPct": -64.08363961505805,
      "totalTrades": 336,
      "wins": 75,
      "losses": 261,
      "winRate": 22.321428571428573,
      "profitFactor": 0.5988404062020343,
      "grossProfit": 9566.235825164678,
      "grossLoss": 15974.599786670477,
      "avgWin": 127.54981100219571,
      "avgLoss": 61.20536316731983,
      "expectancy": -19.072511790195847,
      "avgRMultiple": -0.472004284935794,
      "bestTrade": 196.49804403151867,
      "worstTrade": -155.6595919794683,
      "maxDrawdown": 6740.681283967646,
      "maxDrawdownPct": 65.86289937140897,
      "sharpe": -0.07543199466244398,
      "totalFees": 4167.765919770839,
      "maxConsecWins": 4,
      "maxConsecLosses": 21
    },
    {
      "runSet": "ict",
      "strategy": "displacement-fvg",
      "name": "Displacement into FVG",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Require a displacement candle, then enter on the retrace into the FVG it left; 1.5x ATR stop; 2R target",
      "netPnl": -4387.986575566524,
      "netPnlPct": -43.87986575566524,
      "totalTrades": 195,
      "wins": 58,
      "losses": 137,
      "winRate": 29.743589743589745,
      "profitFactor": 0.6395646506644002,
      "grossProfit": 7786.142803405384,
      "grossLoss": 12174.129378971917,
      "avgWin": 134.24384143802388,
      "avgLoss": 88.86225824067093,
      "expectancy": -22.50249525931551,
      "avgRMultiple": -0.2864085098933569,
      "bestTrade": 184.66344553463142,
      "worstTrade": -130.90801567336837,
      "maxDrawdown": 4387.986575566534,
      "maxDrawdownPct": 43.87986575566534,
      "sharpe": -0.17864064507633998,
      "totalFees": 2561.203353666576,
      "maxConsecWins": 3,
      "maxConsecLosses": 13
    },
    {
      "runSet": "ict",
      "strategy": "silver-bullet",
      "name": "ICT Silver Bullet (NY AM window)",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "5m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 105120,
      "codedRules": "Only between 10:00–11:00 New York time, enter on an FVG retrace; structure stop; 2R target; flat at session end",
      "netPnl": -3011.006739524146,
      "netPnlPct": -30.110067395241458,
      "totalTrades": 101,
      "wins": 28,
      "losses": 73,
      "winRate": 27.722772277227726,
      "profitFactor": 0.5774507667390592,
      "grossProfit": 4114.806071180282,
      "grossLoss": 7125.812810704428,
      "avgWin": 146.95735968501006,
      "avgLoss": 97.61387411923873,
      "expectancy": -29.81194791608065,
      "avgRMultiple": -0.5533406482465254,
      "bestTrade": 196.51571365026726,
      "worstTrade": -151.87939501659957,
      "maxDrawdown": 3471.3508295677993,
      "maxDrawdownPct": 33.60959612701668,
      "sharpe": -0.005075486088072287,
      "totalFees": 2479.745424449052,
      "maxConsecWins": 2,
      "maxConsecLosses": 9
    },
    {
      "runSet": "ict",
      "strategy": "liquidity-sweep",
      "name": "Liquidity sweep reversal",
      "market": "Gold (PAXG)",
      "symbol": "PAXGUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Enter when price sweeps a recent swing high/low then reverses; structure stop; 2R target",
      "netPnl": -9999.998430669935,
      "netPnlPct": -99.99998430669935,
      "totalTrades": 1866,
      "wins": 313,
      "losses": 1553,
      "winRate": 16.773847802786708,
      "profitFactor": 0.14541670385240557,
      "grossProfit": 1701.609213370469,
      "grossLoss": 11701.607644040407,
      "avgWin": 5.436451160928016,
      "avgLoss": 7.534840723786482,
      "expectancy": -5.359055964989247,
      "avgRMultiple": -7.065563138640072,
      "bestTrade": 144.06734543094842,
      "worstTrade": -171.90271770072297,
      "maxDrawdown": 9999.998430669935,
      "maxDrawdownPct": 99.99998430669935,
      "sharpe": -0.32370039791207816,
      "totalFees": 9905.161100423966,
      "maxConsecWins": 5,
      "maxConsecLosses": 35
    },
    {
      "runSet": "ict",
      "strategy": "fvg-retrace",
      "name": "Fair value gap retrace",
      "market": "Gold (PAXG)",
      "symbol": "PAXGUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Enter when price retraces 50% into a fresh fair value gap; structure stop; 2R target",
      "netPnl": -5526.091584011565,
      "netPnlPct": -55.26091584011566,
      "totalTrades": 323,
      "wins": 98,
      "losses": 225,
      "winRate": 30.340557275541798,
      "profitFactor": 0.7078291396579565,
      "grossProfit": 13387.812347209325,
      "grossLoss": 18913.90393122089,
      "avgWin": 136.61033007356454,
      "avgLoss": 84.06179524987063,
      "expectancy": -17.108642674958407,
      "avgRMultiple": -1.5221138512868662,
      "bestTrade": 202.82549283461088,
      "worstTrade": -213.24048735544932,
      "maxDrawdown": 6809.984441879253,
      "maxDrawdownPct": 60.87179567020821,
      "sharpe": 0.057024364717978594,
      "totalFees": 8755.330249173423,
      "maxConsecWins": 7,
      "maxConsecLosses": 20
    },
    {
      "runSet": "ict",
      "strategy": "displacement-fvg",
      "name": "Displacement into FVG",
      "market": "Gold (PAXG)",
      "symbol": "PAXGUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Require a displacement candle, then enter on the retrace into the FVG it left; 1.5x ATR stop; 2R target",
      "netPnl": -9918.551015475925,
      "netPnlPct": -99.18551015475924,
      "totalTrades": 634,
      "wins": 158,
      "losses": 476,
      "winRate": 24.9211356466877,
      "profitFactor": 0.2082850668807105,
      "grossProfit": 2609.3811992136198,
      "grossLoss": 12527.932214689547,
      "avgWin": 16.515070881098858,
      "avgLoss": 26.31918532497804,
      "expectancy": -15.644402232611869,
      "avgRMultiple": -1.9669766102551987,
      "bestTrade": 127.6875319189663,
      "worstTrade": -197.50596113405763,
      "maxDrawdown": 9918.551015475912,
      "maxDrawdownPct": 99.18551015475913,
      "sharpe": -0.34092850352066617,
      "totalFees": 10151.89911685643,
      "maxConsecWins": 5,
      "maxConsecLosses": 18
    },
    {
      "runSet": "ict",
      "strategy": "silver-bullet",
      "name": "ICT Silver Bullet (NY AM window)",
      "market": "Gold (PAXG)",
      "symbol": "PAXGUSDT",
      "timeframe": "5m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 105120,
      "codedRules": "Only between 10:00–11:00 New York time, enter on an FVG retrace; structure stop; 2R target; flat at session end",
      "netPnl": -4533.478690800271,
      "netPnlPct": -45.334786908002705,
      "totalTrades": 128,
      "wins": 39,
      "losses": 89,
      "winRate": 30.46875,
      "profitFactor": 0.47051787064173395,
      "grossProfit": 4028.6208389701874,
      "grossLoss": 8562.099529770458,
      "avgWin": 103.29797023000481,
      "avgLoss": 96.20336550303885,
      "expectancy": -35.417802271877115,
      "avgRMultiple": -1.1911863478215687,
      "bestTrade": 176.17439074353646,
      "worstTrade": -182.92162541141766,
      "maxDrawdown": 4796.390866056945,
      "maxDrawdownPct": 47.96390866056945,
      "sharpe": -0.03512582918863189,
      "totalFees": 5438.549965867847,
      "maxConsecWins": 4,
      "maxConsecLosses": 9
    },
    {
      "runSet": "ict",
      "strategy": "liquidity-sweep",
      "name": "Liquidity sweep reversal",
      "market": "EUR",
      "symbol": "EURUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Enter when price sweeps a recent swing high/low then reverses; structure stop; 2R target",
      "netPnl": -9999.809795318211,
      "netPnlPct": -99.99809795318212,
      "totalTrades": 1079,
      "wins": 82,
      "losses": 997,
      "winRate": 7.599629286376275,
      "profitFactor": 0.0771464674266578,
      "grossProfit": 835.9398034660297,
      "grossLoss": 10835.749598784254,
      "avgWin": 10.194387847146704,
      "avgLoss": 10.868354662772571,
      "expectancy": -9.26766431447471,
      "avgRMultiple": -5.9164629418600825,
      "bestTrade": 114.19547399516485,
      "worstTrade": -149.00315248474698,
      "maxDrawdown": 9999.809795318213,
      "maxDrawdownPct": 99.99809795318212,
      "sharpe": -0.5546459301821993,
      "totalFees": 10442.74822273559,
      "maxConsecWins": 3,
      "maxConsecLosses": 88
    },
    {
      "runSet": "ict",
      "strategy": "fvg-retrace",
      "name": "Fair value gap retrace",
      "market": "EUR",
      "symbol": "EURUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Enter when price retraces 50% into a fresh fair value gap; structure stop; 2R target",
      "netPnl": -8270.991010538328,
      "netPnlPct": -82.70991010538327,
      "totalTrades": 245,
      "wins": 55,
      "losses": 190,
      "winRate": 22.448979591836736,
      "profitFactor": 0.32900875258533235,
      "grossProfit": 4055.5349201746226,
      "grossLoss": 12326.525930712956,
      "avgWin": 73.7369985486295,
      "avgLoss": 64.87645226691029,
      "expectancy": -33.759146981789094,
      "avgRMultiple": -1.4974606468700817,
      "bestTrade": 182.11566545751438,
      "worstTrade": -160.08915934279497,
      "maxDrawdown": 8470.73240512019,
      "maxDrawdownPct": 83.04850169652211,
      "sharpe": -0.2436035125370321,
      "totalFees": 7264.687068635834,
      "maxConsecWins": 3,
      "maxConsecLosses": 11
    },
    {
      "runSet": "ict",
      "strategy": "displacement-fvg",
      "name": "Displacement into FVG",
      "market": "EUR",
      "symbol": "EURUSDT",
      "timeframe": "15m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 35040,
      "codedRules": "Require a displacement candle, then enter on the retrace into the FVG it left; 1.5x ATR stop; 2R target",
      "netPnl": -5804.2611796531955,
      "netPnlPct": -58.04261179653195,
      "totalTrades": 94,
      "wins": 27,
      "losses": 67,
      "winRate": 28.723404255319153,
      "profitFactor": 0.21240483700018337,
      "grossProfit": 1565.338650728885,
      "grossLoss": 7369.599830382082,
      "avgWin": 57.9755055825513,
      "avgLoss": 109.99402731913554,
      "expectancy": -61.74745935801272,
      "avgRMultiple": -1.2553052266476712,
      "bestTrade": 107.62504396368907,
      "worstTrade": -195.83858858859213,
      "maxDrawdown": 5804.261179653197,
      "maxDrawdownPct": 58.04261179653197,
      "sharpe": -0.6144151327501663,
      "totalFees": 5286.598548900842,
      "maxConsecWins": 2,
      "maxConsecLosses": 11
    },
    {
      "runSet": "ict",
      "strategy": "silver-bullet",
      "name": "ICT Silver Bullet (NY AM window)",
      "market": "EUR",
      "symbol": "EURUSDT",
      "timeframe": "5m",
      "windowStart": "2025-06",
      "windowEnd": "2026-05",
      "barsProcessed": 105120,
      "codedRules": "Only between 10:00–11:00 New York time, enter on an FVG retrace; structure stop; 2R target; flat at session end",
      "netPnl": -3496.5898797656996,
      "netPnlPct": -34.965898797657,
      "totalTrades": 54,
      "wins": 14,
      "losses": 40,
      "winRate": 25.925925925925924,
      "profitFactor": 0.21492959476151502,
      "grossProfit": 957.2652858783571,
      "grossLoss": 4453.855165644055,
      "avgWin": 68.37609184845408,
      "avgLoss": 111.34637914110138,
      "expectancy": -64.75166444010554,
      "avgRMultiple": -1.552159426345017,
      "bestTrade": 146.86231369058163,
      "worstTrade": -179.5270716935899,
      "maxDrawdown": 3575.1359839828465,
      "maxDrawdownPct": 35.75135983982847,
      "sharpe": -0.5461550914266471,
      "totalFees": 3548.541806757055,
      "maxConsecWins": 2,
      "maxConsecLosses": 9
    },
    {
      "runSet": "batch3",
      "strategy": "ema-20-50-cross",
      "name": "EMA 20/50 trend cross",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Long when EMA(20) crosses above EMA(50), short on the inverse; 1.5x ATR stop; 2R target",
      "netPnl": -3067.1386486544666,
      "netPnlPct": -30.671386486544666,
      "totalTrades": 170,
      "wins": 52,
      "losses": 118,
      "winRate": 30.58823529411765,
      "profitFactor": 0.7199431049333445,
      "grossProfit": 7884.702576052636,
      "grossLoss": 10951.841224707106,
      "avgWin": 151.62889569331992,
      "avgLoss": 92.8122137687043,
      "expectancy": -18.041992050908625,
      "avgRMultiple": -0.20582829849939172,
      "bestTrade": 192.48352259929817,
      "worstTrade": -123.88539880716053,
      "maxDrawdown": 3272.6386828502373,
      "maxDrawdownPct": 32.067401615643945,
      "sharpe": -0.1887713610016692,
      "totalFees": 1801.335641782894,
      "maxConsecWins": 4,
      "maxConsecLosses": 11
    },
    {
      "runSet": "batch3",
      "strategy": "ema-9-21-cross",
      "name": "EMA 9/21 fast cross",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "5m",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 105120,
      "codedRules": "Long when EMA(9) crosses above EMA(21), short on the inverse, on the 5m; 1.5x ATR stop; 2R target",
      "netPnl": -9999.999985852875,
      "netPnlPct": -99.99999985852875,
      "totalTrades": 3525,
      "wins": 1162,
      "losses": 2363,
      "winRate": 32.9645390070922,
      "profitFactor": 0.46681981470667494,
      "grossProfit": 8755.385644900514,
      "grossLoss": 18755.385630753353,
      "avgWin": 7.534755288210425,
      "avgLoss": 7.937107757407259,
      "expectancy": -2.836879428610745,
      "avgRMultiple": -0.6366551794079836,
      "bestTrade": 130.71707722286095,
      "worstTrade": -182.0509551795081,
      "maxDrawdown": 9999.999985852846,
      "maxDrawdownPct": 99.99999985852847,
      "sharpe": -0.2490587864401596,
      "totalFees": 9194.851802992875,
      "maxConsecWins": 8,
      "maxConsecLosses": 15
    },
    {
      "runSet": "batch3",
      "strategy": "ema-12-26-cross",
      "name": "EMA 12/26 cross",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Long when EMA(12) crosses above EMA(26), short on the inverse; 1.5x ATR stop; 2R target",
      "netPnl": -4681.952673986943,
      "netPnlPct": -46.81952673986943,
      "totalTrades": 248,
      "wins": 73,
      "losses": 175,
      "winRate": 29.435483870967744,
      "profitFactor": 0.693671733557971,
      "grossProfit": 10602.149992630619,
      "grossLoss": 15284.102666617573,
      "avgWin": 145.2349314058989,
      "avgLoss": 87.33772952352899,
      "expectancy": -18.87884142736671,
      "avgRMultiple": -0.245009613688046,
      "bestTrade": 193.45159204128552,
      "worstTrade": -126.64792019939982,
      "maxDrawdown": 4947.745749375584,
      "maxDrawdownPct": 48.29682482329192,
      "sharpe": -0.17496359589361388,
      "totalFees": 2513.887316033661,
      "maxConsecWins": 7,
      "maxConsecLosses": 16
    },
    {
      "runSet": "batch3",
      "strategy": "donchian-20-breakout",
      "name": "Donchian 20 channel breakout",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "15m",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 35040,
      "codedRules": "Enter on a close beyond the prior 20-bar high/low; 1.5x ATR stop; 2R target",
      "netPnl": -9954.173038161136,
      "netPnlPct": -99.54173038161136,
      "totalTrades": 1711,
      "wins": 571,
      "losses": 1140,
      "winRate": 33.37229690239626,
      "profitFactor": 0.7131782068262188,
      "grossProfit": 24750.90612620339,
      "grossLoss": 34705.079164364426,
      "avgWin": 43.346595667606636,
      "avgLoss": 30.443051898565287,
      "expectancy": -5.817751629550635,
      "avgRMultiple": -0.30637843565759054,
      "bestTrade": 184.42048226209144,
      "worstTrade": -144.05384125825253,
      "maxDrawdown": 10509.17666441646,
      "maxDrawdownPct": 99.56800246913843,
      "sharpe": -0.12269888458984164,
      "totalFees": 10356.497276313914,
      "maxConsecWins": 6,
      "maxConsecLosses": 12
    },
    {
      "runSet": "batch3",
      "strategy": "donchian-55-breakout",
      "name": "Donchian 55 channel breakout",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Enter on a close beyond the prior 55-bar high/low (classic Turtle channel); 1.5x ATR stop; 2R target",
      "netPnl": -972.135227136547,
      "netPnlPct": -9.72135227136547,
      "totalTrades": 245,
      "wins": 89,
      "losses": 156,
      "winRate": 36.3265306122449,
      "profitFactor": 0.9419619815624454,
      "grossProfit": 15777.83752016721,
      "grossLoss": 16749.972747303764,
      "avgWin": 177.27907326030572,
      "avgLoss": 107.37162017502412,
      "expectancy": -3.9678988862716205,
      "avgRMultiple": -0.03146600258116209,
      "bestTrade": 208.63044369192417,
      "worstTrade": -130.56420236676803,
      "maxDrawdown": 3258.868074577148,
      "maxDrawdownPct": 29.120747204242658,
      "sharpe": -0.07200510713832484,
      "totalFees": 2823.289142063693,
      "maxConsecWins": 5,
      "maxConsecLosses": 9
    },
    {
      "runSet": "batch3",
      "strategy": "breakout-100-1h",
      "name": "100-bar high/low breakout",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Enter on a close beyond the prior 100-bar high/low; 1.5x ATR stop; 2R target",
      "netPnl": -645.4576634001555,
      "netPnlPct": -6.454576634001555,
      "totalTrades": 174,
      "wins": 63,
      "losses": 111,
      "winRate": 36.206896551724135,
      "profitFactor": 0.9435491066692916,
      "grossProfit": 10788.509548045768,
      "grossLoss": 11433.967211445919,
      "avgWin": 171.24618330231377,
      "avgLoss": 103.0087136166299,
      "expectancy": -3.7095268011503193,
      "avgRMultiple": -0.028034412287210108,
      "bestTrade": 191.1938250074771,
      "worstTrade": -126.10232947701967,
      "maxDrawdown": 2118.9666675812696,
      "maxDrawdownPct": 20.542810409651658,
      "sharpe": -0.04977239850248027,
      "totalFees": 1820.2391050174328,
      "maxConsecWins": 4,
      "maxConsecLosses": 7
    },
    {
      "runSet": "batch3",
      "strategy": "rsi-14-reversion",
      "name": "RSI(14) 30/70 reversion",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Long when RSI(14) crosses up through 30, short when it crosses down through 70; 1.5x ATR stop; 2R target",
      "netPnl": -4576.715459933287,
      "netPnlPct": -45.76715459933287,
      "totalTrades": 233,
      "wins": 67,
      "losses": 166,
      "winRate": 28.75536480686695,
      "profitFactor": 0.6731847574710449,
      "grossProfit": 9427.2686398224,
      "grossLoss": 14003.984099755686,
      "avgWin": 140.70550208690148,
      "avgLoss": 84.36134999852823,
      "expectancy": -19.642555622031274,
      "avgRMultiple": -0.2530453444868478,
      "bestTrade": 191.2994820738968,
      "worstTrade": -122.07244739691565,
      "maxDrawdown": 4712.670183416896,
      "maxDrawdownPct": 46.4945859761813,
      "sharpe": -0.13994464416443356,
      "totalFees": 2021.8597633112706,
      "maxConsecWins": 5,
      "maxConsecLosses": 16
    },
    {
      "runSet": "batch3",
      "strategy": "rsi-7-reversion",
      "name": "RSI(7) 20/80 reversion",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Long when RSI(7) crosses up through 20, short when it crosses down through 80; 1.5x ATR stop; 2R target",
      "netPnl": -1913.9679388784455,
      "netPnlPct": -19.139679388784455,
      "totalTrades": 266,
      "wins": 93,
      "losses": 173,
      "winRate": 34.962406015037594,
      "profitFactor": 0.9014997363970015,
      "grossProfit": 17517.126647757625,
      "grossLoss": 19431.094586636074,
      "avgWin": 188.35620051352285,
      "avgLoss": 112.31846581870563,
      "expectancy": -7.195368191272351,
      "avgRMultiple": -0.0696888317668424,
      "bestTrade": 217.08524068983039,
      "worstTrade": -139.65822881744944,
      "maxDrawdown": 3590.493193991083,
      "maxDrawdownPct": 30.749671803424267,
      "sharpe": -0.04839000016012013,
      "totalFees": 3258.904758758227,
      "maxConsecWins": 5,
      "maxConsecLosses": 15
    },
    {
      "runSet": "batch3",
      "strategy": "liquidity-sweep-1h",
      "name": "Liquidity sweep reversal (1H)",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Enter when price sweeps a recent swing high/low then reverses, on the 1H; structure stop; 2R target",
      "netPnl": -9385.927090511295,
      "netPnlPct": -93.85927090511295,
      "totalTrades": 523,
      "wins": 120,
      "losses": 403,
      "winRate": 22.94455066921606,
      "profitFactor": 0.417454425208515,
      "grossProfit": 6725.991867710764,
      "grossLoss": 16111.918958222057,
      "avgWin": 56.049932230923034,
      "avgLoss": 39.97994778715151,
      "expectancy": -17.946323308817007,
      "avgRMultiple": -1.74646863692469,
      "bestTrade": 164.81170291048568,
      "worstTrade": -191.2716945115292,
      "maxDrawdown": 9411.784484647493,
      "maxDrawdownPct": 94.11784484647492,
      "sharpe": -0.11491877006363051,
      "totalFees": 8342.42766056372,
      "maxConsecWins": 3,
      "maxConsecLosses": 12
    },
    {
      "runSet": "batch3",
      "strategy": "fvg-retrace-1h",
      "name": "Fair value gap retrace (1H)",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Enter when price retraces 50% into a fresh fair value gap, on the 1H; structure stop; 2R target",
      "netPnl": -2594.4160888210745,
      "netPnlPct": -25.944160888210742,
      "totalTrades": 136,
      "wins": 35,
      "losses": 101,
      "winRate": 25.735294117647058,
      "profitFactor": 0.6831590995354881,
      "grossProfit": 5593.97147420338,
      "grossLoss": 8188.38756302446,
      "avgWin": 159.82775640581087,
      "avgLoss": 81.073144188361,
      "expectancy": -19.076588888390255,
      "avgRMultiple": -0.4800049473636213,
      "bestTrade": 199.3330830225654,
      "worstTrade": -175.7904405569626,
      "maxDrawdown": 3246.8198569580654,
      "maxDrawdownPct": 30.80411677590169,
      "sharpe": -0.12065142718554747,
      "totalFees": 1890.217492255542,
      "maxConsecWins": 4,
      "maxConsecLosses": 9
    },
    {
      "runSet": "batch3",
      "strategy": "displacement-momentum",
      "name": "Displacement momentum",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "15m",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 35040,
      "codedRules": "Enter in the direction of an outsized (2x ATR) displacement candle; 1.5x ATR stop; 2R target",
      "netPnl": -9270.274595629544,
      "netPnlPct": -92.70274595629544,
      "totalTrades": 694,
      "wins": 222,
      "losses": 472,
      "winRate": 31.988472622478387,
      "profitFactor": 0.6013479466121114,
      "grossProfit": 13983.774936656586,
      "grossLoss": 23254.049532286117,
      "avgWin": 62.98997719214678,
      "avgLoss": 49.267054093826516,
      "expectancy": -13.357744374105971,
      "avgRMultiple": -0.3720115147715897,
      "bestTrade": 173.2672339876589,
      "worstTrade": -155.55866784382684,
      "maxDrawdown": 9284.241179263623,
      "maxDrawdownPct": 92.84241179263623,
      "sharpe": -0.12944961164245572,
      "totalFees": 7832.519596238028,
      "maxConsecWins": 4,
      "maxConsecLosses": 12
    },
    {
      "runSet": "batch3",
      "strategy": "mss-continuation",
      "name": "Market structure shift continuation",
      "market": "BTC",
      "symbol": "BTCUSDT",
      "timeframe": "15m",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 35040,
      "codedRules": "Enter on a confirmed market-structure shift (close beyond the last swing); structure stop; 2R target",
      "netPnl": -741.1859494376663,
      "netPnlPct": -7.411859494376663,
      "totalTrades": 182,
      "wins": 64,
      "losses": 118,
      "winRate": 35.16483516483517,
      "profitFactor": 0.9401911737930001,
      "grossProfit": 11651.398831818586,
      "grossLoss": 12392.584781256253,
      "avgWin": 182.0531067471654,
      "avgLoss": 105.02190492590046,
      "expectancy": -4.072450271635529,
      "avgRMultiple": -0.03222017774491396,
      "bestTrade": 210.64539487636293,
      "worstTrade": -131.95439909985623,
      "maxDrawdown": 2133.7222112111413,
      "maxDrawdownPct": 19.712467008729323,
      "sharpe": -0.062219281536376285,
      "totalFees": 1341.7923547899259,
      "maxConsecWins": 4,
      "maxConsecLosses": 11
    },
    {
      "runSet": "batch3",
      "strategy": "ema-20-50-cross",
      "name": "EMA 20/50 trend cross",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Long when EMA(20) crosses above EMA(50), short on the inverse; 1.5x ATR stop; 2R target",
      "netPnl": -2518.009625156709,
      "netPnlPct": -25.180096251567086,
      "totalTrades": 160,
      "wins": 48,
      "losses": 112,
      "winRate": 30,
      "profitFactor": 0.7718089426135482,
      "grossProfit": 8516.64551863513,
      "grossLoss": 11034.65514379184,
      "avgWin": 177.43011497156522,
      "avgLoss": 98.52370664099858,
      "expectancy": -15.73756015722943,
      "avgRMultiple": -0.17174287408678238,
      "bestTrade": 197.37009754020008,
      "worstTrade": -111.1497917132724,
      "maxDrawdown": 2950.984587562054,
      "maxDrawdownPct": 28.39948781795548,
      "sharpe": -0.1433971481262679,
      "totalFees": 1051.5774093582145,
      "maxConsecWins": 3,
      "maxConsecLosses": 8
    },
    {
      "runSet": "batch3",
      "strategy": "ema-9-21-cross",
      "name": "EMA 9/21 fast cross",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "5m",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 105120,
      "codedRules": "Long when EMA(9) crosses above EMA(21), short on the inverse, on the 5m; 1.5x ATR stop; 2R target",
      "netPnl": -9998.985770259023,
      "netPnlPct": -99.98985770259023,
      "totalTrades": 3168,
      "wins": 1104,
      "losses": 2064,
      "winRate": 34.84848484848485,
      "profitFactor": 0.6733474688232703,
      "grossProfit": 20611.478915989846,
      "grossLoss": 30610.464686248968,
      "avgWin": 18.669817858686454,
      "avgLoss": 14.830651495275664,
      "expectancy": -3.156245508288833,
      "avgRMultiple": -0.2809662447209267,
      "bestTrade": 152.54736321211954,
      "worstTrade": -160.49339331539213,
      "maxDrawdown": 9998.985770259074,
      "maxDrawdownPct": 99.98985770259074,
      "sharpe": -0.14264120891362256,
      "totalFees": 10942.33355140116,
      "maxConsecWins": 9,
      "maxConsecLosses": 15
    },
    {
      "runSet": "batch3",
      "strategy": "ema-12-26-cross",
      "name": "EMA 12/26 cross",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Long when EMA(12) crosses above EMA(26), short on the inverse; 1.5x ATR stop; 2R target",
      "netPnl": -1658.1837140972132,
      "netPnlPct": -16.58183714097213,
      "totalTrades": 252,
      "wins": 85,
      "losses": 167,
      "winRate": 33.730158730158735,
      "profitFactor": 0.9026676799298317,
      "grossProfit": 15378.127686903006,
      "grossLoss": 17036.311401000217,
      "avgWin": 180.91914925768242,
      "avgLoss": 102.0138407245522,
      "expectancy": -6.58009410356037,
      "avgRMultiple": -0.06192887948441826,
      "bestTrade": 194.30031431899982,
      "worstTrade": -113.27955254528163,
      "maxDrawdown": 1886.5958705161684,
      "maxDrawdownPct": 18.444660243107382,
      "sharpe": -0.06568803594645388,
      "totalFees": 1757.6743524362732,
      "maxConsecWins": 3,
      "maxConsecLosses": 9
    },
    {
      "runSet": "batch3",
      "strategy": "donchian-20-breakout",
      "name": "Donchian 20 channel breakout",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "15m",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 35040,
      "codedRules": "Enter on a close beyond the prior 20-bar high/low; 1.5x ATR stop; 2R target",
      "netPnl": -8173.967889806948,
      "netPnlPct": -81.73967889806949,
      "totalTrades": 1597,
      "wins": 565,
      "losses": 1032,
      "winRate": 35.37883531621791,
      "profitFactor": 0.8856738757845101,
      "grossProfit": 63322.97076613865,
      "grossLoss": 71496.93865594555,
      "avgWin": 112.07605445334273,
      "avgLoss": 69.2799793177767,
      "expectancy": -5.118326793867845,
      "avgRMultiple": -0.09612593867930765,
      "bestTrade": 212.72817658494844,
      "worstTrade": -137.9118938350101,
      "maxDrawdown": 9380.003456188444,
      "maxDrawdownPct": 83.75748723206453,
      "sharpe": -0.02796691001330241,
      "totalFees": 14555.946846129085,
      "maxConsecWins": 13,
      "maxConsecLosses": 12
    },
    {
      "runSet": "batch3",
      "strategy": "donchian-55-breakout",
      "name": "Donchian 55 channel breakout",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Enter on a close beyond the prior 55-bar high/low (classic Turtle channel); 1.5x ATR stop; 2R target",
      "netPnl": 922.3619593356278,
      "netPnlPct": 9.223619593356279,
      "totalTrades": 240,
      "wins": 89,
      "losses": 151,
      "winRate": 37.083333333333336,
      "profitFactor": 1.0501658721902465,
      "grossProfit": 19308.605815272487,
      "grossLoss": 18386.243855936853,
      "avgWin": 216.95062713789312,
      "avgLoss": 121.76320434395267,
      "expectancy": 3.843174830565116,
      "avgRMultiple": 0.04718400830180162,
      "bestTrade": 237.08559631021683,
      "worstTrade": -139.06727791717225,
      "maxDrawdown": 1851.0590406944484,
      "maxDrawdownPct": 15.143724481693393,
      "sharpe": 0.005353460858041921,
      "totalFees": 1776.351037596249,
      "maxConsecWins": 5,
      "maxConsecLosses": 9
    },
    {
      "runSet": "batch3",
      "strategy": "breakout-100-1h",
      "name": "100-bar high/low breakout",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Enter on a close beyond the prior 100-bar high/low; 1.5x ATR stop; 2R target",
      "netPnl": 1761.2045265189074,
      "netPnlPct": 17.612045265189074,
      "totalTrades": 164,
      "wins": 64,
      "losses": 100,
      "winRate": 39.02439024390244,
      "profitFactor": 1.1491533408794294,
      "grossProfit": 13569.21711366309,
      "grossLoss": 11808.01258714418,
      "avgWin": 212.01901740098577,
      "avgLoss": 118.0801258714418,
      "expectancy": 10.739051990968948,
      "avgRMultiple": 0.1095891385953408,
      "bestTrade": 243.69550337778813,
      "worstTrade": -140.8654223714096,
      "maxDrawdown": 1460.240917938534,
      "maxDrawdownPct": 13.039849918081,
      "sharpe": 0.04050021738755226,
      "totalFees": 1113.16376142418,
      "maxConsecWins": 4,
      "maxConsecLosses": 11
    },
    {
      "runSet": "batch3",
      "strategy": "rsi-14-reversion",
      "name": "RSI(14) 30/70 reversion",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Long when RSI(14) crosses up through 30, short when it crosses down through 70; 1.5x ATR stop; 2R target",
      "netPnl": -1895.759039442845,
      "netPnlPct": -18.95759039442845,
      "totalTrades": 192,
      "wins": 62,
      "losses": 130,
      "winRate": 32.29166666666667,
      "profitFactor": 0.8637588402655765,
      "grossProfit": 12018.97159804048,
      "grossLoss": 13914.730637483322,
      "avgWin": 193.85438061355612,
      "avgLoss": 107.03638951910249,
      "expectancy": -9.873744997098152,
      "avgRMultiple": -0.0995722562554857,
      "bestTrade": 217.29859491637157,
      "worstTrade": -126.73938627627098,
      "maxDrawdown": 3346.4560170326595,
      "maxDrawdownPct": 29.224911143679837,
      "sharpe": -0.03628064610926813,
      "totalFees": 1305.3963049441986,
      "maxConsecWins": 5,
      "maxConsecLosses": 11
    },
    {
      "runSet": "batch3",
      "strategy": "rsi-7-reversion",
      "name": "RSI(7) 20/80 reversion",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Long when RSI(7) crosses up through 20, short when it crosses down through 80; 1.5x ATR stop; 2R target",
      "netPnl": -2030.2799218945406,
      "netPnlPct": -20.302799218945406,
      "totalTrades": 242,
      "wins": 80,
      "losses": 162,
      "winRate": 33.057851239669425,
      "profitFactor": 0.8818943726245398,
      "grossProfit": 15160.094211932636,
      "grossLoss": 17190.374133827176,
      "avgWin": 189.50117764915794,
      "avgLoss": 106.1134205791801,
      "expectancy": -8.389586454109672,
      "avgRMultiple": -0.08390239002502406,
      "bestTrade": 215.4130568042067,
      "worstTrade": -122.42392920681337,
      "maxDrawdown": 3274.450878599435,
      "maxDrawdownPct": 29.12911354064944,
      "sharpe": -0.07113942986001877,
      "totalFees": 1621.7622026679398,
      "maxConsecWins": 4,
      "maxConsecLosses": 8
    },
    {
      "runSet": "batch3",
      "strategy": "liquidity-sweep-1h",
      "name": "Liquidity sweep reversal (1H)",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Enter when price sweeps a recent swing high/low then reverses, on the 1H; structure stop; 2R target",
      "netPnl": -9114.691964255333,
      "netPnlPct": -91.14691964255333,
      "totalTrades": 526,
      "wins": 127,
      "losses": 399,
      "winRate": 24.14448669201521,
      "profitFactor": 0.5149097751997925,
      "grossProfit": 9674.991888906974,
      "grossLoss": 18789.683853162303,
      "avgWin": 76.1810384953305,
      "avgLoss": 47.091939481609785,
      "expectancy": -17.328311719116602,
      "avgRMultiple": -0.8363547075418267,
      "bestTrade": 194.93806091678564,
      "worstTrade": -180.7682197682766,
      "maxDrawdown": 9440.873236345651,
      "maxDrawdownPct": 91.56509628809293,
      "sharpe": -0.06230301639367698,
      "totalFees": 7786.767068158293,
      "maxConsecWins": 2,
      "maxConsecLosses": 20
    },
    {
      "runSet": "batch3",
      "strategy": "fvg-retrace-1h",
      "name": "Fair value gap retrace (1H)",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Enter when price retraces 50% into a fresh fair value gap, on the 1H; structure stop; 2R target",
      "netPnl": 632.1709527955154,
      "netPnlPct": 6.321709527955154,
      "totalTrades": 47,
      "wins": 16,
      "losses": 31,
      "winRate": 34.04255319148936,
      "profitFactor": 1.2665316964129658,
      "grossProfit": 3004.012505989344,
      "grossLoss": 2371.841553193829,
      "avgWin": 187.750781624334,
      "avgLoss": 76.51101784496223,
      "expectancy": 13.450445804159902,
      "avgRMultiple": 0.13880245003017083,
      "bestTrade": 207.76516924059914,
      "worstTrade": -118.90290396319044,
      "maxDrawdown": 650.3757439366964,
      "maxDrawdownPct": 6.066146492376877,
      "sharpe": 0.16972088927807993,
      "totalFees": 336.7086212902164,
      "maxConsecWins": 3,
      "maxConsecLosses": 11
    },
    {
      "runSet": "batch3",
      "strategy": "displacement-momentum",
      "name": "Displacement momentum",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "15m",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 35040,
      "codedRules": "Enter in the direction of an outsized (2x ATR) displacement candle; 1.5x ATR stop; 2R target",
      "netPnl": -6588.251105782834,
      "netPnlPct": -65.88251105782834,
      "totalTrades": 566,
      "wins": 184,
      "losses": 382,
      "winRate": 32.50883392226148,
      "profitFactor": 0.7408591530236667,
      "grossProfit": 18835.186313114376,
      "grossLoss": 25423.437418897203,
      "avgWin": 102.3651430060564,
      "avgLoss": 66.55350109658954,
      "expectancy": -11.640019621524441,
      "avgRMultiple": -0.17994123074017307,
      "bestTrade": 195.31696237015137,
      "worstTrade": -145.24529236843185,
      "maxDrawdown": 7394.426926574046,
      "maxDrawdownPct": 69.01789017187578,
      "sharpe": -0.07554928340634007,
      "totalFees": 4876.327932952695,
      "maxConsecWins": 7,
      "maxConsecLosses": 16
    },
    {
      "runSet": "batch3",
      "strategy": "mss-continuation",
      "name": "Market structure shift continuation",
      "market": "ETH",
      "symbol": "ETHUSDT",
      "timeframe": "15m",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 35040,
      "codedRules": "Enter on a confirmed market-structure shift (close beyond the last swing); structure stop; 2R target",
      "netPnl": 3098.6183010603363,
      "netPnlPct": 30.986183010603362,
      "totalTrades": 149,
      "wins": 62,
      "losses": 87,
      "winRate": 41.61073825503356,
      "profitFactor": 1.322293145135877,
      "grossProfit": 12712.903767026362,
      "grossLoss": 9614.285465966022,
      "avgWin": 205.0468349520381,
      "avgLoss": 110.50902834443704,
      "expectancy": 20.796095980270714,
      "avgRMultiple": 0.19206543541975538,
      "bestTrade": 252.9436625047067,
      "worstTrade": -137.98610725765732,
      "maxDrawdown": 1715.9105318291986,
      "maxDrawdownPct": 15.500421721473545,
      "sharpe": 0.0814064750008303,
      "totalFees": 755.3340976123734,
      "maxConsecWins": 6,
      "maxConsecLosses": 9
    },
    {
      "runSet": "batch3",
      "strategy": "ema-20-50-cross",
      "name": "EMA 20/50 trend cross",
      "market": "Gold (PAXG)",
      "symbol": "PAXGUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Long when EMA(20) crosses above EMA(50), short on the inverse; 1.5x ATR stop; 2R target",
      "netPnl": -2661.355766390606,
      "netPnlPct": -26.613557663906057,
      "totalTrades": 120,
      "wins": 42,
      "losses": 78,
      "winRate": 35,
      "profitFactor": 0.6870522594913107,
      "grossProfit": 5842.798192556772,
      "grossLoss": 8504.15395894738,
      "avgWin": 139.11424267992314,
      "avgLoss": 109.02761485829974,
      "expectancy": -22.177964719921714,
      "avgRMultiple": -0.24720393464651555,
      "bestTrade": 170.5240107361159,
      "worstTrade": -149.36169006363167,
      "maxDrawdown": 2915.423067070231,
      "maxDrawdownPct": 29.154230670702308,
      "sharpe": -0.1604866713194078,
      "totalFees": 2953.197453787407,
      "maxConsecWins": 4,
      "maxConsecLosses": 9
    },
    {
      "runSet": "batch3",
      "strategy": "ema-9-21-cross",
      "name": "EMA 9/21 fast cross",
      "market": "Gold (PAXG)",
      "symbol": "PAXGUSDT",
      "timeframe": "5m",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 105120,
      "codedRules": "Long when EMA(9) crosses above EMA(21), short on the inverse, on the 5m; 1.5x ATR stop; 2R target",
      "netPnl": -9999.99999999999,
      "netPnlPct": -99.99999999999991,
      "totalTrades": 3686,
      "wins": 759,
      "losses": 2927,
      "winRate": 20.591427021161152,
      "profitFactor": 0.1563594474600856,
      "grossProfit": 1853.3894202849801,
      "grossLoss": 11853.389420284957,
      "avgWin": 2.4418832941831097,
      "avgLoss": 4.049671821074464,
      "expectancy": -2.712967986977751,
      "avgRMultiple": -2.2121370400280216,
      "bestTrade": 118.70182053183423,
      "worstTrade": -191.3482226993524,
      "maxDrawdown": 10000.000000000004,
      "maxDrawdownPct": 100.00000000000004,
      "sharpe": -0.5892657754538853,
      "totalFees": 6645.013802591074,
      "maxConsecWins": 7,
      "maxConsecLosses": 53
    },
    {
      "runSet": "batch3",
      "strategy": "ema-12-26-cross",
      "name": "EMA 12/26 cross",
      "market": "Gold (PAXG)",
      "symbol": "PAXGUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Long when EMA(12) crosses above EMA(26), short on the inverse; 1.5x ATR stop; 2R target",
      "netPnl": -6107.43683782637,
      "netPnlPct": -61.0743683782637,
      "totalTrades": 201,
      "wins": 55,
      "losses": 146,
      "winRate": 27.363184079601986,
      "profitFactor": 0.5208911763199431,
      "grossProfit": 6640.05712589333,
      "grossLoss": 12747.493963719702,
      "avgWin": 120.72831137987872,
      "avgLoss": 87.31160249123084,
      "expectancy": -30.385257899633682,
      "avgRMultiple": -0.46437418268770503,
      "bestTrade": 198.3794051661355,
      "worstTrade": -148.6327439331858,
      "maxDrawdown": 7073.142583158911,
      "maxDrawdownPct": 64.5023927089192,
      "sharpe": -0.29076014084208973,
      "totalFees": 3746.7828023673123,
      "maxConsecWins": 5,
      "maxConsecLosses": 9
    },
    {
      "runSet": "batch3",
      "strategy": "donchian-20-breakout",
      "name": "Donchian 20 channel breakout",
      "market": "Gold (PAXG)",
      "symbol": "PAXGUSDT",
      "timeframe": "15m",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 35040,
      "codedRules": "Enter on a close beyond the prior 20-bar high/low; 1.5x ATR stop; 2R target",
      "netPnl": -9999.720199728657,
      "netPnlPct": -99.99720199728658,
      "totalTrades": 1575,
      "wins": 462,
      "losses": 1113,
      "winRate": 29.333333333333332,
      "profitFactor": 0.2892941316412689,
      "grossProfit": 4070.40450997934,
      "grossLoss": 14070.124709708014,
      "avgWin": 8.810399372249654,
      "avgLoss": 12.641621482217444,
      "expectancy": -6.349028698240417,
      "avgRMultiple": -0.89604287263327,
      "bestTrade": 141.21552989211042,
      "worstTrade": -181.54301735514395,
      "maxDrawdown": 9999.720199728672,
      "maxDrawdownPct": 99.99720199728672,
      "sharpe": -0.32852269939356304,
      "totalFees": 6090.121005693197,
      "maxConsecWins": 6,
      "maxConsecLosses": 22
    },
    {
      "runSet": "batch3",
      "strategy": "donchian-55-breakout",
      "name": "Donchian 55 channel breakout",
      "market": "Gold (PAXG)",
      "symbol": "PAXGUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Enter on a close beyond the prior 55-bar high/low (classic Turtle channel); 1.5x ATR stop; 2R target",
      "netPnl": 344.49816344375427,
      "netPnlPct": 3.4449816344375424,
      "totalTrades": 258,
      "wins": 111,
      "losses": 147,
      "winRate": 43.02325581395349,
      "profitFactor": 1.018920651961412,
      "grossProfit": 18552.01892680517,
      "grossLoss": 18207.520763361423,
      "avgWin": 167.1353056468934,
      "avgLoss": 123.86068546504369,
      "expectancy": 1.3352641993943963,
      "avgRMultiple": 0.023720394183423903,
      "bestTrade": 198.8171430807204,
      "worstTrade": -179.25390539267167,
      "maxDrawdown": 2200.9138754005908,
      "maxDrawdownPct": 20.007852196188992,
      "sharpe": -0.022112506791522088,
      "totalFees": 6725.884936541615,
      "maxConsecWins": 6,
      "maxConsecLosses": 8
    },
    {
      "runSet": "batch3",
      "strategy": "breakout-100-1h",
      "name": "100-bar high/low breakout",
      "market": "Gold (PAXG)",
      "symbol": "PAXGUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Enter on a close beyond the prior 100-bar high/low; 1.5x ATR stop; 2R target",
      "netPnl": 2743.958531722774,
      "netPnlPct": 27.43958531722774,
      "totalTrades": 181,
      "wins": 84,
      "losses": 97,
      "winRate": 46.408839779005525,
      "profitFactor": 1.2129538623607714,
      "grossProfit": 15629.184004056118,
      "grossLoss": 12885.225472333339,
      "avgWin": 186.0617143340014,
      "avgLoss": 132.83737600343648,
      "expectancy": 15.159991887971126,
      "avgRMultiple": 0.14461610151750778,
      "bestTrade": 238.96248443255772,
      "worstTrade": -187.42644808443123,
      "maxDrawdown": 2170.5979250274395,
      "maxDrawdownPct": 18.824218105766384,
      "sharpe": 0.04873130699354513,
      "totalFees": 4793.196402911119,
      "maxConsecWins": 5,
      "maxConsecLosses": 7
    },
    {
      "runSet": "batch3",
      "strategy": "rsi-14-reversion",
      "name": "RSI(14) 30/70 reversion",
      "market": "Gold (PAXG)",
      "symbol": "PAXGUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Long when RSI(14) crosses up through 30, short when it crosses down through 70; 1.5x ATR stop; 2R target",
      "netPnl": -5054.374938809419,
      "netPnlPct": -50.54374938809419,
      "totalTrades": 160,
      "wins": 43,
      "losses": 117,
      "winRate": 26.875,
      "profitFactor": 0.5244128593315478,
      "grossProfit": 5573.277717453195,
      "grossLoss": 10627.652656262611,
      "avgWin": 129.61110970821383,
      "avgLoss": 90.83463808771462,
      "expectancy": -31.58984336755887,
      "avgRMultiple": -0.4302865522904198,
      "bestTrade": 171.5009771219634,
      "worstTrade": -145.52407407407458,
      "maxDrawdown": 5054.374938809412,
      "maxDrawdownPct": 50.54374938809411,
      "sharpe": -0.3269709454860839,
      "totalFees": 2825.534346289537,
      "maxConsecWins": 4,
      "maxConsecLosses": 11
    },
    {
      "runSet": "batch3",
      "strategy": "rsi-7-reversion",
      "name": "RSI(7) 20/80 reversion",
      "market": "Gold (PAXG)",
      "symbol": "PAXGUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Long when RSI(7) crosses up through 20, short when it crosses down through 80; 1.5x ATR stop; 2R target",
      "netPnl": -7170.128914629226,
      "netPnlPct": -71.70128914629225,
      "totalTrades": 241,
      "wins": 61,
      "losses": 180,
      "winRate": 25.311203319502074,
      "profitFactor": 0.4667855246539179,
      "grossProfit": 6276.8595790261015,
      "grossLoss": 13446.988493655332,
      "avgWin": 102.89933736108364,
      "avgLoss": 74.70549163141851,
      "expectancy": -29.751572259872304,
      "avgRMultiple": -0.5390698636627164,
      "bestTrade": 162.59260190201124,
      "worstTrade": -157.74560908068648,
      "maxDrawdown": 7210.795804985682,
      "maxDrawdownPct": 72.10795804985682,
      "sharpe": -0.22598398368898495,
      "totalFees": 3961.2214184454933,
      "maxConsecWins": 3,
      "maxConsecLosses": 11
    },
    {
      "runSet": "batch3",
      "strategy": "liquidity-sweep-1h",
      "name": "Liquidity sweep reversal (1H)",
      "market": "Gold (PAXG)",
      "symbol": "PAXGUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Enter when price sweeps a recent swing high/low then reverses, on the 1H; structure stop; 2R target",
      "netPnl": -9788.712839473303,
      "netPnlPct": -97.88712839473303,
      "totalTrades": 498,
      "wins": 97,
      "losses": 401,
      "winRate": 19.477911646586346,
      "profitFactor": 0.2124005091408412,
      "grossProfit": 2639.8285106426197,
      "grossLoss": 12428.541350115922,
      "avgWin": 27.21472691384144,
      "avgLoss": 30.99386870353098,
      "expectancy": -19.656049878460447,
      "avgRMultiple": -3.0101996714924866,
      "bestTrade": 120.3407886473201,
      "worstTrade": -174.56592202435428,
      "maxDrawdown": 9788.7128394733,
      "maxDrawdownPct": 97.88712839473301,
      "sharpe": -0.19651997077211317,
      "totalFees": 7161.197170779767,
      "maxConsecWins": 3,
      "maxConsecLosses": 27
    },
    {
      "runSet": "batch3",
      "strategy": "fvg-retrace-1h",
      "name": "Fair value gap retrace (1H)",
      "market": "Gold (PAXG)",
      "symbol": "PAXGUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Enter when price retraces 50% into a fresh fair value gap, on the 1H; structure stop; 2R target",
      "netPnl": -1445.1087403726065,
      "netPnlPct": -14.451087403726065,
      "totalTrades": 67,
      "wins": 19,
      "losses": 48,
      "winRate": 28.35820895522388,
      "profitFactor": 0.6835624082034385,
      "grossProfit": 3121.696145760106,
      "grossLoss": 4566.8048861327115,
      "avgWin": 164.29979714526874,
      "avgLoss": 95.14176846109815,
      "expectancy": -21.568787169740396,
      "avgRMultiple": -0.470219150911482,
      "bestTrade": 186.14865708327144,
      "worstTrade": -155.6208967377455,
      "maxDrawdown": 1611.3938695479064,
      "maxDrawdownPct": 16.056542031303128,
      "sharpe": -0.07943769483821414,
      "totalFees": 1261.2213440563296,
      "maxConsecWins": 3,
      "maxConsecLosses": 8
    },
    {
      "runSet": "batch3",
      "strategy": "displacement-momentum",
      "name": "Displacement momentum",
      "market": "Gold (PAXG)",
      "symbol": "PAXGUSDT",
      "timeframe": "15m",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 35040,
      "codedRules": "Enter in the direction of an outsized (2x ATR) displacement candle; 1.5x ATR stop; 2R target",
      "netPnl": -9927.188507826853,
      "netPnlPct": -99.27188507826853,
      "totalTrades": 833,
      "wins": 260,
      "losses": 573,
      "winRate": 31.212484993997595,
      "profitFactor": 0.5159715090095757,
      "grossProfit": 10582.324243196797,
      "grossLoss": 20509.51275102363,
      "avgWin": 40.70124708921845,
      "avgLoss": 35.79321597037283,
      "expectancy": -11.917393166658888,
      "avgRMultiple": -1.1413426188605102,
      "bestTrade": 163.04850497868108,
      "worstTrade": -186.3456177169479,
      "maxDrawdown": 10156.531991838054,
      "maxDrawdownPct": 99.29080620822296,
      "sharpe": -0.19389770761488462,
      "totalFees": 13056.581792775278,
      "maxConsecWins": 6,
      "maxConsecLosses": 21
    },
    {
      "runSet": "batch3",
      "strategy": "mss-continuation",
      "name": "Market structure shift continuation",
      "market": "Gold (PAXG)",
      "symbol": "PAXGUSDT",
      "timeframe": "15m",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 35040,
      "codedRules": "Enter on a confirmed market-structure shift (close beyond the last swing); structure stop; 2R target",
      "netPnl": -2071.7432170533643,
      "netPnlPct": -20.71743217053364,
      "totalTrades": 208,
      "wins": 74,
      "losses": 134,
      "winRate": 35.57692307692308,
      "profitFactor": 0.8412272254701532,
      "grossProfit": 10976.73580076403,
      "grossLoss": 13048.479017817388,
      "avgWin": 148.3342675778923,
      "avgLoss": 97.37670908818946,
      "expectancy": -9.960303928141174,
      "avgRMultiple": -0.10128780958815832,
      "bestTrade": 178.28421736265432,
      "worstTrade": -152.73000000000002,
      "maxDrawdown": 2545.780888494831,
      "maxDrawdownPct": 25.457808884948307,
      "sharpe": -0.023845277481806475,
      "totalFees": 2804.4201479315525,
      "maxConsecWins": 6,
      "maxConsecLosses": 9
    },
    {
      "runSet": "batch3",
      "strategy": "ema-20-50-cross",
      "name": "EMA 20/50 trend cross",
      "market": "EUR",
      "symbol": "EURUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Long when EMA(20) crosses above EMA(50), short on the inverse; 1.5x ATR stop; 2R target",
      "netPnl": -5328.379863276463,
      "netPnlPct": -53.283798632764636,
      "totalTrades": 135,
      "wins": 46,
      "losses": 89,
      "winRate": 34.074074074074076,
      "profitFactor": 0.4806272110374617,
      "grossProfit": 4930.878951418186,
      "grossLoss": 10259.258814694653,
      "avgWin": 107.19302068300405,
      "avgLoss": 115.27257095162531,
      "expectancy": -39.469480468714536,
      "avgRMultiple": -0.5841467647282219,
      "bestTrade": 170.05108387250593,
      "worstTrade": -188.5567278287529,
      "maxDrawdown": 5470.297598008342,
      "maxDrawdownPct": 53.93750709764521,
      "sharpe": -0.24868787977417148,
      "totalFees": 5828.7113773337305,
      "maxConsecWins": 5,
      "maxConsecLosses": 6
    },
    {
      "runSet": "batch3",
      "strategy": "ema-9-21-cross",
      "name": "EMA 9/21 fast cross",
      "market": "EUR",
      "symbol": "EURUSDT",
      "timeframe": "5m",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 105120,
      "codedRules": "Long when EMA(9) crosses above EMA(21), short on the inverse, on the 5m; 1.5x ATR stop; 2R target",
      "netPnl": -9999.999986444798,
      "netPnlPct": -99.99999986444799,
      "totalTrades": 2058,
      "wins": 383,
      "losses": 1675,
      "winRate": 18.610301263362487,
      "profitFactor": 0.10165558945673585,
      "grossProfit": 1131.5881540072655,
      "grossLoss": 11131.588140452073,
      "avgWin": 2.9545382611155757,
      "avgLoss": 6.6457242629564615,
      "expectancy": -4.859086485152964,
      "avgRMultiple": -2.1520173151010917,
      "bestTrade": 106.46450707635522,
      "worstTrade": -175.1011872750758,
      "maxDrawdown": 9999.999986566578,
      "maxDrawdownPct": 99.99999986566579,
      "sharpe": -0.7815564592294874,
      "totalFees": 9559.673061743348,
      "maxConsecWins": 4,
      "maxConsecLosses": 57
    },
    {
      "runSet": "batch3",
      "strategy": "ema-12-26-cross",
      "name": "EMA 12/26 cross",
      "market": "EUR",
      "symbol": "EURUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Long when EMA(12) crosses above EMA(26), short on the inverse; 1.5x ATR stop; 2R target",
      "netPnl": -7335.932938927516,
      "netPnlPct": -73.35932938927516,
      "totalTrades": 215,
      "wins": 71,
      "losses": 144,
      "winRate": 33.02325581395349,
      "profitFactor": 0.3991996730744135,
      "grossProfit": 4874.334949019426,
      "grossLoss": 12210.267887946935,
      "avgWin": 68.65260491576656,
      "avgLoss": 84.7935269996315,
      "expectancy": -34.120618320593096,
      "avgRMultiple": -0.6855262884888818,
      "bestTrade": 162.85506095503206,
      "worstTrade": -175.04964442684746,
      "maxDrawdown": 7480.3296633976515,
      "maxDrawdownPct": 73.73853632275373,
      "sharpe": -0.364602423034429,
      "totalFees": 6971.931642249636,
      "maxConsecWins": 4,
      "maxConsecLosses": 10
    },
    {
      "runSet": "batch3",
      "strategy": "donchian-20-breakout",
      "name": "Donchian 20 channel breakout",
      "market": "EUR",
      "symbol": "EURUSDT",
      "timeframe": "15m",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 35040,
      "codedRules": "Enter on a close beyond the prior 20-bar high/low; 1.5x ATR stop; 2R target",
      "netPnl": -9999.9286925449,
      "netPnlPct": -99.999286925449,
      "totalTrades": 1276,
      "wins": 357,
      "losses": 919,
      "winRate": 27.978056426332287,
      "profitFactor": 0.2126434426994968,
      "grossProfit": 2700.7068706238733,
      "grossLoss": 12700.635563168787,
      "avgWin": 7.565005239842782,
      "avgLoss": 13.82006046046658,
      "expectancy": -7.8369347120257835,
      "avgRMultiple": -1.3594415536922935,
      "bestTrade": 129.68370760550198,
      "worstTrade": -169.98808098190668,
      "maxDrawdown": 9999.928692544916,
      "maxDrawdownPct": 99.99928692544916,
      "sharpe": -0.6266713399719118,
      "totalFees": 9133.89074070468,
      "maxConsecWins": 7,
      "maxConsecLosses": 21
    },
    {
      "runSet": "batch3",
      "strategy": "donchian-55-breakout",
      "name": "Donchian 55 channel breakout",
      "market": "EUR",
      "symbol": "EURUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Enter on a close beyond the prior 55-bar high/low (classic Turtle channel); 1.5x ATR stop; 2R target",
      "netPnl": -7399.44013438066,
      "netPnlPct": -73.9944013438066,
      "totalTrades": 219,
      "wins": 71,
      "losses": 148,
      "winRate": 32.42009132420091,
      "profitFactor": 0.47226442188842477,
      "grossProfit": 6621.672788986152,
      "grossLoss": 14021.11292336682,
      "avgWin": 93.26299702797398,
      "avgLoss": 94.73724948220824,
      "expectancy": -33.787397873884295,
      "avgRMultiple": -0.6238673667008692,
      "bestTrade": 153.90224539632308,
      "worstTrade": -188.5567278287529,
      "maxDrawdown": 7399.440134380663,
      "maxDrawdownPct": 73.99440134380663,
      "sharpe": -0.30775581033616023,
      "totalFees": 7440.3655890120535,
      "maxConsecWins": 4,
      "maxConsecLosses": 16
    },
    {
      "runSet": "batch3",
      "strategy": "breakout-100-1h",
      "name": "100-bar high/low breakout",
      "market": "EUR",
      "symbol": "EURUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Enter on a close beyond the prior 100-bar high/low; 1.5x ATR stop; 2R target",
      "netPnl": -5780.154362056695,
      "netPnlPct": -57.80154362056695,
      "totalTrades": 159,
      "wins": 54,
      "losses": 105,
      "winRate": 33.9622641509434,
      "profitFactor": 0.509572255822772,
      "grossProfit": 6005.790521126532,
      "grossLoss": 11785.944883183223,
      "avgWin": 111.21834298382467,
      "avgLoss": 112.24709412555451,
      "expectancy": -36.353172088406886,
      "avgRMultiple": -0.5411929391039688,
      "bestTrade": 161.00784564668697,
      "worstTrade": -185.9484044815764,
      "maxDrawdown": 5780.154362056688,
      "maxDrawdownPct": 57.80154362056689,
      "sharpe": -0.292617730664152,
      "totalFees": 6236.462115730441,
      "maxConsecWins": 5,
      "maxConsecLosses": 11
    },
    {
      "runSet": "batch3",
      "strategy": "rsi-14-reversion",
      "name": "RSI(14) 30/70 reversion",
      "market": "EUR",
      "symbol": "EURUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Long when RSI(14) crosses up through 30, short when it crosses down through 70; 1.5x ATR stop; 2R target",
      "netPnl": -7281.964054604206,
      "netPnlPct": -72.81964054604205,
      "totalTrades": 184,
      "wins": 53,
      "losses": 131,
      "winRate": 28.804347826086957,
      "profitFactor": 0.3821054761131987,
      "grossProfit": 4503.1607087579505,
      "grossLoss": 11785.12476336217,
      "avgWin": 84.96529639165945,
      "avgLoss": 89.96278445314633,
      "expectancy": -39.57589160110981,
      "avgRMultiple": -0.7562551061944501,
      "bestTrade": 173.19815137229648,
      "worstTrade": -181.73132697414127,
      "maxDrawdown": 7638.1032882713525,
      "maxDrawdownPct": 74.1269021677116,
      "sharpe": -0.3062354603286836,
      "totalFees": 6101.047308539786,
      "maxConsecWins": 4,
      "maxConsecLosses": 19
    },
    {
      "runSet": "batch3",
      "strategy": "rsi-7-reversion",
      "name": "RSI(7) 20/80 reversion",
      "market": "EUR",
      "symbol": "EURUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Long when RSI(7) crosses up through 20, short when it crosses down through 80; 1.5x ATR stop; 2R target",
      "netPnl": -8000.607983464127,
      "netPnlPct": -80.00607983464127,
      "totalTrades": 202,
      "wins": 50,
      "losses": 152,
      "winRate": 24.752475247524753,
      "profitFactor": 0.3433876875417194,
      "grossProfit": 4184.067557435756,
      "grossLoss": 12184.67554089987,
      "avgWin": 83.68135114871511,
      "avgLoss": 80.16233908486757,
      "expectancy": -39.60697021516894,
      "avgRMultiple": -0.8229032588782698,
      "bestTrade": 169.56473664914367,
      "worstTrade": -172.42302866518952,
      "maxDrawdown": 8357.393138131656,
      "maxDrawdownPct": 80.94646896899849,
      "sharpe": -0.42300521199325547,
      "totalFees": 5706.613049413009,
      "maxConsecWins": 3,
      "maxConsecLosses": 18
    },
    {
      "runSet": "batch3",
      "strategy": "liquidity-sweep-1h",
      "name": "Liquidity sweep reversal (1H)",
      "market": "EUR",
      "symbol": "EURUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Enter when price sweeps a recent swing high/low then reverses, on the 1H; structure stop; 2R target",
      "netPnl": -9825.934258762212,
      "netPnlPct": -98.25934258762213,
      "totalTrades": 439,
      "wins": 61,
      "losses": 378,
      "winRate": 13.895216400911162,
      "profitFactor": 0.13844492881927092,
      "grossProfit": 1578.9481305853853,
      "grossLoss": 11404.882389347604,
      "avgWin": 25.884395583366974,
      "avgLoss": 30.17164653266562,
      "expectancy": -22.382538174856975,
      "avgRMultiple": -3.4470148174424162,
      "bestTrade": 127.49306962581667,
      "worstTrade": -179.86558944096328,
      "maxDrawdown": 9845.137874146838,
      "maxDrawdownPct": 98.26267887229578,
      "sharpe": -0.4015491415481876,
      "totalFees": 8898.874838198139,
      "maxConsecWins": 3,
      "maxConsecLosses": 29
    },
    {
      "runSet": "batch3",
      "strategy": "fvg-retrace-1h",
      "name": "Fair value gap retrace (1H)",
      "market": "EUR",
      "symbol": "EURUSDT",
      "timeframe": "1h",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 8760,
      "codedRules": "Enter when price retraces 50% into a fresh fair value gap, on the 1H; structure stop; 2R target",
      "netPnl": -3761.477543371464,
      "netPnlPct": -37.61477543371464,
      "totalTrades": 91,
      "wins": 24,
      "losses": 67,
      "winRate": 26.373626373626376,
      "profitFactor": 0.39604763738447113,
      "grossProfit": 2466.6254929039146,
      "grossLoss": 6228.103036275378,
      "avgWin": 102.77606220432978,
      "avgLoss": 92.95676173545341,
      "expectancy": -41.334918059027075,
      "avgRMultiple": -1.160731156600647,
      "bestTrade": 166.9294079680379,
      "worstTrade": -169.13666666666407,
      "maxDrawdown": 3994.756011200676,
      "maxDrawdownPct": 39.947560112006755,
      "sharpe": -0.14583091738392978,
      "totalFees": 3214.3612849434653,
      "maxConsecWins": 3,
      "maxConsecLosses": 12
    },
    {
      "runSet": "batch3",
      "strategy": "displacement-momentum",
      "name": "Displacement momentum",
      "market": "EUR",
      "symbol": "EURUSDT",
      "timeframe": "15m",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 35040,
      "codedRules": "Enter in the direction of an outsized (2x ATR) displacement candle; 1.5x ATR stop; 2R target",
      "netPnl": -9650.55287010234,
      "netPnlPct": -96.5055287010234,
      "totalTrades": 397,
      "wins": 119,
      "losses": 278,
      "winRate": 29.974811083123427,
      "profitFactor": 0.2925790842167702,
      "grossProfit": 3991.329430504522,
      "grossLoss": 13641.882300606863,
      "avgWin": 33.540583449617834,
      "avgLoss": 49.07151906693116,
      "expectancy": -24.308697405799343,
      "avgRMultiple": -1.2202475281190517,
      "bestTrade": 134.00012417400106,
      "worstTrade": -175.6459957866692,
      "maxDrawdown": 9650.552870102347,
      "maxDrawdownPct": 96.50552870102347,
      "sharpe": -0.32364364941081775,
      "totalFees": 10804.029682509088,
      "maxConsecWins": 6,
      "maxConsecLosses": 9
    },
    {
      "runSet": "batch3",
      "strategy": "mss-continuation",
      "name": "Market structure shift continuation",
      "market": "EUR",
      "symbol": "EURUSDT",
      "timeframe": "15m",
      "windowStart": "2025-01",
      "windowEnd": "2025-12",
      "barsProcessed": 35040,
      "codedRules": "Enter on a confirmed market-structure shift (close beyond the last swing); structure stop; 2R target",
      "netPnl": -4019.297792058234,
      "netPnlPct": -40.19297792058234,
      "totalTrades": 151,
      "wins": 51,
      "losses": 100,
      "winRate": 33.77483443708609,
      "profitFactor": 0.6404546138189012,
      "grossProfit": 7159.535107868802,
      "grossLoss": 11178.832899927043,
      "avgWin": 140.38304133076082,
      "avgLoss": 111.78832899927043,
      "expectancy": -26.617866172571084,
      "avgRMultiple": -0.3474812400995526,
      "bestTrade": 183.30813310462855,
      "worstTrade": -181.281954391357,
      "maxDrawdown": 4509.43048433693,
      "maxDrawdownPct": 42.98735408424447,
      "sharpe": -0.2109563120619263,
      "totalFees": 4461.00294671635,
      "maxConsecWins": 5,
      "maxConsecLosses": 8
    }
  ]
}