{
 "generated_at": "2026-10-10T06:23:22+00:00",
 "last_run_at": "2026-10-10T06:22:51+00:00",
 "asof": "2026-10-10",
 "name": "seyir",
 "default_model": "momentum_9_1",
 "notional": 100000.0,
 "fee_per_order": 1.5,
 "disaster_stop_pct": 0.2,
 "seal": {
  "id": 5,
  "sealed_on": "2026-10-02",
  "model": "momentum_9_1",
  "model_version": "f518dde5d20d",
  "sha256": "94d422a1c30190c78f1dfb72caa2afecce95a376705b279325169362349e8dda",
  "note": "From 7 October, the 40% target is removed. The 20% stop stays. Over ten years of testing the target cost about 14 points of return a year; the stop alone cost less than one. A position held on that day loses its target. Every sale a target already made stays as recorded.",
  "rules_md": "# The rule, sealed 2026-10-02\n\nmodel: momentum_9_1 \u2014 9-1 momentum \u00b7 top 20 \u00b7 equal weight (version f518dde5d20d)\n\n## What the rule does\n- score = total return over the last 12 months, skipping the most recent month (Jegadeesh\u2013Titman 12-1; the skip avoids the one-month reversal)\n- eligible = a name whose close is above its own 200-day average and which has 13 months of history\n- hold the top 20 eligible names by score, equal weight, capped at 10% each\n- regime filter: when SPY closes below its 200-day average the model holds cash\n- data guard: a name with a single-day move over 40% inside the lookback is excluded and named \u2014 a jump that size is a corporate action or a bad bar, not momentum, until verified\n- rebalance every 21 trading days; 10 bps per side assumed on every change\n- variant: nine-month lookback (189 bars) instead of twelve \u2014 the rolling out-of-sample tuner chose it from 2022 on once it was in the grid; a canonical horizon, not a fitted value, but the grid was widened after the sweep showed it ahead\n\n## How it is run on paper\n- universe: app/universe/seed_2026-07-25.csv \u2014 S&P 500, S&P MidCap 400 and Nasdaq-100 index membership, refreshed yearly; a name that leaves is dropped, a name that joins is added on the next refresh\n- cadence: a decision every 21 US trading days on the close; nothing is traded between decisions\n- fills: at the NEXT session's close, never at the price the decision was made on\n- notional: 100,000 USD on paper; no real money follows the page\n- fee: 1.50 USD per order, charged on every fill\n- the resting exit: a stop-loss 20% below each entry, placed against the FILL and never moved. The whole position is sold the first day the price reaches it. For every bar before 2026-10-07 the book also held a target 40% above each entry, set the same way. From 2026-10-07 on there is no target; the stop is the only resting exit\n- from when: the bracket applies to every bar from 2026-09-13 onward. A position opened before that day was bought under the rule as it stood then \u2014 a stop, no target. The target is a fixed multiple of the fill, so it was already implied at the buy; an earlier seal corrected it onto that position too, armed for every bar from 2026-09-21 onward and never for a bar before it \u2014 unchanged by this seal. Its stop leg has been live since 2026-09-13, unchanged. A rule change is sealed before it applies; it is never applied backwards to bars or positions that predate it\n- the target is removed: from 2026-10-07 on, every position \u2014 bought before or after that day \u2014 keeps its stop and nothing else. A position held on that day loses its target from that day. The measured reason: over ten years of testing, the 40% target cost about 14 points of return a year, while the 20% stop alone cost less than one. Every sale a target already made, and every record of it, stays exactly as it was written. This is sealed before it applies. It is never applied backwards\n- what a daily price can and cannot settle: a price that opened past a level is recorded at that open, not at the level, because it never traded there. Every sale says which level fired and on what day. On a bar before 2026-10-07 that reached BOTH levels, the stop is recorded, never the target; a daily bar cannot say which came first\n- the regime filter, when it says cash, sells everything on the decision day and waits\n\n## What the evidence cannot claim\n- survivorship: the universe is TODAY's S&P 500, S&P MidCap 400 and Nasdaq-100 membership; names that left those indices during the test window are absent. Both sides share that survivor universe, but the comparison is NOT fully fair: momentum buys the high-flyers that later disappeared, so its relative edge is optimistic too, not only every absolute figure. Point-in-time membership is the fix and is not built\n- returns are close-to-close on dividend-adjusted prices (dividends reinvested), before tax; a name whose price stops updating is held at its last price until the next rebalance drops it\n- costs: 10 bps per side on every weight change; no slippage model beyond that\n- this configuration is a variant of momentum_12_1 chosen on THIS data (its own rules line says which knob and why) \u2014 an in-sample selection, not the literature's default; its edge is measured on the same years that picked it\n\n## Changes\n- Each rule change is sealed here before it takes effect. Its date and sha256 are recorded above and in the change log. The version names the model's own settings and changes only when one of those settings does.\n"
 },
 "seal_matches_code": {
  "matches": true,
  "live_sha256": "94d422a1c30190c78f1dfb72caa2afecce95a376705b279325169362349e8dda",
  "code_sha256": "94d422a1c30190c78f1dfb72caa2afecce95a376705b279325169362349e8dda",
  "sealed_on": "2026-10-02",
  "text_matches_its_own_hash": true
 },
 "schedule": {
  "mode": "preview",
  "is_due": false,
  "anchor_date": "2026-09-08",
  "every_bars": 21,
  "rebalance_bar": "2026-10-07",
  "next_rebalance_bar": "2026-11-05",
  "bars_until_due": 19,
  "fills_at": "next session's close",
  "inherited": false,
  "beyond_calendar": false,
  "calendar_known_through": "2028-12-31",
  "reason": "not a rebalance day \u2014 next on 2026-11-05 (19 trading days); the model only trades on its schedule, exactly as tested",
  "day": 24,
  "due_bars": [
   "2026-09-08",
   "2026-10-07"
  ]
 },
 "models": {
  "momentum_12_1": {
   "label": "12-1 momentum \u00b7 top 20 \u00b7 equal weight \u00b7 200-day trend and regime filters",
   "rules": [
    "score = total return over the last 12 months, skipping the most recent month (Jegadeesh\u2013Titman 12-1; the skip avoids the one-month reversal)",
    "eligible = a name whose close is above its own 200-day average and which has 13 months of history",
    "hold the top 20 eligible names by score, equal weight, capped at 10% each",
    "regime filter: when SPY closes below its 200-day average the model holds cash",
    "data guard: a name with a single-day move over 40% inside the lookback is excluded and named \u2014 a jump that size is a corporate action or a bad bar, not momentum, until verified",
    "rebalance every 21 trading days; 10 bps per side assumed on every change",
    "parameters are the literature defaults, fixed before any of this data was looked at \u2014 nothing here was tuned on the backtest"
   ],
   "version": "7cbf403bd90a",
   "is_default": false,
   "scoreboard": {
    "n_fills": 47,
    "n_stops": 1,
    "n_targets": 0,
    "n_executable_recommendations": 2,
    "fees_paid": 70.5,
    "since": "2026-09-09",
    "verdict": "insufficient_evidence",
    "nav": 101656.53,
    "asof": "2026-10-09",
    "return_pct": 1.66,
    "max_drawdown_pct": -10.52,
    "cash_only_return_pct": 0.0,
    "benchmarks_return_pct": {
     "SPY": 2.12,
     "QQQ": 4.88
    },
    "benchmarks_edge_pct": {
     "SPY": -0.46,
     "QQQ": -3.22
    },
    "benchmarks_status": {
     "SPY": null,
     "QQQ": null
    }
   },
   "series": [
    {
     "date": "2026-09-09",
     "nav": 99970.0
    },
    {
     "date": "2026-09-10",
     "nav": 96535.28
    },
    {
     "date": "2026-09-11",
     "nav": 98301.55
    },
    {
     "date": "2026-09-14",
     "nav": 90491.61
    },
    {
     "date": "2026-09-15",
     "nav": 89454.44
    },
    {
     "date": "2026-09-16",
     "nav": 90914.01
    },
    {
     "date": "2026-09-17",
     "nav": 93490.48
    },
    {
     "date": "2026-09-18",
     "nav": 97067.65
    },
    {
     "date": "2026-09-21",
     "nav": 100402.39
    },
    {
     "date": "2026-09-22",
     "nav": 101947.51
    },
    {
     "date": "2026-09-23",
     "nav": 100887.12
    },
    {
     "date": "2026-09-24",
     "nav": 100726.15
    },
    {
     "date": "2026-09-25",
     "nav": 102453.54
    },
    {
     "date": "2026-09-28",
     "nav": 100513.33
    },
    {
     "date": "2026-09-29",
     "nav": 102301.47
    },
    {
     "date": "2026-09-30",
     "nav": 102669.78
    },
    {
     "date": "2026-10-01",
     "nav": 105815.51
    },
    {
     "date": "2026-10-02",
     "nav": 107259.62
    },
    {
     "date": "2026-10-05",
     "nav": 107297.19
    },
    {
     "date": "2026-10-06",
     "nav": 106645.05
    },
    {
     "date": "2026-10-07",
     "nav": 105041.38
    },
    {
     "date": "2026-10-08",
     "nav": 100771.12
    },
    {
     "date": "2026-10-09",
     "nav": 101656.53
    }
   ],
   "benchmark_series": {
    "SPY": [
     {
      "date": "2026-09-09",
      "nav": 100000.0
     },
     {
      "date": "2026-09-10",
      "nav": 99400.58
     },
     {
      "date": "2026-09-11",
      "nav": 100247.9
     },
     {
      "date": "2026-09-14",
      "nav": 99800.63
     },
     {
      "date": "2026-09-15",
      "nav": 99342.86
     },
     {
      "date": "2026-09-16",
      "nav": 98904.77
     },
     {
      "date": "2026-09-17",
      "nav": 100026.23
     },
     {
      "date": "2026-09-18",
      "nav": 99906.87
     },
     {
      "date": "2026-09-21",
      "nav": 101455.93
     },
     {
      "date": "2026-09-22",
      "nav": 101440.19
     },
     {
      "date": "2026-09-23",
      "nav": 100709.6
     },
     {
      "date": "2026-09-24",
      "nav": 100626.96
     },
     {
      "date": "2026-09-25",
      "nav": 101173.92
     },
     {
      "date": "2026-09-28",
      "nav": 100421.03
     },
     {
      "date": "2026-09-29",
      "nav": 100236.09
     },
     {
      "date": "2026-09-30",
      "nav": 100030.17
     },
     {
      "date": "2026-10-01",
      "nav": 100208.55
     },
     {
      "date": "2026-10-02",
      "nav": 100949.63
     },
     {
      "date": "2026-10-05",
      "nav": 101630.38
     },
     {
      "date": "2026-10-06",
      "nav": 102189.14
     },
     {
      "date": "2026-10-07",
      "nav": 101943.85
     },
     {
      "date": "2026-10-08",
      "nav": 101512.33
     },
     {
      "date": "2026-10-09",
      "nav": 102120.93
     }
    ],
    "QQQ": [
     {
      "date": "2026-09-09",
      "nav": 100000.0
     },
     {
      "date": "2026-09-10",
      "nav": 98936.22
     },
     {
      "date": "2026-09-11",
      "nav": 99800.37
     },
     {
      "date": "2026-09-14",
      "nav": 99004.62
     },
     {
      "date": "2026-09-15",
      "nav": 98356.85
     },
     {
      "date": "2026-09-16",
      "nav": 98381.98
     },
     {
      "date": "2026-09-17",
      "nav": 100085.16
     },
     {
      "date": "2026-09-18",
      "nav": 100717.57
     },
     {
      "date": "2026-09-21",
      "nav": 103512.44
     },
     {
      "date": "2026-09-22",
      "nav": 104348.68
     },
     {
      "date": "2026-09-23",
      "nav": 103476.15
     },
     {
      "date": "2026-09-24",
      "nav": 103460.79
     },
     {
      "date": "2026-09-25",
      "nav": 103935.45
     },
     {
      "date": "2026-09-28",
      "nav": 102822.8
     },
     {
      "date": "2026-09-29",
      "nav": 103018.25
     },
     {
      "date": "2026-09-30",
      "nav": 103275.12
     },
     {
      "date": "2026-10-01",
      "nav": 103590.63
     },
     {
      "date": "2026-10-02",
      "nav": 104644.64
     },
     {
      "date": "2026-10-05",
      "nav": 105568.82
     },
     {
      "date": "2026-10-06",
      "nav": 106051.85
     },
     {
      "date": "2026-10-07",
      "nav": 105782.41
     },
     {
      "date": "2026-10-08",
      "nav": 104365.43
     },
     {
      "date": "2026-10-09",
      "nav": 104880.57
     }
    ]
   },
   "positions": [
    {
     "ticker": "AMD",
     "shares": 8.13,
     "held_since": "2026-09-09",
     "entry_price": 521.0999755859375,
     "stop_loss": 416.88,
     "target": null,
     "current_price": 608.0999755859375,
     "priced_on": "2026-10-09",
     "value": 4943.85,
     "return_pct": 16.7,
     "weight_pct": 4.9
    },
    {
     "ticker": "ATI",
     "shares": 27.76,
     "held_since": "2026-09-09",
     "entry_price": 206.5399932861328,
     "stop_loss": 165.232,
     "target": null,
     "current_price": 191.83999633789062,
     "priced_on": "2026-10-09",
     "value": 5325.48,
     "return_pct": -7.12,
     "weight_pct": 5.2
    },
    {
     "ticker": "CIEN",
     "shares": 11.76,
     "held_since": "2026-10-08",
     "entry_price": 425.92999267578125,
     "stop_loss": 340.744,
     "target": null,
     "current_price": 449.7699890136719,
     "priced_on": "2026-10-09",
     "value": 5289.3,
     "return_pct": 5.6,
     "weight_pct": 5.2
    },
    {
     "ticker": "COHR",
     "shares": 15.7,
     "held_since": "2026-09-09",
     "entry_price": 303.4800109863281,
     "stop_loss": 242.784,
     "target": null,
     "current_price": 312.6199951171875,
     "priced_on": "2026-10-09",
     "value": 4908.13,
     "return_pct": 3.01,
     "weight_pct": 4.8
    },
    {
     "ticker": "DELL",
     "shares": 9.07,
     "held_since": "2026-09-09",
     "entry_price": 535.25,
     "stop_loss": 428.2,
     "target": null,
     "current_price": 586.0599975585938,
     "priced_on": "2026-10-09",
     "value": 5315.56,
     "return_pct": 9.49,
     "weight_pct": 5.2
    },
    {
     "ticker": "HPE",
     "shares": 72.85,
     "held_since": "2026-10-08",
     "entry_price": 71.0,
     "stop_loss": 56.8,
     "target": null,
     "current_price": 73.45999908447266,
     "priced_on": "2026-10-09",
     "value": 5351.56,
     "return_pct": 3.46,
     "weight_pct": 5.3
    },
    {
     "ticker": "INTC",
     "shares": 46.43,
     "held_since": "2026-09-09",
     "entry_price": 106.23999786376953,
     "stop_loss": 84.992,
     "target": null,
     "current_price": 104.69999694824219,
     "priced_on": "2026-10-09",
     "value": 4861.22,
     "return_pct": -1.45,
     "weight_pct": 4.8
    },
    {
     "ticker": "LITE",
     "shares": 4.73,
     "held_since": "2026-09-09",
     "entry_price": 988.97998046875,
     "stop_loss": 791.184,
     "target": null,
     "current_price": 1103.35498046875,
     "priced_on": "2026-10-09",
     "value": 5218.87,
     "return_pct": 11.56,
     "weight_pct": 5.1
    },
    {
     "ticker": "MRVL",
     "shares": 18.45,
     "held_since": "2026-09-09",
     "entry_price": 235.00999450683594,
     "stop_loss": 188.008,
     "target": null,
     "current_price": 275.2799987792969,
     "priced_on": "2026-10-09",
     "value": 5078.92,
     "return_pct": 17.14,
     "weight_pct": 5.0
    },
    {
     "ticker": "MU",
     "shares": 4.83,
     "held_since": "2026-09-09",
     "entry_price": 1027.77001953125,
     "stop_loss": 822.216,
     "target": null,
     "current_price": 1029.0,
     "priced_on": "2026-10-09",
     "value": 4970.07,
     "return_pct": 0.12,
     "weight_pct": 4.9
    },
    {
     "ticker": "PBF",
     "shares": 62.76,
     "held_since": "2026-10-08",
     "entry_price": 89.33999633789062,
     "stop_loss": 71.472,
     "target": null,
     "current_price": 84.2699966430664,
     "priced_on": "2026-10-09",
     "value": 5288.78,
     "return_pct": -5.67,
     "weight_pct": 5.2
    },
    {
     "ticker": "ROIV",
     "shares": 151.14,
     "held_since": "2026-10-08",
     "entry_price": 34.209999084472656,
     "stop_loss": 27.368,
     "target": null,
     "current_price": 35.439998626708984,
     "priced_on": "2026-10-09",
     "value": 5356.4,
     "return_pct": 3.6,
     "weight_pct": 5.3
    },
    {
     "ticker": "SMTC",
     "shares": 27.1,
     "held_since": "2026-10-08",
     "entry_price": 187.49000549316406,
     "stop_loss": 149.992,
     "target": null,
     "current_price": 187.3000030517578,
     "priced_on": "2026-10-09",
     "value": 5075.83,
     "return_pct": -0.1,
     "weight_pct": 5.0
    },
    {
     "ticker": "SNDK",
     "shares": 3.1,
     "held_since": "2026-09-09",
     "entry_price": 1764.1700439453125,
     "stop_loss": 1411.336,
     "target": null,
     "current_price": 1581.8199462890625,
     "priced_on": "2026-10-09",
     "value": 4903.64,
     "return_pct": -10.34,
     "weight_pct": 4.8
    },
    {
     "ticker": "STX",
     "shares": 6.5,
     "held_since": "2026-09-09",
     "entry_price": 885.9199829101562,
     "stop_loss": 708.736,
     "target": null,
     "current_price": 783.0,
     "priced_on": "2026-10-09",
     "value": 5089.5,
     "return_pct": -11.62,
     "weight_pct": 5.0
    },
    {
     "ticker": "TER",
     "shares": 12.75,
     "held_since": "2026-09-09",
     "entry_price": 383.69000244140625,
     "stop_loss": 306.952,
     "target": null,
     "current_price": 402.67999267578125,
     "priced_on": "2026-10-09",
     "value": 5134.17,
     "return_pct": 4.95,
     "weight_pct": 5.1
    },
    {
     "ticker": "VIAV",
     "shares": 113.51,
     "held_since": "2026-09-09",
     "entry_price": 39.18000030517578,
     "stop_loss": 31.344,
     "target": null,
     "current_price": 45.459999084472656,
     "priced_on": "2026-10-09",
     "value": 5160.16,
     "return_pct": 16.03,
     "weight_pct": 5.1
    },
    {
     "ticker": "VICR",
     "shares": 18.57,
     "held_since": "2026-10-08",
     "entry_price": 262.32000732421875,
     "stop_loss": 209.856,
     "target": null,
     "current_price": 266.07000732421875,
     "priced_on": "2026-10-09",
     "value": 4940.92,
     "return_pct": 1.43,
     "weight_pct": 4.9
    },
    {
     "ticker": "VLO",
     "shares": 12.38,
     "held_since": "2026-10-08",
     "entry_price": 443.79998779296875,
     "stop_loss": 355.04,
     "target": null,
     "current_price": 433.75,
     "priced_on": "2026-10-09",
     "value": 5369.83,
     "return_pct": -2.26,
     "weight_pct": 5.3
    },
    {
     "ticker": "WDC",
     "shares": 12.95,
     "held_since": "2026-09-09",
     "entry_price": 482.2799987792969,
     "stop_loss": 385.824,
     "target": null,
     "current_price": 397.2799987792969,
     "priced_on": "2026-10-09",
     "value": 5144.78,
     "return_pct": -17.62,
     "weight_pct": 5.1
    }
   ],
   "pending_orders": [],
   "exits": [
    {
     "ticker": "ARWR",
     "held_since": "2026-09-09",
     "entry_price": 82.63,
     "opening_price": 82.62999725341797,
     "stop_loss": 66.104,
     "target": null,
     "sold_on": "2026-09-16",
     "sold_price": 66.104,
     "shares": 58.75,
     "reason": "stop-loss",
     "level": 66.104,
     "basis": "level",
     "closes_the_lot": true,
     "return_pct": -20.0,
     "realized_pnl_usd": -973.9,
     "fees": 3.0
    },
    {
     "ticker": "MU",
     "held_since": "2026-09-09",
     "entry_price": 1027.77,
     "opening_price": 1027.77001953125,
     "stop_loss": 822.216,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 1035.8399658203125,
     "shares": 0.17,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 0.79,
     "realized_pnl_usd": -0.18,
     "fees": 1.55
    },
    {
     "ticker": "LITE",
     "held_since": "2026-09-09",
     "entry_price": 988.98,
     "opening_price": 988.97998046875,
     "stop_loss": 791.184,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 1048.5999755859375,
     "shares": 0.38,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 6.03,
     "realized_pnl_usd": 21.04,
     "fees": 1.61
    },
    {
     "ticker": "INTC",
     "held_since": "2026-09-09",
     "entry_price": 106.24,
     "opening_price": 106.23999786376953,
     "stop_loss": 84.992,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 107.08000183105469,
     "shares": 1.43,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 0.79,
     "realized_pnl_usd": -0.34,
     "fees": 1.54
    },
    {
     "ticker": "COHR",
     "held_since": "2026-09-09",
     "entry_price": 303.48,
     "opening_price": 303.4800109863281,
     "stop_loss": 242.784,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 302.3500061035156,
     "shares": 0.86,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": -0.37,
     "realized_pnl_usd": -2.55,
     "fees": 1.58
    },
    {
     "ticker": "DELL",
     "held_since": "2026-09-09",
     "entry_price": 535.25,
     "opening_price": 535.25,
     "stop_loss": 428.2,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 574.5499877929688,
     "shares": 0.3,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 7.34,
     "realized_pnl_usd": 10.24,
     "fees": 1.55
    },
    {
     "ticker": "MRVL",
     "held_since": "2026-09-09",
     "entry_price": 235.01,
     "opening_price": 235.00999450683594,
     "stop_loss": 188.008,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 274.6600036621094,
     "shares": 3.73,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 16.87,
     "realized_pnl_usd": 146.14,
     "fees": 1.75
    },
    {
     "ticker": "VIAV",
     "held_since": "2026-09-09",
     "entry_price": 39.18,
     "opening_price": 39.18000030517578,
     "stop_loss": 31.344,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 44.09000015258789,
     "shares": 15.52,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 12.53,
     "realized_pnl_usd": 74.52,
     "fees": 1.68
    },
    {
     "ticker": "AMAT",
     "held_since": "2026-09-09",
     "entry_price": 468.85,
     "opening_price": 468.8500061035156,
     "stop_loss": 375.08,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 509.57000732421875,
     "shares": 10.58,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": 8.69,
     "realized_pnl_usd": 427.82,
     "fees": 3.0
    },
    {
     "ticker": "AMD",
     "held_since": "2026-09-09",
     "entry_price": 521.1,
     "opening_price": 521.0999755859375,
     "stop_loss": 416.88,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 620.6799926757812,
     "shares": 1.76,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 19.11,
     "realized_pnl_usd": 173.49,
     "fees": 1.77
    },
    {
     "ticker": "TER",
     "held_since": "2026-09-09",
     "entry_price": 383.69,
     "opening_price": 383.69000244140625,
     "stop_loss": 306.952,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 398.7200012207031,
     "shares": 0.69,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 3.92,
     "realized_pnl_usd": 8.79,
     "fees": 1.58
    },
    {
     "ticker": "SITM",
     "held_since": "2026-09-09",
     "entry_price": 589.87,
     "opening_price": 589.8699951171875,
     "stop_loss": 471.896,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 645.0599975585938,
     "shares": 8.35,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": 9.36,
     "realized_pnl_usd": 457.84,
     "fees": 3.0
    },
    {
     "ticker": "LRCX",
     "held_since": "2026-09-09",
     "entry_price": 315.84,
     "opening_price": 315.8399963378906,
     "stop_loss": 252.672,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 320.5899963378906,
     "shares": 15.6,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": 1.5,
     "realized_pnl_usd": 71.1,
     "fees": 3.0
    },
    {
     "ticker": "ONTO",
     "held_since": "2026-09-09",
     "entry_price": 278.4,
     "opening_price": 278.3999938964844,
     "stop_loss": 222.72,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 292.6700134277344,
     "shares": 17.79,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": 5.13,
     "realized_pnl_usd": 250.86,
     "fees": 3.0
    },
    {
     "ticker": "MKSI",
     "held_since": "2026-09-09",
     "entry_price": 268.05,
     "opening_price": 268.04998779296875,
     "stop_loss": 214.44,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 260.3800048828125,
     "shares": 18.83,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": -2.86,
     "realized_pnl_usd": -147.43,
     "fees": 3.0
    },
    {
     "ticker": "TTMI",
     "held_since": "2026-09-09",
     "entry_price": 124.25,
     "opening_price": 124.25,
     "stop_loss": 99.4,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 117.5,
     "shares": 38.65,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": -5.43,
     "realized_pnl_usd": -263.89,
     "fees": 3.0
    }
   ],
   "target_effect": {
    "model": "momentum_12_1",
    "n_target_exits": 0,
    "lots": [],
    "settled_delta_usd": 0,
    "n_lots_with_unreadable_bars": 0,
    "open_delta_usd": 0,
    "derivation": "per lot the target closed: the same lot carried on against its stop alone, same honesty rules; positive means holding on would have been worth more, i.e. the target cost that much. A lot whose stop has not fired yet is marked at the last close and counted separately \u2014 it is not settled. Not a parallel book: the stop-only path would hold different cash and size later rebalances differently, and that is not simulated. A lot whose window contains a bar that could not be read carries that bar's date: its number is a guess, not a measurement."
   },
   "cash": -1070.44,
   "cash_pct": -1.1
  },
  "momentum_6_1": {
   "label": "6-1 momentum \u00b7 top 20 \u00b7 equal weight \u00b7 200-day trend and regime filters",
   "rules": [
    "score = total return over the last 6 months, skipping the most recent month",
    "eligible = a name whose close is above its own 200-day average and which has 7 months of history",
    "hold the top 20 eligible names by score, equal weight, capped at 10% each",
    "regime filter: when SPY closes below its 200-day average the model holds cash",
    "data guard: a name with a single-day move over 40% inside the lookback is excluded and named",
    "rebalance every 21 trading days; 10 bps per side assumed on every change",
    "parameters fixed a priori, not tuned on the backtest"
   ],
   "version": "d266402ad004",
   "is_default": false,
   "scoreboard": {
    "n_fills": 45,
    "n_stops": 0,
    "n_targets": 0,
    "n_executable_recommendations": 2,
    "fees_paid": 67.5,
    "since": "2026-09-09",
    "verdict": "insufficient_evidence",
    "nav": 112194.8,
    "asof": "2026-10-09",
    "return_pct": 12.19,
    "max_drawdown_pct": -4.43,
    "cash_only_return_pct": 0.0,
    "benchmarks_return_pct": {
     "SPY": 2.12,
     "QQQ": 4.88
    },
    "benchmarks_edge_pct": {
     "SPY": 10.07,
     "QQQ": 7.31
    },
    "benchmarks_status": {
     "SPY": null,
     "QQQ": null
    }
   },
   "series": [
    {
     "date": "2026-09-09",
     "nav": 99970.0
    },
    {
     "date": "2026-09-10",
     "nav": 97269.7
    },
    {
     "date": "2026-09-11",
     "nav": 99265.27
    },
    {
     "date": "2026-09-14",
     "nav": 96751.96
    },
    {
     "date": "2026-09-15",
     "nav": 97379.73
    },
    {
     "date": "2026-09-16",
     "nav": 98178.47
    },
    {
     "date": "2026-09-17",
     "nav": 102118.91
    },
    {
     "date": "2026-09-18",
     "nav": 103172.31
    },
    {
     "date": "2026-09-21",
     "nav": 108207.5
    },
    {
     "date": "2026-09-22",
     "nav": 110058.14
    },
    {
     "date": "2026-09-23",
     "nav": 110157.7
    },
    {
     "date": "2026-09-24",
     "nav": 110481.73
    },
    {
     "date": "2026-09-25",
     "nav": 109884.95
    },
    {
     "date": "2026-09-28",
     "nav": 108404.1
    },
    {
     "date": "2026-09-29",
     "nav": 109309.71
    },
    {
     "date": "2026-09-30",
     "nav": 110076.79
    },
    {
     "date": "2026-10-01",
     "nav": 111371.46
    },
    {
     "date": "2026-10-02",
     "nav": 112900.87
    },
    {
     "date": "2026-10-05",
     "nav": 113207.35
    },
    {
     "date": "2026-10-06",
     "nav": 114591.9
    },
    {
     "date": "2026-10-07",
     "nav": 113205.0
    },
    {
     "date": "2026-10-08",
     "nav": 109512.55
    },
    {
     "date": "2026-10-09",
     "nav": 112194.8
    }
   ],
   "benchmark_series": {
    "SPY": [
     {
      "date": "2026-09-09",
      "nav": 100000.0
     },
     {
      "date": "2026-09-10",
      "nav": 99400.58
     },
     {
      "date": "2026-09-11",
      "nav": 100247.9
     },
     {
      "date": "2026-09-14",
      "nav": 99800.63
     },
     {
      "date": "2026-09-15",
      "nav": 99342.86
     },
     {
      "date": "2026-09-16",
      "nav": 98904.77
     },
     {
      "date": "2026-09-17",
      "nav": 100026.23
     },
     {
      "date": "2026-09-18",
      "nav": 99906.87
     },
     {
      "date": "2026-09-21",
      "nav": 101455.93
     },
     {
      "date": "2026-09-22",
      "nav": 101440.19
     },
     {
      "date": "2026-09-23",
      "nav": 100709.6
     },
     {
      "date": "2026-09-24",
      "nav": 100626.96
     },
     {
      "date": "2026-09-25",
      "nav": 101173.92
     },
     {
      "date": "2026-09-28",
      "nav": 100421.03
     },
     {
      "date": "2026-09-29",
      "nav": 100236.09
     },
     {
      "date": "2026-09-30",
      "nav": 100030.17
     },
     {
      "date": "2026-10-01",
      "nav": 100208.55
     },
     {
      "date": "2026-10-02",
      "nav": 100949.63
     },
     {
      "date": "2026-10-05",
      "nav": 101630.38
     },
     {
      "date": "2026-10-06",
      "nav": 102189.14
     },
     {
      "date": "2026-10-07",
      "nav": 101943.85
     },
     {
      "date": "2026-10-08",
      "nav": 101512.33
     },
     {
      "date": "2026-10-09",
      "nav": 102120.93
     }
    ],
    "QQQ": [
     {
      "date": "2026-09-09",
      "nav": 100000.0
     },
     {
      "date": "2026-09-10",
      "nav": 98936.22
     },
     {
      "date": "2026-09-11",
      "nav": 99800.37
     },
     {
      "date": "2026-09-14",
      "nav": 99004.62
     },
     {
      "date": "2026-09-15",
      "nav": 98356.85
     },
     {
      "date": "2026-09-16",
      "nav": 98381.98
     },
     {
      "date": "2026-09-17",
      "nav": 100085.16
     },
     {
      "date": "2026-09-18",
      "nav": 100717.57
     },
     {
      "date": "2026-09-21",
      "nav": 103512.44
     },
     {
      "date": "2026-09-22",
      "nav": 104348.68
     },
     {
      "date": "2026-09-23",
      "nav": 103476.15
     },
     {
      "date": "2026-09-24",
      "nav": 103460.79
     },
     {
      "date": "2026-09-25",
      "nav": 103935.45
     },
     {
      "date": "2026-09-28",
      "nav": 102822.8
     },
     {
      "date": "2026-09-29",
      "nav": 103018.25
     },
     {
      "date": "2026-09-30",
      "nav": 103275.12
     },
     {
      "date": "2026-10-01",
      "nav": 103590.63
     },
     {
      "date": "2026-10-02",
      "nav": 104644.64
     },
     {
      "date": "2026-10-05",
      "nav": 105568.82
     },
     {
      "date": "2026-10-06",
      "nav": 106051.85
     },
     {
      "date": "2026-10-07",
      "nav": 105782.41
     },
     {
      "date": "2026-10-08",
      "nav": 104365.43
     },
     {
      "date": "2026-10-09",
      "nav": 104880.57
     }
    ]
   },
   "positions": [
    {
     "ticker": "ALAB",
     "shares": 14.81,
     "held_since": "2026-09-09",
     "entry_price": 300.5400085449219,
     "stop_loss": 240.432,
     "target": null,
     "current_price": 342.2099914550781,
     "priced_on": "2026-10-09",
     "value": 5068.13,
     "return_pct": 13.87,
     "weight_pct": 4.5
    },
    {
     "ticker": "AMD",
     "shares": 8.76,
     "held_since": "2026-09-09",
     "entry_price": 521.0999755859375,
     "stop_loss": 416.88,
     "target": null,
     "current_price": 608.0999755859375,
     "priced_on": "2026-10-09",
     "value": 5326.96,
     "return_pct": 16.7,
     "weight_pct": 4.7
    },
    {
     "ticker": "AVTR",
     "shares": 368.75,
     "held_since": "2026-10-08",
     "entry_price": 15.390000343322754,
     "stop_loss": 12.312,
     "target": null,
     "current_price": 15.670000076293945,
     "priced_on": "2026-10-09",
     "value": 5778.31,
     "return_pct": 1.82,
     "weight_pct": 5.2
    },
    {
     "ticker": "CRWD",
     "shares": 21.32,
     "held_since": "2026-09-09",
     "entry_price": 207.8000030517578,
     "stop_loss": 166.24,
     "target": null,
     "current_price": 275.0400085449219,
     "priced_on": "2026-10-09",
     "value": 5863.85,
     "return_pct": 32.36,
     "weight_pct": 5.2
    },
    {
     "ticker": "DDOG",
     "shares": 20.86,
     "held_since": "2026-10-08",
     "entry_price": 273.79998779296875,
     "stop_loss": 219.04,
     "target": null,
     "current_price": 293.260009765625,
     "priced_on": "2026-10-09",
     "value": 6117.4,
     "return_pct": 7.11,
     "weight_pct": 5.5
    },
    {
     "ticker": "DELL",
     "shares": 9.78,
     "held_since": "2026-09-09",
     "entry_price": 535.25,
     "stop_loss": 428.2,
     "target": null,
     "current_price": 586.0599975585938,
     "priced_on": "2026-10-09",
     "value": 5731.67,
     "return_pct": 9.49,
     "weight_pct": 5.1
    },
    {
     "ticker": "DINO",
     "shares": 48.95,
     "held_since": "2026-10-08",
     "entry_price": 120.72000122070312,
     "stop_loss": 96.576,
     "target": null,
     "current_price": 121.30000305175781,
     "priced_on": "2026-10-09",
     "value": 5937.64,
     "return_pct": 0.48,
     "weight_pct": 5.3
    },
    {
     "ticker": "FTNT",
     "shares": 29.9,
     "held_since": "2026-09-09",
     "entry_price": 157.22000122070312,
     "stop_loss": 125.776,
     "target": null,
     "current_price": 194.75,
     "priced_on": "2026-10-09",
     "value": 5823.02,
     "return_pct": 23.87,
     "weight_pct": 5.2
    },
    {
     "ticker": "HPE",
     "shares": 78.52,
     "held_since": "2026-09-09",
     "entry_price": 58.900001525878906,
     "stop_loss": 47.12,
     "target": null,
     "current_price": 73.45999908447266,
     "priced_on": "2026-10-09",
     "value": 5768.08,
     "return_pct": 24.72,
     "weight_pct": 5.1
    },
    {
     "ticker": "HUM",
     "shares": 14.28,
     "held_since": "2026-09-09",
     "entry_price": 400.0199890136719,
     "stop_loss": 320.016,
     "target": null,
     "current_price": 431.8699951171875,
     "priced_on": "2026-10-09",
     "value": 6167.1,
     "return_pct": 7.96,
     "weight_pct": 5.5
    },
    {
     "ticker": "MRVL",
     "shares": 19.88,
     "held_since": "2026-09-09",
     "entry_price": 235.00999450683594,
     "stop_loss": 188.008,
     "target": null,
     "current_price": 275.2799987792969,
     "priced_on": "2026-10-09",
     "value": 5472.57,
     "return_pct": 17.14,
     "weight_pct": 4.9
    },
    {
     "ticker": "MU",
     "shares": 5.2,
     "held_since": "2026-09-09",
     "entry_price": 1027.77001953125,
     "stop_loss": 822.216,
     "target": null,
     "current_price": 1029.0,
     "priced_on": "2026-10-09",
     "value": 5350.8,
     "return_pct": 0.12,
     "weight_pct": 4.8
    },
    {
     "ticker": "NBIS",
     "shares": 23.87,
     "held_since": "2026-09-09",
     "entry_price": 240.35000610351562,
     "stop_loss": 192.28,
     "target": null,
     "current_price": 221.07000732421875,
     "priced_on": "2026-10-09",
     "value": 5276.94,
     "return_pct": -8.02,
     "weight_pct": 4.7
    },
    {
     "ticker": "NTAP",
     "shares": 24.01,
     "held_since": "2026-09-09",
     "entry_price": 184.74000549316406,
     "stop_loss": 147.792,
     "target": null,
     "current_price": 237.14999389648438,
     "priced_on": "2026-10-09",
     "value": 5693.97,
     "return_pct": 28.37,
     "weight_pct": 5.1
    },
    {
     "ticker": "OKTA",
     "shares": 25.96,
     "held_since": "2026-10-08",
     "entry_price": 220.2100067138672,
     "stop_loss": 176.168,
     "target": null,
     "current_price": 232.1300048828125,
     "priced_on": "2026-10-09",
     "value": 6026.09,
     "return_pct": 5.41,
     "weight_pct": 5.4
    },
    {
     "ticker": "PANW",
     "shares": 13.96,
     "held_since": "2026-09-09",
     "entry_price": 335.1000061035156,
     "stop_loss": 268.08,
     "target": null,
     "current_price": 418.7799987792969,
     "priced_on": "2026-10-09",
     "value": 5846.17,
     "return_pct": 24.97,
     "weight_pct": 5.2
    },
    {
     "ticker": "QLYS",
     "shares": 29.06,
     "held_since": "2026-09-09",
     "entry_price": 170.1699981689453,
     "stop_loss": 136.136,
     "target": null,
     "current_price": 202.4199981689453,
     "priced_on": "2026-10-09",
     "value": 5882.33,
     "return_pct": 18.95,
     "weight_pct": 5.2
    },
    {
     "ticker": "SMTC",
     "shares": 29.21,
     "held_since": "2026-10-08",
     "entry_price": 187.49000549316406,
     "stop_loss": 149.992,
     "target": null,
     "current_price": 187.3000030517578,
     "priced_on": "2026-10-09",
     "value": 5471.03,
     "return_pct": -0.1,
     "weight_pct": 4.9
    },
    {
     "ticker": "SNDK",
     "shares": 3.34,
     "held_since": "2026-09-09",
     "entry_price": 1764.1700439453125,
     "stop_loss": 1411.336,
     "target": null,
     "current_price": 1581.8199462890625,
     "priced_on": "2026-10-09",
     "value": 5283.28,
     "return_pct": -10.34,
     "weight_pct": 4.7
    },
    {
     "ticker": "STX",
     "shares": 7.01,
     "held_since": "2026-09-09",
     "entry_price": 885.9199829101562,
     "stop_loss": 708.736,
     "target": null,
     "current_price": 783.0,
     "priced_on": "2026-10-09",
     "value": 5488.83,
     "return_pct": -11.62,
     "weight_pct": 4.9
    }
   ],
   "pending_orders": [],
   "exits": [
    {
     "ticker": "ALAB",
     "held_since": "2026-09-09",
     "entry_price": 300.54,
     "opening_price": 300.5400085449219,
     "stop_loss": 240.432,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 347.04998779296875,
     "shares": 2.5,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 15.48,
     "realized_pnl_usd": 114.56,
     "fees": 1.72
    },
    {
     "ticker": "HPE",
     "held_since": "2026-09-09",
     "entry_price": 58.9,
     "opening_price": 58.900001525878906,
     "stop_loss": 47.12,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 71.0,
     "shares": 10.72,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 20.54,
     "realized_pnl_usd": 128.03,
     "fees": 1.68
    },
    {
     "ticker": "ARM",
     "held_since": "2026-09-09",
     "entry_price": 264.23,
     "opening_price": 264.2300109863281,
     "stop_loss": 211.384,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 275.2900085449219,
     "shares": 19.12,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": 4.19,
     "realized_pnl_usd": 208.47,
     "fees": 3.0
    },
    {
     "ticker": "AMD",
     "held_since": "2026-09-09",
     "entry_price": 521.1,
     "opening_price": 521.0999755859375,
     "stop_loss": 416.88,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 620.6799926757812,
     "shares": 1.13,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 19.11,
     "realized_pnl_usd": 110.85,
     "fees": 1.67
    },
    {
     "ticker": "MRVL",
     "held_since": "2026-09-09",
     "entry_price": 235.01,
     "opening_price": 235.00999450683594,
     "stop_loss": 188.008,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 274.6600036621094,
     "shares": 2.3,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 16.87,
     "realized_pnl_usd": 89.54,
     "fees": 1.66
    },
    {
     "ticker": "INTC",
     "held_since": "2026-09-09",
     "entry_price": 106.24,
     "opening_price": 106.23999786376953,
     "stop_loss": 84.992,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 107.08000183105469,
     "shares": 47.86,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": 0.79,
     "realized_pnl_usd": 37.2,
     "fees": 3.0
    },
    {
     "ticker": "PANW",
     "held_since": "2026-09-09",
     "entry_price": 335.1,
     "opening_price": 335.1000061035156,
     "stop_loss": 268.08,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 398.5,
     "shares": 0.88,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 18.92,
     "realized_pnl_usd": 54.2,
     "fees": 1.59
    },
    {
     "ticker": "SITM",
     "held_since": "2026-09-09",
     "entry_price": 589.87,
     "opening_price": 589.8699951171875,
     "stop_loss": 471.896,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 645.0599975585938,
     "shares": 8.35,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": 9.36,
     "realized_pnl_usd": 457.84,
     "fees": 3.0
    },
    {
     "ticker": "FLEX",
     "held_since": "2026-09-09",
     "entry_price": 112.68,
     "opening_price": 112.68000030517578,
     "stop_loss": 90.144,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 114.73999786376953,
     "shares": 43.74,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": 1.83,
     "realized_pnl_usd": 87.1,
     "fees": 3.0
    },
    {
     "ticker": "CRWD",
     "held_since": "2026-09-09",
     "entry_price": 207.8,
     "opening_price": 207.8000030517578,
     "stop_loss": 166.24,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 263.010009765625,
     "shares": 2.49,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 26.57,
     "realized_pnl_usd": 135.82,
     "fees": 1.66
    },
    {
     "ticker": "TWLO",
     "held_since": "2026-09-09",
     "entry_price": 227.19,
     "opening_price": 227.19000244140625,
     "stop_loss": 181.752,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 275.7699890136719,
     "shares": 22.13,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": 21.38,
     "realized_pnl_usd": 1072.08,
     "fees": 3.0
    },
    {
     "ticker": "FTNT",
     "held_since": "2026-09-09",
     "entry_price": 157.22,
     "opening_price": 157.22000122070312,
     "stop_loss": 125.776,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 189.10000610351562,
     "shares": 1.85,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 20.28,
     "realized_pnl_usd": 57.39,
     "fees": 1.59
    },
    {
     "ticker": "QLYS",
     "held_since": "2026-09-09",
     "entry_price": 170.17,
     "opening_price": 170.1699981689453,
     "stop_loss": 136.136,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 193.86000061035156,
     "shares": 0.3,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 13.92,
     "realized_pnl_usd": 5.59,
     "fees": 1.52
    },
    {
     "ticker": "NTAP",
     "held_since": "2026-09-09",
     "entry_price": 184.74,
     "opening_price": 184.74000549316406,
     "stop_loss": 147.792,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 231.0500030517578,
     "shares": 2.43,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 25.07,
     "realized_pnl_usd": 110.9,
     "fees": 1.64
    }
   ],
   "target_effect": {
    "model": "momentum_6_1",
    "n_target_exits": 0,
    "lots": [],
    "settled_delta_usd": 0,
    "n_lots_with_unreadable_bars": 0,
    "open_delta_usd": 0,
    "derivation": "per lot the target closed: the same lot carried on against its stop alone, same honesty rules; positive means holding on would have been worth more, i.e. the target cost that much. A lot whose stop has not fired yet is marked at the last close and counted separately \u2014 it is not settled. Not a parallel book: the stop-only path would hold different cash and size later rebalances differently, and that is not simulated. A lot whose window contains a bar that could not be read carries that bar's date: its number is a guess, not a measurement."
   },
   "cash": -1179.37,
   "cash_pct": -1.1
  },
  "momentum_12_1_sector4": {
   "label": "12-1 momentum \u00b7 top 20 \u00b7 at most 4 names per sector",
   "rules": [
    "score = total return over the last 12 months, skipping the most recent month (Jegadeesh\u2013Titman 12-1; the skip avoids the one-month reversal)",
    "eligible = a name whose close is above its own 200-day average and which has 13 months of history",
    "hold the top 20 eligible names by score, equal weight, capped at 10% each",
    "regime filter: when SPY closes below its 200-day average the model holds cash",
    "data guard: a name with a single-day move over 40% inside the lookback is excluded and named \u2014 a jump that size is a corporate action or a bad bar, not momentum, until verified",
    "rebalance every 21 trading days; 10 bps per side assumed on every change",
    "parameters are the literature defaults, fixed before any of this data was looked at \u2014 nothing here was tuned on the backtest",
    "variant: at most 4 of the 20 names from any one sector (study: \u22128 pts CAGR, \u22124 pts drawdown over ten years, in-sample)"
   ],
   "version": "b64c864c271b",
   "is_default": false,
   "scoreboard": {
    "n_fills": 49,
    "n_stops": 3,
    "n_targets": 0,
    "n_executable_recommendations": 2,
    "fees_paid": 73.5,
    "since": "2026-09-09",
    "verdict": "insufficient_evidence",
    "nav": 95769.24,
    "asof": "2026-10-09",
    "return_pct": -4.23,
    "max_drawdown_pct": -6.38,
    "cash_only_return_pct": 0.0,
    "benchmarks_return_pct": {
     "SPY": 2.12,
     "QQQ": 4.88
    },
    "benchmarks_edge_pct": {
     "SPY": -6.35,
     "QQQ": -9.11
    },
    "benchmarks_status": {
     "SPY": null,
     "QQQ": null
    }
   },
   "series": [
    {
     "date": "2026-09-09",
     "nav": 99970.0
    },
    {
     "date": "2026-09-10",
     "nav": 97562.99
    },
    {
     "date": "2026-09-11",
     "nav": 97872.87
    },
    {
     "date": "2026-09-14",
     "nav": 94507.74
    },
    {
     "date": "2026-09-15",
     "nav": 94001.69
    },
    {
     "date": "2026-09-16",
     "nav": 93997.98
    },
    {
     "date": "2026-09-17",
     "nav": 94975.18
    },
    {
     "date": "2026-09-18",
     "nav": 95721.72
    },
    {
     "date": "2026-09-21",
     "nav": 95054.81
    },
    {
     "date": "2026-09-22",
     "nav": 95436.31
    },
    {
     "date": "2026-09-23",
     "nav": 94408.66
    },
    {
     "date": "2026-09-24",
     "nav": 94180.31
    },
    {
     "date": "2026-09-25",
     "nav": 94672.97
    },
    {
     "date": "2026-09-28",
     "nav": 93591.71
    },
    {
     "date": "2026-09-29",
     "nav": 93763.69
    },
    {
     "date": "2026-09-30",
     "nav": 93717.72
    },
    {
     "date": "2026-10-01",
     "nav": 95352.56
    },
    {
     "date": "2026-10-02",
     "nav": 95708.49
    },
    {
     "date": "2026-10-05",
     "nav": 96941.48
    },
    {
     "date": "2026-10-06",
     "nav": 96848.15
    },
    {
     "date": "2026-10-07",
     "nav": 96149.88
    },
    {
     "date": "2026-10-08",
     "nav": 95590.19
    },
    {
     "date": "2026-10-09",
     "nav": 95769.24
    }
   ],
   "benchmark_series": {
    "SPY": [
     {
      "date": "2026-09-09",
      "nav": 100000.0
     },
     {
      "date": "2026-09-10",
      "nav": 99400.58
     },
     {
      "date": "2026-09-11",
      "nav": 100247.9
     },
     {
      "date": "2026-09-14",
      "nav": 99800.63
     },
     {
      "date": "2026-09-15",
      "nav": 99342.86
     },
     {
      "date": "2026-09-16",
      "nav": 98904.77
     },
     {
      "date": "2026-09-17",
      "nav": 100026.23
     },
     {
      "date": "2026-09-18",
      "nav": 99906.87
     },
     {
      "date": "2026-09-21",
      "nav": 101455.93
     },
     {
      "date": "2026-09-22",
      "nav": 101440.19
     },
     {
      "date": "2026-09-23",
      "nav": 100709.6
     },
     {
      "date": "2026-09-24",
      "nav": 100626.96
     },
     {
      "date": "2026-09-25",
      "nav": 101173.92
     },
     {
      "date": "2026-09-28",
      "nav": 100421.03
     },
     {
      "date": "2026-09-29",
      "nav": 100236.09
     },
     {
      "date": "2026-09-30",
      "nav": 100030.17
     },
     {
      "date": "2026-10-01",
      "nav": 100208.55
     },
     {
      "date": "2026-10-02",
      "nav": 100949.63
     },
     {
      "date": "2026-10-05",
      "nav": 101630.38
     },
     {
      "date": "2026-10-06",
      "nav": 102189.14
     },
     {
      "date": "2026-10-07",
      "nav": 101943.85
     },
     {
      "date": "2026-10-08",
      "nav": 101512.33
     },
     {
      "date": "2026-10-09",
      "nav": 102120.93
     }
    ],
    "QQQ": [
     {
      "date": "2026-09-09",
      "nav": 100000.0
     },
     {
      "date": "2026-09-10",
      "nav": 98936.22
     },
     {
      "date": "2026-09-11",
      "nav": 99800.37
     },
     {
      "date": "2026-09-14",
      "nav": 99004.62
     },
     {
      "date": "2026-09-15",
      "nav": 98356.85
     },
     {
      "date": "2026-09-16",
      "nav": 98381.98
     },
     {
      "date": "2026-09-17",
      "nav": 100085.16
     },
     {
      "date": "2026-09-18",
      "nav": 100717.57
     },
     {
      "date": "2026-09-21",
      "nav": 103512.44
     },
     {
      "date": "2026-09-22",
      "nav": 104348.68
     },
     {
      "date": "2026-09-23",
      "nav": 103476.15
     },
     {
      "date": "2026-09-24",
      "nav": 103460.79
     },
     {
      "date": "2026-09-25",
      "nav": 103935.45
     },
     {
      "date": "2026-09-28",
      "nav": 102822.8
     },
     {
      "date": "2026-09-29",
      "nav": 103018.25
     },
     {
      "date": "2026-09-30",
      "nav": 103275.12
     },
     {
      "date": "2026-10-01",
      "nav": 103590.63
     },
     {
      "date": "2026-10-02",
      "nav": 104644.64
     },
     {
      "date": "2026-10-05",
      "nav": 105568.82
     },
     {
      "date": "2026-10-06",
      "nav": 106051.85
     },
     {
      "date": "2026-10-07",
      "nav": 105782.41
     },
     {
      "date": "2026-10-08",
      "nav": 104365.43
     },
     {
      "date": "2026-10-09",
      "nav": 104880.57
     }
    ]
   },
   "positions": [
    {
     "ticker": "ANF",
     "shares": 34.48,
     "held_since": "2026-10-08",
     "entry_price": 141.41000366210938,
     "stop_loss": 113.128,
     "target": null,
     "current_price": 142.5800018310547,
     "priced_on": "2026-10-09",
     "value": 4916.16,
     "return_pct": 0.83,
     "weight_pct": 5.1
    },
    {
     "ticker": "ATI",
     "shares": 25.41,
     "held_since": "2026-09-09",
     "entry_price": 206.5399932861328,
     "stop_loss": 165.232,
     "target": null,
     "current_price": 191.83999633789062,
     "priced_on": "2026-10-09",
     "value": 4874.65,
     "return_pct": -7.12,
     "weight_pct": 5.1
    },
    {
     "ticker": "BTSG",
     "shares": 75.35,
     "held_since": "2026-09-09",
     "entry_price": 61.9900016784668,
     "stop_loss": 49.592,
     "target": null,
     "current_price": 63.7400016784668,
     "priced_on": "2026-10-09",
     "value": 4802.81,
     "return_pct": 2.82,
     "weight_pct": 5.0
    },
    {
     "ticker": "DAR",
     "shares": 80.1,
     "held_since": "2026-09-09",
     "entry_price": 67.51000213623047,
     "stop_loss": 54.008,
     "target": null,
     "current_price": 60.2599983215332,
     "priced_on": "2026-10-09",
     "value": 4826.83,
     "return_pct": -10.74,
     "weight_pct": 5.0
    },
    {
     "ticker": "DINO",
     "shares": 41.58,
     "held_since": "2026-10-08",
     "entry_price": 120.72000122070312,
     "stop_loss": 96.576,
     "target": null,
     "current_price": 121.30000305175781,
     "priced_on": "2026-10-09",
     "value": 5043.65,
     "return_pct": 0.48,
     "weight_pct": 5.3
    },
    {
     "ticker": "FCX",
     "shares": 66.9,
     "held_since": "2026-10-08",
     "entry_price": 71.13999938964844,
     "stop_loss": 56.912,
     "target": null,
     "current_price": 73.69000244140625,
     "priced_on": "2026-10-09",
     "value": 4929.86,
     "return_pct": 3.58,
     "weight_pct": 5.1
    },
    {
     "ticker": "FIX",
     "shares": 2.76,
     "held_since": "2026-09-09",
     "entry_price": 1615.1400146484375,
     "stop_loss": 1292.112,
     "target": null,
     "current_price": 1715.68994140625,
     "priced_on": "2026-10-09",
     "value": 4735.3,
     "return_pct": 6.23,
     "weight_pct": 4.9
    },
    {
     "ticker": "HAE",
     "shares": 47.27,
     "held_since": "2026-10-08",
     "entry_price": 119.47000122070312,
     "stop_loss": 95.576,
     "target": null,
     "current_price": 118.69000244140625,
     "priced_on": "2026-10-09",
     "value": 5610.48,
     "return_pct": -0.65,
     "weight_pct": 5.9
    },
    {
     "ticker": "ILMN",
     "shares": 17.95,
     "held_since": "2026-10-08",
     "entry_price": 264.57000732421875,
     "stop_loss": 211.656,
     "target": null,
     "current_price": 278.1700134277344,
     "priced_on": "2026-10-09",
     "value": 4993.15,
     "return_pct": 5.14,
     "weight_pct": 5.2
    },
    {
     "ticker": "LITE",
     "shares": 4.33,
     "held_since": "2026-09-09",
     "entry_price": 988.97998046875,
     "stop_loss": 791.184,
     "target": null,
     "current_price": 1103.35498046875,
     "priced_on": "2026-10-09",
     "value": 4777.53,
     "return_pct": 11.56,
     "weight_pct": 5.0
    },
    {
     "ticker": "MPC",
     "shares": 10.87,
     "held_since": "2026-10-08",
     "entry_price": 463.3399963378906,
     "stop_loss": 370.672,
     "target": null,
     "current_price": 455.0299987792969,
     "priced_on": "2026-10-09",
     "value": 4946.18,
     "return_pct": -1.79,
     "weight_pct": 5.2
    },
    {
     "ticker": "MU",
     "shares": 4.42,
     "held_since": "2026-09-09",
     "entry_price": 1027.77001953125,
     "stop_loss": 822.216,
     "target": null,
     "current_price": 1029.0,
     "priced_on": "2026-10-09",
     "value": 4548.18,
     "return_pct": 0.12,
     "weight_pct": 4.7
    },
    {
     "ticker": "NBIS",
     "shares": 20.27,
     "held_since": "2026-10-08",
     "entry_price": 219.7100067138672,
     "stop_loss": 175.768,
     "target": null,
     "current_price": 221.07000732421875,
     "priced_on": "2026-10-09",
     "value": 4481.09,
     "return_pct": 0.62,
     "weight_pct": 4.7
    },
    {
     "ticker": "NUE",
     "shares": 19.51,
     "held_since": "2026-09-09",
     "entry_price": 257.9100036621094,
     "stop_loss": 206.328,
     "target": null,
     "current_price": 250.3300018310547,
     "priced_on": "2026-10-09",
     "value": 4883.94,
     "return_pct": -2.94,
     "weight_pct": 5.1
    },
    {
     "ticker": "PBF",
     "shares": 57.45,
     "held_since": "2026-09-09",
     "entry_price": 76.51000213623047,
     "stop_loss": 61.208,
     "target": null,
     "current_price": 84.2699966430664,
     "priced_on": "2026-10-09",
     "value": 4841.31,
     "return_pct": 10.14,
     "weight_pct": 5.1
    },
    {
     "ticker": "SNDK",
     "shares": 2.84,
     "held_since": "2026-09-09",
     "entry_price": 1764.1700439453125,
     "stop_loss": 1411.336,
     "target": null,
     "current_price": 1581.8199462890625,
     "priced_on": "2026-10-09",
     "value": 4492.37,
     "return_pct": -10.34,
     "weight_pct": 4.7
    },
    {
     "ticker": "TGT",
     "shares": 31.85,
     "held_since": "2026-10-08",
     "entry_price": 154.75999450683594,
     "stop_loss": 123.808,
     "target": null,
     "current_price": 153.63999938964844,
     "priced_on": "2026-10-09",
     "value": 4893.43,
     "return_pct": -0.72,
     "weight_pct": 5.1
    },
    {
     "ticker": "VICR",
     "shares": 17.0,
     "held_since": "2026-10-08",
     "entry_price": 262.32000732421875,
     "stop_loss": 209.856,
     "target": null,
     "current_price": 266.07000732421875,
     "priced_on": "2026-10-09",
     "value": 4523.19,
     "return_pct": 1.43,
     "weight_pct": 4.7
    },
    {
     "ticker": "VLO",
     "shares": 11.34,
     "held_since": "2026-09-09",
     "entry_price": 388.95001220703125,
     "stop_loss": 311.16,
     "target": null,
     "current_price": 433.75,
     "priced_on": "2026-10-09",
     "value": 4918.73,
     "return_pct": 11.52,
     "weight_pct": 5.1
    },
    {
     "ticker": "WBD",
     "shares": 177.81,
     "held_since": "2026-09-09",
     "entry_price": 27.90999984741211,
     "stop_loss": 22.328,
     "target": null,
     "current_price": 30.950000762939453,
     "priced_on": "2026-10-06",
     "value": 5503.22,
     "return_pct": 10.89,
     "weight_pct": 5.7
    }
   ],
   "pending_orders": [
    {
     "ticker": "WBD",
     "side": "sell",
     "shares": 177.81,
     "signal_close": null,
     "decision_price": null,
     "stop_loss_at_decision": null,
     "target_at_decision": null,
     "decided_on": "2026-10-07",
     "fills_at_bar": "2026-10-08",
     "weight_pct": null,
     "already_held": true
    }
   ],
   "exits": [
    {
     "ticker": "ARWR",
     "held_since": "2026-09-09",
     "entry_price": 82.63,
     "opening_price": 82.62999725341797,
     "stop_loss": 66.104,
     "target": null,
     "sold_on": "2026-09-16",
     "sold_price": 66.104,
     "shares": 58.75,
     "reason": "stop-loss",
     "level": 66.104,
     "basis": "level",
     "closes_the_lot": true,
     "return_pct": -20.0,
     "realized_pnl_usd": -973.9,
     "fees": 3.0
    },
    {
     "ticker": "HL",
     "held_since": "2026-09-09",
     "entry_price": 20.85,
     "opening_price": 20.850000381469727,
     "stop_loss": 16.68,
     "target": 29.19,
     "sold_on": "2026-10-05",
     "sold_price": 16.68,
     "shares": 244.38,
     "reason": "stop-loss",
     "level": 16.68,
     "basis": "level",
     "closes_the_lot": true,
     "return_pct": -20.0,
     "realized_pnl_usd": -1022.06,
     "fees": 3.0
    },
    {
     "ticker": "SNDK",
     "held_since": "2026-09-09",
     "entry_price": 1764.17,
     "opening_price": 1764.1700439453125,
     "stop_loss": 1411.336,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 1609.4599609375,
     "shares": 0.04,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": -8.77,
     "realized_pnl_usd": -7.71,
     "fees": 1.52
    },
    {
     "ticker": "MU",
     "held_since": "2026-09-09",
     "entry_price": 1027.77,
     "opening_price": 1027.77001953125,
     "stop_loss": 822.216,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 1035.8399658203125,
     "shares": 0.58,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 0.79,
     "realized_pnl_usd": 3.01,
     "fees": 1.67
    },
    {
     "ticker": "LITE",
     "held_since": "2026-09-09",
     "entry_price": 988.98,
     "opening_price": 988.97998046875,
     "stop_loss": 791.184,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 1048.5999755859375,
     "shares": 0.78,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 6.03,
     "realized_pnl_usd": 44.77,
     "fees": 1.73
    },
    {
     "ticker": "WDC",
     "held_since": "2026-09-09",
     "entry_price": 482.28,
     "opening_price": 482.2799987792969,
     "stop_loss": 385.824,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 393.30999755859375,
     "shares": 10.48,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": -18.45,
     "realized_pnl_usd": -935.41,
     "fees": 3.0
    },
    {
     "ticker": "BTSG",
     "held_since": "2026-09-09",
     "entry_price": 61.99,
     "opening_price": 61.9900016784668,
     "stop_loss": 49.592,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 63.65999984741211,
     "shares": 4.57,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 2.69,
     "realized_pnl_usd": 6.05,
     "fees": 1.59
    },
    {
     "ticker": "FIX",
     "held_since": "2026-09-09",
     "entry_price": 1615.14,
     "opening_price": 1615.1400146484375,
     "stop_loss": 1292.112,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 1706.3900146484375,
     "shares": 0.27,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 5.65,
     "realized_pnl_usd": 23.0,
     "fees": 1.63
    },
    {
     "ticker": "CRS",
     "held_since": "2026-09-09",
     "entry_price": 458.45,
     "opening_price": 458.45001220703125,
     "stop_loss": 366.76,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 387.1000061035156,
     "shares": 10.9,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": -15.56,
     "realized_pnl_usd": -780.72,
     "fees": 3.0
    },
    {
     "ticker": "CNC",
     "held_since": "2026-09-09",
     "entry_price": 64.06,
     "opening_price": 64.05999755859375,
     "stop_loss": 51.248,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 64.54000091552734,
     "shares": 77.42,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": 0.75,
     "realized_pnl_usd": 34.16,
     "fees": 3.0
    },
    {
     "ticker": "PBF",
     "held_since": "2026-09-09",
     "entry_price": 76.51,
     "opening_price": 76.51000213623047,
     "stop_loss": 61.208,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 89.33999633789062,
     "shares": 7.68,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 16.77,
     "realized_pnl_usd": 96.86,
     "fees": 1.68
    },
    {
     "ticker": "VRT",
     "held_since": "2026-09-09",
     "entry_price": 262.89,
     "opening_price": 262.8900146484375,
     "stop_loss": 210.312,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 243.72999572753906,
     "shares": 17.19,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": -7.29,
     "realized_pnl_usd": -332.36,
     "fees": 3.0
    },
    {
     "ticker": "STLD",
     "held_since": "2026-09-09",
     "entry_price": 240.69,
     "opening_price": 240.69000244140625,
     "stop_loss": 192.552,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 234.1699981689453,
     "shares": 20.81,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": -2.71,
     "realized_pnl_usd": -138.68,
     "fees": 3.0
    },
    {
     "ticker": "VLO",
     "held_since": "2026-09-09",
     "entry_price": 388.95,
     "opening_price": 388.95001220703125,
     "stop_loss": 311.16,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 443.79998779296875,
     "shares": 1.72,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 14.1,
     "realized_pnl_usd": 92.64,
     "fees": 1.7
    },
    {
     "ticker": "FTI",
     "held_since": "2026-09-09",
     "entry_price": 77.81,
     "opening_price": 77.80999755859375,
     "stop_loss": 62.248,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 69.62999725341797,
     "shares": 63.97,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": -10.51,
     "realized_pnl_usd": -526.27,
     "fees": 3.0
    },
    {
     "ticker": "ROIV",
     "held_since": "2026-09-09",
     "entry_price": 40.8316,
     "opening_price": 41.810001373291016,
     "stop_loss": 33.448,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 33.448,
     "shares": 138.35,
     "reason": "stop-loss",
     "level": 33.448,
     "basis": "level",
     "closes_the_lot": true,
     "return_pct": -18.08,
     "realized_pnl_usd": -1026.03,
     "fees": 4.5
    }
   ],
   "target_effect": {
    "model": "momentum_12_1_sector4",
    "n_target_exits": 0,
    "lots": [],
    "settled_delta_usd": 0,
    "n_lots_with_unreadable_bars": 0,
    "open_delta_usd": 0,
    "derivation": "per lot the target closed: the same lot carried on against its stop alone, same honesty rules; positive means holding on would have been worth more, i.e. the target cost that much. A lot whose stop has not fired yet is marked at the last close and counted separately \u2014 it is not settled. Not a parallel book: the stop-only path would hold different cash and size later rebalances differently, and that is not simulated. A lot whose window contains a bar that could not be read carries that bar's date: its number is a guess, not a measurement."
   },
   "cash": -1772.81,
   "cash_pct": -1.9
  },
  "momentum_12_1_noregime": {
   "label": "12-1 momentum \u00b7 top 20 \u00b7 no index regime filter",
   "rules": [
    "score = total return over the last 12 months, skipping the most recent month (Jegadeesh\u2013Titman 12-1; the skip avoids the one-month reversal)",
    "eligible = a name whose close is above its own 200-day average and which has 13 months of history",
    "hold the top 20 eligible names by score, equal weight, capped at 10% each",
    "regime filter: when SPY closes below its 200-day average the model holds cash",
    "data guard: a name with a single-day move over 40% inside the lookback is excluded and named \u2014 a jump that size is a corporate action or a bad bar, not momentum, until verified",
    "rebalance every 21 trading days; 10 bps per side assumed on every change",
    "parameters are the literature defaults, fixed before any of this data was looked at \u2014 nothing here was tuned on the backtest",
    "variant: always invested \u2014 no SPY 200-day filter (study: +14 pts CAGR in-sample, but the filter is the only bear-market defence and 2022 is one observation)"
   ],
   "version": "25bb2b1d06f2",
   "is_default": false,
   "scoreboard": {
    "n_fills": 47,
    "n_stops": 1,
    "n_targets": 0,
    "n_executable_recommendations": 2,
    "fees_paid": 70.5,
    "since": "2026-09-09",
    "verdict": "insufficient_evidence",
    "nav": 101656.53,
    "asof": "2026-10-09",
    "return_pct": 1.66,
    "max_drawdown_pct": -10.52,
    "cash_only_return_pct": 0.0,
    "benchmarks_return_pct": {
     "SPY": 2.12,
     "QQQ": 4.88
    },
    "benchmarks_edge_pct": {
     "SPY": -0.46,
     "QQQ": -3.22
    },
    "benchmarks_status": {
     "SPY": null,
     "QQQ": null
    }
   },
   "series": [
    {
     "date": "2026-09-09",
     "nav": 99970.0
    },
    {
     "date": "2026-09-10",
     "nav": 96535.28
    },
    {
     "date": "2026-09-11",
     "nav": 98301.55
    },
    {
     "date": "2026-09-14",
     "nav": 90491.61
    },
    {
     "date": "2026-09-15",
     "nav": 89454.44
    },
    {
     "date": "2026-09-16",
     "nav": 90914.01
    },
    {
     "date": "2026-09-17",
     "nav": 93490.48
    },
    {
     "date": "2026-09-18",
     "nav": 97067.65
    },
    {
     "date": "2026-09-21",
     "nav": 100402.39
    },
    {
     "date": "2026-09-22",
     "nav": 101947.51
    },
    {
     "date": "2026-09-23",
     "nav": 100887.12
    },
    {
     "date": "2026-09-24",
     "nav": 100726.15
    },
    {
     "date": "2026-09-25",
     "nav": 102453.54
    },
    {
     "date": "2026-09-28",
     "nav": 100513.33
    },
    {
     "date": "2026-09-29",
     "nav": 102301.47
    },
    {
     "date": "2026-09-30",
     "nav": 102669.78
    },
    {
     "date": "2026-10-01",
     "nav": 105815.51
    },
    {
     "date": "2026-10-02",
     "nav": 107259.62
    },
    {
     "date": "2026-10-05",
     "nav": 107297.19
    },
    {
     "date": "2026-10-06",
     "nav": 106645.05
    },
    {
     "date": "2026-10-07",
     "nav": 105041.38
    },
    {
     "date": "2026-10-08",
     "nav": 100771.12
    },
    {
     "date": "2026-10-09",
     "nav": 101656.53
    }
   ],
   "benchmark_series": {
    "SPY": [
     {
      "date": "2026-09-09",
      "nav": 100000.0
     },
     {
      "date": "2026-09-10",
      "nav": 99400.58
     },
     {
      "date": "2026-09-11",
      "nav": 100247.9
     },
     {
      "date": "2026-09-14",
      "nav": 99800.63
     },
     {
      "date": "2026-09-15",
      "nav": 99342.86
     },
     {
      "date": "2026-09-16",
      "nav": 98904.77
     },
     {
      "date": "2026-09-17",
      "nav": 100026.23
     },
     {
      "date": "2026-09-18",
      "nav": 99906.87
     },
     {
      "date": "2026-09-21",
      "nav": 101455.93
     },
     {
      "date": "2026-09-22",
      "nav": 101440.19
     },
     {
      "date": "2026-09-23",
      "nav": 100709.6
     },
     {
      "date": "2026-09-24",
      "nav": 100626.96
     },
     {
      "date": "2026-09-25",
      "nav": 101173.92
     },
     {
      "date": "2026-09-28",
      "nav": 100421.03
     },
     {
      "date": "2026-09-29",
      "nav": 100236.09
     },
     {
      "date": "2026-09-30",
      "nav": 100030.17
     },
     {
      "date": "2026-10-01",
      "nav": 100208.55
     },
     {
      "date": "2026-10-02",
      "nav": 100949.63
     },
     {
      "date": "2026-10-05",
      "nav": 101630.38
     },
     {
      "date": "2026-10-06",
      "nav": 102189.14
     },
     {
      "date": "2026-10-07",
      "nav": 101943.85
     },
     {
      "date": "2026-10-08",
      "nav": 101512.33
     },
     {
      "date": "2026-10-09",
      "nav": 102120.93
     }
    ],
    "QQQ": [
     {
      "date": "2026-09-09",
      "nav": 100000.0
     },
     {
      "date": "2026-09-10",
      "nav": 98936.22
     },
     {
      "date": "2026-09-11",
      "nav": 99800.37
     },
     {
      "date": "2026-09-14",
      "nav": 99004.62
     },
     {
      "date": "2026-09-15",
      "nav": 98356.85
     },
     {
      "date": "2026-09-16",
      "nav": 98381.98
     },
     {
      "date": "2026-09-17",
      "nav": 100085.16
     },
     {
      "date": "2026-09-18",
      "nav": 100717.57
     },
     {
      "date": "2026-09-21",
      "nav": 103512.44
     },
     {
      "date": "2026-09-22",
      "nav": 104348.68
     },
     {
      "date": "2026-09-23",
      "nav": 103476.15
     },
     {
      "date": "2026-09-24",
      "nav": 103460.79
     },
     {
      "date": "2026-09-25",
      "nav": 103935.45
     },
     {
      "date": "2026-09-28",
      "nav": 102822.8
     },
     {
      "date": "2026-09-29",
      "nav": 103018.25
     },
     {
      "date": "2026-09-30",
      "nav": 103275.12
     },
     {
      "date": "2026-10-01",
      "nav": 103590.63
     },
     {
      "date": "2026-10-02",
      "nav": 104644.64
     },
     {
      "date": "2026-10-05",
      "nav": 105568.82
     },
     {
      "date": "2026-10-06",
      "nav": 106051.85
     },
     {
      "date": "2026-10-07",
      "nav": 105782.41
     },
     {
      "date": "2026-10-08",
      "nav": 104365.43
     },
     {
      "date": "2026-10-09",
      "nav": 104880.57
     }
    ]
   },
   "positions": [
    {
     "ticker": "AMD",
     "shares": 8.13,
     "held_since": "2026-09-09",
     "entry_price": 521.0999755859375,
     "stop_loss": 416.88,
     "target": null,
     "current_price": 608.0999755859375,
     "priced_on": "2026-10-09",
     "value": 4943.85,
     "return_pct": 16.7,
     "weight_pct": 4.9
    },
    {
     "ticker": "ATI",
     "shares": 27.76,
     "held_since": "2026-09-09",
     "entry_price": 206.5399932861328,
     "stop_loss": 165.232,
     "target": null,
     "current_price": 191.83999633789062,
     "priced_on": "2026-10-09",
     "value": 5325.48,
     "return_pct": -7.12,
     "weight_pct": 5.2
    },
    {
     "ticker": "CIEN",
     "shares": 11.76,
     "held_since": "2026-10-08",
     "entry_price": 425.92999267578125,
     "stop_loss": 340.744,
     "target": null,
     "current_price": 449.7699890136719,
     "priced_on": "2026-10-09",
     "value": 5289.3,
     "return_pct": 5.6,
     "weight_pct": 5.2
    },
    {
     "ticker": "COHR",
     "shares": 15.7,
     "held_since": "2026-09-09",
     "entry_price": 303.4800109863281,
     "stop_loss": 242.784,
     "target": null,
     "current_price": 312.6199951171875,
     "priced_on": "2026-10-09",
     "value": 4908.13,
     "return_pct": 3.01,
     "weight_pct": 4.8
    },
    {
     "ticker": "DELL",
     "shares": 9.07,
     "held_since": "2026-09-09",
     "entry_price": 535.25,
     "stop_loss": 428.2,
     "target": null,
     "current_price": 586.0599975585938,
     "priced_on": "2026-10-09",
     "value": 5315.56,
     "return_pct": 9.49,
     "weight_pct": 5.2
    },
    {
     "ticker": "HPE",
     "shares": 72.85,
     "held_since": "2026-10-08",
     "entry_price": 71.0,
     "stop_loss": 56.8,
     "target": null,
     "current_price": 73.45999908447266,
     "priced_on": "2026-10-09",
     "value": 5351.56,
     "return_pct": 3.46,
     "weight_pct": 5.3
    },
    {
     "ticker": "INTC",
     "shares": 46.43,
     "held_since": "2026-09-09",
     "entry_price": 106.23999786376953,
     "stop_loss": 84.992,
     "target": null,
     "current_price": 104.69999694824219,
     "priced_on": "2026-10-09",
     "value": 4861.22,
     "return_pct": -1.45,
     "weight_pct": 4.8
    },
    {
     "ticker": "LITE",
     "shares": 4.73,
     "held_since": "2026-09-09",
     "entry_price": 988.97998046875,
     "stop_loss": 791.184,
     "target": null,
     "current_price": 1103.35498046875,
     "priced_on": "2026-10-09",
     "value": 5218.87,
     "return_pct": 11.56,
     "weight_pct": 5.1
    },
    {
     "ticker": "MRVL",
     "shares": 18.45,
     "held_since": "2026-09-09",
     "entry_price": 235.00999450683594,
     "stop_loss": 188.008,
     "target": null,
     "current_price": 275.2799987792969,
     "priced_on": "2026-10-09",
     "value": 5078.92,
     "return_pct": 17.14,
     "weight_pct": 5.0
    },
    {
     "ticker": "MU",
     "shares": 4.83,
     "held_since": "2026-09-09",
     "entry_price": 1027.77001953125,
     "stop_loss": 822.216,
     "target": null,
     "current_price": 1029.0,
     "priced_on": "2026-10-09",
     "value": 4970.07,
     "return_pct": 0.12,
     "weight_pct": 4.9
    },
    {
     "ticker": "PBF",
     "shares": 62.76,
     "held_since": "2026-10-08",
     "entry_price": 89.33999633789062,
     "stop_loss": 71.472,
     "target": null,
     "current_price": 84.2699966430664,
     "priced_on": "2026-10-09",
     "value": 5288.78,
     "return_pct": -5.67,
     "weight_pct": 5.2
    },
    {
     "ticker": "ROIV",
     "shares": 151.14,
     "held_since": "2026-10-08",
     "entry_price": 34.209999084472656,
     "stop_loss": 27.368,
     "target": null,
     "current_price": 35.439998626708984,
     "priced_on": "2026-10-09",
     "value": 5356.4,
     "return_pct": 3.6,
     "weight_pct": 5.3
    },
    {
     "ticker": "SMTC",
     "shares": 27.1,
     "held_since": "2026-10-08",
     "entry_price": 187.49000549316406,
     "stop_loss": 149.992,
     "target": null,
     "current_price": 187.3000030517578,
     "priced_on": "2026-10-09",
     "value": 5075.83,
     "return_pct": -0.1,
     "weight_pct": 5.0
    },
    {
     "ticker": "SNDK",
     "shares": 3.1,
     "held_since": "2026-09-09",
     "entry_price": 1764.1700439453125,
     "stop_loss": 1411.336,
     "target": null,
     "current_price": 1581.8199462890625,
     "priced_on": "2026-10-09",
     "value": 4903.64,
     "return_pct": -10.34,
     "weight_pct": 4.8
    },
    {
     "ticker": "STX",
     "shares": 6.5,
     "held_since": "2026-09-09",
     "entry_price": 885.9199829101562,
     "stop_loss": 708.736,
     "target": null,
     "current_price": 783.0,
     "priced_on": "2026-10-09",
     "value": 5089.5,
     "return_pct": -11.62,
     "weight_pct": 5.0
    },
    {
     "ticker": "TER",
     "shares": 12.75,
     "held_since": "2026-09-09",
     "entry_price": 383.69000244140625,
     "stop_loss": 306.952,
     "target": null,
     "current_price": 402.67999267578125,
     "priced_on": "2026-10-09",
     "value": 5134.17,
     "return_pct": 4.95,
     "weight_pct": 5.1
    },
    {
     "ticker": "VIAV",
     "shares": 113.51,
     "held_since": "2026-09-09",
     "entry_price": 39.18000030517578,
     "stop_loss": 31.344,
     "target": null,
     "current_price": 45.459999084472656,
     "priced_on": "2026-10-09",
     "value": 5160.16,
     "return_pct": 16.03,
     "weight_pct": 5.1
    },
    {
     "ticker": "VICR",
     "shares": 18.57,
     "held_since": "2026-10-08",
     "entry_price": 262.32000732421875,
     "stop_loss": 209.856,
     "target": null,
     "current_price": 266.07000732421875,
     "priced_on": "2026-10-09",
     "value": 4940.92,
     "return_pct": 1.43,
     "weight_pct": 4.9
    },
    {
     "ticker": "VLO",
     "shares": 12.38,
     "held_since": "2026-10-08",
     "entry_price": 443.79998779296875,
     "stop_loss": 355.04,
     "target": null,
     "current_price": 433.75,
     "priced_on": "2026-10-09",
     "value": 5369.83,
     "return_pct": -2.26,
     "weight_pct": 5.3
    },
    {
     "ticker": "WDC",
     "shares": 12.95,
     "held_since": "2026-09-09",
     "entry_price": 482.2799987792969,
     "stop_loss": 385.824,
     "target": null,
     "current_price": 397.2799987792969,
     "priced_on": "2026-10-09",
     "value": 5144.78,
     "return_pct": -17.62,
     "weight_pct": 5.1
    }
   ],
   "pending_orders": [],
   "exits": [
    {
     "ticker": "ARWR",
     "held_since": "2026-09-09",
     "entry_price": 82.63,
     "opening_price": 82.62999725341797,
     "stop_loss": 66.104,
     "target": null,
     "sold_on": "2026-09-16",
     "sold_price": 66.104,
     "shares": 58.75,
     "reason": "stop-loss",
     "level": 66.104,
     "basis": "level",
     "closes_the_lot": true,
     "return_pct": -20.0,
     "realized_pnl_usd": -973.9,
     "fees": 3.0
    },
    {
     "ticker": "MU",
     "held_since": "2026-09-09",
     "entry_price": 1027.77,
     "opening_price": 1027.77001953125,
     "stop_loss": 822.216,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 1035.8399658203125,
     "shares": 0.17,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 0.79,
     "realized_pnl_usd": -0.18,
     "fees": 1.55
    },
    {
     "ticker": "LITE",
     "held_since": "2026-09-09",
     "entry_price": 988.98,
     "opening_price": 988.97998046875,
     "stop_loss": 791.184,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 1048.5999755859375,
     "shares": 0.38,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 6.03,
     "realized_pnl_usd": 21.04,
     "fees": 1.61
    },
    {
     "ticker": "INTC",
     "held_since": "2026-09-09",
     "entry_price": 106.24,
     "opening_price": 106.23999786376953,
     "stop_loss": 84.992,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 107.08000183105469,
     "shares": 1.43,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 0.79,
     "realized_pnl_usd": -0.34,
     "fees": 1.54
    },
    {
     "ticker": "COHR",
     "held_since": "2026-09-09",
     "entry_price": 303.48,
     "opening_price": 303.4800109863281,
     "stop_loss": 242.784,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 302.3500061035156,
     "shares": 0.86,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": -0.37,
     "realized_pnl_usd": -2.55,
     "fees": 1.58
    },
    {
     "ticker": "DELL",
     "held_since": "2026-09-09",
     "entry_price": 535.25,
     "opening_price": 535.25,
     "stop_loss": 428.2,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 574.5499877929688,
     "shares": 0.3,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 7.34,
     "realized_pnl_usd": 10.24,
     "fees": 1.55
    },
    {
     "ticker": "MRVL",
     "held_since": "2026-09-09",
     "entry_price": 235.01,
     "opening_price": 235.00999450683594,
     "stop_loss": 188.008,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 274.6600036621094,
     "shares": 3.73,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 16.87,
     "realized_pnl_usd": 146.14,
     "fees": 1.75
    },
    {
     "ticker": "VIAV",
     "held_since": "2026-09-09",
     "entry_price": 39.18,
     "opening_price": 39.18000030517578,
     "stop_loss": 31.344,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 44.09000015258789,
     "shares": 15.52,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 12.53,
     "realized_pnl_usd": 74.52,
     "fees": 1.68
    },
    {
     "ticker": "AMAT",
     "held_since": "2026-09-09",
     "entry_price": 468.85,
     "opening_price": 468.8500061035156,
     "stop_loss": 375.08,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 509.57000732421875,
     "shares": 10.58,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": 8.69,
     "realized_pnl_usd": 427.82,
     "fees": 3.0
    },
    {
     "ticker": "AMD",
     "held_since": "2026-09-09",
     "entry_price": 521.1,
     "opening_price": 521.0999755859375,
     "stop_loss": 416.88,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 620.6799926757812,
     "shares": 1.76,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 19.11,
     "realized_pnl_usd": 173.49,
     "fees": 1.77
    },
    {
     "ticker": "TER",
     "held_since": "2026-09-09",
     "entry_price": 383.69,
     "opening_price": 383.69000244140625,
     "stop_loss": 306.952,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 398.7200012207031,
     "shares": 0.69,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 3.92,
     "realized_pnl_usd": 8.79,
     "fees": 1.58
    },
    {
     "ticker": "SITM",
     "held_since": "2026-09-09",
     "entry_price": 589.87,
     "opening_price": 589.8699951171875,
     "stop_loss": 471.896,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 645.0599975585938,
     "shares": 8.35,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": 9.36,
     "realized_pnl_usd": 457.84,
     "fees": 3.0
    },
    {
     "ticker": "LRCX",
     "held_since": "2026-09-09",
     "entry_price": 315.84,
     "opening_price": 315.8399963378906,
     "stop_loss": 252.672,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 320.5899963378906,
     "shares": 15.6,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": 1.5,
     "realized_pnl_usd": 71.1,
     "fees": 3.0
    },
    {
     "ticker": "ONTO",
     "held_since": "2026-09-09",
     "entry_price": 278.4,
     "opening_price": 278.3999938964844,
     "stop_loss": 222.72,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 292.6700134277344,
     "shares": 17.79,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": 5.13,
     "realized_pnl_usd": 250.86,
     "fees": 3.0
    },
    {
     "ticker": "MKSI",
     "held_since": "2026-09-09",
     "entry_price": 268.05,
     "opening_price": 268.04998779296875,
     "stop_loss": 214.44,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 260.3800048828125,
     "shares": 18.83,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": -2.86,
     "realized_pnl_usd": -147.43,
     "fees": 3.0
    },
    {
     "ticker": "TTMI",
     "held_since": "2026-09-09",
     "entry_price": 124.25,
     "opening_price": 124.25,
     "stop_loss": 99.4,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 117.5,
     "shares": 38.65,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": -5.43,
     "realized_pnl_usd": -263.89,
     "fees": 3.0
    }
   ],
   "target_effect": {
    "model": "momentum_12_1_noregime",
    "n_target_exits": 0,
    "lots": [],
    "settled_delta_usd": 0,
    "n_lots_with_unreadable_bars": 0,
    "open_delta_usd": 0,
    "derivation": "per lot the target closed: the same lot carried on against its stop alone, same honesty rules; positive means holding on would have been worth more, i.e. the target cost that much. A lot whose stop has not fired yet is marked at the last close and counted separately \u2014 it is not settled. Not a parallel book: the stop-only path would hold different cash and size later rebalances differently, and that is not simulated. A lot whose window contains a bar that could not be read carries that bar's date: its number is a guess, not a measurement."
   },
   "cash": -1070.44,
   "cash_pct": -1.1
  },
  "momentum_9_1": {
   "label": "9-1 momentum \u00b7 top 20 \u00b7 equal weight",
   "rules": [
    "score = total return over the last 12 months, skipping the most recent month (Jegadeesh\u2013Titman 12-1; the skip avoids the one-month reversal)",
    "eligible = a name whose close is above its own 200-day average and which has 13 months of history",
    "hold the top 20 eligible names by score, equal weight, capped at 10% each",
    "regime filter: when SPY closes below its 200-day average the model holds cash",
    "data guard: a name with a single-day move over 40% inside the lookback is excluded and named \u2014 a jump that size is a corporate action or a bad bar, not momentum, until verified",
    "rebalance every 21 trading days; 10 bps per side assumed on every change",
    "parameters are the literature defaults, fixed before any of this data was looked at \u2014 nothing here was tuned on the backtest",
    "variant: nine-month lookback (189 bars) instead of twelve \u2014 the rolling out-of-sample tuner chose it from 2022 on once it was in the grid (study \u00a71); a canonical horizon, not a fitted value, but the grid was widened after the sweep showed it ahead"
   ],
   "version": "f518dde5d20d",
   "is_default": true,
   "scoreboard": {
    "n_fills": 48,
    "n_stops": 0,
    "n_targets": 0,
    "n_executable_recommendations": 2,
    "fees_paid": 72.0,
    "since": "2026-09-09",
    "verdict": "insufficient_evidence",
    "nav": 104218.47,
    "asof": "2026-10-09",
    "return_pct": 4.22,
    "max_drawdown_pct": -9.06,
    "cash_only_return_pct": 0.0,
    "benchmarks_return_pct": {
     "SPY": 2.12,
     "QQQ": 4.88
    },
    "benchmarks_edge_pct": {
     "SPY": 2.1,
     "QQQ": -0.66
    },
    "benchmarks_status": {
     "SPY": null,
     "QQQ": null
    }
   },
   "series": [
    {
     "date": "2026-09-09",
     "nav": 99970.0
    },
    {
     "date": "2026-09-10",
     "nav": 96133.07
    },
    {
     "date": "2026-09-11",
     "nav": 98916.88
    },
    {
     "date": "2026-09-14",
     "nav": 91105.37
    },
    {
     "date": "2026-09-15",
     "nav": 90908.74
    },
    {
     "date": "2026-09-16",
     "nav": 92806.09
    },
    {
     "date": "2026-09-17",
     "nav": 96266.08
    },
    {
     "date": "2026-09-18",
     "nav": 99499.08
    },
    {
     "date": "2026-09-21",
     "nav": 103892.7
    },
    {
     "date": "2026-09-22",
     "nav": 105669.77
    },
    {
     "date": "2026-09-23",
     "nav": 104898.63
    },
    {
     "date": "2026-09-24",
     "nav": 104444.45
    },
    {
     "date": "2026-09-25",
     "nav": 106062.07
    },
    {
     "date": "2026-09-28",
     "nav": 103367.45
    },
    {
     "date": "2026-09-29",
     "nav": 105058.95
    },
    {
     "date": "2026-09-30",
     "nav": 105210.02
    },
    {
     "date": "2026-10-01",
     "nav": 108144.53
    },
    {
     "date": "2026-10-02",
     "nav": 109585.88
    },
    {
     "date": "2026-10-05",
     "nav": 109651.1
    },
    {
     "date": "2026-10-06",
     "nav": 110267.41
    },
    {
     "date": "2026-10-07",
     "nav": 108967.81
    },
    {
     "date": "2026-10-08",
     "nav": 104299.49
    },
    {
     "date": "2026-10-09",
     "nav": 104218.47
    }
   ],
   "benchmark_series": {
    "SPY": [
     {
      "date": "2026-09-09",
      "nav": 100000.0
     },
     {
      "date": "2026-09-10",
      "nav": 99400.58
     },
     {
      "date": "2026-09-11",
      "nav": 100247.9
     },
     {
      "date": "2026-09-14",
      "nav": 99800.63
     },
     {
      "date": "2026-09-15",
      "nav": 99342.86
     },
     {
      "date": "2026-09-16",
      "nav": 98904.77
     },
     {
      "date": "2026-09-17",
      "nav": 100026.23
     },
     {
      "date": "2026-09-18",
      "nav": 99906.87
     },
     {
      "date": "2026-09-21",
      "nav": 101455.93
     },
     {
      "date": "2026-09-22",
      "nav": 101440.19
     },
     {
      "date": "2026-09-23",
      "nav": 100709.6
     },
     {
      "date": "2026-09-24",
      "nav": 100626.96
     },
     {
      "date": "2026-09-25",
      "nav": 101173.92
     },
     {
      "date": "2026-09-28",
      "nav": 100421.03
     },
     {
      "date": "2026-09-29",
      "nav": 100236.09
     },
     {
      "date": "2026-09-30",
      "nav": 100030.17
     },
     {
      "date": "2026-10-01",
      "nav": 100208.55
     },
     {
      "date": "2026-10-02",
      "nav": 100949.63
     },
     {
      "date": "2026-10-05",
      "nav": 101630.38
     },
     {
      "date": "2026-10-06",
      "nav": 102189.14
     },
     {
      "date": "2026-10-07",
      "nav": 101943.85
     },
     {
      "date": "2026-10-08",
      "nav": 101512.33
     },
     {
      "date": "2026-10-09",
      "nav": 102120.93
     }
    ],
    "QQQ": [
     {
      "date": "2026-09-09",
      "nav": 100000.0
     },
     {
      "date": "2026-09-10",
      "nav": 98936.22
     },
     {
      "date": "2026-09-11",
      "nav": 99800.37
     },
     {
      "date": "2026-09-14",
      "nav": 99004.62
     },
     {
      "date": "2026-09-15",
      "nav": 98356.85
     },
     {
      "date": "2026-09-16",
      "nav": 98381.98
     },
     {
      "date": "2026-09-17",
      "nav": 100085.16
     },
     {
      "date": "2026-09-18",
      "nav": 100717.57
     },
     {
      "date": "2026-09-21",
      "nav": 103512.44
     },
     {
      "date": "2026-09-22",
      "nav": 104348.68
     },
     {
      "date": "2026-09-23",
      "nav": 103476.15
     },
     {
      "date": "2026-09-24",
      "nav": 103460.79
     },
     {
      "date": "2026-09-25",
      "nav": 103935.45
     },
     {
      "date": "2026-09-28",
      "nav": 102822.8
     },
     {
      "date": "2026-09-29",
      "nav": 103018.25
     },
     {
      "date": "2026-09-30",
      "nav": 103275.12
     },
     {
      "date": "2026-10-01",
      "nav": 103590.63
     },
     {
      "date": "2026-10-02",
      "nav": 104644.64
     },
     {
      "date": "2026-10-05",
      "nav": 105568.82
     },
     {
      "date": "2026-10-06",
      "nav": 106051.85
     },
     {
      "date": "2026-10-07",
      "nav": 105782.41
     },
     {
      "date": "2026-10-08",
      "nav": 104365.43
     },
     {
      "date": "2026-10-09",
      "nav": 104880.57
     }
    ]
   },
   "positions": [
    {
     "ticker": "AMD",
     "shares": 8.44,
     "held_since": "2026-09-09",
     "entry_price": 521.0999755859375,
     "stop_loss": 416.88,
     "target": null,
     "current_price": 608.0999755859375,
     "priced_on": "2026-10-09",
     "value": 5132.36,
     "return_pct": 16.7,
     "weight_pct": 4.9
    },
    {
     "ticker": "ARM",
     "shares": 18.51,
     "held_since": "2026-09-09",
     "entry_price": 264.2300109863281,
     "stop_loss": 211.384,
     "target": null,
     "current_price": 266.2799987792969,
     "priced_on": "2026-10-09",
     "value": 4928.84,
     "return_pct": 0.78,
     "weight_pct": 4.7
    },
    {
     "ticker": "DELL",
     "shares": 9.41,
     "held_since": "2026-09-09",
     "entry_price": 535.25,
     "stop_loss": 428.2,
     "target": null,
     "current_price": 586.0599975585938,
     "priced_on": "2026-10-09",
     "value": 5514.82,
     "return_pct": 9.49,
     "weight_pct": 5.3
    },
    {
     "ticker": "DINO",
     "shares": 47.12,
     "held_since": "2026-10-08",
     "entry_price": 120.72000122070312,
     "stop_loss": 96.576,
     "target": null,
     "current_price": 121.30000305175781,
     "priced_on": "2026-10-09",
     "value": 5715.66,
     "return_pct": 0.48,
     "weight_pct": 5.5
    },
    {
     "ticker": "FTNT",
     "shares": 28.78,
     "held_since": "2026-10-08",
     "entry_price": 189.10000610351562,
     "stop_loss": 151.28,
     "target": null,
     "current_price": 194.75,
     "priced_on": "2026-10-09",
     "value": 5604.91,
     "return_pct": 2.99,
     "weight_pct": 5.4
    },
    {
     "ticker": "HPE",
     "shares": 75.58,
     "held_since": "2026-09-09",
     "entry_price": 58.900001525878906,
     "stop_loss": 47.12,
     "target": null,
     "current_price": 73.45999908447266,
     "priced_on": "2026-10-09",
     "value": 5552.11,
     "return_pct": 24.72,
     "weight_pct": 5.3
    },
    {
     "ticker": "INTC",
     "shares": 48.16,
     "held_since": "2026-09-09",
     "entry_price": 106.23999786376953,
     "stop_loss": 84.992,
     "target": null,
     "current_price": 104.69999694824219,
     "priced_on": "2026-10-09",
     "value": 5042.35,
     "return_pct": -1.45,
     "weight_pct": 4.8
    },
    {
     "ticker": "LITE",
     "shares": 4.9,
     "held_since": "2026-09-09",
     "entry_price": 988.97998046875,
     "stop_loss": 791.184,
     "target": null,
     "current_price": 1103.35498046875,
     "priced_on": "2026-10-09",
     "value": 5406.44,
     "return_pct": 11.56,
     "weight_pct": 5.2
    },
    {
     "ticker": "MPC",
     "shares": 12.32,
     "held_since": "2026-10-08",
     "entry_price": 463.3399963378906,
     "stop_loss": 370.672,
     "target": null,
     "current_price": 455.0299987792969,
     "priced_on": "2026-10-09",
     "value": 5605.97,
     "return_pct": -1.79,
     "weight_pct": 5.4
    },
    {
     "ticker": "MRVL",
     "shares": 19.14,
     "held_since": "2026-09-09",
     "entry_price": 235.00999450683594,
     "stop_loss": 188.008,
     "target": null,
     "current_price": 275.2799987792969,
     "priced_on": "2026-10-09",
     "value": 5268.86,
     "return_pct": 17.14,
     "weight_pct": 5.1
    },
    {
     "ticker": "MU",
     "shares": 5.01,
     "held_since": "2026-09-09",
     "entry_price": 1027.77001953125,
     "stop_loss": 822.216,
     "target": null,
     "current_price": 1029.0,
     "priced_on": "2026-10-09",
     "value": 5155.29,
     "return_pct": 0.12,
     "weight_pct": 4.9
    },
    {
     "ticker": "NBIS",
     "shares": 22.97,
     "held_since": "2026-10-08",
     "entry_price": 219.7100067138672,
     "stop_loss": 175.768,
     "target": null,
     "current_price": 221.07000732421875,
     "priced_on": "2026-10-09",
     "value": 5077.98,
     "return_pct": 0.62,
     "weight_pct": 4.9
    },
    {
     "ticker": "PBF",
     "shares": 65.11,
     "held_since": "2026-10-08",
     "entry_price": 89.33999633789062,
     "stop_loss": 71.472,
     "target": null,
     "current_price": 84.2699966430664,
     "priced_on": "2026-10-09",
     "value": 5486.82,
     "return_pct": -5.67,
     "weight_pct": 5.3
    },
    {
     "ticker": "PSX",
     "shares": 20.06,
     "held_since": "2026-10-08",
     "entry_price": 281.6000061035156,
     "stop_loss": 225.28,
     "target": null,
     "current_price": 278.17999267578125,
     "priced_on": "2026-10-09",
     "value": 5580.29,
     "return_pct": -1.21,
     "weight_pct": 5.4
    },
    {
     "ticker": "SMTC",
     "shares": 28.12,
     "held_since": "2026-10-08",
     "entry_price": 187.49000549316406,
     "stop_loss": 149.992,
     "target": null,
     "current_price": 187.3000030517578,
     "priced_on": "2026-10-09",
     "value": 5266.88,
     "return_pct": -0.1,
     "weight_pct": 5.1
    },
    {
     "ticker": "SNDK",
     "shares": 3.22,
     "held_since": "2026-09-09",
     "entry_price": 1764.1700439453125,
     "stop_loss": 1411.336,
     "target": null,
     "current_price": 1581.8199462890625,
     "priced_on": "2026-10-09",
     "value": 5093.46,
     "return_pct": -10.34,
     "weight_pct": 4.9
    },
    {
     "ticker": "STX",
     "shares": 6.75,
     "held_since": "2026-09-09",
     "entry_price": 885.9199829101562,
     "stop_loss": 708.736,
     "target": null,
     "current_price": 783.0,
     "priced_on": "2026-10-09",
     "value": 5285.25,
     "return_pct": -11.62,
     "weight_pct": 5.1
    },
    {
     "ticker": "VIAV",
     "shares": 117.75,
     "held_since": "2026-09-09",
     "entry_price": 39.18000030517578,
     "stop_loss": 31.344,
     "target": null,
     "current_price": 45.459999084472656,
     "priced_on": "2026-10-09",
     "value": 5352.91,
     "return_pct": 16.03,
     "weight_pct": 5.1
    },
    {
     "ticker": "VLO",
     "shares": 12.85,
     "held_since": "2026-10-08",
     "entry_price": 443.79998779296875,
     "stop_loss": 355.04,
     "target": null,
     "current_price": 433.75,
     "priced_on": "2026-10-09",
     "value": 5573.69,
     "return_pct": -2.26,
     "weight_pct": 5.3
    },
    {
     "ticker": "WDC",
     "shares": 13.44,
     "held_since": "2026-09-09",
     "entry_price": 482.2799987792969,
     "stop_loss": 385.824,
     "target": null,
     "current_price": 397.2799987792969,
     "priced_on": "2026-10-09",
     "value": 5339.44,
     "return_pct": -17.62,
     "weight_pct": 5.1
    }
   ],
   "pending_orders": [],
   "exits": [
    {
     "ticker": "LITE",
     "held_since": "2026-09-09",
     "entry_price": 988.98,
     "opening_price": 988.97998046875,
     "stop_loss": 791.184,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 1048.5999755859375,
     "shares": 0.21,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 6.03,
     "realized_pnl_usd": 10.96,
     "fees": 1.56
    },
    {
     "ticker": "HPE",
     "held_since": "2026-09-09",
     "entry_price": 58.9,
     "opening_price": 58.900001525878906,
     "stop_loss": 47.12,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 71.0,
     "shares": 13.66,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 20.54,
     "realized_pnl_usd": 163.56,
     "fees": 1.73
    },
    {
     "ticker": "ATI",
     "held_since": "2026-09-09",
     "entry_price": 206.54,
     "opening_price": 206.5399932861328,
     "stop_loss": 165.232,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 188.1300048828125,
     "shares": 24.12,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": -8.91,
     "realized_pnl_usd": -447.05,
     "fees": 3.0
    },
    {
     "ticker": "AMD",
     "held_since": "2026-09-09",
     "entry_price": 521.1,
     "opening_price": 521.0999755859375,
     "stop_loss": 416.88,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 620.6799926757812,
     "shares": 1.45,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 19.11,
     "realized_pnl_usd": 142.67,
     "fees": 1.72
    },
    {
     "ticker": "VIAV",
     "held_since": "2026-09-09",
     "entry_price": 39.18,
     "opening_price": 39.18000030517578,
     "stop_loss": 31.344,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 44.09000015258789,
     "shares": 11.28,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 12.53,
     "realized_pnl_usd": 53.75,
     "fees": 1.63
    },
    {
     "ticker": "MRVL",
     "held_since": "2026-09-09",
     "entry_price": 235.01,
     "opening_price": 235.00999450683594,
     "stop_loss": 188.008,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 274.6600036621094,
     "shares": 3.04,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 16.87,
     "realized_pnl_usd": 118.83,
     "fees": 1.71
    },
    {
     "ticker": "ALAB",
     "held_since": "2026-09-09",
     "entry_price": 300.54,
     "opening_price": 300.5400085449219,
     "stop_loss": 240.432,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 347.04998779296875,
     "shares": 17.31,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": 15.48,
     "realized_pnl_usd": 802.09,
     "fees": 3.0
    },
    {
     "ticker": "COHR",
     "held_since": "2026-09-09",
     "entry_price": 303.48,
     "opening_price": 303.4800109863281,
     "stop_loss": 242.784,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 302.3500061035156,
     "shares": 16.56,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": -0.37,
     "realized_pnl_usd": -21.71,
     "fees": 3.0
    },
    {
     "ticker": "SITM",
     "held_since": "2026-09-09",
     "entry_price": 589.87,
     "opening_price": 589.8699951171875,
     "stop_loss": 471.896,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 645.0599975585938,
     "shares": 8.35,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": 9.36,
     "realized_pnl_usd": 457.84,
     "fees": 3.0
    },
    {
     "ticker": "ARM",
     "held_since": "2026-09-09",
     "entry_price": 264.23,
     "opening_price": 264.2300109863281,
     "stop_loss": 211.384,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 275.2900085449219,
     "shares": 0.61,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 4.19,
     "realized_pnl_usd": 5.2,
     "fees": 1.55
    },
    {
     "ticker": "AMAT",
     "held_since": "2026-09-09",
     "entry_price": 468.85,
     "opening_price": 468.8500061035156,
     "stop_loss": 375.08,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 509.57000732421875,
     "shares": 10.58,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": 8.69,
     "realized_pnl_usd": 427.82,
     "fees": 3.0
    },
    {
     "ticker": "LRCX",
     "held_since": "2026-09-09",
     "entry_price": 315.84,
     "opening_price": 315.8399963378906,
     "stop_loss": 252.672,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 320.5899963378906,
     "shares": 15.6,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": 1.5,
     "realized_pnl_usd": 71.1,
     "fees": 3.0
    },
    {
     "ticker": "FLEX",
     "held_since": "2026-09-09",
     "entry_price": 112.68,
     "opening_price": 112.68000030517578,
     "stop_loss": 90.144,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 114.73999786376953,
     "shares": 43.74,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": 1.83,
     "realized_pnl_usd": 87.1,
     "fees": 3.0
    },
    {
     "ticker": "AVT",
     "held_since": "2026-09-09",
     "entry_price": 91.74,
     "opening_price": 91.73999786376953,
     "stop_loss": 73.392,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 99.55999755859375,
     "shares": 54.1,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": 8.52,
     "realized_pnl_usd": 420.06,
     "fees": 3.0
    }
   ],
   "target_effect": {
    "model": "momentum_9_1",
    "n_target_exits": 0,
    "lots": [],
    "settled_delta_usd": 0,
    "n_lots_with_unreadable_bars": 0,
    "open_delta_usd": 0,
    "derivation": "per lot the target closed: the same lot carried on against its stop alone, same honesty rules; positive means holding on would have been worth more, i.e. the target cost that much. A lot whose stop has not fired yet is marked at the last close and counted separately \u2014 it is not settled. Not a parallel book: the stop-only path would hold different cash and size later rebalances differently, and that is not simulated. A lot whose window contains a bar that could not be read carries that bar's date: its number is a guess, not a measurement."
   },
   "cash": -2765.86,
   "cash_pct": -2.7
  },
  "momentum_12_1_top10": {
   "label": "12-1 momentum \u00b7 top 10 \u00b7 equal weight",
   "rules": [
    "score = total return over the last 12 months, skipping the most recent month (Jegadeesh\u2013Titman 12-1; the skip avoids the one-month reversal)",
    "eligible = a name whose close is above its own 200-day average and which has 13 months of history",
    "hold the top 20 eligible names by score, equal weight, capped at 10% each",
    "regime filter: when SPY closes below its 200-day average the model holds cash",
    "data guard: a name with a single-day move over 40% inside the lookback is excluded and named \u2014 a jump that size is a corporate action or a bad bar, not momentum, until verified",
    "rebalance every 21 trading days; 10 bps per side assumed on every change",
    "parameters are the literature defaults, fixed before any of this data was looked at \u2014 nothing here was tuned on the backtest",
    "variant: the ten strongest names only (study: +5 pts CAGR, +1.5 pts drawdown, in-sample; twice the concentration)"
   ],
   "version": "293124aa3812",
   "is_default": false,
   "scoreboard": {
    "n_fills": 21,
    "n_stops": 0,
    "n_targets": 0,
    "n_executable_recommendations": 2,
    "fees_paid": 31.5,
    "since": "2026-09-09",
    "verdict": "insufficient_evidence",
    "nav": 101736.24,
    "asof": "2026-10-09",
    "return_pct": 1.74,
    "max_drawdown_pct": -10.39,
    "cash_only_return_pct": 0.0,
    "benchmarks_return_pct": {
     "SPY": 2.12,
     "QQQ": 4.88
    },
    "benchmarks_edge_pct": {
     "SPY": -0.38,
     "QQQ": -3.14
    },
    "benchmarks_status": {
     "SPY": null,
     "QQQ": null
    }
   },
   "series": [
    {
     "date": "2026-09-09",
     "nav": 99985.0
    },
    {
     "date": "2026-09-10",
     "nav": 95556.19
    },
    {
     "date": "2026-09-11",
     "nav": 97006.85
    },
    {
     "date": "2026-09-14",
     "nav": 89894.96
    },
    {
     "date": "2026-09-15",
     "nav": 89597.61
    },
    {
     "date": "2026-09-16",
     "nav": 92481.91
    },
    {
     "date": "2026-09-17",
     "nav": 95608.39
    },
    {
     "date": "2026-09-18",
     "nav": 98997.85
    },
    {
     "date": "2026-09-21",
     "nav": 102057.79
    },
    {
     "date": "2026-09-22",
     "nav": 103604.92
    },
    {
     "date": "2026-09-23",
     "nav": 102618.28
    },
    {
     "date": "2026-09-24",
     "nav": 101562.05
    },
    {
     "date": "2026-09-25",
     "nav": 103383.25
    },
    {
     "date": "2026-09-28",
     "nav": 100624.73
    },
    {
     "date": "2026-09-29",
     "nav": 102273.38
    },
    {
     "date": "2026-09-30",
     "nav": 102730.61
    },
    {
     "date": "2026-10-01",
     "nav": 106514.78
    },
    {
     "date": "2026-10-02",
     "nav": 105949.05
    },
    {
     "date": "2026-10-05",
     "nav": 106086.05
    },
    {
     "date": "2026-10-06",
     "nav": 105761.56
    },
    {
     "date": "2026-10-07",
     "nav": 105485.66
    },
    {
     "date": "2026-10-08",
     "nav": 100481.36
    },
    {
     "date": "2026-10-09",
     "nav": 101736.24
    }
   ],
   "benchmark_series": {
    "SPY": [
     {
      "date": "2026-09-09",
      "nav": 100000.0
     },
     {
      "date": "2026-09-10",
      "nav": 99400.58
     },
     {
      "date": "2026-09-11",
      "nav": 100247.9
     },
     {
      "date": "2026-09-14",
      "nav": 99800.63
     },
     {
      "date": "2026-09-15",
      "nav": 99342.86
     },
     {
      "date": "2026-09-16",
      "nav": 98904.77
     },
     {
      "date": "2026-09-17",
      "nav": 100026.23
     },
     {
      "date": "2026-09-18",
      "nav": 99906.87
     },
     {
      "date": "2026-09-21",
      "nav": 101455.93
     },
     {
      "date": "2026-09-22",
      "nav": 101440.19
     },
     {
      "date": "2026-09-23",
      "nav": 100709.6
     },
     {
      "date": "2026-09-24",
      "nav": 100626.96
     },
     {
      "date": "2026-09-25",
      "nav": 101173.92
     },
     {
      "date": "2026-09-28",
      "nav": 100421.03
     },
     {
      "date": "2026-09-29",
      "nav": 100236.09
     },
     {
      "date": "2026-09-30",
      "nav": 100030.17
     },
     {
      "date": "2026-10-01",
      "nav": 100208.55
     },
     {
      "date": "2026-10-02",
      "nav": 100949.63
     },
     {
      "date": "2026-10-05",
      "nav": 101630.38
     },
     {
      "date": "2026-10-06",
      "nav": 102189.14
     },
     {
      "date": "2026-10-07",
      "nav": 101943.85
     },
     {
      "date": "2026-10-08",
      "nav": 101512.33
     },
     {
      "date": "2026-10-09",
      "nav": 102120.93
     }
    ],
    "QQQ": [
     {
      "date": "2026-09-09",
      "nav": 100000.0
     },
     {
      "date": "2026-09-10",
      "nav": 98936.22
     },
     {
      "date": "2026-09-11",
      "nav": 99800.37
     },
     {
      "date": "2026-09-14",
      "nav": 99004.62
     },
     {
      "date": "2026-09-15",
      "nav": 98356.85
     },
     {
      "date": "2026-09-16",
      "nav": 98381.98
     },
     {
      "date": "2026-09-17",
      "nav": 100085.16
     },
     {
      "date": "2026-09-18",
      "nav": 100717.57
     },
     {
      "date": "2026-09-21",
      "nav": 103512.44
     },
     {
      "date": "2026-09-22",
      "nav": 104348.68
     },
     {
      "date": "2026-09-23",
      "nav": 103476.15
     },
     {
      "date": "2026-09-24",
      "nav": 103460.79
     },
     {
      "date": "2026-09-25",
      "nav": 103935.45
     },
     {
      "date": "2026-09-28",
      "nav": 102822.8
     },
     {
      "date": "2026-09-29",
      "nav": 103018.25
     },
     {
      "date": "2026-09-30",
      "nav": 103275.12
     },
     {
      "date": "2026-10-01",
      "nav": 103590.63
     },
     {
      "date": "2026-10-02",
      "nav": 104644.64
     },
     {
      "date": "2026-10-05",
      "nav": 105568.82
     },
     {
      "date": "2026-10-06",
      "nav": 106051.85
     },
     {
      "date": "2026-10-07",
      "nav": 105782.41
     },
     {
      "date": "2026-10-08",
      "nav": 104365.43
     },
     {
      "date": "2026-10-09",
      "nav": 104880.57
     }
    ]
   },
   "positions": [
    {
     "ticker": "COHR",
     "shares": 31.53,
     "held_since": "2026-09-09",
     "entry_price": 303.4800109863281,
     "stop_loss": 242.784,
     "target": null,
     "current_price": 312.6199951171875,
     "priced_on": "2026-10-09",
     "value": 9856.91,
     "return_pct": 3.01,
     "weight_pct": 9.7
    },
    {
     "ticker": "DELL",
     "shares": 18.22,
     "held_since": "2026-09-09",
     "entry_price": 535.25,
     "stop_loss": 428.2,
     "target": null,
     "current_price": 586.0599975585938,
     "priced_on": "2026-10-09",
     "value": 10678.01,
     "return_pct": 9.49,
     "weight_pct": 10.5
    },
    {
     "ticker": "INTC",
     "shares": 93.25,
     "held_since": "2026-09-09",
     "entry_price": 106.23999786376953,
     "stop_loss": 84.992,
     "target": null,
     "current_price": 104.69999694824219,
     "priced_on": "2026-10-09",
     "value": 9763.27,
     "return_pct": -1.45,
     "weight_pct": 9.6
    },
    {
     "ticker": "LITE",
     "shares": 9.49,
     "held_since": "2026-09-09",
     "entry_price": 988.97998046875,
     "stop_loss": 791.184,
     "target": null,
     "current_price": 1103.35498046875,
     "priced_on": "2026-10-09",
     "value": 10470.84,
     "return_pct": 11.56,
     "weight_pct": 10.3
    },
    {
     "ticker": "MU",
     "shares": 9.7,
     "held_since": "2026-09-09",
     "entry_price": 1027.77001953125,
     "stop_loss": 822.216,
     "target": null,
     "current_price": 1029.0,
     "priced_on": "2026-10-09",
     "value": 9981.3,
     "return_pct": 0.12,
     "weight_pct": 9.8
    },
    {
     "ticker": "SNDK",
     "shares": 6.23,
     "held_since": "2026-09-09",
     "entry_price": 1764.1700439453125,
     "stop_loss": 1411.336,
     "target": null,
     "current_price": 1581.8199462890625,
     "priced_on": "2026-10-09",
     "value": 9854.74,
     "return_pct": -10.34,
     "weight_pct": 9.7
    },
    {
     "ticker": "STX",
     "shares": 13.06,
     "held_since": "2026-09-09",
     "entry_price": 885.9199829101562,
     "stop_loss": 708.736,
     "target": null,
     "current_price": 783.0,
     "priced_on": "2026-10-09",
     "value": 10225.98,
     "return_pct": -11.62,
     "weight_pct": 10.1
    },
    {
     "ticker": "VIAV",
     "shares": 227.98,
     "held_since": "2026-09-09",
     "entry_price": 39.18000030517578,
     "stop_loss": 31.344,
     "target": null,
     "current_price": 45.459999084472656,
     "priced_on": "2026-10-09",
     "value": 10363.97,
     "return_pct": 16.03,
     "weight_pct": 10.2
    },
    {
     "ticker": "VICR",
     "shares": 37.3,
     "held_since": "2026-10-08",
     "entry_price": 262.32000732421875,
     "stop_loss": 209.856,
     "target": null,
     "current_price": 266.07000732421875,
     "priced_on": "2026-10-09",
     "value": 9924.41,
     "return_pct": 1.43,
     "weight_pct": 9.8
    },
    {
     "ticker": "WDC",
     "shares": 26.02,
     "held_since": "2026-09-09",
     "entry_price": 482.2799987792969,
     "stop_loss": 385.824,
     "target": null,
     "current_price": 397.2799987792969,
     "priced_on": "2026-10-09",
     "value": 10337.23,
     "return_pct": -17.62,
     "weight_pct": 10.2
    }
   ],
   "pending_orders": [],
   "exits": [
    {
     "ticker": "MU",
     "held_since": "2026-09-09",
     "entry_price": 1027.77,
     "opening_price": 1027.77001953125,
     "stop_loss": 822.216,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 1035.8399658203125,
     "shares": 0.3,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 0.79,
     "realized_pnl_usd": 0.88,
     "fees": 1.54
    },
    {
     "ticker": "LITE",
     "held_since": "2026-09-09",
     "entry_price": 988.98,
     "opening_price": 988.97998046875,
     "stop_loss": 791.184,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 1048.5999755859375,
     "shares": 0.73,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 6.03,
     "realized_pnl_usd": 41.92,
     "fees": 1.61
    },
    {
     "ticker": "INTC",
     "held_since": "2026-09-09",
     "entry_price": 106.24,
     "opening_price": 106.23999786376953,
     "stop_loss": 84.992,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 107.08000183105469,
     "shares": 2.47,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 0.79,
     "realized_pnl_usd": 0.54,
     "fees": 1.54
    },
    {
     "ticker": "COHR",
     "held_since": "2026-09-09",
     "entry_price": 303.48,
     "opening_price": 303.4800109863281,
     "stop_loss": 242.784,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 302.3500061035156,
     "shares": 1.6,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": -0.37,
     "realized_pnl_usd": -3.38,
     "fees": 1.57
    },
    {
     "ticker": "DELL",
     "held_since": "2026-09-09",
     "entry_price": 535.25,
     "opening_price": 535.25,
     "stop_loss": 428.2,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 574.5499877929688,
     "shares": 0.51,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 7.34,
     "realized_pnl_usd": 18.5,
     "fees": 1.54
    },
    {
     "ticker": "MRVL",
     "held_since": "2026-09-09",
     "entry_price": 235.01,
     "opening_price": 235.00999450683594,
     "stop_loss": 188.008,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 274.6600036621094,
     "shares": 44.36,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": true,
     "return_pct": 16.87,
     "realized_pnl_usd": 1755.87,
     "fees": 3.0
    },
    {
     "ticker": "VIAV",
     "held_since": "2026-09-09",
     "entry_price": 39.18,
     "opening_price": 39.18000030517578,
     "stop_loss": 31.344,
     "target": null,
     "sold_on": "2026-10-08",
     "sold_price": 44.09000015258789,
     "shares": 30.08,
     "reason": "rebalance",
     "level": null,
     "basis": null,
     "closes_the_lot": false,
     "return_pct": 12.53,
     "realized_pnl_usd": 146.02,
     "fees": 1.67
    }
   ],
   "target_effect": {
    "model": "momentum_12_1_top10",
    "n_target_exits": 0,
    "lots": [],
    "settled_delta_usd": 0,
    "n_lots_with_unreadable_bars": 0,
    "open_delta_usd": 0,
    "derivation": "per lot the target closed: the same lot carried on against its stop alone, same honesty rules; positive means holding on would have been worth more, i.e. the target cost that much. A lot whose stop has not fired yet is marked at the last close and counted separately \u2014 it is not settled. Not a parallel book: the stop-only path would hold different cash and size later rebalances differently, and that is not simulated. A lot whose window contains a bar that could not be read carries that bar's date: its number is a guess, not a measurement."
   },
   "cash": 279.58,
   "cash_pct": 0.3
  }
 },
 "ledger": [
  {
   "id": 197,
   "run_date": "2026-10-10",
   "bar_date": "2026-10-09",
   "model": "momentum_9_1",
   "mode": "preview",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "preview",
    "is_due": false,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-10-07",
    "next_rebalance_bar": "2026-11-05",
    "bars_until_due": 19,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "not a rebalance day \u2014 next on 2026-11-05 (19 trading days); the model only trades on its schedule, exactly as tested"
   },
   "outcomes": null,
   "created_at": "2026-10-10 04:23:53",
   "n_orders": 0,
   "fills_at_bar": null
  },
  {
   "id": 191,
   "run_date": "2026-10-09",
   "bar_date": "2026-10-08",
   "model": "momentum_9_1",
   "mode": "preview",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "preview",
    "is_due": false,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-10-07",
    "next_rebalance_bar": "2026-11-05",
    "bars_until_due": 20,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "not a rebalance day \u2014 next on 2026-11-05 (20 trading days); the model only trades on its schedule, exactly as tested"
   },
   "outcomes": null,
   "created_at": "2026-10-09 04:23:38",
   "n_orders": 0,
   "fills_at_bar": null
  },
  {
   "id": 185,
   "run_date": "2026-10-08",
   "bar_date": "2026-10-07",
   "model": "momentum_9_1",
   "mode": "executable",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "executable",
    "is_due": true,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-10-07",
    "next_rebalance_bar": "2026-11-05",
    "bars_until_due": 0,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "rebalance bar \u2014 orders are for the next session"
   },
   "outcomes": null,
   "created_at": "2026-10-08 04:24:37",
   "n_orders": 28,
   "fills_at_bar": "2026-10-08"
  },
  {
   "id": 179,
   "run_date": "2026-10-07",
   "bar_date": "2026-10-06",
   "model": "momentum_9_1",
   "mode": "preview",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "preview",
    "is_due": false,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-09-08",
    "next_rebalance_bar": "2026-10-07",
    "bars_until_due": 1,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "not a rebalance day \u2014 next on 2026-10-07 (1 trading days); the model only trades on its schedule, exactly as tested"
   },
   "outcomes": null,
   "created_at": "2026-10-07 04:24:29",
   "n_orders": 0,
   "fills_at_bar": null
  },
  {
   "id": 173,
   "run_date": "2026-10-06",
   "bar_date": "2026-10-05",
   "model": "momentum_9_1",
   "mode": "preview",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "preview",
    "is_due": false,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-09-08",
    "next_rebalance_bar": "2026-10-07",
    "bars_until_due": 2,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "not a rebalance day \u2014 next on 2026-10-07 (2 trading days); the model only trades on its schedule, exactly as tested"
   },
   "outcomes": null,
   "created_at": "2026-10-06 04:24:54",
   "n_orders": 0,
   "fills_at_bar": null
  },
  {
   "id": 167,
   "run_date": "2026-10-05",
   "bar_date": "2026-10-02",
   "model": "momentum_9_1",
   "mode": "preview",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "preview",
    "is_due": false,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-09-08",
    "next_rebalance_bar": "2026-10-07",
    "bars_until_due": 3,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "not a rebalance day \u2014 next on 2026-10-07 (3 trading days); the model only trades on its schedule, exactly as tested"
   },
   "outcomes": null,
   "created_at": "2026-10-05 04:24:47",
   "n_orders": 0,
   "fills_at_bar": null
  },
  {
   "id": 161,
   "run_date": "2026-10-04",
   "bar_date": "2026-10-02",
   "model": "momentum_9_1",
   "mode": "preview",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "preview",
    "is_due": false,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-09-08",
    "next_rebalance_bar": "2026-10-07",
    "bars_until_due": 3,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "not a rebalance day \u2014 next on 2026-10-07 (3 trading days); the model only trades on its schedule, exactly as tested"
   },
   "outcomes": null,
   "created_at": "2026-10-04 04:25:15",
   "n_orders": 0,
   "fills_at_bar": null
  },
  {
   "id": 155,
   "run_date": "2026-10-03",
   "bar_date": "2026-10-02",
   "model": "momentum_9_1",
   "mode": "preview",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "preview",
    "is_due": false,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-09-08",
    "next_rebalance_bar": "2026-10-07",
    "bars_until_due": 3,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "not a rebalance day \u2014 next on 2026-10-07 (3 trading days); the model only trades on its schedule, exactly as tested"
   },
   "outcomes": null,
   "created_at": "2026-10-03 04:22:58",
   "n_orders": 0,
   "fills_at_bar": null
  },
  {
   "id": 149,
   "run_date": "2026-10-02",
   "bar_date": "2026-10-02",
   "model": "momentum_9_1",
   "mode": "preview",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "preview",
    "is_due": false,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-09-08",
    "next_rebalance_bar": "2026-10-07",
    "bars_until_due": 3,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "not a rebalance day \u2014 next on 2026-10-07 (3 trading days); the model only trades on its schedule, exactly as tested"
   },
   "outcomes": null,
   "created_at": "2026-10-02 04:23:20",
   "n_orders": 0,
   "fills_at_bar": null
  },
  {
   "id": 143,
   "run_date": "2026-10-01",
   "bar_date": "2026-09-30",
   "model": "momentum_9_1",
   "mode": "preview",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "preview",
    "is_due": false,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-09-08",
    "next_rebalance_bar": "2026-10-07",
    "bars_until_due": 5,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "not a rebalance day \u2014 next on 2026-10-07 (5 trading days); the model only trades on its schedule, exactly as tested"
   },
   "outcomes": null,
   "created_at": "2026-10-01 04:23:00",
   "n_orders": 0,
   "fills_at_bar": null
  },
  {
   "id": 137,
   "run_date": "2026-09-30",
   "bar_date": "2026-09-29",
   "model": "momentum_9_1",
   "mode": "preview",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "preview",
    "is_due": false,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-09-08",
    "next_rebalance_bar": "2026-10-07",
    "bars_until_due": 6,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "not a rebalance day \u2014 next on 2026-10-07 (6 trading days); the model only trades on its schedule, exactly as tested"
   },
   "outcomes": null,
   "created_at": "2026-09-30 04:24:25",
   "n_orders": 0,
   "fills_at_bar": null
  },
  {
   "id": 131,
   "run_date": "2026-09-29",
   "bar_date": "2026-09-28",
   "model": "momentum_9_1",
   "mode": "preview",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "preview",
    "is_due": false,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-09-08",
    "next_rebalance_bar": "2026-10-07",
    "bars_until_due": 7,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "not a rebalance day \u2014 next on 2026-10-07 (7 trading days); the model only trades on its schedule, exactly as tested"
   },
   "outcomes": null,
   "created_at": "2026-09-29 04:24:03",
   "n_orders": 0,
   "fills_at_bar": null
  },
  {
   "id": 125,
   "run_date": "2026-09-28",
   "bar_date": "2026-09-25",
   "model": "momentum_9_1",
   "mode": "preview",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "preview",
    "is_due": false,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-09-08",
    "next_rebalance_bar": "2026-10-07",
    "bars_until_due": 8,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "not a rebalance day \u2014 next on 2026-10-07 (8 trading days); the model only trades on its schedule, exactly as tested"
   },
   "outcomes": null,
   "created_at": "2026-09-28 04:24:15",
   "n_orders": 0,
   "fills_at_bar": null
  },
  {
   "id": 119,
   "run_date": "2026-09-27",
   "bar_date": "2026-09-25",
   "model": "momentum_9_1",
   "mode": "preview",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "preview",
    "is_due": false,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-09-08",
    "next_rebalance_bar": "2026-10-07",
    "bars_until_due": 8,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "not a rebalance day \u2014 next on 2026-10-07 (8 trading days); the model only trades on its schedule, exactly as tested"
   },
   "outcomes": null,
   "created_at": "2026-09-27 04:23:04",
   "n_orders": 0,
   "fills_at_bar": null
  },
  {
   "id": 113,
   "run_date": "2026-09-26",
   "bar_date": "2026-09-25",
   "model": "momentum_9_1",
   "mode": "preview",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "preview",
    "is_due": false,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-09-08",
    "next_rebalance_bar": "2026-10-07",
    "bars_until_due": 8,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "not a rebalance day \u2014 next on 2026-10-07 (8 trading days); the model only trades on its schedule, exactly as tested"
   },
   "outcomes": null,
   "created_at": "2026-09-26 04:23:37",
   "n_orders": 0,
   "fills_at_bar": null
  },
  {
   "id": 107,
   "run_date": "2026-09-25",
   "bar_date": "2026-09-24",
   "model": "momentum_9_1",
   "mode": "preview",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "preview",
    "is_due": false,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-09-08",
    "next_rebalance_bar": "2026-10-07",
    "bars_until_due": 9,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "not a rebalance day \u2014 next on 2026-10-07 (9 trading days); the model only trades on its schedule, exactly as tested"
   },
   "outcomes": null,
   "created_at": "2026-09-25 04:23:56",
   "n_orders": 0,
   "fills_at_bar": null
  },
  {
   "id": 101,
   "run_date": "2026-09-24",
   "bar_date": "2026-09-23",
   "model": "momentum_9_1",
   "mode": "preview",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "preview",
    "is_due": false,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-09-08",
    "next_rebalance_bar": "2026-10-07",
    "bars_until_due": 10,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "not a rebalance day \u2014 next on 2026-10-07 (10 trading days); the model only trades on its schedule, exactly as tested"
   },
   "outcomes": null,
   "created_at": "2026-09-24 04:24:31",
   "n_orders": 0,
   "fills_at_bar": null
  },
  {
   "id": 95,
   "run_date": "2026-09-23",
   "bar_date": "2026-09-22",
   "model": "momentum_9_1",
   "mode": "preview",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 0,
   "schedule": {
    "mode": "preview",
    "is_due": false,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-09-08",
    "next_rebalance_bar": "2026-10-07",
    "bars_until_due": 11,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "not a rebalance day \u2014 next on 2026-10-07 (11 trading days); the model only trades on its schedule, exactly as tested"
   },
   "outcomes": null,
   "created_at": "2026-09-23 04:22:20",
   "n_orders": 0,
   "fills_at_bar": null
  },
  {
   "id": 89,
   "run_date": "2026-09-22",
   "bar_date": "2026-09-21",
   "model": "momentum_9_1",
   "mode": "preview",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "preview",
    "is_due": false,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-09-08",
    "next_rebalance_bar": "2026-10-07",
    "bars_until_due": 12,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "not a rebalance day \u2014 next on 2026-10-07 (12 trading days); the model only trades on its schedule, exactly as tested"
   },
   "outcomes": null,
   "created_at": "2026-09-22 04:23:53",
   "n_orders": 0,
   "fills_at_bar": null
  },
  {
   "id": 83,
   "run_date": "2026-09-21",
   "bar_date": "2026-09-18",
   "model": "momentum_9_1",
   "mode": "preview",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "preview",
    "is_due": false,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-09-08",
    "next_rebalance_bar": "2026-10-07",
    "bars_until_due": 13,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "not a rebalance day \u2014 next on 2026-10-07 (13 trading days); the model only trades on its schedule, exactly as tested"
   },
   "outcomes": null,
   "created_at": "2026-09-21 04:23:06",
   "n_orders": 0,
   "fills_at_bar": null
  },
  {
   "id": 77,
   "run_date": "2026-09-20",
   "bar_date": "2026-09-18",
   "model": "momentum_9_1",
   "mode": "preview",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "preview",
    "is_due": false,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-09-08",
    "next_rebalance_bar": "2026-10-07",
    "bars_until_due": 13,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "not a rebalance day \u2014 next on 2026-10-07 (13 trading days); the model only trades on its schedule, exactly as tested"
   },
   "outcomes": null,
   "created_at": "2026-09-20 04:23:52",
   "n_orders": 0,
   "fills_at_bar": null
  },
  {
   "id": 71,
   "run_date": "2026-09-19",
   "bar_date": "2026-09-18",
   "model": "momentum_9_1",
   "mode": "preview",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "preview",
    "is_due": false,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-09-08",
    "next_rebalance_bar": "2026-10-07",
    "bars_until_due": 13,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "not a rebalance day \u2014 next on 2026-10-07 (13 trading days); the model only trades on its schedule, exactly as tested"
   },
   "outcomes": null,
   "created_at": "2026-09-19 04:23:46",
   "n_orders": 0,
   "fills_at_bar": null
  },
  {
   "id": 65,
   "run_date": "2026-09-18",
   "bar_date": "2026-09-17",
   "model": "momentum_9_1",
   "mode": "preview",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "preview",
    "is_due": false,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-09-08",
    "next_rebalance_bar": "2026-10-07",
    "bars_until_due": 14,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "not a rebalance day \u2014 next on 2026-10-07 (14 trading days); the model only trades on its schedule, exactly as tested"
   },
   "outcomes": null,
   "created_at": "2026-09-18 04:24:18",
   "n_orders": 0,
   "fills_at_bar": null
  },
  {
   "id": 59,
   "run_date": "2026-09-17",
   "bar_date": "2026-09-16",
   "model": "momentum_9_1",
   "mode": "preview",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "preview",
    "is_due": false,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-09-08",
    "next_rebalance_bar": "2026-10-07",
    "bars_until_due": 15,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "not a rebalance day \u2014 next on 2026-10-07 (15 trading days); the model only trades on its schedule, exactly as tested"
   },
   "outcomes": null,
   "created_at": "2026-09-17 04:24:57",
   "n_orders": 0,
   "fills_at_bar": null
  },
  {
   "id": 53,
   "run_date": "2026-09-16",
   "bar_date": "2026-09-15",
   "model": "momentum_9_1",
   "mode": "preview",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "preview",
    "is_due": false,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-09-08",
    "next_rebalance_bar": "2026-10-07",
    "bars_until_due": 16,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "not a rebalance day \u2014 next on 2026-10-07 (16 trading days); the model only trades on its schedule, exactly as tested"
   },
   "outcomes": null,
   "created_at": "2026-09-16 04:25:51",
   "n_orders": 0,
   "fills_at_bar": null
  },
  {
   "id": 47,
   "run_date": "2026-09-15",
   "bar_date": "2026-09-14",
   "model": "momentum_9_1",
   "mode": "preview",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "preview",
    "is_due": false,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-09-08",
    "next_rebalance_bar": "2026-10-07",
    "bars_until_due": 17,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "not a rebalance day \u2014 next on 2026-10-07 (17 trading days); the model only trades on its schedule, exactly as tested"
   },
   "outcomes": null,
   "created_at": "2026-09-15 04:25:17",
   "n_orders": 0,
   "fills_at_bar": null
  },
  {
   "id": 41,
   "run_date": "2026-09-14",
   "bar_date": "2026-09-11",
   "model": "momentum_9_1",
   "mode": "preview",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "preview",
    "is_due": false,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-09-08",
    "next_rebalance_bar": "2026-10-07",
    "bars_until_due": 18,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "not a rebalance day \u2014 next on 2026-10-07 (18 trading days); the model only trades on its schedule, exactly as tested"
   },
   "outcomes": null,
   "created_at": "2026-09-14 04:24:35",
   "n_orders": 0,
   "fills_at_bar": null
  },
  {
   "id": 35,
   "run_date": "2026-09-13",
   "bar_date": "2026-09-11",
   "model": "momentum_9_1",
   "mode": "preview",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "preview",
    "is_due": false,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-09-08",
    "next_rebalance_bar": "2026-10-07",
    "bars_until_due": 18,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "not a rebalance day \u2014 next on 2026-10-07 (18 trading days); the model only trades on its schedule, exactly as tested"
   },
   "outcomes": null,
   "created_at": "2026-09-13 04:22:44",
   "n_orders": 0,
   "fills_at_bar": null
  },
  {
   "id": 29,
   "run_date": "2026-09-12",
   "bar_date": "2026-09-11",
   "model": "momentum_9_1",
   "mode": "preview",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "preview",
    "is_due": false,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-09-08",
    "next_rebalance_bar": "2026-10-07",
    "bars_until_due": 18,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "not a rebalance day \u2014 next on 2026-10-07 (18 trading days); the model only trades on its schedule, exactly as tested"
   },
   "outcomes": null,
   "created_at": "2026-09-12 04:24:16",
   "n_orders": 0,
   "fills_at_bar": null
  },
  {
   "id": 23,
   "run_date": "2026-09-11",
   "bar_date": "2026-09-10",
   "model": "momentum_9_1",
   "mode": "preview",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "preview",
    "is_due": false,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-09-08",
    "next_rebalance_bar": "2026-10-07",
    "bars_until_due": 19,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "not a rebalance day \u2014 next on 2026-10-07 (19 trading days); the model only trades on its schedule, exactly as tested"
   },
   "outcomes": null,
   "created_at": "2026-09-11 04:22:46",
   "n_orders": 0,
   "fills_at_bar": null
  },
  {
   "id": 17,
   "run_date": "2026-09-10",
   "bar_date": "2026-09-09",
   "model": "momentum_9_1",
   "mode": "preview",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "preview",
    "is_due": false,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-09-08",
    "next_rebalance_bar": "2026-10-07",
    "bars_until_due": 20,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "not a rebalance day \u2014 next on 2026-10-07 (20 trading days); the model only trades on its schedule, exactly as tested"
   },
   "outcomes": null,
   "created_at": "2026-09-10 04:23:48",
   "n_orders": 0,
   "fills_at_bar": null
  },
  {
   "id": 11,
   "run_date": "2026-09-09",
   "bar_date": "2026-09-08",
   "model": "momentum_9_1",
   "mode": "executable",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "executable",
    "is_due": true,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": "2026-09-08",
    "next_rebalance_bar": "2026-10-07",
    "bars_until_due": 0,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "rebalance bar \u2014 orders are for the next session"
   },
   "outcomes": {
    "window": {
     "from": "2026-09-09",
     "to": "2026-10-07",
     "to_scheduled": "2026-10-07"
    },
    "book_return_pct": 8.79,
    "weight_covered": 1.0,
    "missing": [],
    "spy_return_pct": 1.94,
    "qqq_return_pct": 5.78,
    "attached_on": "2026-10-08"
   },
   "created_at": "2026-09-09 04:24:26",
   "n_orders": 20,
   "fills_at_bar": "2026-09-09"
  },
  {
   "id": 5,
   "run_date": "2026-09-08",
   "bar_date": "2026-09-04",
   "model": "momentum_9_1",
   "mode": "preview",
   "model_version": "f518dde5d20d",
   "cost_bps": 10.0,
   "fee_per_order": 1.5,
   "regime_on": true,
   "n_positions": 20,
   "schedule": {
    "mode": "preview",
    "is_due": false,
    "anchor_date": "2026-09-08",
    "every_bars": 21,
    "rebalance_bar": null,
    "next_rebalance_bar": "2026-09-08",
    "bars_until_due": 1,
    "fills_at": "next session's close",
    "inherited": false,
    "beyond_calendar": false,
    "calendar_known_through": "2028-12-31",
    "reason": "not a rebalance day \u2014 next on 2026-09-08 (1 trading days); the model only trades on its schedule, exactly as tested"
   },
   "outcomes": null,
   "created_at": "2026-09-08 09:48:10",
   "n_orders": 0,
   "fills_at_bar": null
  }
 ],
 "changes": [
  {
   "date": "2026-09-08",
   "model": "momentum_9_1",
   "version": "f518dde5d20d",
   "note": "first seal \u2014 nine-month rule, 100,000 USD on paper, 1.50 USD per order",
   "sha256": "22fb268f87c874560d3cc941f84d4b6bf3221e2fd092d6b7c0b883586936f0fc",
   "rules_md": "# The rule, sealed 2026-09-08\n\nmodel: momentum_9_1 \u2014 9-1 momentum \u00b7 top 20 \u00b7 equal weight (version f518dde5d20d)\n\n## What the rule does\n- score = total return over the last 12 months, skipping the most recent month (Jegadeesh\u2013Titman 12-1; the skip avoids the one-month reversal)\n- eligible = a name whose close is above its own 200-day average and which has 13 months of history\n- hold the top 20 eligible names by score, equal weight, capped at 10% each\n- regime filter: when SPY closes below its 200-day average the model holds cash\n- data guard: a name with a single-day move over 40% inside the lookback is excluded and named \u2014 a jump that size is a corporate action or a bad bar, not momentum, until verified\n- rebalance every 21 trading days; 10 bps per side assumed on every change\n- parameters are the literature defaults, fixed before any of this data was looked at \u2014 nothing here was tuned on the backtest\n- variant: nine-month lookback (189 bars) instead of twelve \u2014 the rolling out-of-sample tuner chose it from 2022 on once it was in the grid (study \u00a71); a canonical horizon, not a fitted value, but the grid was widened after the sweep showed it ahead\n\n## How it is run on paper\n- universe: app/universe/seed_2026-07-25.csv \u2014 today's index membership, refreshed yearly; a name that leaves is dropped, a name that joins is added on the next refresh\n- cadence: a decision every 21 US trading days on the close; nothing is traded between decisions\n- fills: at the NEXT session's close, never at the price the decision was made on\n- notional: 100,000 USD on paper; no real money follows the page\n- fee: 1.50 USD per order, charged on every fill\n- the one resting order: a stop-loss 20% below each entry, placed once and never moved; no take-profit\n- the regime filter, when it says cash, sells everything on the decision day and waits\n\n## What the evidence cannot claim\n- survivorship: the universe is TODAY's index membership; names that left the indices during the test window are absent. Both sides share that survivor universe, but the comparison is NOT fully fair: momentum buys the high-flyers that later disappeared, so its relative edge is optimistic too, not only every absolute figure. Point-in-time membership (M1-1) is the fix and is not built\n- returns are close-to-close on dividend-adjusted prices (dividends reinvested), before tax; a name whose price stops updating is held at its last price until the next rebalance drops it\n- costs: 10 bps per side on every weight change; no slippage model beyond that\n- this configuration is a variant of momentum_12_1 chosen on THIS data (its own rules line says which knob and why) \u2014 an in-sample selection, not the literature's default; its edge is measured on the same years that picked it\n\n## Changes\n- a change to the rule is sealed here before it applies; the version above changes with it\n"
  },
  {
   "date": "2026-09-12",
   "model": "momentum_9_1",
   "version": "f518dde5d20d",
   "note": "M4-8: the resting order becomes a BRACKET \u2014 a stop 20% below the fill and a target 40% above it, both set at the fill and both executed on an intraday touch of the day high or low, replacing the close-only stop and the no-take-profit line. Sealed 2026-09-12, applies to bars from 2026-09-13; the 110 positions opened 2026-09-09 keep the rule they were bought under (a stop, no target) until a rebalance replaces them. Also published: what a daily price can and cannot settle.",
   "sha256": "bfe011751fc27202726f5c76dfab383c5e8fa9e20222f59aeb6c5107ec7cc217",
   "rules_md": "# The rule, sealed 2026-09-12\n\nmodel: momentum_9_1 \u2014 9-1 momentum \u00b7 top 20 \u00b7 equal weight (version f518dde5d20d)\n\n## What the rule does\n- score = total return over the last 12 months, skipping the most recent month (Jegadeesh\u2013Titman 12-1; the skip avoids the one-month reversal)\n- eligible = a name whose close is above its own 200-day average and which has 13 months of history\n- hold the top 20 eligible names by score, equal weight, capped at 10% each\n- regime filter: when SPY closes below its 200-day average the model holds cash\n- data guard: a name with a single-day move over 40% inside the lookback is excluded and named \u2014 a jump that size is a corporate action or a bad bar, not momentum, until verified\n- rebalance every 21 trading days; 10 bps per side assumed on every change\n- parameters are the literature defaults, fixed before any of this data was looked at \u2014 nothing here was tuned on the backtest\n- variant: nine-month lookback (189 bars) instead of twelve \u2014 the rolling out-of-sample tuner chose it from 2022 on once it was in the grid (study \u00a71); a canonical horizon, not a fitted value, but the grid was widened after the sweep showed it ahead\n\n## How it is run on paper\n- universe: app/universe/seed_2026-07-25.csv \u2014 today's index membership, refreshed yearly; a name that leaves is dropped, a name that joins is added on the next refresh\n- cadence: a decision every 21 US trading days on the close; nothing is traded between decisions\n- fills: at the NEXT session's close, never at the price the decision was made on\n- notional: 100,000 USD on paper; no real money follows the page\n- fee: 1.50 USD per order, charged on every fill\n- the resting bracket: a stop-loss 20% below each entry and a target 40% above it, both placed against the FILL and never moved; the first day the price reaches either one, the whole position is sold\n- from when: the bracket applies to every bar from 2026-09-13 onward. A position opened BEFORE that day keeps the rule it was bought under \u2014 a stop and no target \u2014 until a rebalance replaces it, and its target column reads as a dash. A rule change is sealed before it applies; it is never applied backwards to bars or positions that predate it\n- what a daily price can and cannot settle: a day that reached BOTH levels is recorded as the stop, never the target, because a daily bar cannot say which came first; a price that opened past a level is recorded at that open, not at the level, because it never traded there; every sale says which level fired and on what day\n- the regime filter, when it says cash, sells everything on the decision day and waits\n\n## What the evidence cannot claim\n- survivorship: the universe is TODAY's index membership; names that left the indices during the test window are absent. Both sides share that survivor universe, but the comparison is NOT fully fair: momentum buys the high-flyers that later disappeared, so its relative edge is optimistic too, not only every absolute figure. Point-in-time membership (M1-1) is the fix and is not built\n- returns are close-to-close on dividend-adjusted prices (dividends reinvested), before tax; a name whose price stops updating is held at its last price until the next rebalance drops it\n- costs: 10 bps per side on every weight change; no slippage model beyond that\n- this configuration is a variant of momentum_12_1 chosen on THIS data (its own rules line says which knob and why) \u2014 an in-sample selection, not the literature's default; its edge is measured on the same years that picked it\n\n## Changes\n- a change to the rule is sealed here before it applies; the version above changes with it\n"
  },
  {
   "date": "2026-09-20",
   "model": "momentum_9_1",
   "version": "f518dde5d20d",
   "note": "The target now covers positions bought before 13 September too \u2014 40% above each one's own buy price, as the rule always meant. It applies from the next trading day on; no earlier day is judged again.",
   "sha256": "e946f4980c4822af88dfc12874a99058bbe362cc17ad4cff82f503ada966a091",
   "rules_md": "# The rule, sealed 2026-09-20\n\nmodel: momentum_9_1 \u2014 9-1 momentum \u00b7 top 20 \u00b7 equal weight (version f518dde5d20d)\n\n## What the rule does\n- score = total return over the last 12 months, skipping the most recent month (Jegadeesh\u2013Titman 12-1; the skip avoids the one-month reversal)\n- eligible = a name whose close is above its own 200-day average and which has 13 months of history\n- hold the top 20 eligible names by score, equal weight, capped at 10% each\n- regime filter: when SPY closes below its 200-day average the model holds cash\n- data guard: a name with a single-day move over 40% inside the lookback is excluded and named \u2014 a jump that size is a corporate action or a bad bar, not momentum, until verified\n- rebalance every 21 trading days; 10 bps per side assumed on every change\n- parameters are the literature defaults, fixed before any of this data was looked at \u2014 nothing here was tuned on the backtest\n- variant: nine-month lookback (189 bars) instead of twelve \u2014 the rolling out-of-sample tuner chose it from 2022 on once it was in the grid (study \u00a71); a canonical horizon, not a fitted value, but the grid was widened after the sweep showed it ahead\n\n## How it is run on paper\n- universe: app/universe/seed_2026-07-25.csv \u2014 today's index membership, refreshed yearly; a name that leaves is dropped, a name that joins is added on the next refresh\n- cadence: a decision every 21 US trading days on the close; nothing is traded between decisions\n- fills: at the NEXT session's close, never at the price the decision was made on\n- notional: 100,000 USD on paper; no real money follows the page\n- fee: 1.50 USD per order, charged on every fill\n- the resting bracket: a stop-loss 20% below each entry and a target 40% above it, both placed against the FILL and never moved; the first day the price reaches either one, the whole position is sold\n- from when: the bracket applies to every bar from 2026-09-13 onward. A position opened before that day was bought under the rule as it stood then \u2014 a stop, no target. The target is a fixed multiple of the fill, so it was already implied at the buy; this seal corrects it onto that position too, armed for every bar from 2026-09-21 onward and never for a bar before it. Its stop leg has been live since 2026-09-13, unchanged. A rule change is sealed before it applies; it is never applied backwards to bars or positions that predate it\n- what a daily price can and cannot settle: a day that reached BOTH levels is recorded as the stop, never the target, because a daily bar cannot say which came first; a price that opened past a level is recorded at that open, not at the level, because it never traded there; every sale says which level fired and on what day\n- the regime filter, when it says cash, sells everything on the decision day and waits\n\n## What the evidence cannot claim\n- survivorship: the universe is TODAY's index membership; names that left the indices during the test window are absent. Both sides share that survivor universe, but the comparison is NOT fully fair: momentum buys the high-flyers that later disappeared, so its relative edge is optimistic too, not only every absolute figure. Point-in-time membership (M1-1) is the fix and is not built\n- returns are close-to-close on dividend-adjusted prices (dividends reinvested), before tax; a name whose price stops updating is held at its last price until the next rebalance drops it\n- costs: 10 bps per side on every weight change; no slippage model beyond that\n- this configuration is a variant of momentum_12_1 chosen on THIS data (its own rules line says which knob and why) \u2014 an in-sample selection, not the literature's default; its edge is measured on the same years that picked it\n\n## Changes\n- a change to the rule is sealed here before it applies; the version above changes with it\n"
  },
  {
   "date": "2026-09-26",
   "model": "momentum_9_1",
   "version": "f518dde5d20d",
   "note": "The claim that one version of the model's settings were never tuned has been removed. The text already says that one setting was chosen using this data. Two internal reference tags have also been removed. The text now names S&P 500, S&P MidCap 400 and Nasdaq-100 directly. No trading rule changed.",
   "sha256": "34624b77293ff5b15a1a4bc4e0eba558b7b12b412dce35e75b7fe100d34351cd",
   "rules_md": "# The rule, sealed 2026-09-26\n\nmodel: momentum_9_1 \u2014 9-1 momentum \u00b7 top 20 \u00b7 equal weight (version f518dde5d20d)\n\n## What the rule does\n- score = total return over the last 12 months, skipping the most recent month (Jegadeesh\u2013Titman 12-1; the skip avoids the one-month reversal)\n- eligible = a name whose close is above its own 200-day average and which has 13 months of history\n- hold the top 20 eligible names by score, equal weight, capped at 10% each\n- regime filter: when SPY closes below its 200-day average the model holds cash\n- data guard: a name with a single-day move over 40% inside the lookback is excluded and named \u2014 a jump that size is a corporate action or a bad bar, not momentum, until verified\n- rebalance every 21 trading days; 10 bps per side assumed on every change\n- variant: nine-month lookback (189 bars) instead of twelve \u2014 the rolling out-of-sample tuner chose it from 2022 on once it was in the grid; a canonical horizon, not a fitted value, but the grid was widened after the sweep showed it ahead\n\n## How it is run on paper\n- universe: app/universe/seed_2026-07-25.csv \u2014 S&P 500, S&P MidCap 400 and Nasdaq-100 index membership, refreshed yearly; a name that leaves is dropped, a name that joins is added on the next refresh\n- cadence: a decision every 21 US trading days on the close; nothing is traded between decisions\n- fills: at the NEXT session's close, never at the price the decision was made on\n- notional: 100,000 USD on paper; no real money follows the page\n- fee: 1.50 USD per order, charged on every fill\n- the resting bracket: a stop-loss 20% below each entry and a target 40% above it, both placed against the FILL and never moved; the first day the price reaches either one, the whole position is sold\n- from when: the bracket applies to every bar from 2026-09-13 onward. A position opened before that day was bought under the rule as it stood then \u2014 a stop, no target. The target is a fixed multiple of the fill, so it was already implied at the buy; an earlier seal corrected it onto that position too, armed for every bar from 2026-09-21 onward and never for a bar before it \u2014 unchanged by this seal. Its stop leg has been live since 2026-09-13, unchanged. A rule change is sealed before it applies; it is never applied backwards to bars or positions that predate it\n- what a daily price can and cannot settle: a day that reached BOTH levels is recorded as the stop, never the target, because a daily bar cannot say which came first; a price that opened past a level is recorded at that open, not at the level, because it never traded there; every sale says which level fired and on what day\n- the regime filter, when it says cash, sells everything on the decision day and waits\n\n## What the evidence cannot claim\n- survivorship: the universe is TODAY's S&P 500, S&P MidCap 400 and Nasdaq-100 membership; names that left those indices during the test window are absent. Both sides share that survivor universe, but the comparison is NOT fully fair: momentum buys the high-flyers that later disappeared, so its relative edge is optimistic too, not only every absolute figure. Point-in-time membership is the fix and is not built\n- returns are close-to-close on dividend-adjusted prices (dividends reinvested), before tax; a name whose price stops updating is held at its last price until the next rebalance drops it\n- costs: 10 bps per side on every weight change; no slippage model beyond that\n- this configuration is a variant of momentum_12_1 chosen on THIS data (its own rules line says which knob and why) \u2014 an in-sample selection, not the literature's default; its edge is measured on the same years that picked it\n\n## Changes\n- Each rule change is sealed here before it takes effect. Its date and sha256 are recorded above and in the change log. The version names the model's own settings and changes only when one of those settings does.\n"
  },
  {
   "date": "2026-10-02",
   "model": "momentum_9_1",
   "version": "f518dde5d20d",
   "note": "From 7 October, the 40% target is removed. The 20% stop stays. Over ten years of testing the target cost about 14 points of return a year; the stop alone cost less than one. A position held on that day loses its target. Every sale a target already made stays as recorded.",
   "sha256": "94d422a1c30190c78f1dfb72caa2afecce95a376705b279325169362349e8dda",
   "rules_md": "# The rule, sealed 2026-10-02\n\nmodel: momentum_9_1 \u2014 9-1 momentum \u00b7 top 20 \u00b7 equal weight (version f518dde5d20d)\n\n## What the rule does\n- score = total return over the last 12 months, skipping the most recent month (Jegadeesh\u2013Titman 12-1; the skip avoids the one-month reversal)\n- eligible = a name whose close is above its own 200-day average and which has 13 months of history\n- hold the top 20 eligible names by score, equal weight, capped at 10% each\n- regime filter: when SPY closes below its 200-day average the model holds cash\n- data guard: a name with a single-day move over 40% inside the lookback is excluded and named \u2014 a jump that size is a corporate action or a bad bar, not momentum, until verified\n- rebalance every 21 trading days; 10 bps per side assumed on every change\n- variant: nine-month lookback (189 bars) instead of twelve \u2014 the rolling out-of-sample tuner chose it from 2022 on once it was in the grid; a canonical horizon, not a fitted value, but the grid was widened after the sweep showed it ahead\n\n## How it is run on paper\n- universe: app/universe/seed_2026-07-25.csv \u2014 S&P 500, S&P MidCap 400 and Nasdaq-100 index membership, refreshed yearly; a name that leaves is dropped, a name that joins is added on the next refresh\n- cadence: a decision every 21 US trading days on the close; nothing is traded between decisions\n- fills: at the NEXT session's close, never at the price the decision was made on\n- notional: 100,000 USD on paper; no real money follows the page\n- fee: 1.50 USD per order, charged on every fill\n- the resting exit: a stop-loss 20% below each entry, placed against the FILL and never moved. The whole position is sold the first day the price reaches it. For every bar before 2026-10-07 the book also held a target 40% above each entry, set the same way. From 2026-10-07 on there is no target; the stop is the only resting exit\n- from when: the bracket applies to every bar from 2026-09-13 onward. A position opened before that day was bought under the rule as it stood then \u2014 a stop, no target. The target is a fixed multiple of the fill, so it was already implied at the buy; an earlier seal corrected it onto that position too, armed for every bar from 2026-09-21 onward and never for a bar before it \u2014 unchanged by this seal. Its stop leg has been live since 2026-09-13, unchanged. A rule change is sealed before it applies; it is never applied backwards to bars or positions that predate it\n- the target is removed: from 2026-10-07 on, every position \u2014 bought before or after that day \u2014 keeps its stop and nothing else. A position held on that day loses its target from that day. The measured reason: over ten years of testing, the 40% target cost about 14 points of return a year, while the 20% stop alone cost less than one. Every sale a target already made, and every record of it, stays exactly as it was written. This is sealed before it applies. It is never applied backwards\n- what a daily price can and cannot settle: a price that opened past a level is recorded at that open, not at the level, because it never traded there. Every sale says which level fired and on what day. On a bar before 2026-10-07 that reached BOTH levels, the stop is recorded, never the target; a daily bar cannot say which came first\n- the regime filter, when it says cash, sells everything on the decision day and waits\n\n## What the evidence cannot claim\n- survivorship: the universe is TODAY's S&P 500, S&P MidCap 400 and Nasdaq-100 membership; names that left those indices during the test window are absent. Both sides share that survivor universe, but the comparison is NOT fully fair: momentum buys the high-flyers that later disappeared, so its relative edge is optimistic too, not only every absolute figure. Point-in-time membership is the fix and is not built\n- returns are close-to-close on dividend-adjusted prices (dividends reinvested), before tax; a name whose price stops updating is held at its last price until the next rebalance drops it\n- costs: 10 bps per side on every weight change; no slippage model beyond that\n- this configuration is a variant of momentum_12_1 chosen on THIS data (its own rules line says which knob and why) \u2014 an in-sample selection, not the literature's default; its edge is measured on the same years that picked it\n\n## Changes\n- Each rule change is sealed here before it takes effect. Its date and sha256 are recorded above and in the change log. The version names the model's own settings and changes only when one of those settings does.\n"
  }
 ],
 "disclosures": [
  "survivorship: the universe is TODAY's S&P 500, S&P MidCap 400 and Nasdaq-100 membership; names that left those indices during the test window are absent. Both sides share that survivor universe, but the comparison is NOT fully fair: momentum buys the high-flyers that later disappeared, so its relative edge is optimistic too, not only every absolute figure. Point-in-time membership (M1-1) is the fix and is not built",
  "returns are close-to-close on dividend-adjusted prices (dividends reinvested), before tax; a name whose price stops updating is held at its last price until the next rebalance drops it",
  "costs: 10 bps per side on every weight change; no slippage model beyond that",
  "this configuration is a variant of momentum_12_1 chosen on THIS data (its own rules line says which knob and why) \u2014 an in-sample selection, not the literature's default; its edge is measured on the same years that picked it"
 ],
 "source": {
  "universe_size": 917,
  "universe_as_of": "2026-07-25",
  "price_data": "Yahoo Finance"
 },
 "copy": {
  "eyebrow": "sey\u0130r \u00b7 a public research log",
  "work_line": "a published investing rule, followed on paper.",
  "title": "What happens if you follow the rule?",
  "lede": "One published momentum rule, one paper portfolio of {notional} USD, every decision saved before its outcome. No judgement calls in applying the rule, no edits after the fact \u2014 the rule can be amended only going forward, with each amendment sealed. This page is the record, good years and bad.",
  "scoreboard_h": "The paper book against its benchmarks",
  "scoreboard_note": "The scoreboard is the only thing on this page that changes without a decision. Everything else changes only on a rebalance day.",
  "curve_h": "Value of {notional} USD, day by day",
  "curve_note": "Fills happen at the close of the session after each decision, never at the price the decision was made on.",
  "history_eyebrow": "the history",
  "history_h": "The rule on past data",
  "history_lead": "With the book\u2019s own costs, {start} to {end}. The first three rows are the lists of companies the rule picks from; the last is SPY.",
  "history_row_live": "Today\u2019s members of the S&P 500, MidCap 400 and Nasdaq-100 \u2014 the three indices the book picks from",
  "history_row_today": "Today\u2019s members of the S&P 500",
  "history_row_pit": "Members of the S&P 500 on each decision day",
  "history_row_spy": "SPY, the benchmark",
  "history_note": "On the S&P 500 as it stood on each decision day, the rule earned {pit} a year. On today\u2019s members of the same index it earned {today}, {gap} points a year more for the same rule over the same years. That gap is measured on the companies that have prices: free price data is missing {none} of the {left} companies that left the S&P 500 in these years, so they are left out, and they could move the gap either way. The MidCap 400 and Nasdaq-100 have no free membership history, so the same effect there is not measured. SPY earned {spy} a year over the same years.",
  "history_unproven": "The book below runs this rule, and the rule is unproven: on the S&P 500 of the time it earned {cmp} than SPY, and nine years do not separate it from the market. Only the record kept here from {started} can test it.",
  "book_h": "The book today",
  "book_note": "The names are whatever the rule ranks highest on the rebalance day. They are not picks, and nobody here has an opinion about them. The level marked \u201cset once\u201d is the one the book acts on: it is fixed at the price actually paid, never moved, and the whole position is sold the first day the price reaches it. A dash means the level is not set for that name.",
  "book_stop_note": "The stop is kept by the book itself: the first day the price reaches it, the whole position is sold, fee charged. Nothing waits for a closing price.",
  "book_stop_note_sold": "The stop is kept by the book itself: the first day the price reaches it, the whole position is sold, fee charged, and every sale is listed below. Nothing waits for a closing price.",
  "pending_levels_note": "pending rows show the decision's own level at the decision price; the fill re-bases it \u2014 the one marked \u201cset once\u201d is placed against the fill and never moved after",
  "sold_h": "Sold",
  "sold_note": "Every sale the book has made, and why: the rule's rebalance (a trim or an exit), the stop set when the name was bought, or, on a sale before {removed}, the target. A daily price cannot say which came first. A day that reached both levels is therefore recorded as the stop, and a price that opened past a level is recorded at that open rather than at the level.",
  "sold_reason_stop": "stop-loss",
  "sold_reason_target": "target",
  "sold_reason_rebalance": "rebalance",
  "sold_at_open": "opened past it",
  "calendar_h": "Rebalance every {every} trading days",
  "calendar_note": "Between rebalance days nothing is bought or sold, whatever the market does. The exception is the resting stop set when a name is bought \u2014 {stop}% below the price paid \u2014 placed once and never moved. The target that used to sit {target}% above the price paid was removed on {removed}. Over nine years of testing it cost about {pts} points of return a year. When the S&P 500 sits below its 200-day average on a rebalance day, the book goes to cash and waits.",
  "ledger_h": "Rebalances",
  "ledger_note": "Rows are appended on rebalance days; an outcome is written once, when the next rebalance day closes the window, and never edited.",
  "seal_h": "The rules, and what this page cannot claim",
  "seal_fold_summary": "Show what the evidence cannot claim",
  "changes_h": "Changes to the rule",
  "footer_1": "This is a research log, not investment advice. Nothing here is a recommendation to buy or sell anything. Public price data only; personal time and equipment.",
  "footer_2": "Every figure on this page is computed by the same code that produced the history, and saved before the market answers.",
  "day0": "Day {day} \u2014 the rules are sealed; the first decision has not been made yet.",
  "awaiting_fill": "Day {day} \u2014 the first decision is made: {n} names, to be filled at the close of {date}.",
  "pending_fill": "pending fill \u2014 {date}",
  "curve_empty": "No fills yet \u2014 the curve starts at the first fill.",
  "no_verdict": "insufficient evidence",
  "feedback_open": "Feedback"
 }
}