{
  "declared_before_returns": true,
  "all_history_already_seen": true,
  "no_untouched_oos": true,
  "rules": [
    {
      "name": "monthly_buffer_cash",
      "selector": "etf",
      "event": "none",
      "budget": "25",
      "reference": true
    },
    {
      "name": "half_exit_preserve",
      "selector": "etf",
      "event": "none",
      "budget": "25",
      "reference": true
    },
    {
      "name": "sector_first",
      "selector": "sector",
      "event": "none",
      "budget": "25"
    },
    {
      "name": "sector_blend",
      "selector": "blend",
      "event": "none",
      "budget": "25"
    },
    {
      "name": "weekly_entry",
      "selector": "etf",
      "event": "entry",
      "budget": "25"
    },
    {
      "name": "weekly_switch",
      "selector": "etf",
      "event": "switch",
      "budget": "25"
    },
    {
      "name": "vol30_control",
      "selector": "etf",
      "event": "none",
      "budget": "30"
    },
    {
      "name": "strong_budget",
      "selector": "etf",
      "event": "none",
      "budget": "strong"
    },
    {
      "name": "blend_entry",
      "selector": "blend",
      "event": "entry",
      "budget": "25"
    },
    {
      "name": "strong_entry",
      "selector": "etf",
      "event": "entry",
      "budget": "strong"
    }
  ],
  "primary": "weekly_entry",
  "period": [
    "20190102",
    "20260811"
  ],
  "stresses": [
    [
      "cost50",
      0.005,
      0,
      0
    ],
    [
      "offset2",
      0.002,
      2,
      0
    ],
    [
      "offset5",
      0.002,
      5,
      0
    ],
    [
      "delay2",
      0.002,
      0,
      2
    ],
    [
      "joint_cost50_offset5",
      0.005,
      5,
      0
    ],
    [
      "joint_cost50_delay2",
      0.005,
      0,
      2
    ]
  ],
  "universe": "Existing 410 A-share sector/theme ETFs and cash only; no QDII, gold, bonds or leverage.",
  "selection": "40-day regression score. Sector score is eligible-member median; ETF and sector percentile blend 50/50. Average percentile ranks; deterministic code/group ties.",
  "sector_retention": "Keep eligible incumbent if its group remains in top3; otherwise top group. If a vehicle is needed, maximum current known ADV20, code tie-break. No forced replacement of retained incumbent.",
  "etf_retention": "Keep incumbent within eligible top3 of the selected ranking; else rank1. Monthly selections inherit original no-positive-score-filter behavior.",
  "weekly_entry": "Signal slot empty, market up; choose highest ranked candidate with own MA120 and raw score40>0. Target is half the fully risk-sized single-ETF target, not half raw then rescale.",
  "weekly_switch": "Existing signal outside eligible top3, market up, rank1 has positive raw40, own MA120, level strictly above prior20 closes excluding today. Switch to rank1 with normal sizing.",
  "calendar": "China last weekly session; monthly signal takes precedence. One additional issued signal per natural calendar month, reset on month transition. Monthly action does not reset used extra allowance. Waiting/retry does not create extra signals.",
  "budget": "25%; control30%; conditional30 only at a signal when market up, selected ownMA120 and raw40>0, equal-group breadth>=60%, >=8 groups. Otherwise25%. At most100% invested.",
  "breadth": "Average of per-group fractions of eligible ETFs above ownMA120. Every group equal weight; current taxonomy inherited. Only finite score/eligible assets enter groups.",
  "timing": "All monthly offsets0..10 for all10; weekly calendars fixed. Normal next-session-close execution. Delays shift already computed targets without recomputing them.",
  "high_return_gate": "Full CAGR>=25, MDD>=-30; cost50 CAGR>=20; worst6 MDD>=-30, worst6 CAGR>=baseline15.08; pre2024 and recent CAGR each >= corresponding frozen baseline.",
  "robust_gate": "Normal AND all6 stresses AND all11 monthly offsets: CAGR>=20, MDD>=-30.",
  "reporting": "All10, no post-result additions. Existing half-exit daily checks are a frozen historical comparator, not a new weekly-operation variant.",
  "cost_each_side": 0.002,
  "cash_interest": 0,
  "retain_rank": 3,
  "blend_weight": 0.5,
  "entry_fraction": 0.5,
  "breadth_min_groups": 8,
  "breadth_threshold": 0.6,
  "breakout_sessions": 20
}