{
  "slug": "obv-on-balance-volume-taiwan",
  "indicator": "obv",
  "data_end": "2026-09-30",
  "run_date": "2026-10-24",
  "finlab_version": "2.2.16",
  "universe": "上市櫃普通股,60 日均量 > 100 萬股、收盤價 > 10 元、60 日均成交金額前 300 名;排除 ETF(00 開頭)、權證/特別股等非 4 碼數字代號、金融保險股、處置/全額交割股(is_flagged_stock);KY 股未排除。回測區間 2015-01-01~2026-09-30。",
  "benchmark_0050": {
    "start": "2015-01-30",
    "note": "etl:adj_close 含息純算術買進持有;與策略同日(策略首個淨值日)起算;樣本外段自 2022-01-01。",
    "research": {
      "cagr": 15.09,
      "monthly_sharpe": 1.0,
      "monthly_sortino": 1.47,
      "max_drawdown": -28.22
    },
    "oos": {
      "cagr": 30.51,
      "monthly_sharpe": 1.21,
      "monthly_sortino": 2.44,
      "max_drawdown": -33.96
    },
    "full": {
      "cagr": 21.17,
      "monthly_sharpe": 1.07,
      "monthly_sortino": 1.85,
      "max_drawdown": -33.96
    },
    "full_annual_vol": 19.8
  },
  "winner_v2": {
    "name": "obv_radjMom40_OBVz0_n14_breadth60_0.55_to0050",
    "strategy_rule": "流動性前 300 名宇宙;風險調整動能 =(收盤 / 40 日前收盤 − 1)/ NATR(ATR14 / 收盤);只在 OBV 90 日時序 z-score > 0 的股票中取風險調整動能最高 14 檔,反波動 1/NATR 加權;可交易宇宙內 OBV 站上自身 60 日均的比例 > 0.55 持選股籃,≤ 0.55 選股清零、整池改持含息 0050。月再平衡,廣度擇時只在每月換股日讀取,不加槓桿、不用基本面。",
    "params": {
      "mom_window": 40,
      "atr_period": 14,
      "obv_z_window": 90,
      "top_n": 14,
      "breadth_ma": 60,
      "breadth_thr": 0.55,
      "defensive": "0050"
    },
    "start": "2015-01-30",
    "research": {
      "cagr": 26.3,
      "monthly_sharpe": 1.25,
      "monthly_sortino": 2.13,
      "max_drawdown": -31.96
    },
    "oos": {
      "cagr": 30.68,
      "monthly_sharpe": 1.11,
      "monthly_sortino": 1.6,
      "max_drawdown": -39.02
    },
    "full": {
      "cagr": 28.07,
      "monthly_sharpe": 1.09,
      "monthly_sortino": 1.6,
      "max_drawdown": -39.02
    },
    "full_annual_vol": 28.7,
    "turnover": 9.6,
    "n_trades": 1686,
    "passes_target": true,
    "full_cagr_lead_vs_0050_pp": 6.9
  },
  "winner_v2_yearly_vs_0050": {
    "first_year_from": "2015-01-30",
    "last_year_until": "2026-09-30",
    "win_count": "6/12",
    "years": {
      "2015": {
        "strategy": 16.4,
        "tw0050": -7.9,
        "win": true
      },
      "2016": {
        "strategy": 11.8,
        "tw0050": 19.6,
        "win": false
      },
      "2017": {
        "strategy": 36.9,
        "tw0050": 18.1,
        "win": true
      },
      "2018": {
        "strategy": -7.3,
        "tw0050": -4.9,
        "win": false
      },
      "2019": {
        "strategy": 21.5,
        "tw0050": 33.5,
        "win": false
      },
      "2020": {
        "strategy": 66.3,
        "tw0050": 31.1,
        "win": true
      },
      "2021": {
        "strategy": 50.5,
        "tw0050": 21.9,
        "win": true
      },
      "2022": {
        "strategy": -11.4,
        "tw0050": -21.4,
        "win": true
      },
      "2023": {
        "strategy": 111.1,
        "tw0050": 27.5,
        "win": true
      },
      "2024": {
        "strategy": 9.4,
        "tw0050": 48.6,
        "win": false
      },
      "2025": {
        "strategy": 31.7,
        "tw0050": 36.8,
        "win": false
      },
      "2026": {
        "strategy": 32.3,
        "tw0050": 74.3,
        "win": false
      }
    }
  },
  "component_ablation": {
    "L0_naked_radj_mom": {
      "research": {
        "cagr": 29.12,
        "monthly_sharpe": 1.24,
        "monthly_sortino": 1.99,
        "max_drawdown": -33.01
      },
      "oos": {
        "cagr": 24.27,
        "monthly_sharpe": 0.92,
        "monthly_sortino": 1.41,
        "max_drawdown": -43.14
      },
      "full": {
        "cagr": 27.14,
        "monthly_sharpe": 1.01,
        "monthly_sortino": 1.51,
        "max_drawdown": -43.14
      },
      "turnover": 9.7,
      "passes_target": false
    },
    "L1_obvz_only": {
      "research": {
        "cagr": 30.15,
        "monthly_sharpe": 1.29,
        "monthly_sortino": 2.03,
        "max_drawdown": -31.96
      },
      "oos": {
        "cagr": 26.18,
        "monthly_sharpe": 0.97,
        "monthly_sortino": 1.45,
        "max_drawdown": -41.98
      },
      "full": {
        "cagr": 28.53,
        "monthly_sharpe": 1.06,
        "monthly_sortino": 1.55,
        "max_drawdown": -41.98
      },
      "turnover": 9.7,
      "passes_target": false
    },
    "L1b_breadth_only": {
      "research": {
        "cagr": 25.65,
        "monthly_sharpe": 1.22,
        "monthly_sortino": 2.11,
        "max_drawdown": -31.96
      },
      "oos": {
        "cagr": 30.55,
        "monthly_sharpe": 1.09,
        "monthly_sortino": 1.61,
        "max_drawdown": -39.44
      },
      "full": {
        "cagr": 27.63,
        "monthly_sharpe": 1.06,
        "monthly_sortino": 1.6,
        "max_drawdown": -39.44
      },
      "turnover": 9.6,
      "passes_target": true
    },
    "equal_weight": {
      "research": {
        "cagr": 29.14,
        "monthly_sharpe": 1.28,
        "monthly_sortino": 2.49,
        "max_drawdown": -33.24
      },
      "oos": {
        "cagr": 29.07,
        "monthly_sharpe": 1.05,
        "monthly_sortino": 1.48,
        "max_drawdown": -39.32
      },
      "full": {
        "cagr": 29.11,
        "monthly_sharpe": 1.07,
        "monthly_sortino": 1.59,
        "max_drawdown": -39.32
      },
      "turnover": 9.4,
      "passes_target": true
    },
    "riskoff_cash": {
      "research": {
        "cagr": 30.13,
        "monthly_sharpe": 1.54,
        "monthly_sortino": 3.25,
        "max_drawdown": -31.96
      },
      "oos": {
        "cagr": 21.65,
        "monthly_sharpe": 0.89,
        "monthly_sortino": 1.22,
        "max_drawdown": -37.03
      },
      "full": {
        "cagr": 26.62,
        "monthly_sharpe": 1.09,
        "monthly_sortino": 1.52,
        "max_drawdown": -37.03
      },
      "turnover": 8.4,
      "passes_target": false
    },
    "winner_v2": {
      "research": {
        "cagr": 26.3,
        "monthly_sharpe": 1.25,
        "monthly_sortino": 2.13,
        "max_drawdown": -31.96
      },
      "oos": {
        "cagr": 30.68,
        "monthly_sharpe": 1.11,
        "monthly_sortino": 1.6,
        "max_drawdown": -39.02
      },
      "full": {
        "cagr": 28.07,
        "monthly_sharpe": 1.09,
        "monthly_sortino": 1.6,
        "max_drawdown": -39.02
      }
    },
    "note": "L0 = 風險調整動能最高 14 檔反波動加權(無 OBV、無擇時);L1 = 加 OBV 吸籌確認、無擇時;L1b = 只加 OBV 廣度擇時;equal_weight = 完整策略改等權;riskoff_cash = 完整策略 risk-off 改空手。"
  },
  "textbook_angles": {
    "raw_obv_top30": {
      "research": {
        "cagr": 17.89,
        "monthly_sharpe": 0.78,
        "monthly_sortino": 1.26,
        "max_drawdown": -37.19
      },
      "oos": {
        "cagr": 22.09,
        "monthly_sharpe": 0.88,
        "monthly_sortino": 1.48,
        "max_drawdown": -37.34
      },
      "full": {
        "cagr": 19.43,
        "monthly_sharpe": 0.79,
        "monthly_sortino": 1.3,
        "max_drawdown": -37.34
      }
    },
    "raw_obv_bottom30": {
      "research": {
        "cagr": 5.1,
        "monthly_sharpe": 0.32,
        "monthly_sortino": 0.51,
        "max_drawdown": -39.71
      },
      "oos": {
        "cagr": 0.32,
        "monthly_sharpe": 0.24,
        "monthly_sortino": 0.39,
        "max_drawdown": -46.66
      },
      "full": {
        "cagr": 3.13,
        "monthly_sharpe": 0.25,
        "monthly_sortino": 0.4,
        "max_drawdown": -50.34
      }
    },
    "obv_speed5_top30": {
      "research": {
        "cagr": 11.59,
        "monthly_sharpe": 0.59,
        "monthly_sortino": 1.01,
        "max_drawdown": -41.03
      },
      "oos": {
        "cagr": 22.75,
        "monthly_sharpe": 0.91,
        "monthly_sortino": 1.55,
        "max_drawdown": -35.72
      },
      "full": {
        "cagr": 15.85,
        "monthly_sharpe": 0.69,
        "monthly_sortino": 1.18,
        "max_drawdown": -41.03
      }
    },
    "obv_z40_top30": {
      "research": {
        "cagr": 13.96,
        "monthly_sharpe": 0.71,
        "monthly_sortino": 1.03,
        "max_drawdown": -36.69
      },
      "oos": {
        "cagr": 13.51,
        "monthly_sharpe": 0.65,
        "monthly_sortino": 0.99,
        "max_drawdown": -41.92
      },
      "full": {
        "cagr": 13.65,
        "monthly_sharpe": 0.64,
        "monthly_sortino": 0.95,
        "max_drawdown": -42.52
      }
    },
    "obv_z40_bottom30": {
      "research": {
        "cagr": 2.1,
        "monthly_sharpe": 0.21,
        "monthly_sortino": 0.25,
        "max_drawdown": -39.71
      },
      "oos": {
        "cagr": 11.97,
        "monthly_sharpe": 0.61,
        "monthly_sortino": 1.04,
        "max_drawdown": -46.99
      },
      "full": {
        "cagr": 5.97,
        "monthly_sharpe": 0.36,
        "monthly_sortino": 0.51,
        "max_drawdown": -46.99
      }
    },
    "obv_z60_top30": {
      "research": {
        "cagr": 15.48,
        "monthly_sharpe": 0.76,
        "monthly_sortino": 1.12,
        "max_drawdown": -38.17
      },
      "oos": {
        "cagr": 20.8,
        "monthly_sharpe": 0.87,
        "monthly_sortino": 1.43,
        "max_drawdown": -35.79
      },
      "full": {
        "cagr": 17.51,
        "monthly_sharpe": 0.77,
        "monthly_sortino": 1.21,
        "max_drawdown": -38.17
      }
    },
    "obv_z60_bottom30": {
      "research": {
        "cagr": 4.39,
        "monthly_sharpe": 0.31,
        "monthly_sortino": 0.4,
        "max_drawdown": -38.85
      },
      "oos": {
        "cagr": 10.43,
        "monthly_sharpe": 0.54,
        "monthly_sortino": 0.87,
        "max_drawdown": -44.16
      },
      "full": {
        "cagr": 6.74,
        "monthly_sharpe": 0.39,
        "monthly_sortino": 0.57,
        "max_drawdown": -44.16
      }
    },
    "obv_z90_top30": {
      "research": {
        "cagr": 18.78,
        "monthly_sharpe": 0.9,
        "monthly_sortino": 1.48,
        "max_drawdown": -35.26
      },
      "oos": {
        "cagr": 23.63,
        "monthly_sharpe": 0.92,
        "monthly_sortino": 1.69,
        "max_drawdown": -37.69
      },
      "full": {
        "cagr": 20.68,
        "monthly_sharpe": 0.86,
        "monthly_sortino": 1.49,
        "max_drawdown": -37.69
      }
    },
    "obv_z90_bottom30": {
      "research": {
        "cagr": 5.4,
        "monthly_sharpe": 0.37,
        "monthly_sortino": 0.48,
        "max_drawdown": -33.65
      },
      "oos": {
        "cagr": 13.56,
        "monthly_sharpe": 0.67,
        "monthly_sortino": 1.06,
        "max_drawdown": -40.34
      },
      "full": {
        "cagr": 8.59,
        "monthly_sharpe": 0.48,
        "monthly_sortino": 0.7,
        "max_drawdown": -40.34
      }
    },
    "obv_z120_top30": {
      "research": {
        "cagr": 17.46,
        "monthly_sharpe": 0.83,
        "monthly_sortino": 1.36,
        "max_drawdown": -41.74
      },
      "oos": {
        "cagr": 24.79,
        "monthly_sharpe": 0.94,
        "monthly_sortino": 1.61,
        "max_drawdown": -39.83
      },
      "full": {
        "cagr": 20.27,
        "monthly_sharpe": 0.83,
        "monthly_sortino": 1.39,
        "max_drawdown": -41.74
      }
    },
    "obv_z120_bottom30": {
      "research": {
        "cagr": 3.38,
        "monthly_sharpe": 0.27,
        "monthly_sortino": 0.34,
        "max_drawdown": -37.28
      },
      "oos": {
        "cagr": 6.93,
        "monthly_sharpe": 0.45,
        "monthly_sortino": 0.7,
        "max_drawdown": -42.01
      },
      "full": {
        "cagr": 4.75,
        "monthly_sharpe": 0.32,
        "monthly_sortino": 0.46,
        "max_drawdown": -42.01
      }
    },
    "note": "univ 內等權 30 檔、無擇時、月再平衡;obv_speed5 = OBV 5 日變化量;obv_zN = OBV 的 N 日時序 z-score。"
  },
  "obv_z_spread": {
    "z40": {
      "research_cagr_gap_pp": 11.9,
      "oos_cagr_gap_pp": 1.5,
      "research_sharpe_top": 0.71,
      "oos_sharpe_top": 0.65,
      "full_mdd_top": -42.5
    },
    "z60": {
      "research_cagr_gap_pp": 11.1,
      "oos_cagr_gap_pp": 10.4,
      "research_sharpe_top": 0.76,
      "oos_sharpe_top": 0.87,
      "full_mdd_top": -38.2
    },
    "z90": {
      "research_cagr_gap_pp": 13.4,
      "oos_cagr_gap_pp": 10.1,
      "research_sharpe_top": 0.9,
      "oos_sharpe_top": 0.92,
      "full_mdd_top": -37.7
    },
    "z120": {
      "research_cagr_gap_pp": 14.1,
      "oos_cagr_gap_pp": 17.9,
      "research_sharpe_top": 0.83,
      "oos_sharpe_top": 0.94,
      "full_mdd_top": -41.7
    },
    "note": "OBV z 最高 30 檔與最低 30 檔的年化報酬差(百分點),非多空組合。"
  },
  "textbook_size_check": {
    "raw_obv_top30": {
      "median_mv_percentile": 70.5,
      "avg_overlap_with_mv_top30": 21.5
    },
    "obv_z90_top30": {
      "median_mv_percentile": 47.2,
      "avg_overlap_with_mv_top30": 10.3
    },
    "note": "每月最後一個交易日,持股在可交易宇宙內的市值百分位中位數(100 = 最大),以及與宇宙市值前 30 大重疊的平均比例;etl:market_value。"
  },
  "optim_v2_grid": {
    "axes": {
      "top_n": [
        13,
        14,
        15,
        16
      ],
      "breadth_thr": [
        0.52,
        0.55,
        0.58,
        0.6
      ]
    },
    "z_metric": "research_monthly_sharpe",
    "z_research_sharpe": [
      [
        1.27,
        1.28,
        1.25,
        1.23
      ],
      [
        1.24,
        1.25,
        1.22,
        1.21
      ],
      [
        1.31,
        1.33,
        1.31,
        1.3
      ],
      [
        1.19,
        1.21,
        1.2,
        1.19
      ]
    ],
    "z_oos_sharpe": [
      [
        0.97,
        0.99,
        1.04,
        1.05
      ],
      [
        1.08,
        1.11,
        1.15,
        1.13
      ],
      [
        1.07,
        1.08,
        1.1,
        1.08
      ],
      [
        0.99,
        1.03,
        1.05,
        1.03
      ]
    ],
    "cells": {
      "n13_thr0.52": {
        "research_cagr": 27.1,
        "research_sharpe": 1.27,
        "oos_cagr": 27.2,
        "oos_sharpe": 0.97,
        "full_cagr": 27.2,
        "mdd": -43.9,
        "turnover": 9.8,
        "passes_target": false
      },
      "n14_thr0.52": {
        "research_cagr": 27.0,
        "research_sharpe": 1.28,
        "oos_cagr": 27.1,
        "oos_sharpe": 0.99,
        "full_cagr": 27.0,
        "mdd": -43.4,
        "turnover": 9.8,
        "passes_target": false
      },
      "n15_thr0.52": {
        "research_cagr": 25.8,
        "research_sharpe": 1.25,
        "oos_cagr": 28.7,
        "oos_sharpe": 1.04,
        "full_cagr": 26.9,
        "mdd": -41.0,
        "turnover": 9.7,
        "passes_target": true
      },
      "n16_thr0.52": {
        "research_cagr": 25.7,
        "research_sharpe": 1.23,
        "oos_cagr": 29.1,
        "oos_sharpe": 1.05,
        "full_cagr": 27.0,
        "mdd": -40.7,
        "turnover": 9.6,
        "passes_target": true
      },
      "n13_thr0.55": {
        "research_cagr": 26.6,
        "research_sharpe": 1.24,
        "oos_cagr": 30.9,
        "oos_sharpe": 1.08,
        "full_cagr": 28.4,
        "mdd": -39.7,
        "turnover": 9.6,
        "passes_target": true
      },
      "n14_thr0.55": {
        "research_cagr": 26.3,
        "research_sharpe": 1.25,
        "oos_cagr": 30.7,
        "oos_sharpe": 1.11,
        "full_cagr": 28.1,
        "mdd": -39.0,
        "turnover": 9.6,
        "passes_target": true
      },
      "n15_thr0.55": {
        "research_cagr": 25.2,
        "research_sharpe": 1.22,
        "oos_cagr": 31.6,
        "oos_sharpe": 1.15,
        "full_cagr": 27.7,
        "mdd": -37.0,
        "turnover": 9.5,
        "passes_target": true
      },
      "n16_thr0.55": {
        "research_cagr": 25.1,
        "research_sharpe": 1.21,
        "oos_cagr": 31.2,
        "oos_sharpe": 1.13,
        "full_cagr": 27.5,
        "mdd": -38.2,
        "turnover": 9.5,
        "passes_target": true
      },
      "n13_thr0.58": {
        "research_cagr": 27.8,
        "research_sharpe": 1.31,
        "oos_cagr": 30.3,
        "oos_sharpe": 1.07,
        "full_cagr": 28.8,
        "mdd": -41.0,
        "turnover": 9.5,
        "passes_target": true
      },
      "n14_thr0.58": {
        "research_cagr": 27.8,
        "research_sharpe": 1.33,
        "oos_cagr": 29.5,
        "oos_sharpe": 1.08,
        "full_cagr": 28.5,
        "mdd": -41.3,
        "turnover": 9.4,
        "passes_target": true
      },
      "n15_thr0.58": {
        "research_cagr": 26.9,
        "research_sharpe": 1.31,
        "oos_cagr": 29.9,
        "oos_sharpe": 1.1,
        "full_cagr": 28.1,
        "mdd": -40.0,
        "turnover": 9.4,
        "passes_target": true
      },
      "n16_thr0.58": {
        "research_cagr": 26.9,
        "research_sharpe": 1.3,
        "oos_cagr": 29.2,
        "oos_sharpe": 1.08,
        "full_cagr": 27.8,
        "mdd": -41.6,
        "turnover": 9.3,
        "passes_target": true
      },
      "n13_thr0.6": {
        "research_cagr": 23.6,
        "research_sharpe": 1.19,
        "oos_cagr": 26.6,
        "oos_sharpe": 0.99,
        "full_cagr": 24.9,
        "mdd": -39.7,
        "turnover": 9.0,
        "passes_target": false
      },
      "n14_thr0.6": {
        "research_cagr": 24.0,
        "research_sharpe": 1.21,
        "oos_cagr": 27.5,
        "oos_sharpe": 1.03,
        "full_cagr": 25.4,
        "mdd": -37.0,
        "turnover": 8.9,
        "passes_target": false
      },
      "n15_thr0.6": {
        "research_cagr": 22.9,
        "research_sharpe": 1.2,
        "oos_cagr": 28.0,
        "oos_sharpe": 1.05,
        "full_cagr": 24.9,
        "mdd": -33.9,
        "turnover": 8.9,
        "passes_target": false
      },
      "n16_thr0.6": {
        "research_cagr": 23.0,
        "research_sharpe": 1.19,
        "oos_cagr": 27.0,
        "oos_sharpe": 1.03,
        "full_cagr": 24.6,
        "mdd": -34.8,
        "turnover": 8.8,
        "passes_target": false
      }
    },
    "summary": {
      "research_sharpe_range": [
        1.19,
        1.33
      ],
      "oos_sharpe_range": [
        0.97,
        1.15
      ],
      "oos_cagr_range": [
        26.6,
        31.6
      ],
      "mdd_range": [
        -43.9,
        -33.9
      ],
      "n_research_sharpe_ge_1_2": 14,
      "n_oos_sharpe_ge_1_0": 13,
      "n_passes_target": 10,
      "n_total": 16
    },
    "default_key": "n14_thr0.55"
  },
  "optim_v2_neighbors": {
    "cells": {
      "default": {
        "research_cagr": 26.3,
        "research_sharpe": 1.25,
        "oos_cagr": 30.7,
        "oos_sharpe": 1.11,
        "full_cagr": 28.1,
        "mdd": -39.0,
        "turnover": 9.6,
        "passes_target": true
      },
      "mom_win_30": {
        "research_cagr": 19.8,
        "research_sharpe": 1.01,
        "oos_cagr": 40.5,
        "oos_sharpe": 1.23,
        "full_cagr": 27.8,
        "mdd": -37.0,
        "turnover": 10.0,
        "passes_target": false
      },
      "mom_win_50": {
        "research_cagr": 26.4,
        "research_sharpe": 1.19,
        "oos_cagr": 26.0,
        "oos_sharpe": 0.97,
        "full_cagr": 26.1,
        "mdd": -40.7,
        "turnover": 9.2,
        "passes_target": false
      },
      "z_win_60": {
        "research_cagr": 25.9,
        "research_sharpe": 1.24,
        "oos_cagr": 31.4,
        "oos_sharpe": 1.12,
        "full_cagr": 28.1,
        "mdd": -37.3,
        "turnover": 9.6,
        "passes_target": true
      },
      "z_win_120": {
        "research_cagr": 26.4,
        "research_sharpe": 1.26,
        "oos_cagr": 30.0,
        "oos_sharpe": 1.1,
        "full_cagr": 27.9,
        "mdd": -39.2,
        "turnover": 9.6,
        "passes_target": true
      },
      "top_n_12": {
        "research_cagr": 22.7,
        "research_sharpe": 1.08,
        "oos_cagr": 33.2,
        "oos_sharpe": 1.12,
        "full_cagr": 26.9,
        "mdd": -39.3,
        "turnover": 9.8,
        "passes_target": false
      },
      "top_n_16": {
        "research_cagr": 25.1,
        "research_sharpe": 1.21,
        "oos_cagr": 31.2,
        "oos_sharpe": 1.13,
        "full_cagr": 27.5,
        "mdd": -38.2,
        "turnover": 9.5,
        "passes_target": true
      },
      "breadth_ma_40": {
        "research_cagr": 23.8,
        "research_sharpe": 1.2,
        "oos_cagr": 27.4,
        "oos_sharpe": 1.02,
        "full_cagr": 25.2,
        "mdd": -38.3,
        "turnover": 9.2,
        "passes_target": false
      },
      "breadth_ma_90": {
        "research_cagr": 28.6,
        "research_sharpe": 1.37,
        "oos_cagr": 29.5,
        "oos_sharpe": 1.05,
        "full_cagr": 29.0,
        "mdd": -38.9,
        "turnover": 9.8,
        "passes_target": true
      },
      "thr_0.52": {
        "research_cagr": 27.0,
        "research_sharpe": 1.28,
        "oos_cagr": 27.1,
        "oos_sharpe": 0.99,
        "full_cagr": 27.0,
        "mdd": -43.4,
        "turnover": 9.8,
        "passes_target": false
      },
      "thr_0.58": {
        "research_cagr": 27.8,
        "research_sharpe": 1.33,
        "oos_cagr": 29.5,
        "oos_sharpe": 1.08,
        "full_cagr": 28.5,
        "mdd": -41.3,
        "turnover": 9.4,
        "passes_target": true
      }
    },
    "summary_excl_default": {
      "research_sharpe_range": [
        1.01,
        1.37
      ],
      "oos_sharpe_range": [
        0.97,
        1.23
      ],
      "oos_cagr_range": [
        26.0,
        40.5
      ],
      "mdd_range": [
        -43.4,
        -37.0
      ],
      "n_passes_target": 5,
      "n_oos_sharpe_ge_1_0": 8,
      "n_total": 10
    },
    "note": "其餘參數固定,一次只動一個(動能窗 30/50、z 視窗 60/120、檔數 12/16、廣度均線 40/90、門檻 0.52/0.58)。"
  },
  "overlay_rebalance_lag": {
    "risk_off_episodes": 67,
    "reverted_before_rebalance": 48,
    "executed": 19,
    "lag_trading_days_median": 4.0,
    "lag_trading_days_max": 18,
    "risk_on_trading_day_share": 81.5,
    "rebalance_months_in_risk_off_share": 15.6,
    "episodes": [
      {
        "start": "2015-05-11",
        "end": "2015-05-27"
      },
      {
        "start": "2015-05-29",
        "end": "2015-06-01"
      },
      {
        "start": "2015-06-03",
        "end": "2015-09-09"
      },
      {
        "start": "2016-01-05",
        "end": "2016-01-28"
      },
      {
        "start": "2016-05-03",
        "end": "2016-05-25"
      },
      {
        "start": "2016-10-17",
        "end": "2016-10-17"
      },
      {
        "start": "2016-11-02",
        "end": "2016-11-29"
      },
      {
        "start": "2016-12-01",
        "end": "2016-12-01"
      },
      {
        "start": "2016-12-05",
        "end": "2016-12-05"
      },
      {
        "start": "2018-04-26",
        "end": "2018-04-26"
      },
      {
        "start": "2018-08-17",
        "end": "2018-08-20"
      },
      {
        "start": "2018-08-23",
        "end": "2018-08-30"
      },
      {
        "start": "2018-09-03",
        "end": "2018-11-16"
      },
      {
        "start": "2018-11-23",
        "end": "2018-11-23"
      },
      {
        "start": "2019-05-23",
        "end": "2019-06-10"
      },
      {
        "start": "2019-06-18",
        "end": "2019-06-18"
      },
      {
        "start": "2020-02-27",
        "end": "2020-03-02"
      },
      {
        "start": "2020-03-09",
        "end": "2020-04-13"
      },
      {
        "start": "2020-09-24",
        "end": "2020-09-30"
      },
      {
        "start": "2021-05-17",
        "end": "2021-05-17"
      },
      {
        "start": "2021-08-17",
        "end": "2021-08-17"
      },
      {
        "start": "2021-08-19",
        "end": "2021-08-24"
      },
      {
        "start": "2021-09-07",
        "end": "2021-10-22"
      },
      {
        "start": "2022-01-25",
        "end": "2022-01-26"
      },
      {
        "start": "2022-02-24",
        "end": "2022-02-24"
      },
      {
        "start": "2022-03-08",
        "end": "2022-03-09"
      },
      {
        "start": "2022-03-11",
        "end": "2022-03-16"
      },
      {
        "start": "2022-04-11",
        "end": "2022-04-12"
      },
      {
        "start": "2022-04-15",
        "end": "2022-04-21"
      },
      {
        "start": "2022-04-25",
        "end": "2022-05-27"
      },
      {
        "start": "2022-06-14",
        "end": "2022-07-19"
      },
      {
        "start": "2022-08-03",
        "end": "2022-08-04"
      },
      {
        "start": "2022-09-26",
        "end": "2022-10-03"
      },
      {
        "start": "2022-10-05",
        "end": "2022-10-05"
      },
      {
        "start": "2022-10-07",
        "end": "2022-11-04"
      },
      {
        "start": "2022-11-08",
        "end": "2022-11-08"
      },
      {
        "start": "2023-08-10",
        "end": "2023-08-10"
      },
      {
        "start": "2023-08-14",
        "end": "2023-08-29"
      },
      {
        "start": "2023-10-23",
        "end": "2023-10-23"
      },
      {
        "start": "2023-10-26",
        "end": "2023-11-01"
      },
      {
        "start": "2024-04-22",
        "end": "2024-04-22"
      },
      {
        "start": "2024-05-15",
        "end": "2024-05-15"
      },
      {
        "start": "2024-07-29",
        "end": "2024-07-29"
      },
      {
        "start": "2024-08-02",
        "end": "2024-08-15"
      },
      {
        "start": "2024-09-04",
        "end": "2024-09-18"
      },
      {
        "start": "2024-09-20",
        "end": "2024-09-23"
      },
      {
        "start": "2024-10-09",
        "end": "2024-10-09"
      },
      {
        "start": "2024-10-29",
        "end": "2024-11-04"
      },
      {
        "start": "2024-11-13",
        "end": "2024-11-22"
      },
      {
        "start": "2024-11-27",
        "end": "2024-12-02"
      },
      {
        "start": "2024-12-09",
        "end": "2024-12-20"
      },
      {
        "start": "2025-01-03",
        "end": "2025-01-03"
      },
      {
        "start": "2025-01-09",
        "end": "2025-01-17"
      },
      {
        "start": "2025-01-21",
        "end": "2025-01-21"
      },
      {
        "start": "2025-02-03",
        "end": "2025-02-04"
      },
      {
        "start": "2025-03-24",
        "end": "2025-03-24"
      },
      {
        "start": "2025-03-28",
        "end": "2025-04-14"
      },
      {
        "start": "2025-04-16",
        "end": "2025-04-28"
      },
      {
        "start": "2025-04-30",
        "end": "2025-04-30"
      },
      {
        "start": "2025-05-05",
        "end": "2025-05-07"
      },
      {
        "start": "2025-11-17",
        "end": "2025-11-25"
      },
      {
        "start": "2026-07-17",
        "end": "2026-07-21"
      },
      {
        "start": "2026-07-24",
        "end": "2026-08-12"
      },
      {
        "start": "2026-08-17",
        "end": "2026-08-26"
      },
      {
        "start": "2026-08-28",
        "end": "2026-08-28"
      },
      {
        "start": "2026-09-03",
        "end": "2026-09-03"
      },
      {
        "start": "2026-09-11",
        "end": "2026-09-17"
      }
    ],
    "note": "日頻 OBV 廣度 ≤ 門檻的區段;回測每月最後一個交易日才讀部位,區段內沒有月底就完全不會執行;lag = 轉 risk-off 到第一個月底換股日的交易日數。"
  },
  "decay_tracking": {
    "since": "2026-06-09",
    "until": "2026-09-30",
    "strategy_return": -16.8,
    "tw0050_return": 8.9,
    "first_partial_month": {
      "window": [
        "2026-06-09",
        "2026-06-30"
      ],
      "strategy_return": 5.2,
      "tw0050_return": 4.2,
      "note": "追蹤起點到該月月底;與其後的整月報酬連乘等於 strategy_return / tw0050_return。"
    },
    "strategy_monthly": {
      "2026-07": -28.7,
      "2026-08": 8.6,
      "2026-09": 2.2
    },
    "tw0050_monthly": {
      "2026-07": -4.0,
      "2026-08": 3.3,
      "2026-09": 5.5
    },
    "month_end_breadth_state": {
      "2026-05": {
        "breadth": 0.801,
        "risk_on": true
      },
      "2026-06": {
        "breadth": 0.704,
        "risk_on": true
      },
      "2026-07": {
        "breadth": 0.372,
        "risk_on": false
      },
      "2026-08": {
        "breadth": 0.55,
        "risk_on": true
      },
      "2026-09": {
        "breadth": 0.679,
        "risk_on": true
      }
    },
    "worst_month": {
      "month": "2026-07",
      "signal_date": "2026-06-30",
      "risk_on_at_signal": true,
      "entry_day": "2026-07-01",
      "exit_day": "2026-08-03",
      "stock_holdings": 14,
      "losers": 14,
      "median_holding_return": -30.8,
      "worst_holding_return": -51.6,
      "holding_returns": {
        "2327": -51.6,
        "8261": -41.7,
        "6207": -39.8,
        "6155": -38.6,
        "8043": -34.7,
        "6182": -34.7,
        "3481": -32.0,
        "3149": -29.6,
        "2344": -24.7,
        "2409": -20.7,
        "5328": -13.8,
        "2408": -5.5,
        "6446": -5.0,
        "2377": -1.7
      },
      "note": "前一月底換股日的個股部位,次一交易日收盤進場、持有到下月第一個交易日的逐檔報酬(adj_close);若換股日為 risk-off 則無個股部位。"
    },
    "worst_months_by_segment": {
      "research": {
        "2020-03": -12.8,
        "2018-10": -11.8,
        "2018-07": -10.4
      },
      "oos": {
        "2026-07": -28.7,
        "2025-03": -15.9,
        "2022-01": -12.6
      }
    },
    "strategy_peak_date": "2026-06-22",
    "strategy_drawdown_at_end": -25.1,
    "oos_gate": {
      "oos_cagr_floor": 15.0,
      "oos_sharpe_floor": 1.0,
      "oos_cagr": 30.68,
      "oos_sharpe": 1.11,
      "passes": true
    },
    "same_cutoff_recompute": {
      "data_end": "2026-06-09",
      "strategy_research": {
        "cagr": 26.3,
        "monthly_sharpe": 1.25,
        "monthly_sortino": 2.13,
        "max_drawdown": -31.96
      },
      "strategy_oos": {
        "cagr": 38.78,
        "monthly_sharpe": 1.38,
        "monthly_sortino": 3.32,
        "max_drawdown": -39.02
      },
      "strategy_full": {
        "cagr": 31.04,
        "monthly_sharpe": 1.22,
        "monthly_sortino": 2.37,
        "max_drawdown": -39.02
      },
      "tw0050_full_aligned": {
        "cagr": 20.89,
        "monthly_sharpe": 1.05,
        "monthly_sortino": 1.82,
        "max_drawdown": -33.96
      },
      "tw0050_research_aligned": {
        "cagr": 15.09,
        "monthly_sharpe": 1.0,
        "monthly_sortino": 1.47,
        "max_drawdown": -28.22
      },
      "tw0050_oos": {
        "cagr": 30.42,
        "monthly_sharpe": 1.18,
        "monthly_sortino": 2.38,
        "max_drawdown": -33.96
      },
      "tw0050_full_from_research_start": {
        "cagr": 20.98,
        "monthly_sharpe": 1.05,
        "monthly_sortino": 1.82,
        "max_drawdown": -33.96
      },
      "tw0050_research_from_research_start": {
        "cagr": 15.29,
        "monthly_sharpe": 1.0,
        "monthly_sortino": 1.47,
        "max_drawdown": -28.22
      },
      "tw0050_return_research_start_to_first_nav": 2.2,
      "note": "同一次執行的淨值截到首發資料截止日重算(非獨立重跑);首發版 0050 自 2015-01-05 起算。"
    }
  },
  "previous_release": {
    "data_end": "2026-06-09",
    "winner_v2": {
      "research": {
        "cagr": 26.27,
        "monthly_sharpe": 1.25,
        "monthly_sortino": 2.13,
        "max_drawdown": -31.96
      },
      "oos": {
        "cagr": 38.78,
        "monthly_sharpe": 1.38,
        "monthly_sortino": 3.32,
        "max_drawdown": -39.02
      },
      "full": {
        "cagr": 31.05,
        "monthly_sharpe": 1.22,
        "monthly_sortino": 2.37,
        "max_drawdown": -39.02
      }
    },
    "benchmark_0050_full": {
      "cagr": 20.98,
      "monthly_sharpe": 1.05,
      "max_drawdown": -33.96
    },
    "benchmark_0050": {
      "research": {
        "cagr": 15.3,
        "sharpe": 1.0,
        "mdd": -28.2
      },
      "oos": {
        "cagr": 30.4,
        "sharpe": 1.18,
        "mdd": -34.0
      },
      "full": {
        "cagr": 21.0,
        "sharpe": 1.05,
        "mdd": -34.0
      }
    },
    "note": "上一版資料截止日的已發佈數字(0050 當時自 2015-01-05 起算,早於策略首個淨值日)。"
  },
  "illustration_window": {
    "window": "2023-07-01 ~ 2024-06-30",
    "rules": "創新高派:OBV 突破/跌破前 60 日(不含當日)最高/最低;背離派:價格創 20 日新高(新低)而 OBV 沒有;訊號以完整歷史計算後取窗內",
    "stocks": {
      "2330": {
        "label": "台積電（2330）",
        "newhigh_buy": 20,
        "newlow_sell": 4,
        "divergence_sell": 10,
        "divergence_buy": 3,
        "total_school_signals": 37
      },
      "2317": {
        "label": "鴻海（2317）",
        "newhigh_buy": 13,
        "newlow_sell": 6,
        "divergence_sell": 6,
        "divergence_buy": 5,
        "total_school_signals": 30
      }
    }
  },
  "survivorship_check": {
    "priced_at_first_nav_not_at_data_end": 142,
    "note": "2015-01-30 有收盤價、2026-09-30 已無收盤價的 4 碼數字普通股檔數;宇宙每天依當時資料篩選,這些後來下市或停止交易的股票在當時都可能被選入。"
  },
  "non_4digit_held": {
    "codes": [],
    "note": "harness 以前 4 碼是數字判斷普通股,6 碼代號會被放行;此欄列出勝出策略實際持有過的非 4 碼代號。"
  },
  "legacy_2026_06": {
    "winner_rule": {
      "breadth_ma_window": 60,
      "breadth_threshold": 0.58,
      "risk_on_asset": "0050",
      "risk_off_asset": "00646",
      "rebalance": "月再平衡",
      "description": "OBV 廣度 > 0.58 持含息 0050,否則轉防禦 ETF 00646(標普 500)"
    },
    "winner": {
      "research": {
        "cagr": 17.25,
        "monthly_sharpe": 1.15,
        "monthly_sortino": 1.78,
        "max_drawdown": -32.52
      },
      "oos": {
        "cagr": 29.02,
        "monthly_sharpe": 1.16,
        "monthly_sortino": 2.45,
        "max_drawdown": -26.58
      },
      "full": {
        "cagr": 15.87,
        "monthly_sharpe": 0.88,
        "monthly_sortino": 1.37,
        "max_drawdown": -34.97
      },
      "oos_max_drawdown": -26.58,
      "turnover": 2.5,
      "passes_target": false
    },
    "cash_version": {
      "research": {
        "cagr": 15.23,
        "monthly_sharpe": 1.25,
        "monthly_sortino": 3.08,
        "max_drawdown": -14.87
      },
      "oos": {
        "cagr": 22.53,
        "monthly_sharpe": 0.97,
        "monthly_sortino": 1.88,
        "max_drawdown": -38.97
      },
      "full": {
        "cagr": 14.17,
        "monthly_sharpe": 0.83,
        "monthly_sortino": 1.3,
        "max_drawdown": -38.97
      },
      "oos_max_drawdown": -38.97
    },
    "tw_only_version": {
      "rule": "OBV 廣度 > 0.60 持 0050,否則轉 00878(台股高股息);月再平衡",
      "research": {
        "cagr": 15.41,
        "monthly_sharpe": 1.24,
        "monthly_sortino": 2.92,
        "max_drawdown": -10.85
      },
      "oos": {
        "cagr": 23.62,
        "monthly_sharpe": 1.06,
        "monthly_sortino": 2.05,
        "max_drawdown": -29.9
      },
      "full": {
        "cagr": 14.49,
        "monthly_sharpe": 0.88,
        "monthly_sortino": 1.39,
        "max_drawdown": -29.9
      }
    },
    "textbook_misuse": {
      "raw_obv_top30": {
        "research_cagr": 17.7,
        "research_sharpe": 0.78,
        "full_mdd": -74.7
      },
      "raw_obv_bottom30": {
        "research_cagr": 4.6,
        "research_sharpe": 0.32
      },
      "obv_speed_top30": {
        "research_cagr": 11.2,
        "research_sharpe": 0.58,
        "oos_cagr": 24.4
      }
    },
    "zscore_factor": {
      "z90_high_n30": {
        "research_cagr": 17.9,
        "research_sharpe": 0.89,
        "oos_cagr": 25.0,
        "full_mdd": -74.2
      },
      "z90_low_n30": {
        "research_cagr": 5.3,
        "research_sharpe": 0.37,
        "oos_cagr": 10.9
      },
      "long_short_spread_research_cagr": 12.6,
      "long_short_spread_oos_cagr": 14.2
    },
    "breadth_overlay_on_basket": {
      "z90_n20_naked": {
        "full_cagr": 9.5,
        "full_mdd": -74.0,
        "oos_sharpe": 1.08
      },
      "z90_n20_breadth055": {
        "full_cagr": 12.2,
        "full_mdd": -50.8,
        "oos_sharpe": 1.01
      }
    },
    "robustness_grid": {
      "thr0.55_00646": {
        "research_sharpe": 1.17,
        "oos_sharpe": 1.07,
        "oos_cagr": 26.0,
        "full_mdd": -35.0
      },
      "thr0.55_00878": {
        "research_sharpe": 1.39,
        "oos_sharpe": 0.96,
        "oos_cagr": 22.9,
        "full_mdd": -37.0
      },
      "thr0.58_00646": {
        "research_sharpe": 1.15,
        "oos_sharpe": 1.16,
        "oos_cagr": 29.0,
        "full_mdd": -35.0
      },
      "thr0.58_00878": {
        "research_sharpe": 1.29,
        "oos_sharpe": 1.05,
        "oos_cagr": 25.3,
        "full_mdd": -35.2
      },
      "thr0.6_00646": {
        "research_sharpe": 1.08,
        "oos_sharpe": 1.08,
        "oos_cagr": 23.7,
        "full_mdd": -32.5
      },
      "thr0.6_00878": {
        "research_sharpe": 1.24,
        "oos_sharpe": 1.06,
        "oos_cagr": 23.6,
        "full_mdd": -29.9
      },
      "thr0.62_00646": {
        "research_sharpe": 1.14,
        "oos_sharpe": 1.04,
        "oos_cagr": 22.2,
        "full_mdd": -32.5
      },
      "thr0.62_00878": {
        "research_sharpe": 1.28,
        "oos_sharpe": 1.01,
        "oos_cagr": 22.0,
        "full_mdd": -29.9
      }
    },
    "optim_grid": {
      "axes": {
        "breadth_ma_window": [
          20,
          40,
          60
        ],
        "breadth_threshold": [
          0.5,
          0.55,
          0.6
        ]
      },
      "z_metric": "research_monthly_sharpe",
      "cells": {
        "ma20_thr0.5": {
          "research_sharpe": 0.81,
          "oos_sharpe": 0.96,
          "research_cagr": 12.5,
          "oos_cagr": 19.3,
          "mdd": -41.0
        },
        "ma20_thr0.55": {
          "research_sharpe": 0.85,
          "oos_sharpe": 0.73,
          "research_cagr": 12.7,
          "oos_cagr": 13.1,
          "mdd": -36.9
        },
        "ma20_thr0.6": {
          "research_sharpe": 0.88,
          "oos_sharpe": 0.75,
          "research_cagr": 12.8,
          "oos_cagr": 13.3,
          "mdd": -36.9
        },
        "ma40_thr0.5": {
          "research_sharpe": 1.13,
          "oos_sharpe": 1.12,
          "research_cagr": 16.8,
          "oos_cagr": 24.9,
          "mdd": -40.5
        },
        "ma40_thr0.55": {
          "research_sharpe": 1.12,
          "oos_sharpe": 0.9,
          "research_cagr": 16.9,
          "oos_cagr": 18.1,
          "mdd": -39.5
        },
        "ma40_thr0.6": {
          "research_sharpe": 1.05,
          "oos_sharpe": 0.92,
          "research_cagr": 16.2,
          "oos_cagr": 18.4,
          "mdd": -36.7
        },
        "ma60_thr0.5": {
          "research_sharpe": 1.13,
          "oos_sharpe": 0.98,
          "research_cagr": 17.2,
          "oos_cagr": 23.2,
          "mdd": -39.5
        },
        "ma60_thr0.55": {
          "research_sharpe": 1.17,
          "oos_sharpe": 1.07,
          "research_cagr": 17.4,
          "oos_cagr": 26.0,
          "mdd": -35.0
        },
        "ma60_thr0.6": {
          "research_sharpe": 1.08,
          "oos_sharpe": 1.08,
          "research_cagr": 16.0,
          "oos_cagr": 23.7,
          "mdd": -32.5
        }
      }
    },
    "optim_default": {
      "breadth_ma_window": 60,
      "breadth_threshold": 0.58,
      "research_sharpe": 1.15,
      "oos_sharpe": 1.16,
      "research_cagr": 17.2,
      "oos_cagr": 29.0,
      "mdd": -35.0
    },
    "optim_robust": {
      "breadth_ma_window": 40,
      "breadth_threshold": 0.55,
      "selection_rule": "在網格內部格(四周八鄰皆存在)中,取鄰域研究段 Sharpe 中位數最高的穩健高原格,而非全域單一峰值或網格邊角;避免挑到只在單一參數巧合最高、樣本外即崩的孤峰。",
      "research_sharpe": 1.12,
      "oos_sharpe": 0.9,
      "research_cagr": 16.9,
      "oos_cagr": 18.1,
      "mdd": -39.5
    },
    "fundamental_combo": {
      "alignment_note": "monthly_revenue 的 index 為財報公布日,index_str_to_date 後 reindex 交易日再 ffill,只用當期(含)已公布的營收,避免前視。",
      "baseline_rule": "OBV z90 吸籌籃(20 檔)+ OBV 廣度 overlay(廣度 > 0.55 才持股);這是 OBV 選股端唯一乾淨用法(標準化回自身),作為加營收前的基線。",
      "baseline": {
        "research_sharpe": 0.81,
        "oos_sharpe": 1.01,
        "oos_cagr": 25.8,
        "full_cagr": 12.2,
        "mdd": -50.8
      },
      "revenue_yoy_positive_filter": {
        "research_sharpe": 1.0,
        "oos_sharpe": 1.05,
        "oos_cagr": 27.2,
        "full_cagr": 15.0,
        "mdd": -54.1
      },
      "revenue_yoy_z90_blend_w0.5": {
        "research_sharpe": 1.0,
        "oos_sharpe": 0.94,
        "oos_cagr": 20.6,
        "full_cagr": 12.8,
        "mdd": -55.9
      },
      "verdict": "在 OBV z90 吸籌籃 + 廣度 overlay 的基線上加月營收 YoY:YoY>0 過濾把研究段 Sharpe 從 0.81 變為 1.0、樣本外 Sharpe 1.01→1.05;YoY×z90 等權複合研究段 1.0、樣本外 0.94。據實記錄營收因子在此量能策略上的邊際貢獻,不誇大。"
    },
    "optim_v2": {
      "selection_note": "深度優化結論:把 OBV 從『只當大盤擇時開關』升級為『選股 + 擇時』雙核心,兩段貢獻各自獨立加值——OBVz>0 吸籌確認過濾掉量能未持續流入的假動能股、OBV 廣度擇時在量能轉弱時整池轉守含息 0050。勝出設定為 持有 14 檔 × 廣度門檻 0.55;以下鄰域(持有 13~16 檔、廣度門檻 0.52~0.58)整片過硬門檻,為穩健高原而非單一孤峰。",
      "ablation_3layer": {
        "note": "n14 對齊的三層消融:量化 OBV 雙核心的邊際貢獻。L0=純風險調整動能(無 OBV);L1=加 OBVz>0 吸籌確認;L1b=不加 OBVz 但加 OBV 廣度擇時;L2=雙核心(完整勝出)。",
        "L0_noobv": {
          "research_cagr": 29.1,
          "research_sharpe": 1.24,
          "oos_cagr": 32.5,
          "oos_sharpe": 1.17,
          "mdd": -43.1,
          "passes_target": true
        },
        "L1_obvz": {
          "research_cagr": 30.2,
          "research_sharpe": 1.28,
          "oos_cagr": 33.2,
          "oos_sharpe": 1.2,
          "mdd": -42.0,
          "passes_target": true
        },
        "L1b_breadth_only": {
          "research_cagr": 25.6,
          "research_sharpe": 1.22,
          "oos_cagr": 39.3,
          "oos_sharpe": 1.37,
          "mdd": -39.4,
          "passes_target": true
        },
        "L2_full": {
          "research_cagr": 26.3,
          "research_sharpe": 1.25,
          "oos_cagr": 38.8,
          "oos_sharpe": 1.38,
          "mdd": -39.0,
          "passes_target": true
        }
      },
      "neighbors": {
        "n14_thr0.55_winner": {
          "research_cagr": 26.3,
          "research_sharpe": 1.25,
          "oos_cagr": 38.8,
          "oos_sharpe": 1.38,
          "mdd": -39.0,
          "turnover": 9.26
        },
        "n14_thr0.58_robust": {
          "research_cagr": 27.8,
          "research_sharpe": 1.32,
          "oos_cagr": 36.4,
          "oos_sharpe": 1.32,
          "mdd": -41.3,
          "turnover": 9.14
        }
      },
      "vs_v1_winner": {
        "note": "v1 winner(OBV 廣度純 ETF 輪動:廣度>0.58 持含息 0050、否則轉 00646)從不持有個股,research 段 17.25% / Sharpe 1.15 未過 25%/1.2 硬門檻(passes_target=False);v2 把 OBV 升級為選股 + 擇時雙核心後,research 與樣本外同步站上門檻並大幅領先。代價是個股集中持股使最大回撤由 -32.52% 擴大到 -39.0%,但風險調整報酬(Sharpe/Sortino)全面提升。",
        "v1_research_cagr": 17.25,
        "v1_research_sharpe": 1.15,
        "v1_oos_cagr": 29.02,
        "v1_oos_sharpe": 1.16,
        "v1_full_cagr": 15.87,
        "v1_mdd": -32.52,
        "v1_passes_target": false,
        "v2_research_cagr": 26.27,
        "v2_research_sharpe": 1.25,
        "v2_oos_cagr": 38.78,
        "v2_oos_sharpe": 1.38,
        "v2_full_cagr": 31.05,
        "v2_mdd": -39.02,
        "v2_passes_target": true
      },
      "benchmark_0050_full": {
        "cagr": 20.98,
        "monthly_sharpe": 1.05,
        "max_drawdown": -33.96
      }
    },
    "optim_v2_grid_first_release": {
      "axes": {
        "top_n": [
          13,
          14,
          15,
          16
        ],
        "breadth_thr": [
          0.52,
          0.55,
          0.58,
          0.6
        ]
      },
      "z_metric": "research_monthly_sharpe",
      "overlay_note": "對勝出的 OBV 雙核心選股 + 擇時策略,每格用該(持股數, OBV 廣度門檻)重算完整 position 後真跑 h.evaluate。勝出格 n=14、廣度門檻 0.55。",
      "z_research_sharpe": [
        [
          1.26,
          1.28,
          1.25,
          1.23
        ],
        [
          1.24,
          1.25,
          1.22,
          1.21
        ],
        [
          1.3,
          1.32,
          1.31,
          1.29
        ],
        [
          1.18,
          1.21,
          1.19,
          1.18
        ]
      ],
      "cells": {
        "n13_thr0.52": {
          "research_cagr": 27.0,
          "research_sharpe": 1.26,
          "oos_cagr": 36.7,
          "oos_sharpe": 1.26,
          "mdd": -43.9
        },
        "n14_thr0.52": {
          "research_cagr": 26.9,
          "research_sharpe": 1.28,
          "oos_cagr": 34.7,
          "oos_sharpe": 1.23,
          "mdd": -43.4
        },
        "n15_thr0.52": {
          "research_cagr": 25.8,
          "research_sharpe": 1.25,
          "oos_cagr": 35.1,
          "oos_sharpe": 1.24,
          "mdd": -41.0
        },
        "n16_thr0.52": {
          "research_cagr": 25.7,
          "research_sharpe": 1.23,
          "oos_cagr": 35.3,
          "oos_sharpe": 1.24,
          "mdd": -40.7
        },
        "n13_thr0.55": {
          "research_cagr": 26.5,
          "research_sharpe": 1.24,
          "oos_cagr": 40.9,
          "oos_sharpe": 1.4,
          "mdd": -38.8
        },
        "n14_thr0.55": {
          "research_cagr": 26.3,
          "research_sharpe": 1.25,
          "oos_cagr": 38.8,
          "oos_sharpe": 1.38,
          "mdd": -39.0
        },
        "n15_thr0.55": {
          "research_cagr": 25.2,
          "research_sharpe": 1.22,
          "oos_cagr": 38.3,
          "oos_sharpe": 1.36,
          "mdd": -37.0
        },
        "n16_thr0.55": {
          "research_cagr": 25.1,
          "research_sharpe": 1.21,
          "oos_cagr": 37.7,
          "oos_sharpe": 1.34,
          "mdd": -38.2
        },
        "n13_thr0.58": {
          "research_cagr": 27.7,
          "research_sharpe": 1.3,
          "oos_cagr": 38.7,
          "oos_sharpe": 1.35,
          "mdd": -41.0
        },
        "n14_thr0.58": {
          "research_cagr": 27.8,
          "research_sharpe": 1.32,
          "oos_cagr": 36.4,
          "oos_sharpe": 1.32,
          "mdd": -41.3
        },
        "n15_thr0.58": {
          "research_cagr": 27.0,
          "research_sharpe": 1.31,
          "oos_cagr": 35.4,
          "oos_sharpe": 1.29,
          "mdd": -40.0
        },
        "n16_thr0.58": {
          "research_cagr": 26.9,
          "research_sharpe": 1.29,
          "oos_cagr": 34.4,
          "oos_sharpe": 1.26,
          "mdd": -41.6
        },
        "n13_thr0.6": {
          "research_cagr": 23.5,
          "research_sharpe": 1.18,
          "oos_cagr": 34.9,
          "oos_sharpe": 1.27,
          "mdd": -37.4
        },
        "n14_thr0.6": {
          "research_cagr": 24.0,
          "research_sharpe": 1.21,
          "oos_cagr": 34.1,
          "oos_sharpe": 1.25,
          "mdd": -37.5
        },
        "n15_thr0.6": {
          "research_cagr": 22.9,
          "research_sharpe": 1.19,
          "oos_cagr": 32.9,
          "oos_sharpe": 1.21,
          "mdd": -37.3
        },
        "n16_thr0.6": {
          "research_cagr": 22.9,
          "research_sharpe": 1.18,
          "oos_cagr": 31.2,
          "oos_sharpe": 1.17,
          "mdd": -38.4
        }
      },
      "plateau_note": "持股 13–16 檔 × OBV 廣度門檻 0.52–0.60 連成一片研究段月 Sharpe 高原(整片 ≥1.2),並非靠單一格的孤峰;勝出設定 n=14、門檻 0.55 落在高原中段。"
    },
    "illustration_window_first_release": {
      "window": "2023-07-01 ~ 2024-06-30",
      "obv_params": "OBV(原始)+ OBV 60 日均",
      "schools": "OBV 創新高派(突破 60 日前高買、跌破 60 日前低賣)+ 量價背離派(價創 20 日新高 OBV 未創高賣、價創新低 OBV 未創低買)",
      "stocks": {
        "2330": {
          "label": "台積電(2330)",
          "obv_newhigh_buy": 20,
          "obv_newlow_sell": 3,
          "divergence_buy": 1,
          "divergence_sell": 9,
          "total_school_signals": 33
        },
        "2317": {
          "label": "鴻海(2317)",
          "obv_newhigh_buy": 12,
          "obv_newlow_sell": 7,
          "divergence_buy": 4,
          "divergence_sell": 6,
          "total_school_signals": 29
        }
      }
    },
    "benchmark_0050_first_release": {
      "research": {
        "cagr": 15.3,
        "sharpe": 1.0,
        "mdd": -28.2
      },
      "oos": {
        "cagr": 30.4,
        "sharpe": 1.18,
        "mdd": -34.0
      },
      "full": {
        "cagr": 21.0,
        "sharpe": 1.05,
        "mdd": -34.0
      }
    },
    "note": "2026-06 首發前的 v1 策略(OBV 廣度純 ETF 輪動 0050/00646)、深度優化過程與首發版 v2 的舊鍵,資料截至 2026-06-09;文章已不引用,保留供考古,數字不代表本次刷新。"
  }
}