{"schema_version":"v1","slug":"trend-following-us-sp500","name":"Trend Following / Donchian Breakout (US S&P 500)","name_i18n":{},"verdict":"marginal","asset_class":"equity","categories":["breakout","momentum","trend-following"],"hypothesis":"Donchian channel breakout: stocks breaking above N-day highs continue trending. LONG breakout stocks with configurable exit methods. Applied to S&P 500 constituents.","rejection_reason":{"primary":"no_edge","secondary":[],"narrative":"Across 768 grid combinations, median Sharpe=0.10, best=0.80. Primary failure mode: no_edge."},"target_universe":{"description":"S&P 500 constituents, ~503 stocks","symbols":[]},"performance_summary":{"sharpe_median":0.0969,"max_drawdown_pct":-20.6,"win_rate":null,"alpha_annualized_pct":null,"p_value":0.57,"backtest_period":{"start":"2022-02-01","end":"2026-09-01"}},"grid_summary":{"sharpe":{"p25":-0.11,"p75":0.39,"best":0.8,"worst":-0.87,"median":0.1},"n_combinations":768},"methodology":{"notes":"{\"walk_forward_definition\": {\"type\": \"single_pass\", \"description\": \"Full period backtest without walk-forward split\", \"verdict_basis\": \"full_period\"}}","signal":null,"benchmark":null,"rebalance":null,"slippage_model":"open-on-open + variable bps fixed","position_sizing":"equal_weight","regime_definition":"GSPC SMA20/SMA60 three-class: UP (close>SMA20 AND SMA20>SMA60), DOWN (close<SMA20 AND SMA20<SMA60), FLAT (else)","transaction_cost_bps":5},"provenance":{"data_source":"kabu STATION REST API + J-Quants daily bars","source_project":"qbuntu-analysis","computed_asof":"2026-09-24T02:22:15","git_sha_z":"1455e77","git_sha_genkidama":"17a7674","python_version":"3.12.10","numpy_version":"2.4.2","pandas_version":"3.0.0","tier":"shallow"},"runs":[{"run_id":"r-trend-following-us-sp500-0000","name":"channel_days=20, holding_days=5, n_stocks=5, exit_method=hold, cost_bps=5, regime_gate=False","params":{"cost_bps":5,"n_stocks":5,"exit_method":"hold","regime_gate":false,"channel_days":20,"holding_days":5},"performance":{"sharpe":0.43,"max_drawdown_pct":-8,"alpha_annualized_pct":3.6,"p_value":0.35,"regime_breakdown":{"UP":0.161618,"DOWN":0.555608,"FLAT":0.906129}},"executed_at":"2026-09-23T16:18:42","notes":null},{"run_id":"r-trend-following-us-sp500-0001","name":"channel_days=20, holding_days=5, n_stocks=5, exit_method=hold, cost_bps=5, regime_gate=True","params":{"cost_bps":5,"n_stocks":5,"exit_method":"hold","regime_gate":true,"channel_days":20,"holding_days":5},"performance":{"sharpe":0.73,"max_drawdown_pct":-6.8,"alpha_annualized_pct":5.4,"p_value":0.12,"regime_breakdown":{"UP":0.751153,"DOWN":0.555608,"FLAT":0.906129}},"executed_at":"2026-09-23T16:18:42","notes":null},{"run_id":"r-trend-following-us-sp500-0002","name":"channel_days=20, holding_days=5, n_stocks=5, exit_method=hold, cost_bps=10, regime_gate=False","params":{"cost_bps":10,"n_stocks":5,"exit_method":"hold","regime_gate":false,"channel_days":20,"holding_days":5},"performance":{"sharpe":0.28,"max_drawdown_pct":-8.7,"alpha_annualized_pct":2.3,"p_value":0.54,"regime_breakdown":{"UP":0.027212,"DOWN":0.449896,"FLAT":0.67871}},"executed_at":"2026-09-23T16:18:43","notes":null},{"run_id":"r-trend-following-us-sp500-0003","name":"channel_days=20, holding_days=5, n_stocks=5, exit_method=hold, cost_bps=10, regime_gate=True","params":{"cost_bps":10,"n_stocks":5,"exit_method":"hold","regime_gate":true,"channel_days":20,"holding_days":5},"performance":{"sharpe":0.6,"max_drawdown_pct":-7,"alpha_annualized_pct":4.5,"p_value":0.19,"regime_breakdown":{"UP":0.66762,"DOWN":0.449896,"FLAT":0.67871}},"executed_at":"2026-09-23T16:18:43","notes":null},{"run_id":"r-trend-following-us-sp500-0004","name":"channel_days=20, holding_days=5, n_stocks=5, exit_method=channel_exit, cost_bps=5, regime_gate=False","params":{"cost_bps":5,"n_stocks":5,"exit_method":"channel_exit","regime_gate":false,"channel_days":20,"holding_days":5},"performance":{"sharpe":0.43,"max_drawdown_pct":-8,"alpha_annualized_pct":3.6,"p_value":0.35,"regime_breakdown":{"UP":0.161618,"DOWN":0.555608,"FLAT":0.906129}},"executed_at":"2026-09-23T16:18:43","notes":null},{"run_id":"r-trend-following-us-sp500-0008","name":"channel_days=20, holding_days=5, n_stocks=5, exit_method=trailing_mid, cost_bps=5, regime_gate=False","params":{"cost_bps":5,"n_stocks":5,"exit_method":"trailing_mid","regime_gate":false,"channel_days":20,"holding_days":5},"performance":{"sharpe":0.43,"max_drawdown_pct":-8,"alpha_annualized_pct":3.6,"p_value":0.35,"regime_breakdown":{"UP":0.161618,"DOWN":0.555608,"FLAT":0.906129}},"executed_at":"2026-09-23T16:18:44","notes":null},{"run_id":"r-trend-following-us-sp500-0013","name":"channel_days=20, holding_days=5, n_stocks=10, exit_method=hold, cost_bps=5, regime_gate=True","params":{"cost_bps":5,"n_stocks":10,"exit_method":"hold","regime_gate":true,"channel_days":20,"holding_days":5},"performance":{"sharpe":0.8,"max_drawdown_pct":-5.4,"alpha_annualized_pct":5.5,"p_value":0.085,"regime_breakdown":{"UP":0.806522,"DOWN":0.67234,"FLAT":0.879651}},"executed_at":"2026-09-23T16:18:46","notes":null},{"run_id":"r-trend-following-us-sp500-0036","name":"channel_days=20, holding_days=5, n_stocks=50, exit_method=hold, cost_bps=5, regime_gate=False","params":{"cost_bps":5,"n_stocks":50,"exit_method":"hold","regime_gate":false,"channel_days":20,"holding_days":5},"performance":{"sharpe":0.14,"max_drawdown_pct":-10.8,"alpha_annualized_pct":0.7,"p_value":0.77,"regime_breakdown":{"UP":-0.090992,"DOWN":0.86285,"FLAT":0.1426}},"executed_at":"2026-09-23T16:18:52","notes":null},{"run_id":"r-trend-following-us-sp500-0044","name":"channel_days=20, holding_days=5, n_stocks=50, exit_method=trailing_mid, cost_bps=5, regime_gate=False","params":{"cost_bps":5,"n_stocks":50,"exit_method":"trailing_mid","regime_gate":false,"channel_days":20,"holding_days":5},"performance":{"sharpe":0.14,"max_drawdown_pct":-10.8,"alpha_annualized_pct":0.7,"p_value":0.77,"regime_breakdown":{"UP":-0.090992,"DOWN":0.86285,"FLAT":0.1426}},"executed_at":"2026-09-23T16:18:55","notes":null},{"run_id":"r-trend-following-us-sp500-0081","name":"channel_days=20, holding_days=10, n_stocks=20, exit_method=trailing_mid, cost_bps=5, regime_gate=True","params":{"cost_bps":5,"n_stocks":20,"exit_method":"trailing_mid","regime_gate":true,"channel_days":20,"holding_days":10},"performance":{"sharpe":0,"max_drawdown_pct":-12.8,"alpha_annualized_pct":0,"p_value":1,"regime_breakdown":{"UP":0.537403,"DOWN":-0.42748,"FLAT":-0.448061}},"executed_at":"2026-09-23T16:19:05","notes":null},{"run_id":"r-trend-following-us-sp500-0118","name":"channel_days=20, holding_days=20, n_stocks=10, exit_method=trailing_mid, cost_bps=10, regime_gate=False","params":{"cost_bps":10,"n_stocks":10,"exit_method":"trailing_mid","regime_gate":false,"channel_days":20,"holding_days":20},"performance":{"sharpe":-0.05,"max_drawdown_pct":-28.3,"alpha_annualized_pct":-0.8,"p_value":0.91,"regime_breakdown":{"UP":0.509788,"DOWN":-1.308097,"FLAT":-0.283978}},"executed_at":"2026-09-23T16:19:16","notes":null},{"run_id":"r-trend-following-us-sp500-0144","name":"channel_days=20, holding_days=60, n_stocks=5, exit_method=hold, cost_bps=5, regime_gate=False","params":{"cost_bps":5,"n_stocks":5,"exit_method":"hold","regime_gate":false,"channel_days":20,"holding_days":60},"performance":{"sharpe":0.23,"max_drawdown_pct":-25,"alpha_annualized_pct":9.8,"p_value":0.41,"regime_breakdown":{"UP":0.444786,"DOWN":-0.149545,"FLAT":0.073032}},"executed_at":"2026-09-23T16:19:23","notes":null},{"run_id":"r-trend-following-us-sp500-0156","name":"channel_days=20, holding_days=60, n_stocks=10, exit_method=hold, cost_bps=5, regime_gate=False","params":{"cost_bps":5,"n_stocks":10,"exit_method":"hold","regime_gate":false,"channel_days":20,"holding_days":60},"performance":{"sharpe":-0.06,"max_drawdown_pct":-45.2,"alpha_annualized_pct":-2.5,"p_value":0.84,"regime_breakdown":{"UP":-0.019163,"DOWN":-0.210638,"FLAT":-0.095008}},"executed_at":"2026-09-23T16:19:26","notes":null},{"run_id":"r-trend-following-us-sp500-0193","name":"channel_days=40, holding_days=5, n_stocks=5, exit_method=hold, cost_bps=5, regime_gate=True","params":{"cost_bps":5,"n_stocks":5,"exit_method":"hold","regime_gate":true,"channel_days":40,"holding_days":5},"performance":{"sharpe":0.64,"max_drawdown_pct":-7.1,"alpha_annualized_pct":5.2,"p_value":0.17,"regime_breakdown":{"UP":0.854103,"DOWN":-0.015252,"FLAT":0.819294}},"executed_at":"2026-09-23T16:19:37","notes":null},{"run_id":"r-trend-following-us-sp500-0230","name":"channel_days=40, holding_days=5, n_stocks=50, exit_method=hold, cost_bps=10, regime_gate=False","params":{"cost_bps":10,"n_stocks":50,"exit_method":"hold","regime_gate":false,"channel_days":40,"holding_days":5},"performance":{"sharpe":0.05,"max_drawdown_pct":-10.5,"alpha_annualized_pct":0.3,"p_value":0.92,"regime_breakdown":{"UP":0.023294,"DOWN":-0.021508,"FLAT":0.111982}},"executed_at":"2026-09-23T16:19:47","notes":null},{"run_id":"r-trend-following-us-sp500-0267","name":"channel_days=40, holding_days=10, n_stocks=20, exit_method=hold, cost_bps=10, regime_gate=True","params":{"cost_bps":10,"n_stocks":20,"exit_method":"hold","regime_gate":true,"channel_days":40,"holding_days":10},"performance":{"sharpe":-0.31,"max_drawdown_pct":-17.1,"alpha_annualized_pct":-2.7,"p_value":0.5,"regime_breakdown":{"UP":0.369674,"DOWN":-1.127886,"FLAT":-0.776204}},"executed_at":"2026-09-23T16:19:58","notes":null},{"run_id":"r-trend-following-us-sp500-0304","name":"channel_days=40, holding_days=20, n_stocks=10, exit_method=channel_exit, cost_bps=5, regime_gate=False","params":{"cost_bps":5,"n_stocks":10,"exit_method":"channel_exit","regime_gate":false,"channel_days":40,"holding_days":20},"performance":{"sharpe":0.12,"max_drawdown_pct":-21.3,"alpha_annualized_pct":1.6,"p_value":0.8,"regime_breakdown":{"UP":0.571425,"DOWN":-0.981708,"FLAT":0.28076}},"executed_at":"2026-09-23T16:20:08","notes":null},{"run_id":"r-trend-following-us-sp500-0341","name":"channel_days=40, holding_days=60, n_stocks=5, exit_method=channel_exit, cost_bps=5, regime_gate=True","params":{"cost_bps":5,"n_stocks":5,"exit_method":"channel_exit","regime_gate":true,"channel_days":40,"holding_days":60},"performance":{"sharpe":0.54,"max_drawdown_pct":-18.5,"alpha_annualized_pct":19.3,"p_value":0.055,"regime_breakdown":{"UP":0.776859,"DOWN":-0.394428,"FLAT":0.625952}},"executed_at":"2026-09-23T16:20:19","notes":null},{"run_id":"r-trend-following-us-sp500-0378","name":"channel_days=40, holding_days=60, n_stocks=50, exit_method=channel_exit, cost_bps=10, regime_gate=False","params":{"cost_bps":10,"n_stocks":50,"exit_method":"channel_exit","regime_gate":false,"channel_days":40,"holding_days":60},"performance":{"sharpe":-0.01,"max_drawdown_pct":-37.1,"alpha_annualized_pct":-0.2,"p_value":0.97,"regime_breakdown":{"UP":0.2498,"DOWN":-0.299881,"FLAT":-0.254437}},"executed_at":"2026-09-23T16:20:30","notes":null},{"run_id":"r-trend-following-us-sp500-0415","name":"channel_days=60, holding_days=5, n_stocks=20, exit_method=channel_exit, cost_bps=10, regime_gate=True","params":{"cost_bps":10,"n_stocks":20,"exit_method":"channel_exit","regime_gate":true,"channel_days":60,"holding_days":5},"performance":{"sharpe":0.19,"max_drawdown_pct":-8,"alpha_annualized_pct":1.2,"p_value":0.68,"regime_breakdown":{"UP":0.582255,"DOWN":-0.472813,"FLAT":-0.022522}},"executed_at":"2026-09-23T16:20:40","notes":null},{"run_id":"r-trend-following-us-sp500-0452","name":"channel_days=60, holding_days=10, n_stocks=10, exit_method=trailing_mid, cost_bps=5, regime_gate=False","params":{"cost_bps":5,"n_stocks":10,"exit_method":"trailing_mid","regime_gate":false,"channel_days":60,"holding_days":10},"performance":{"sharpe":-0.16,"max_drawdown_pct":-17.8,"alpha_annualized_pct":-1.6,"p_value":0.74,"regime_breakdown":{"UP":0.393831,"DOWN":-0.878746,"FLAT":-0.606206}},"executed_at":"2026-09-23T16:20:51","notes":null},{"run_id":"r-trend-following-us-sp500-0470","name":"channel_days=60, holding_days=10, n_stocks=50, exit_method=hold, cost_bps=10, regime_gate=False","params":{"cost_bps":10,"n_stocks":50,"exit_method":"hold","regime_gate":false,"channel_days":60,"holding_days":10},"performance":{"sharpe":-0.87,"max_drawdown_pct":-27,"alpha_annualized_pct":-6.4,"p_value":0.063,"regime_breakdown":{"UP":-0.074942,"DOWN":-1.21263,"FLAT":-1.561812}},"executed_at":"2026-09-23T16:20:56","notes":null},{"run_id":"r-trend-following-us-sp500-0490","name":"channel_days=60, holding_days=20, n_stocks=5, exit_method=trailing_mid, cost_bps=10, regime_gate=False","params":{"cost_bps":10,"n_stocks":5,"exit_method":"trailing_mid","regime_gate":false,"channel_days":60,"holding_days":20},"performance":{"sharpe":-0.05,"max_drawdown_pct":-39.5,"alpha_annualized_pct":-1,"p_value":0.91,"regime_breakdown":{"UP":0.464944,"DOWN":-1.062774,"FLAT":-0.210565}},"executed_at":"2026-09-23T16:21:01","notes":null},{"run_id":"r-trend-following-us-sp500-0527","name":"channel_days=60, holding_days=20, n_stocks=50, exit_method=trailing_mid, cost_bps=10, regime_gate=True","params":{"cost_bps":10,"n_stocks":50,"exit_method":"trailing_mid","regime_gate":true,"channel_days":60,"holding_days":20},"performance":{"sharpe":-0.16,"max_drawdown_pct":-29.3,"alpha_annualized_pct":-1.8,"p_value":0.73,"regime_breakdown":{"UP":1.070541,"DOWN":-0.739618,"FLAT":-0.922664}},"executed_at":"2026-09-23T16:21:11","notes":null},{"run_id":"r-trend-following-us-sp500-0564","name":"channel_days=60, holding_days=60, n_stocks=50, exit_method=hold, cost_bps=5, regime_gate=False","params":{"cost_bps":5,"n_stocks":50,"exit_method":"hold","regime_gate":false,"channel_days":60,"holding_days":60},"performance":{"sharpe":-0.11,"max_drawdown_pct":-44.9,"alpha_annualized_pct":-2.8,"p_value":0.7,"regime_breakdown":{"UP":0.23102,"DOWN":-0.507876,"FLAT":-0.37883}},"executed_at":"2026-09-23T16:21:21","notes":null},{"run_id":"r-trend-following-us-sp500-0576","name":"channel_days=120, holding_days=5, n_stocks=5, exit_method=hold, cost_bps=5, regime_gate=False","params":{"cost_bps":5,"n_stocks":5,"exit_method":"hold","regime_gate":false,"channel_days":120,"holding_days":5},"performance":{"sharpe":0.65,"max_drawdown_pct":-9.5,"alpha_annualized_pct":6.5,"p_value":0.17,"regime_breakdown":{"UP":0.465714,"DOWN":0.20611,"FLAT":1.230117}},"executed_at":"2026-09-23T16:21:25","notes":null},{"run_id":"r-trend-following-us-sp500-0602","name":"channel_days=120, holding_days=5, n_stocks=20, exit_method=hold, cost_bps=10, regime_gate=False","params":{"cost_bps":10,"n_stocks":20,"exit_method":"hold","regime_gate":false,"channel_days":120,"holding_days":5},"performance":{"sharpe":-0.01,"max_drawdown_pct":-11.2,"alpha_annualized_pct":-0.1,"p_value":0.99,"regime_breakdown":{"UP":0.155724,"DOWN":-0.067226,"FLAT":-0.26122}},"executed_at":"2026-09-23T16:21:32","notes":null},{"run_id":"r-trend-following-us-sp500-0639","name":"channel_days=120, holding_days=10, n_stocks=10, exit_method=hold, cost_bps=10, regime_gate=True","params":{"cost_bps":10,"n_stocks":10,"exit_method":"hold","regime_gate":true,"channel_days":120,"holding_days":10},"performance":{"sharpe":-0.22,"max_drawdown_pct":-22.7,"alpha_annualized_pct":-2.1,"p_value":0.63,"regime_breakdown":{"UP":0.219486,"DOWN":-0.648965,"FLAT":-0.501775}},"executed_at":"2026-09-23T16:21:42","notes":null},{"run_id":"r-trend-following-us-sp500-0676","name":"channel_days=120, holding_days=20, n_stocks=5, exit_method=channel_exit, cost_bps=5, regime_gate=False","params":{"cost_bps":5,"n_stocks":5,"exit_method":"channel_exit","regime_gate":false,"channel_days":120,"holding_days":20},"performance":{"sharpe":0.48,"max_drawdown_pct":-22.3,"alpha_annualized_pct":8.1,"p_value":0.31,"regime_breakdown":{"UP":0.673537,"DOWN":-0.412731,"FLAT":0.836551}},"executed_at":"2026-09-23T16:21:52","notes":null},{"run_id":"r-trend-following-us-sp500-0713","name":"channel_days=120, holding_days=20, n_stocks=50, exit_method=channel_exit, cost_bps=5, regime_gate=True","params":{"cost_bps":5,"n_stocks":50,"exit_method":"channel_exit","regime_gate":true,"channel_days":120,"holding_days":20},"performance":{"sharpe":-0.01,"max_drawdown_pct":-25.7,"alpha_annualized_pct":-0.1,"p_value":0.98,"regime_breakdown":{"UP":1.102698,"DOWN":-0.704469,"FLAT":-0.467834}},"executed_at":"2026-09-23T16:22:01","notes":null}],"facts":[{"fact_id":"trend-following-us-sp500-fact-best-sharpe","strategy_slug":"trend-following-us-sp500","claim":"Best grid Sharpe ratio is 0.80 (p=0.085).","value":0.8,"value_text":null,"unit":"sharpe_ratio","context":"period 2022-02-01–2026-09-01; cost=5bps","supports_verdict":"marginal","source_run_id":"r-trend-following-us-sp500-0013","search_tsv":"'-01':12,15 '-02':11 '-09':14 '0.085':8 '0.80':6 '2022':10 '2026':13 '5bps':17 'best':1 'cost':16 'grid':2 'p':7 'period':9 'ratio':4 'sharp':3","cite_url":"https://qbuntu.ai/cite/trend-following-us-sp500-fact-best-sharpe"},{"fact_id":"trend-following-us-sp500-fact-median-sharpe","strategy_slug":"trend-following-us-sp500","claim":"Median Sharpe across 768 grid runs is 0.10.","value":0.1,"value_text":null,"unit":"sharpe_ratio","context":"Full grid of 768 parameter combinations.","supports_verdict":"marginal","source_run_id":null,"search_tsv":"'0.10':8 '768':4,12 'across':3 'combin':14 'full':9 'grid':5,10 'median':1 'paramet':13 'run':6 'sharp':2","cite_url":"https://qbuntu.ai/cite/trend-following-us-sp500-fact-median-sharpe"},{"fact_id":"trend-following-us-sp500-fact-regime-down","strategy_slug":"trend-following-us-sp500","claim":"Median Sharpe in DOWN regime is -0.39 across 768 runs.","value":-0.39,"value_text":null,"unit":"sharpe_ratio","context":"Regime=DOWN, N225 SMA20/SMA60 classification.","supports_verdict":"marginal","source_run_id":null,"search_tsv":"'-0.39':7 '768':9 'across':8 'classif':15 'median':1 'n225':13 'regim':5,11 'run':10 'sharp':2 'sma20/sma60':14","cite_url":"https://qbuntu.ai/cite/trend-following-us-sp500-fact-regime-down"},{"fact_id":"trend-following-us-sp500-fact-regime-flat","strategy_slug":"trend-following-us-sp500","claim":"Median Sharpe in FLAT regime is -0.17 across 768 runs.","value":-0.17,"value_text":null,"unit":"sharpe_ratio","context":"Regime=FLAT, N225 SMA20/SMA60 classification.","supports_verdict":"marginal","source_run_id":null,"search_tsv":"'-0.17':7 '768':9 'across':8 'classif':15 'flat':4,12 'median':1 'n225':13 'regim':5,11 'run':10 'sharp':2 'sma20/sma60':14","cite_url":"https://qbuntu.ai/cite/trend-following-us-sp500-fact-regime-flat"},{"fact_id":"trend-following-us-sp500-fact-regime-up","strategy_slug":"trend-following-us-sp500","claim":"Median Sharpe in UP regime is 0.48 across 768 runs.","value":0.48,"value_text":null,"unit":"sharpe_ratio","context":"Regime=UP, N225 SMA20/SMA60 classification.","supports_verdict":"marginal","source_run_id":null,"search_tsv":"'0.48':7 '768':9 'across':8 'classif':15 'median':1 'n225':13 'regim':5,11 'run':10 'sharp':2 'sma20/sma60':14","cite_url":"https://qbuntu.ai/cite/trend-following-us-sp500-fact-regime-up"}],"related_strategies":[{"related_slug":"trend-following-jp-all","relation":"same_strategy"},{"related_slug":"trend-following-jp-growth","relation":"same_strategy"}],"tags":["trend-following","breakout","donchian","us-market","sp500","grid-search"],"_links":{"self":"https://qbuntu.ai/v1/strategies/trend-following-us-sp500","html":"https://qbuntu.ai/strategies/trend-following-us-sp500","markdown":"https://qbuntu.ai/ai/strategies/trend-following-us-sp500.md"}}