From 9c5fddef0ef307d1198c931ac2b6c3f807a4c993 Mon Sep 17 00:00:00 2001 From: dev-belly Date: Tue, 13 Oct 2026 13:56:57 +0800 Subject: [PATCH 1/2] feat: publish source-aware real-market baseline comparisons --- .github/workflows/ci.yml | 3 + .gitignore | 3 + README.md | 5 + configs/real_sp500.yaml | 6 +- .../real-sp500/daily_returns.csv.gz | Bin 0 -> 364528 bytes docs/experiments/real-sp500/folds.csv | 55 + docs/experiments/real-sp500/index.html | 10 + docs/experiments/real-sp500/manifest.json | 10 + docs/experiments/real-sp500/metrics.csv | 23 + docs/experiments/real-sp500/summary.json | 966 ++++++++++++++++++ docs/research-comparison.md | 66 ++ mkdocs.yml | 1 + scripts/fetch_real_data.py | 25 +- scripts/run_comparison.py | 48 + scripts/run_real_research.py | 40 +- scripts/verify_comparison.py | 14 + src/alphaforge/comparison.py | 422 ++++++++ src/alphaforge/data/assurance.py | 120 +++ src/alphaforge/pipeline.py | 6 +- tests/unit/test_research_comparison.py | 93 ++ 20 files changed, 1900 insertions(+), 16 deletions(-) create mode 100644 docs/experiments/real-sp500/daily_returns.csv.gz create mode 100644 docs/experiments/real-sp500/folds.csv create mode 100644 docs/experiments/real-sp500/index.html create mode 100644 docs/experiments/real-sp500/manifest.json create mode 100644 docs/experiments/real-sp500/metrics.csv create mode 100644 docs/experiments/real-sp500/summary.json create mode 100644 docs/research-comparison.md create mode 100644 scripts/run_comparison.py create mode 100644 scripts/verify_comparison.py create mode 100644 src/alphaforge/comparison.py create mode 100644 src/alphaforge/data/assurance.py create mode 100644 tests/unit/test_research_comparison.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 88a97ca..b56818a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -42,6 +42,9 @@ jobs: - name: Docs integrity (mkdocs nav resolves) run: python scripts/check_docs.py + - name: Independently verify the saved real-market comparison + run: python scripts/verify_comparison.py docs/experiments/real-sp500 + - name: Unit & regression tests (fast) run: pytest -m "not slow" diff --git a/.gitignore b/.gitignore index d83c57b..1054920 100644 --- a/.gitignore +++ b/.gitignore @@ -56,3 +56,6 @@ data/processed/* .pytest_tmp/ # MkDocs build output site/ +outputs/ +research/real_runs/ +research/comparison/ diff --git a/README.md b/README.md index 85a2459..78eb30e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,10 @@ # AlphaForge +[Real-market comparison](docs/research-comparison.md): frozen data, shared +walk-forward coverage, equal-weight and momentum baselines, three model seeds, +one explicit size-feature ablation, and 22 base/doubled-cost cases. Source +history and availability limitations keep this experiment exploratory. + **Python toolkit for factor research, portfolio construction, and backtesting** [![CI](https://github.com/dev-belly/alphaforge/actions/workflows/ci.yml/badge.svg)](https://github.com/dev-belly/alphaforge/actions/workflows/ci.yml) diff --git a/configs/real_sp500.yaml b/configs/real_sp500.yaml index d546ecc..dd44ed8 100644 --- a/configs/real_sp500.yaml +++ b/configs/real_sp500.yaml @@ -23,7 +23,7 @@ data: provider: local universe: SP500 start_date: "2000-01-01" - end_date: "2019-12-31" + end_date: "2019-11-14" cache_dir: data/processed raw_dir: data/raw storage_backend: parquet @@ -88,7 +88,7 @@ risk: backtest: start_date: "2005-01-01" - end_date: "2019-12-31" + end_date: "2019-11-14" rebalance: monthly initial_capital: 10_000_000 execution_lag_days: 1 @@ -103,7 +103,7 @@ cost: min_commission: 0.0 reporting: - output_dir: research/reports + output_dir: research/real_runs/report figure_dpi: 130 figure_format: png diff --git a/docs/experiments/real-sp500/daily_returns.csv.gz b/docs/experiments/real-sp500/daily_returns.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..b945bf11f50d9cda0f1526a1f67db2a0123e3166 GIT binary patch literal 364528 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%0AX15sL_IXKS-DgTHL@DQc8QQ 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

`o%8Cr=9VY)!Pcte5>2|N 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%0Dbqk;ljEFi^ zR3ZULl$PwC?kn?et^RCJ`!BG7hsQb?CXgWN0iG|e1%94v6{X#Aj1*|s#9X^v3BtN@ z{{4Z%18tua71O^Iq0`H@D4&mkrk!N=r)Gp(>Iifu0VQ7}sJXy)=YPVtNr%X)`su)& z|A(flj*I$+(%lUr(jnd5-BQvZ9WK%WQqnCTjli4zz4!j|gDkV( zow;-4+;h*?q8{;a|6$CQZfS(VEQsWt9fM}H*~~b?U}H{FgPrsbkyUr%LG?c4_4fWE zPQ-J~Zfpto*Q=1MqAt1p@o&Cpx!k;qg){bvd=KLM_Zl$uZr-}U(@BKnp|a+*8ITKu zg^MfoE*g+sah+ayyjU@fSHR3~CZMc&PpjG*x`A*NnHKPN_d1M#a@j<8Zxhtm%Yg@~ zlkgYcLc7t4FMWmWi!c%?NXBc{OJbAfKh{1#9jO4>;ivLme5;*e@Zp=;dfzT>O2uFF zzwPt#aW>(_;wPlYc*gT>whMIyIbCj!+Y8w|Hg#{T> VGN)}GNOGcy(dbH)1d_| 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

tiyoX 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 literal 0 HcmV?d00001 diff --git a/docs/experiments/real-sp500/folds.csv b/docs/experiments/real-sp500/folds.csv new file mode 100644 index 0000000..b6d0a5f --- /dev/null +++ b/docs/experiments/real-sp500/folds.csv @@ -0,0 +1,55 @@ +method,seed,fold,rank_ic_mean,rank_ic_std,n_days,icir +ridge,11,0,0.04412592633746016,0.0966486106764495,252,0.4565603791779325 +ridge,11,1,0.018713655037396176,0.08398618101527376,252,0.22281826380452877 +ridge,11,2,-0.02324649092185162,0.0944463490283868,252,-0.24613435205276862 +ridge,11,3,0.02219967924672747,0.08837599819123425,251,0.2511957963822964 +ridge,11,4,-0.005444657308135957,0.12453645599247631,251,-0.04371938533777522 +ridge,11,5,0.009387714645803524,0.10163328992091236,200,0.09236850104044383 +ridge,29,0,0.04412592633746016,0.0966486106764495,252,0.4565603791779325 +ridge,29,1,0.018713655037396176,0.08398618101527376,252,0.22281826380452877 +ridge,29,2,-0.02324649092185162,0.0944463490283868,252,-0.24613435205276862 +ridge,29,3,0.02219967924672747,0.08837599819123425,251,0.2511957963822964 +ridge,29,4,-0.005444657308135957,0.12453645599247631,251,-0.04371938533777522 +ridge,29,5,0.009387714645803524,0.10163328992091236,200,0.09236850104044383 +ridge,42,0,0.04412592633746016,0.0966486106764495,252,0.4565603791779325 +ridge,42,1,0.018713655037396176,0.08398618101527376,252,0.22281826380452877 +ridge,42,2,-0.02324649092185162,0.0944463490283868,252,-0.24613435205276862 +ridge,42,3,0.02219967924672747,0.08837599819123425,251,0.2511957963822964 +ridge,42,4,-0.005444657308135957,0.12453645599247631,251,-0.04371938533777522 +ridge,42,5,0.009387714645803524,0.10163328992091236,200,0.09236850104044383 +lightgbm,11,0,0.022477486143247915,0.08734886863632098,252,0.25733002034443564 +lightgbm,11,1,0.002234562428456477,0.05797573874961744,252,0.038543060884605324 +lightgbm,11,2,-0.0011553035855261433,0.10126092459062845,252,-0.011409174765061003 +lightgbm,11,3,0.03166639744953009,0.06502624933653303,251,0.48697868587876997 +lightgbm,11,4,0.031668053472560784,0.08124079588245281,251,0.3898048157773004 +lightgbm,11,5,0.03433905815716499,0.055633472983191,200,0.6172373629728299 +lightgbm,29,0,0.025787883052372746,0.08480912689437926,252,0.3040696679319527 +lightgbm,29,1,-0.0030296977978654153,0.057293289941090675,252,-0.05288049963583118 +lightgbm,29,2,0.00907244205085725,0.09838261707558023,252,0.09221590480651223 +lightgbm,29,3,0.032402329646731974,0.06749892297971691,251,0.48004217276872274 +lightgbm,29,4,0.017454562276111394,0.08673166092103583,251,0.20124787293077168 +lightgbm,29,5,0.039869933952373565,0.06175223753608078,200,0.6456435514434314 +lightgbm,42,0,0.020528439407260922,0.09214009289193455,252,0.22279594867933838 +lightgbm,42,1,-0.0035977333884247465,0.0583879427725417,252,-0.06161774533554323 +lightgbm,42,2,0.005875082979020472,0.1014245680706104,252,0.05792563962343245 +lightgbm,42,3,0.03195550150870484,0.06497403962210874,251,0.4918195281463049 +lightgbm,42,4,0.017572815275974017,0.08240420495439846,251,0.21325143887619097 +lightgbm,42,5,0.04023812238863307,0.05787186037686153,200,0.6952968528504602 +ridge_without_size_feature,11,0,0.04359069019775172,0.09661460929879445,252,0.4511811465587083 +ridge_without_size_feature,11,1,0.016504867360824224,0.08288305728509346,252,0.19913439370428038 +ridge_without_size_feature,11,2,-0.02476588151153135,0.09478300955559105,252,-0.2612903053791086 +ridge_without_size_feature,11,3,0.02027092225650099,0.09210790690979509,251,0.22007798175625798 +ridge_without_size_feature,11,4,-0.007838736870762348,0.12484721777420321,251,-0.0627866364226023 +ridge_without_size_feature,11,5,0.0029383498668230815,0.10368188633286714,200,0.02834005023201073 +ridge_without_size_feature,29,0,0.04359069019775172,0.09661460929879445,252,0.4511811465587083 +ridge_without_size_feature,29,1,0.016504867360824224,0.08288305728509346,252,0.19913439370428038 +ridge_without_size_feature,29,2,-0.02476588151153135,0.09478300955559105,252,-0.2612903053791086 +ridge_without_size_feature,29,3,0.02027092225650099,0.09210790690979509,251,0.22007798175625798 +ridge_without_size_feature,29,4,-0.007838736870762348,0.12484721777420321,251,-0.0627866364226023 +ridge_without_size_feature,29,5,0.0029383498668230815,0.10368188633286714,200,0.02834005023201073 +ridge_without_size_feature,42,0,0.04359069019775172,0.09661460929879445,252,0.4511811465587083 +ridge_without_size_feature,42,1,0.016504867360824224,0.08288305728509346,252,0.19913439370428038 +ridge_without_size_feature,42,2,-0.02476588151153135,0.09478300955559105,252,-0.2612903053791086 +ridge_without_size_feature,42,3,0.02027092225650099,0.09210790690979509,251,0.22007798175625798 +ridge_without_size_feature,42,4,-0.007838736870762348,0.12484721777420321,251,-0.0627866364226023 +ridge_without_size_feature,42,5,0.0029383498668230815,0.10368188633286714,200,0.02834005023201073 diff --git a/docs/experiments/real-sp500/index.html b/docs/experiments/real-sp500/index.html new file mode 100644 index 0000000..7f5d07e --- /dev/null +++ b/docs/experiments/real-sp500/index.html @@ -0,0 +1,10 @@ + +AlphaForge · Frozen comparison + +

EXPLORATORY_REAL_MARKET

One dataset.
Declared comparisons.

+

840,736 samples · 24 usable features · 551,698 shared forecasts. +Models, the fixed momentum baseline and equal-weight baseline share dates, outcomes, execution lag and cost rules.

+ +

All methods and cost scenarios

MethodCostsRunsNet CAGRNet Sharpe mean ± seed stdMax drawdown
equal_weight1×112.75%1.141 ± 0.000-18.70%
equal_weight2×112.70%1.137 ± 0.000-18.71%
lightgbm1×318.23%1.337 ± 0.022-21.46%
lightgbm2×317.51%1.290 ± 0.023-21.64%
ridge1×312.85%1.005 ± 0.000-22.06%
ridge2×312.20%0.960 ± 0.000-22.20%
ridge_without_size_feature1×312.24%0.955 ± 0.000-21.68%
ridge_without_size_feature2×311.58%0.909 ± 0.000-21.84%
single_momentum1×111.38%0.871 ± 0.000-23.40%
single_momentum2×110.95%0.842 ± 0.000-23.47%
+

Source identity, exact protocol and all runs · Metrics CSV · Fold results · Daily returns (gzip CSV) · Hashes

+

This is a protocol comparison. Its real-market variant remains exploratory until the declared source limitations are resolved. No test result selects a model or seed for deployment.

\ No newline at end of file diff --git a/docs/experiments/real-sp500/manifest.json b/docs/experiments/real-sp500/manifest.json new file mode 100644 index 0000000..a25c776 --- /dev/null +++ b/docs/experiments/real-sp500/manifest.json @@ -0,0 +1,10 @@ +{ + "dataset_sha256": "8906ace6a84d22bdc78a05fedcd75498d964dd56555da00492892f5eb7a9a7cd", + "files_sha256": { + "daily_returns.csv.gz": "87eb8aeee44cd396844433d06cc0b3d937041c9710d55e1418acebc2d6b09ede", + "folds.csv": "8ae472f7117df46258db54cfff3a5bb349df99e04fdeceb1e3ce37a7c8ac88df", + "index.html": "aa9003c9a31717baafba4838c7955ed62ec63ca76e424a518af4cb6e8b44ac2e", + "metrics.csv": "41b0d117631aa0613d0d054b817a959c3792079ec775ea3c73a409265d89d106", + "summary.json": "8f51affb4f487f9cb25995e89de91d831b5e2e4933ea69495478d4883066a2fb" + } +} diff --git a/docs/experiments/real-sp500/metrics.csv b/docs/experiments/real-sp500/metrics.csv new file mode 100644 index 0000000..76030fe --- /dev/null +++ b/docs/experiments/real-sp500/metrics.csv @@ -0,0 +1,23 @@ +method,seed,cost_multiplier,features,rank_ic_mean,icir,total_return,cagr,ann_vol,sharpe,sortino,calmar,max_drawdown,information_ratio,beta,alpha_ann,avg_turnover,hit_rate,gross_total_return,gross_cagr,gross_ann_vol,gross_sharpe,gross_sortino,gross_calmar,gross_max_drawdown,cost_drag_cagr,n_rebalances,backtest_start,backtest_end +ridge,11.0,1.0,24,0.01122386777239804,0.11077674858956181,0.7928565220112447,0.12849801912232928,0.12859325367043897,1.004732725413232,1.3953939459613223,0.5825484512335781,-0.22057911037309896,0.4350860416950542,0.7246827621496951,0.06400516464836423,0.8341489292928463,0.4396055875102712,0.8440497746578677,0.13509608403907292,0.1286665274721246,1.0495623603489088,1.4609738122587594,0.6161997717360378,-0.2192407239270192,0.00659806491674364,45,2015-01-02,2019-10-31 +ridge,11.0,2.0,24,0.01122386777239804,0.11077674858956181,0.7437088759892885,0.12202151659455684,0.12862917360798956,0.9597243979273145,1.3299354866024526,0.5495692428916782,-0.22203119656499348,0.3711556418881977,0.7247745833450341,0.05824360984515073,0.8343953476036271,0.4371405094494659,0.8447281806657327,0.1351825402700706,0.12874788458471878,1.0495726145464614,1.4609915906058084,0.6162672866990959,-0.2193569952319666,0.01316102367551375,45,2015-01-02,2019-10-31 +ridge,29.0,1.0,24,0.01122386777239804,0.11077674858956181,0.7928565220112447,0.12849801912232928,0.12859325367043897,1.004732725413232,1.3953939459613223,0.5825484512335781,-0.22057911037309896,0.4350860416950542,0.7246827621496951,0.06400516464836423,0.8341489292928463,0.4396055875102712,0.8440497746578677,0.13509608403907292,0.1286665274721246,1.0495623603489088,1.4609738122587594,0.6161997717360378,-0.2192407239270192,0.00659806491674364,45,2015-01-02,2019-10-31 +ridge,29.0,2.0,24,0.01122386777239804,0.11077674858956181,0.7437088759892885,0.12202151659455684,0.12862917360798956,0.9597243979273145,1.3299354866024526,0.5495692428916782,-0.22203119656499348,0.3711556418881977,0.7247745833450341,0.05824360984515073,0.8343953476036271,0.4371405094494659,0.8447281806657327,0.1351825402700706,0.12874788458471878,1.0495726145464614,1.4609915906058084,0.6162672866990959,-0.2193569952319666,0.01316102367551375,45,2015-01-02,2019-10-31 +ridge,42.0,1.0,24,0.01122386777239804,0.11077674858956181,0.7928565220112447,0.12849801912232928,0.12859325367043897,1.004732725413232,1.3953939459613223,0.5825484512335781,-0.22057911037309896,0.4350860416950542,0.7246827621496951,0.06400516464836423,0.8341489292928463,0.4396055875102712,0.8440497746578677,0.13509608403907292,0.1286665274721246,1.0495623603489088,1.4609738122587594,0.6161997717360378,-0.2192407239270192,0.00659806491674364,45,2015-01-02,2019-10-31 +ridge,42.0,2.0,24,0.01122386777239804,0.11077674858956181,0.7437088759892885,0.12202151659455684,0.12862917360798956,0.9597243979273145,1.3299354866024526,0.5495692428916782,-0.22203119656499348,0.3711556418881977,0.7247745833450341,0.05824360984515073,0.8343953476036271,0.4371405094494659,0.8447281806657327,0.1351825402700706,0.12874788458471878,1.0495726145464614,1.4609915906058084,0.6162672866990959,-0.2193569952319666,0.01316102367551375,45,2015-01-02,2019-10-31 +lightgbm,11.0,1.0,24,0.019865709064018168,0.2528670523803887,1.2061191895168832,0.1780238094323885,0.13161726095889753,1.3110999966631693,1.8645039106154508,0.8499798921189075,-0.20944473049661738,0.8855211491992206,0.7305365202511559,0.106840066620979,0.905309825287292,0.44207066557107644,1.2742887970761,0.1854706122472891,0.13169056955101677,1.358322684194003,1.9369339036334832,0.8925617586785181,-0.20779583086988573,0.007446802814900622,45,2015-01-02,2019-10-31 +lightgbm,11.0,2.0,24,0.019865709064018168,0.2528670523803887,1.14116877772552,0.170756948083435,0.13166540404347488,1.2636460472613429,1.7922257778076478,0.8072623739450959,-0.2115259593345653,0.8189642237955739,0.7307339841091748,0.10063737859783992,0.9055999993970426,0.44124897288414133,1.275567368543514,0.18560858183741358,0.1317802430972225,1.3583718901820283,1.9370216228059136,0.8927100592571888,-0.20791586239305493,0.014851633753978577,45,2015-01-02,2019-10-31 +lightgbm,29.0,1.0,24,0.019772361592348513,0.2494739043742614,1.234808182847567,0.18117970621526136,0.1313035357613569,1.3343176106682244,1.8985565735470926,0.8622818965002308,-0.21011656043182725,0.9207503385828961,0.7318323998086893,0.10936071144743903,0.8788130473087776,0.4437140509449466,1.301813260372016,0.18842726393567455,0.13138128367171562,1.3801939471434774,1.968737115959602,0.9024006071952294,-0.20880666794022817,0.007247557720413189,45,2015-01-02,2019-10-31 +lightgbm,29.0,2.0,24,0.019772361592348513,0.2494739043742614,1.1709810188293543,0.17411383171132244,0.13134246033129526,1.288252456940464,1.8285782130139536,0.8215806720491827,-0.21192542331485054,0.855730315688115,0.7319865758443684,0.10334846798556419,0.8790710605867381,0.4428923582580115,1.30314145864519,0.1885692272277406,0.1314676026985098,1.3802834078505006,1.9688842743805863,0.9026170266152419,-0.20891388226395813,0.014455395516418168,45,2015-01-02,2019-10-31 +lightgbm,42.0,1.0,24,0.018191187721655802,0.22741309824507214,1.2945242413056,0.1876470252107607,0.13242946647501735,1.3653464541110114,1.9486046720917776,0.836945201923181,-0.22420467287413148,0.9723686877997519,0.7355107801222112,0.11464126527462654,0.8911360298345471,0.45110928512736237,1.3642999579983695,0.19503687241956813,0.13250144294048496,1.411520399944314,2.0195858510874203,0.8753469794749738,-0.22281092754389775,0.007389847208807421,45,2015-01-02,2019-10-31 +lightgbm,42.0,2.0,24,0.018191187721655802,0.22741309824507214,1.2281049460575093,0.1804452137826429,0.13247609776905764,1.318971941521655,1.877762416020701,0.7994316119533469,-0.2257168857030053,0.9070455285986505,0.7357135082544666,0.10854318007830074,0.8914036720295224,0.45028759244042726,1.3657045311710778,0.19518384313119563,0.13258935087666976,1.4116007502259589,2.019722205568994,0.8755294089372784,-0.2229323665644889,0.014738629348552745,45,2015-01-02,2019-10-31 +ridge_without_size_feature,11.0,1.0,23,0.008857962167016904,0.08666738333965751,0.7467380769870151,0.12242485200147213,0.12983863647340832,0.9547716733118214,1.3180534756663251,0.5646363280403609,-0.21682071436381445,0.37614814804730384,0.7322683240452622,0.05808712525889852,0.8544216117998843,0.44124897288414133,0.7977676110958178,0.12913741804725953,0.12990886553601438,1.0002429794192376,1.3840379133855978,0.599701613700191,-0.21533611899170113,0.006712566045787405,45,2015-01-02,2019-10-31 +ridge_without_size_feature,11.0,2.0,23,0.008857962167016904,0.08666738333965751,0.6977429983617107,0.11583195079079611,0.12988151280826885,0.9091243208432253,1.2522011615567512,0.5302814184925408,-0.21843486637732423,0.31085084060917056,0.732340821002718,0.052192792925675455,0.8546842578021412,0.4396055875102712,0.798407857285804,0.1292206727743226,0.12999325797781444,1.0002457299332892,1.3840498654914128,0.5997185615706021,-0.21546885665153792,0.013388721983526475,45,2015-01-02,2019-10-31 +ridge_without_size_feature,29.0,1.0,23,0.008857962167016904,0.08666738333965751,0.7467380769870151,0.12242485200147213,0.12983863647340832,0.9547716733118214,1.3180534756663251,0.5646363280403609,-0.21682071436381445,0.37614814804730384,0.7322683240452622,0.05808712525889852,0.8544216117998843,0.44124897288414133,0.7977676110958178,0.12913741804725953,0.12990886553601438,1.0002429794192376,1.3840379133855978,0.599701613700191,-0.21533611899170113,0.006712566045787405,45,2015-01-02,2019-10-31 +ridge_without_size_feature,29.0,2.0,23,0.008857962167016904,0.08666738333965751,0.6977429983617107,0.11583195079079611,0.12988151280826885,0.9091243208432253,1.2522011615567512,0.5302814184925408,-0.21843486637732423,0.31085084060917056,0.732340821002718,0.052192792925675455,0.8546842578021412,0.4396055875102712,0.798407857285804,0.1292206727743226,0.12999325797781444,1.0002457299332892,1.3840498654914128,0.5997185615706021,-0.21546885665153792,0.013388721983526475,45,2015-01-02,2019-10-31 +ridge_without_size_feature,42.0,1.0,23,0.008857962167016904,0.08666738333965751,0.7467380769870151,0.12242485200147213,0.12983863647340832,0.9547716733118214,1.3180534756663251,0.5646363280403609,-0.21682071436381445,0.37614814804730384,0.7322683240452622,0.05808712525889852,0.8544216117998843,0.44124897288414133,0.7977676110958178,0.12913741804725953,0.12990886553601438,1.0002429794192376,1.3840379133855978,0.599701613700191,-0.21533611899170113,0.006712566045787405,45,2015-01-02,2019-10-31 +ridge_without_size_feature,42.0,2.0,23,0.008857962167016904,0.08666738333965751,0.6977429983617107,0.11583195079079611,0.12988151280826885,0.9091243208432253,1.2522011615567512,0.5302814184925408,-0.21843486637732423,0.31085084060917056,0.732340821002718,0.052192792925675455,0.8546842578021412,0.4396055875102712,0.798407857285804,0.1292206727743226,0.12999325797781444,1.0002457299332892,1.3840498654914128,0.5997185615706021,-0.21546885665153792,0.013388721983526475,45,2015-01-02,2019-10-31 +equal_weight,,1.0,24,,,0.7849849012643737,0.12747027098593877,0.11054939563518908,1.1409073225701978,1.5937506090921907,0.6816769511600029,-0.18699513129939904,0.445336613265992,0.6504673183190346,0.06760678334561901,0.07063301370457535,0.44207066557107644,0.7890038989028143,0.12799545431690418,0.11055005618379983,1.1451156455557616,1.5998571065208835,0.6848207094879702,-0.18690359760382302,0.0005251833309654064,45,2015-01-02,2019-10-31 +equal_weight,,2.0,24,,,0.7810494703280884,0.1269550983762857,0.11055882575792245,1.1366837192823027,1.5876249630772774,0.6785680424417304,-0.18709265753137427,0.43969281742268385,0.6505026079364971,0.06714741076202517,0.0706409243163589,0.44207066557107644,0.7890806541400734,0.12800547521524308,0.11055911049509211,1.1451113068922971,1.5998646202039242,0.6848524033819003,-0.18690958020024973,0.0010503768389573676,45,2015-01-02,2019-10-31 +single_momentum,,1.0,24,0.0016129404992156642,0.01029025630928,0.6824996421436609,0.11375000726678941,0.13408918719385457,0.870788198164501,1.206036863113215,0.4860084735184234,-0.2340494321905633,0.2800742962310092,0.7359513182474047,0.05055281113531381,0.5618111476483862,0.4486442070665571,0.7142228393418086,0.11806616546279569,0.13409941518308496,0.8995860058491596,1.2477145842423036,0.505667546234715,-0.23348574837743907,0.004316158196006281,45,2015-01-02,2019-10-31 +single_momentum,,2.0,24,0.0016129404992156642,0.01029025630928,0.6517367152896028,0.10950242495160722,0.13414790490937456,0.8419717273276843,1.164462361719082,0.4665625701886216,-0.234700406651433,0.24002286182939522,0.7359976610719443,0.046734103368734986,0.5619319358802547,0.4486442070665571,0.7146228026723886,0.11812017745504755,0.13415632280535472,0.8996217122413772,1.2477730567980523,0.5057089509783171,-0.23357343631458105,0.008617752503440324,45,2015-01-02,2019-10-31 diff --git a/docs/experiments/real-sp500/summary.json b/docs/experiments/real-sp500/summary.json new file mode 100644 index 0000000..6ee7ca5 --- /dev/null +++ b/docs/experiments/real-sp500/summary.json @@ -0,0 +1,966 @@ +{ + "aggregates": [ + { + "cagr_mean": 0.12747027098593877, + "cagr_std": 0.0, + "cost_multiplier": 1.0, + "max_drawdown_mean": -0.18699513129939904, + "max_drawdown_std": 0.0, + "method": "equal_weight", + "rank_ic_mean_mean": null, + "rank_ic_mean_std": null, + "runs": 1, + "sharpe_mean": 1.1409073225701978, + "sharpe_std": 0.0 + }, + { + "cagr_mean": 0.1269550983762857, + "cagr_std": 0.0, + "cost_multiplier": 2.0, + "max_drawdown_mean": -0.18709265753137427, + "max_drawdown_std": 0.0, + "method": "equal_weight", + "rank_ic_mean_mean": null, + "rank_ic_mean_std": null, + "runs": 1, + "sharpe_mean": 1.1366837192823027, + "sharpe_std": 0.0 + }, + { + "cagr_mean": 0.18228351361947018, + "cagr_std": 0.004005443260403496, + "cost_multiplier": 1.0, + "max_drawdown_mean": -0.2145886546008587, + "max_drawdown_std": 0.006805081162356945, + "method": "lightgbm", + "rank_ic_mean_mean": 0.01927641945934083, + "rank_ic_mean_std": 0.0007683204110161005, + "runs": 3, + "sharpe_mean": 1.336921353814135, + "sharpe_std": 0.02222242328801463 + }, + { + "cagr_mean": 0.17510533119246677, + "cagr_std": 0.004016874944567741, + "cost_multiplier": 2.0, + "max_drawdown_mean": -0.2163894227841404, + "max_drawdown_std": 0.006597528135344145, + "method": "lightgbm", + "rank_ic_mean_mean": 0.01927641945934083, + "rank_ic_mean_std": 0.0007683204110161005, + "runs": 3, + "sharpe_mean": 1.2902901485744873, + "sharpe_std": 0.022632613405177564 + }, + { + "cagr_mean": 0.12849801912232928, + "cagr_std": 0.0, + "cost_multiplier": 1.0, + "max_drawdown_mean": -0.22057911037309896, + "max_drawdown_std": 0.0, + "method": "ridge", + "rank_ic_mean_mean": 0.01122386777239804, + "rank_ic_mean_std": 0.0, + "runs": 3, + "sharpe_mean": 1.004732725413232, + "sharpe_std": 0.0 + }, + { + "cagr_mean": 0.12202151659455684, + "cagr_std": 0.0, + "cost_multiplier": 2.0, + "max_drawdown_mean": -0.22203119656499348, + "max_drawdown_std": 0.0, + "method": "ridge", + "rank_ic_mean_mean": 0.01122386777239804, + "rank_ic_mean_std": 0.0, + "runs": 3, + "sharpe_mean": 0.9597243979273143, + "sharpe_std": 1.1102230246251565e-16 + }, + { + "cagr_mean": 0.12242485200147213, + "cagr_std": 0.0, + "cost_multiplier": 1.0, + "max_drawdown_mean": -0.21682071436381445, + "max_drawdown_std": 0.0, + "method": "ridge_without_size_feature", + "rank_ic_mean_mean": 0.008857962167016904, + "rank_ic_mean_std": 0.0, + "runs": 3, + "sharpe_mean": 0.9547716733118214, + "sharpe_std": 0.0 + }, + { + "cagr_mean": 0.11583195079079611, + "cagr_std": 0.0, + "cost_multiplier": 2.0, + "max_drawdown_mean": -0.21843486637732423, + "max_drawdown_std": 0.0, + "method": "ridge_without_size_feature", + "rank_ic_mean_mean": 0.008857962167016904, + "rank_ic_mean_std": 0.0, + "runs": 3, + "sharpe_mean": 0.9091243208432253, + "sharpe_std": 0.0 + }, + { + "cagr_mean": 0.11375000726678941, + "cagr_std": 0.0, + "cost_multiplier": 1.0, + "max_drawdown_mean": -0.2340494321905633, + "max_drawdown_std": 0.0, + "method": "single_momentum", + "rank_ic_mean_mean": 0.0016129404992156642, + "rank_ic_mean_std": 0.0, + "runs": 1, + "sharpe_mean": 0.870788198164501, + "sharpe_std": 0.0 + }, + { + "cagr_mean": 0.10950242495160722, + "cagr_std": 0.0, + "cost_multiplier": 2.0, + "max_drawdown_mean": -0.234700406651433, + "max_drawdown_std": 0.0, + "method": "single_momentum", + "rank_ic_mean_mean": 0.0016129404992156642, + "rank_ic_mean_std": 0.0, + "runs": 1, + "sharpe_mean": 0.8419717273276843, + "sharpe_std": 0.0 + } + ], + "cases": [ + { + "alpha_ann": 0.06400516464836423, + "ann_vol": 0.12859325367043897, + "avg_turnover": 0.8341489292928463, + "backtest_end": "2019-10-31", + "backtest_start": "2015-01-02", + "beta": 0.7246827621496951, + "cagr": 0.12849801912232928, + "calmar": 0.5825484512335781, + "cost_drag_cagr": 0.00659806491674364, + "cost_multiplier": 1.0, + "features": 24, + "gross_ann_vol": 0.1286665274721246, + "gross_cagr": 0.13509608403907292, + "gross_calmar": 0.6161997717360378, + "gross_max_drawdown": -0.2192407239270192, + "gross_sharpe": 1.0495623603489088, + "gross_sortino": 1.4609738122587594, + "gross_total_return": 0.8440497746578677, + "hit_rate": 0.4396055875102712, + "icir": 0.11077674858956181, + "information_ratio": 0.4350860416950542, + "max_drawdown": -0.22057911037309896, + "method": "ridge", + "n_rebalances": 45, + "rank_ic_mean": 0.01122386777239804, + "seed": 11, + "sharpe": 1.004732725413232, + "sortino": 1.3953939459613223, + "total_return": 0.7928565220112447 + }, + { + "alpha_ann": 0.05824360984515073, + "ann_vol": 0.12862917360798956, + "avg_turnover": 0.8343953476036271, + "backtest_end": "2019-10-31", + "backtest_start": "2015-01-02", + "beta": 0.7247745833450341, + "cagr": 0.12202151659455684, + "calmar": 0.5495692428916782, + "cost_drag_cagr": 0.01316102367551375, + "cost_multiplier": 2.0, + "features": 24, + "gross_ann_vol": 0.12874788458471878, + "gross_cagr": 0.1351825402700706, + "gross_calmar": 0.6162672866990959, + "gross_max_drawdown": -0.2193569952319666, + "gross_sharpe": 1.0495726145464614, + "gross_sortino": 1.4609915906058084, + "gross_total_return": 0.8447281806657327, + "hit_rate": 0.4371405094494659, + "icir": 0.11077674858956181, + "information_ratio": 0.3711556418881977, + "max_drawdown": -0.22203119656499348, + "method": "ridge", + "n_rebalances": 45, + "rank_ic_mean": 0.01122386777239804, + "seed": 11, + "sharpe": 0.9597243979273145, + "sortino": 1.3299354866024526, + "total_return": 0.7437088759892885 + }, + { + "alpha_ann": 0.06400516464836423, + "ann_vol": 0.12859325367043897, + "avg_turnover": 0.8341489292928463, + "backtest_end": "2019-10-31", + "backtest_start": "2015-01-02", + "beta": 0.7246827621496951, + "cagr": 0.12849801912232928, + "calmar": 0.5825484512335781, + "cost_drag_cagr": 0.00659806491674364, + "cost_multiplier": 1.0, + "features": 24, + "gross_ann_vol": 0.1286665274721246, + "gross_cagr": 0.13509608403907292, + "gross_calmar": 0.6161997717360378, + "gross_max_drawdown": -0.2192407239270192, + "gross_sharpe": 1.0495623603489088, + "gross_sortino": 1.4609738122587594, + "gross_total_return": 0.8440497746578677, + "hit_rate": 0.4396055875102712, + "icir": 0.11077674858956181, + "information_ratio": 0.4350860416950542, + "max_drawdown": -0.22057911037309896, + "method": "ridge", + "n_rebalances": 45, + "rank_ic_mean": 0.01122386777239804, + "seed": 29, + "sharpe": 1.004732725413232, + "sortino": 1.3953939459613223, + "total_return": 0.7928565220112447 + }, + { + "alpha_ann": 0.05824360984515073, + "ann_vol": 0.12862917360798956, + "avg_turnover": 0.8343953476036271, + "backtest_end": "2019-10-31", + "backtest_start": "2015-01-02", + "beta": 0.7247745833450341, + "cagr": 0.12202151659455684, + "calmar": 0.5495692428916782, + "cost_drag_cagr": 0.01316102367551375, + "cost_multiplier": 2.0, + "features": 24, + "gross_ann_vol": 0.12874788458471878, + "gross_cagr": 0.1351825402700706, + "gross_calmar": 0.6162672866990959, + "gross_max_drawdown": -0.2193569952319666, + "gross_sharpe": 1.0495726145464614, + "gross_sortino": 1.4609915906058084, + "gross_total_return": 0.8447281806657327, + "hit_rate": 0.4371405094494659, + "icir": 0.11077674858956181, + "information_ratio": 0.3711556418881977, + "max_drawdown": -0.22203119656499348, + "method": "ridge", + "n_rebalances": 45, + "rank_ic_mean": 0.01122386777239804, + "seed": 29, + "sharpe": 0.9597243979273145, + "sortino": 1.3299354866024526, + "total_return": 0.7437088759892885 + }, + { + "alpha_ann": 0.06400516464836423, + "ann_vol": 0.12859325367043897, + "avg_turnover": 0.8341489292928463, + "backtest_end": "2019-10-31", + "backtest_start": "2015-01-02", + "beta": 0.7246827621496951, + "cagr": 0.12849801912232928, + "calmar": 0.5825484512335781, + "cost_drag_cagr": 0.00659806491674364, + "cost_multiplier": 1.0, + "features": 24, + "gross_ann_vol": 0.1286665274721246, + "gross_cagr": 0.13509608403907292, + "gross_calmar": 0.6161997717360378, + "gross_max_drawdown": -0.2192407239270192, + "gross_sharpe": 1.0495623603489088, + "gross_sortino": 1.4609738122587594, + "gross_total_return": 0.8440497746578677, + "hit_rate": 0.4396055875102712, + "icir": 0.11077674858956181, + "information_ratio": 0.4350860416950542, + "max_drawdown": -0.22057911037309896, + "method": "ridge", + "n_rebalances": 45, + "rank_ic_mean": 0.01122386777239804, + "seed": 42, + "sharpe": 1.004732725413232, + "sortino": 1.3953939459613223, + "total_return": 0.7928565220112447 + }, + { + "alpha_ann": 0.05824360984515073, + "ann_vol": 0.12862917360798956, + "avg_turnover": 0.8343953476036271, + "backtest_end": "2019-10-31", + "backtest_start": "2015-01-02", + "beta": 0.7247745833450341, + "cagr": 0.12202151659455684, + "calmar": 0.5495692428916782, + "cost_drag_cagr": 0.01316102367551375, + "cost_multiplier": 2.0, + "features": 24, + "gross_ann_vol": 0.12874788458471878, + "gross_cagr": 0.1351825402700706, + "gross_calmar": 0.6162672866990959, + "gross_max_drawdown": -0.2193569952319666, + "gross_sharpe": 1.0495726145464614, + "gross_sortino": 1.4609915906058084, + "gross_total_return": 0.8447281806657327, + "hit_rate": 0.4371405094494659, + "icir": 0.11077674858956181, + "information_ratio": 0.3711556418881977, + "max_drawdown": -0.22203119656499348, + "method": "ridge", + "n_rebalances": 45, + "rank_ic_mean": 0.01122386777239804, + "seed": 42, + "sharpe": 0.9597243979273145, + "sortino": 1.3299354866024526, + "total_return": 0.7437088759892885 + }, + { + "alpha_ann": 0.106840066620979, + "ann_vol": 0.13161726095889753, + "avg_turnover": 0.905309825287292, + "backtest_end": "2019-10-31", + "backtest_start": "2015-01-02", + "beta": 0.7305365202511559, + "cagr": 0.1780238094323885, + "calmar": 0.8499798921189075, + "cost_drag_cagr": 0.007446802814900622, + "cost_multiplier": 1.0, + "features": 24, + "gross_ann_vol": 0.13169056955101677, + "gross_cagr": 0.1854706122472891, + "gross_calmar": 0.8925617586785181, + "gross_max_drawdown": -0.20779583086988573, + "gross_sharpe": 1.358322684194003, + "gross_sortino": 1.9369339036334832, + "gross_total_return": 1.2742887970761, + "hit_rate": 0.44207066557107644, + "icir": 0.2528670523803887, + "information_ratio": 0.8855211491992206, + "max_drawdown": -0.20944473049661738, + "method": "lightgbm", + "n_rebalances": 45, + "rank_ic_mean": 0.019865709064018168, + "seed": 11, + "sharpe": 1.3110999966631693, + "sortino": 1.8645039106154508, + "total_return": 1.2061191895168832 + }, + { + "alpha_ann": 0.10063737859783992, + "ann_vol": 0.13166540404347488, + "avg_turnover": 0.9055999993970426, + "backtest_end": "2019-10-31", + "backtest_start": "2015-01-02", + "beta": 0.7307339841091748, + "cagr": 0.170756948083435, + "calmar": 0.8072623739450959, + "cost_drag_cagr": 0.014851633753978577, + "cost_multiplier": 2.0, + "features": 24, + "gross_ann_vol": 0.1317802430972225, + "gross_cagr": 0.18560858183741358, + "gross_calmar": 0.8927100592571888, + "gross_max_drawdown": -0.20791586239305493, + "gross_sharpe": 1.3583718901820283, + "gross_sortino": 1.9370216228059136, + "gross_total_return": 1.275567368543514, + "hit_rate": 0.44124897288414133, + "icir": 0.2528670523803887, + "information_ratio": 0.8189642237955739, + "max_drawdown": -0.2115259593345653, + "method": "lightgbm", + "n_rebalances": 45, + "rank_ic_mean": 0.019865709064018168, + "seed": 11, + "sharpe": 1.2636460472613429, + "sortino": 1.7922257778076478, + "total_return": 1.14116877772552 + }, + { + "alpha_ann": 0.10936071144743903, + "ann_vol": 0.1313035357613569, + "avg_turnover": 0.8788130473087776, + "backtest_end": "2019-10-31", + "backtest_start": "2015-01-02", + "beta": 0.7318323998086893, + "cagr": 0.18117970621526136, + "calmar": 0.8622818965002308, + "cost_drag_cagr": 0.007247557720413189, + "cost_multiplier": 1.0, + "features": 24, + "gross_ann_vol": 0.13138128367171562, + "gross_cagr": 0.18842726393567455, + "gross_calmar": 0.9024006071952294, + "gross_max_drawdown": -0.20880666794022817, + "gross_sharpe": 1.3801939471434774, + "gross_sortino": 1.968737115959602, + "gross_total_return": 1.301813260372016, + "hit_rate": 0.4437140509449466, + "icir": 0.2494739043742614, + "information_ratio": 0.9207503385828961, + "max_drawdown": -0.21011656043182725, + "method": "lightgbm", + "n_rebalances": 45, + "rank_ic_mean": 0.019772361592348513, + "seed": 29, + "sharpe": 1.3343176106682244, + "sortino": 1.8985565735470926, + "total_return": 1.234808182847567 + }, + { + "alpha_ann": 0.10334846798556419, + "ann_vol": 0.13134246033129526, + "avg_turnover": 0.8790710605867381, + "backtest_end": "2019-10-31", + "backtest_start": "2015-01-02", + "beta": 0.7319865758443684, + "cagr": 0.17411383171132244, + "calmar": 0.8215806720491827, + "cost_drag_cagr": 0.014455395516418168, + "cost_multiplier": 2.0, + "features": 24, + "gross_ann_vol": 0.1314676026985098, + "gross_cagr": 0.1885692272277406, + "gross_calmar": 0.9026170266152419, + "gross_max_drawdown": -0.20891388226395813, + "gross_sharpe": 1.3802834078505006, + "gross_sortino": 1.9688842743805863, + "gross_total_return": 1.30314145864519, + "hit_rate": 0.4428923582580115, + "icir": 0.2494739043742614, + "information_ratio": 0.855730315688115, + "max_drawdown": -0.21192542331485054, + "method": "lightgbm", + "n_rebalances": 45, + "rank_ic_mean": 0.019772361592348513, + "seed": 29, + "sharpe": 1.288252456940464, + "sortino": 1.8285782130139536, + "total_return": 1.1709810188293543 + }, + { + "alpha_ann": 0.11464126527462654, + "ann_vol": 0.13242946647501735, + "avg_turnover": 0.8911360298345471, + "backtest_end": "2019-10-31", + "backtest_start": "2015-01-02", + "beta": 0.7355107801222112, + "cagr": 0.1876470252107607, + "calmar": 0.836945201923181, + "cost_drag_cagr": 0.007389847208807421, + "cost_multiplier": 1.0, + "features": 24, + "gross_ann_vol": 0.13250144294048496, + "gross_cagr": 0.19503687241956813, + "gross_calmar": 0.8753469794749738, + "gross_max_drawdown": -0.22281092754389775, + "gross_sharpe": 1.411520399944314, + "gross_sortino": 2.0195858510874203, + "gross_total_return": 1.3642999579983695, + "hit_rate": 0.45110928512736237, + "icir": 0.22741309824507214, + "information_ratio": 0.9723686877997519, + "max_drawdown": -0.22420467287413148, + "method": "lightgbm", + "n_rebalances": 45, + "rank_ic_mean": 0.018191187721655802, + "seed": 42, + "sharpe": 1.3653464541110114, + "sortino": 1.9486046720917776, + "total_return": 1.2945242413056 + }, + { + "alpha_ann": 0.10854318007830074, + "ann_vol": 0.13247609776905764, + "avg_turnover": 0.8914036720295224, + "backtest_end": "2019-10-31", + "backtest_start": "2015-01-02", + "beta": 0.7357135082544666, + "cagr": 0.1804452137826429, + "calmar": 0.7994316119533469, + "cost_drag_cagr": 0.014738629348552745, + "cost_multiplier": 2.0, + "features": 24, + "gross_ann_vol": 0.13258935087666976, + "gross_cagr": 0.19518384313119563, + "gross_calmar": 0.8755294089372784, + "gross_max_drawdown": -0.2229323665644889, + "gross_sharpe": 1.4116007502259589, + "gross_sortino": 2.019722205568994, + "gross_total_return": 1.3657045311710778, + "hit_rate": 0.45028759244042726, + "icir": 0.22741309824507214, + "information_ratio": 0.9070455285986505, + "max_drawdown": -0.2257168857030053, + "method": "lightgbm", + "n_rebalances": 45, + "rank_ic_mean": 0.018191187721655802, + "seed": 42, + "sharpe": 1.318971941521655, + "sortino": 1.877762416020701, + "total_return": 1.2281049460575093 + }, + { + "alpha_ann": 0.05808712525889852, + "ann_vol": 0.12983863647340832, + "avg_turnover": 0.8544216117998843, + "backtest_end": "2019-10-31", + "backtest_start": "2015-01-02", + "beta": 0.7322683240452622, + "cagr": 0.12242485200147213, + "calmar": 0.5646363280403609, + "cost_drag_cagr": 0.006712566045787405, + "cost_multiplier": 1.0, + "features": 23, + "gross_ann_vol": 0.12990886553601438, + "gross_cagr": 0.12913741804725953, + "gross_calmar": 0.599701613700191, + "gross_max_drawdown": -0.21533611899170113, + "gross_sharpe": 1.0002429794192376, + "gross_sortino": 1.3840379133855978, + "gross_total_return": 0.7977676110958178, + "hit_rate": 0.44124897288414133, + "icir": 0.08666738333965751, + "information_ratio": 0.37614814804730384, + "max_drawdown": -0.21682071436381445, + "method": "ridge_without_size_feature", + "n_rebalances": 45, + "rank_ic_mean": 0.008857962167016904, + "seed": 11, + "sharpe": 0.9547716733118214, + "sortino": 1.3180534756663251, + "total_return": 0.7467380769870151 + }, + { + "alpha_ann": 0.052192792925675455, + "ann_vol": 0.12988151280826885, + "avg_turnover": 0.8546842578021412, + "backtest_end": "2019-10-31", + "backtest_start": "2015-01-02", + "beta": 0.732340821002718, + "cagr": 0.11583195079079611, + "calmar": 0.5302814184925408, + "cost_drag_cagr": 0.013388721983526475, + "cost_multiplier": 2.0, + "features": 23, + "gross_ann_vol": 0.12999325797781444, + "gross_cagr": 0.1292206727743226, + "gross_calmar": 0.5997185615706021, + "gross_max_drawdown": -0.21546885665153792, + "gross_sharpe": 1.0002457299332892, + "gross_sortino": 1.3840498654914128, + "gross_total_return": 0.798407857285804, + "hit_rate": 0.4396055875102712, + "icir": 0.08666738333965751, + "information_ratio": 0.31085084060917056, + "max_drawdown": -0.21843486637732423, + "method": "ridge_without_size_feature", + "n_rebalances": 45, + "rank_ic_mean": 0.008857962167016904, + "seed": 11, + "sharpe": 0.9091243208432253, + "sortino": 1.2522011615567512, + "total_return": 0.6977429983617107 + }, + { + "alpha_ann": 0.05808712525889852, + "ann_vol": 0.12983863647340832, + "avg_turnover": 0.8544216117998843, + "backtest_end": "2019-10-31", + "backtest_start": "2015-01-02", + "beta": 0.7322683240452622, + "cagr": 0.12242485200147213, + "calmar": 0.5646363280403609, + "cost_drag_cagr": 0.006712566045787405, + "cost_multiplier": 1.0, + "features": 23, + "gross_ann_vol": 0.12990886553601438, + "gross_cagr": 0.12913741804725953, + "gross_calmar": 0.599701613700191, + "gross_max_drawdown": -0.21533611899170113, + "gross_sharpe": 1.0002429794192376, + "gross_sortino": 1.3840379133855978, + "gross_total_return": 0.7977676110958178, + "hit_rate": 0.44124897288414133, + "icir": 0.08666738333965751, + "information_ratio": 0.37614814804730384, + "max_drawdown": -0.21682071436381445, + "method": "ridge_without_size_feature", + "n_rebalances": 45, + "rank_ic_mean": 0.008857962167016904, + "seed": 29, + "sharpe": 0.9547716733118214, + "sortino": 1.3180534756663251, + "total_return": 0.7467380769870151 + }, + { + "alpha_ann": 0.052192792925675455, + "ann_vol": 0.12988151280826885, + "avg_turnover": 0.8546842578021412, + "backtest_end": "2019-10-31", + "backtest_start": "2015-01-02", + "beta": 0.732340821002718, + "cagr": 0.11583195079079611, + "calmar": 0.5302814184925408, + "cost_drag_cagr": 0.013388721983526475, + "cost_multiplier": 2.0, + "features": 23, + "gross_ann_vol": 0.12999325797781444, + "gross_cagr": 0.1292206727743226, + "gross_calmar": 0.5997185615706021, + "gross_max_drawdown": -0.21546885665153792, + "gross_sharpe": 1.0002457299332892, + "gross_sortino": 1.3840498654914128, + "gross_total_return": 0.798407857285804, + "hit_rate": 0.4396055875102712, + "icir": 0.08666738333965751, + "information_ratio": 0.31085084060917056, + "max_drawdown": -0.21843486637732423, + "method": "ridge_without_size_feature", + "n_rebalances": 45, + "rank_ic_mean": 0.008857962167016904, + "seed": 29, + "sharpe": 0.9091243208432253, + "sortino": 1.2522011615567512, + "total_return": 0.6977429983617107 + }, + { + "alpha_ann": 0.05808712525889852, + "ann_vol": 0.12983863647340832, + "avg_turnover": 0.8544216117998843, + "backtest_end": "2019-10-31", + "backtest_start": "2015-01-02", + "beta": 0.7322683240452622, + "cagr": 0.12242485200147213, + "calmar": 0.5646363280403609, + "cost_drag_cagr": 0.006712566045787405, + "cost_multiplier": 1.0, + "features": 23, + "gross_ann_vol": 0.12990886553601438, + "gross_cagr": 0.12913741804725953, + "gross_calmar": 0.599701613700191, + "gross_max_drawdown": -0.21533611899170113, + "gross_sharpe": 1.0002429794192376, + "gross_sortino": 1.3840379133855978, + "gross_total_return": 0.7977676110958178, + "hit_rate": 0.44124897288414133, + "icir": 0.08666738333965751, + "information_ratio": 0.37614814804730384, + "max_drawdown": -0.21682071436381445, + "method": "ridge_without_size_feature", + "n_rebalances": 45, + "rank_ic_mean": 0.008857962167016904, + "seed": 42, + "sharpe": 0.9547716733118214, + "sortino": 1.3180534756663251, + "total_return": 0.7467380769870151 + }, + { + "alpha_ann": 0.052192792925675455, + "ann_vol": 0.12988151280826885, + "avg_turnover": 0.8546842578021412, + "backtest_end": "2019-10-31", + "backtest_start": "2015-01-02", + "beta": 0.732340821002718, + "cagr": 0.11583195079079611, + "calmar": 0.5302814184925408, + "cost_drag_cagr": 0.013388721983526475, + "cost_multiplier": 2.0, + "features": 23, + "gross_ann_vol": 0.12999325797781444, + "gross_cagr": 0.1292206727743226, + "gross_calmar": 0.5997185615706021, + "gross_max_drawdown": -0.21546885665153792, + "gross_sharpe": 1.0002457299332892, + "gross_sortino": 1.3840498654914128, + "gross_total_return": 0.798407857285804, + "hit_rate": 0.4396055875102712, + "icir": 0.08666738333965751, + "information_ratio": 0.31085084060917056, + "max_drawdown": -0.21843486637732423, + "method": "ridge_without_size_feature", + "n_rebalances": 45, + "rank_ic_mean": 0.008857962167016904, + "seed": 42, + "sharpe": 0.9091243208432253, + "sortino": 1.2522011615567512, + "total_return": 0.6977429983617107 + }, + { + "alpha_ann": 0.06760678334561901, + "ann_vol": 0.11054939563518908, + "avg_turnover": 0.07063301370457535, + "backtest_end": "2019-10-31", + "backtest_start": "2015-01-02", + "beta": 0.6504673183190346, + "cagr": 0.12747027098593877, + "calmar": 0.6816769511600029, + "cost_drag_cagr": 0.0005251833309654064, + "cost_multiplier": 1.0, + "features": 24, + "gross_ann_vol": 0.11055005618379983, + "gross_cagr": 0.12799545431690418, + "gross_calmar": 0.6848207094879702, + "gross_max_drawdown": -0.18690359760382302, + "gross_sharpe": 1.1451156455557616, + "gross_sortino": 1.5998571065208835, + "gross_total_return": 0.7890038989028143, + "hit_rate": 0.44207066557107644, + "icir": null, + "information_ratio": 0.445336613265992, + "max_drawdown": -0.18699513129939904, + "method": "equal_weight", + "n_rebalances": 45, + "rank_ic_mean": null, + "seed": null, + "sharpe": 1.1409073225701978, + "sortino": 1.5937506090921907, + "total_return": 0.7849849012643737 + }, + { + "alpha_ann": 0.06714741076202517, + "ann_vol": 0.11055882575792245, + "avg_turnover": 0.0706409243163589, + "backtest_end": "2019-10-31", + "backtest_start": "2015-01-02", + "beta": 0.6505026079364971, + "cagr": 0.1269550983762857, + "calmar": 0.6785680424417304, + "cost_drag_cagr": 0.0010503768389573676, + "cost_multiplier": 2.0, + "features": 24, + "gross_ann_vol": 0.11055911049509211, + "gross_cagr": 0.12800547521524308, + "gross_calmar": 0.6848524033819003, + "gross_max_drawdown": -0.18690958020024973, + "gross_sharpe": 1.1451113068922971, + "gross_sortino": 1.5998646202039242, + "gross_total_return": 0.7890806541400734, + "hit_rate": 0.44207066557107644, + "icir": null, + "information_ratio": 0.43969281742268385, + "max_drawdown": -0.18709265753137427, + "method": "equal_weight", + "n_rebalances": 45, + "rank_ic_mean": null, + "seed": null, + "sharpe": 1.1366837192823027, + "sortino": 1.5876249630772774, + "total_return": 0.7810494703280884 + }, + { + "alpha_ann": 0.05055281113531381, + "ann_vol": 0.13408918719385457, + "avg_turnover": 0.5618111476483862, + "backtest_end": "2019-10-31", + "backtest_start": "2015-01-02", + "beta": 0.7359513182474047, + "cagr": 0.11375000726678941, + "calmar": 0.4860084735184234, + "cost_drag_cagr": 0.004316158196006281, + "cost_multiplier": 1.0, + "features": 24, + "gross_ann_vol": 0.13409941518308496, + "gross_cagr": 0.11806616546279569, + "gross_calmar": 0.505667546234715, + "gross_max_drawdown": -0.23348574837743907, + "gross_sharpe": 0.8995860058491596, + "gross_sortino": 1.2477145842423036, + "gross_total_return": 0.7142228393418086, + "hit_rate": 0.4486442070665571, + "icir": 0.01029025630928, + "information_ratio": 0.2800742962310092, + "max_drawdown": -0.2340494321905633, + "method": "single_momentum", + "n_rebalances": 45, + "rank_ic_mean": 0.0016129404992156642, + "seed": null, + "sharpe": 0.870788198164501, + "sortino": 1.206036863113215, + "total_return": 0.6824996421436609 + }, + { + "alpha_ann": 0.046734103368734986, + "ann_vol": 0.13414790490937456, + "avg_turnover": 0.5619319358802547, + "backtest_end": "2019-10-31", + "backtest_start": "2015-01-02", + "beta": 0.7359976610719443, + "cagr": 0.10950242495160722, + "calmar": 0.4665625701886216, + "cost_drag_cagr": 0.008617752503440324, + "cost_multiplier": 2.0, + "features": 24, + "gross_ann_vol": 0.13415632280535472, + "gross_cagr": 0.11812017745504755, + "gross_calmar": 0.5057089509783171, + "gross_max_drawdown": -0.23357343631458105, + "gross_sharpe": 0.8996217122413772, + "gross_sortino": 1.2477730567980523, + "gross_total_return": 0.7146228026723886, + "hit_rate": 0.4486442070665571, + "icir": 0.01029025630928, + "information_ratio": 0.24002286182939522, + "max_drawdown": -0.234700406651433, + "method": "single_momentum", + "n_rebalances": 45, + "rank_ic_mean": 0.0016129404992156642, + "seed": null, + "sharpe": 0.8419717273276843, + "sortino": 1.164462361719082, + "total_return": 0.6517367152896028 + } + ], + "data_kind": "exploratory_real_market", + "dataset": { + "features": [ + "adv_21d", + "amihud_illiquidity", + "beta_252d", + "dollar_volume_ratio", + "downside_volatility", + "idiosyncratic_volatility", + "industry_momentum", + "log_adv_21d", + "log_market_cap", + "log_price", + "max_drawdown_252d", + "mom_120d", + "mom_12_1", + "mom_20d", + "mom_60d", + "mom_6_1", + "residual_momentum", + "return_skew_126d", + "rev_21d", + "rev_5d", + "turnover_21d", + "volatility_252d", + "volatility_60d", + "zero_trading_days" + ], + "forecast_end": "2019-10-16", + "forecast_start": "2014-01-02", + "horizon_sessions": 21, + "oos_forecasts": 551698, + "samples": 840736 + }, + "dataset_sha256": "8906ace6a84d22bdc78a05fedcd75498d964dd56555da00492892f5eb7a9a7cd", + "environment": { + "numpy": "2.3.5", + "pandas": "2.2.3", + "python": "3.12.14", + "scikit_learn": "1.8.0" + }, + "limitations": [ + "Seed variation is not market sampling uncertainty or proof of tradable alpha.", + "Cost inputs are fixed scenarios, not measured execution costs.", + "The equal-weight baseline differs in diversification; its holdings rule is explicit.", + "Source hashes establish identity, not complete historical data quality." + ], + "protocol": { + "ablation": "drop explicit log_market_cap predictor only; earlier size neutralization remains", + "backtest": { + "allow_short": false, + "benchmark": "SP500", + "end_date": "2019-10-31", + "execution_lag_days": 1, + "initial_capital": 10000000, + "rebalance": "monthly", + "start_date": "2015-01-01" + }, + "cost": { + "commission_bps": 2.0, + "impact_coeff_bps": 10.0, + "min_commission": 0.0, + "participation_cap": 0.1, + "slippage_bps": 5.0 + }, + "cost_multipliers": [ + 1.0, + 2.0 + ], + "model_params": { + "lightgbm": { + "bagging_fraction": 0.8, + "bagging_freq": 1, + "feature_fraction": 0.7, + "lambda_l2": 1.0, + "learning_rate": 0.05, + "min_data_in_leaf": 200, + "n_estimators": 100, + "num_leaves": 15, + "num_threads": 1 + }, + "ridge": { + "alpha": 1.0 + } + }, + "model_selection": "none; all seeds/cost cells reported; failed cells raise", + "portfolio": "long-only equal-weight top 50; equal-weight baseline holds all forecastable eligible names", + "seeds": [ + 11, + 29, + 42 + ], + "signal_availability": "forecast panel forward-fill only; no backfill", + "ties": "score descending then symbol ascending", + "walk_forward": { + "embargo_days": 21, + "expanding": true, + "purge_days": 21, + "step_years": 1, + "test_years": 1, + "train_years": 4 + } + }, + "source_assurance": { + "data_kind": "public_market_mirror", + "effective_end": "2019-11-14", + "effective_start": "2010-01-04", + "limitations": [ + "Historical membership is incomplete; survivorship/selection bias remains.", + "Financial availability is an assumed lag, not actual publication history.", + "Size uses a dollar-volume proxy, not measured market capitalization." + ], + "price_sessions": 2485, + "processed_sha256": { + "benchmark.parquet": "c9ee2d26849c9584c6a0ec04f2ba4637e720c69692aab906bae49ead3e8aaed9", + "constituents.parquet": "80e9a1bcc1c88643efe85f28b6e94625103241e578fed0de6e0e93a74a927ce4", + "fundamentals.parquet": "49bcca1878cec46605872c96898d5e7d383c45477ea8a875ea850f5952528eac", + "industry.parquet": "8048708f49570a5e94c96162def4aa0458a8059344d26f9a8dcc36dbc00e7ea6", + "macro.parquet": "af9920d0db6ae238d47f6ba5560f98880f7734f33060dc8bfb552308524bc588", + "prices.parquet": "dd0ff0099ac803ff810fe419a67f4279ea40cf615141a014829f60a3d0fc4fad" + }, + "raw_sha256": { + "sp500_constituents.parquet": "813b095291414dab8fc278920e7e829190c5bc448dccf1f1dc0901ab3f1c458a", + "sp500_daily.parquet": "3ef81acc674028769126b4264bebd03d6897eada1f0205fd6f6d3c28afc97c8b", + "sp500_daily_ratios.zip": "a5f7ae23ee3871544d734e34ce1f429074084c6582c559b0778dfd34b6ac59c3", + "spy_daily.jsonl": "e20cd9764743799d39259dffa54286fc4a9cd5eefd5af7feca0cc6a595b930fa" + }, + "requested_end": "2019-11-14", + "requested_start": "2010-01-01", + "schema_version": 1, + "scope": "Identity and declared source properties; not independent economic validation", + "source_declarations": { + "actual_filing_availability": false, + "actual_market_capitalization": false, + "complete_historical_universe": false, + "fundamental_availability": "fiscal period end plus fixed lag, not actual filing date", + "fundamental_lag_days": 90, + "market_capitalization": "unavailable; panel substitutes a dollar-volume proxy", + "universe_history": "current members with entry dates; removed/delisted names incomplete" + }, + "source_urls": { + "benchmark": "https://huggingface.co/datasets/mmirmomeni/spy_daily/resolve/main/train.jsonl", + "constituents": "https://huggingface.co/datasets/jwigginton/index-constituents-sp500/resolve/main/data/train-00000-of-00001.parquet", + "fundamentals": "https://huggingface.co/datasets/pmoe7/SP_500_Stocks_Data-ratios_news_price_10_yrs/resolve/main/sp500_daily_ratios_20yrs.zip", + "prices": "https://huggingface.co/datasets/jwigginton/timeseries-daily-sp500/resolve/main/data/train-00000-of-00001.parquet" + }, + "status": "exploratory" + } +} diff --git a/docs/research-comparison.md b/docs/research-comparison.md new file mode 100644 index 0000000..7870af2 --- /dev/null +++ b/docs/research-comparison.md @@ -0,0 +1,66 @@ +# Real-market comparison with declared source limits + +[Open the complete comparison](experiments/real-sp500/index.html) + +This exploratory experiment uses 1,173,649 real mirrored price rows, a frozen +840,736-row model dataset with 24 usable features, and 551,698 shared out-of-sample +forecasts. It compares equal weight, a fixed 12–1 momentum signal, Ridge, +LightGBM and Ridge without the explicit size predictor. Model runs use seeds +11, 29 and 42; every method uses the same forecast coverage, dated outcomes, +monthly rebalance, one-session execution lag and declared cost rules. + +| At base assumed costs | Net CAGR | Net Sharpe | Maximum drawdown | +| --- | --- | --- | --- | +| Equal-weight baseline | 12.75% | 1.141 | −18.70% | +| Single-momentum baseline | 11.38% | 0.871 | −23.40% | +| Ridge | 12.85% | 1.005 | −22.06% | +| LightGBM, seed mean | 18.23% | 1.337 | −21.46% | +| Ridge without size predictor | 12.24% | 0.955 | −21.68% | + +These are the measured results of the declared protocol, **not estimates of +tradable alpha**. In this sample Ridge has lower Sharpe than the simpler +equal-weight baseline. Three LightGBM seeds show variation; deterministic Ridge +does not. All 22 seed/cost cases, including doubled-cost scenarios, are retained. +Seed variation does not estimate uncertainty across market histories. + +## Source and comparison boundaries + +The source lists current S&P 500 members with entry dates, without complete +removed/delisted histories. Fundamentals use assumed publication lags, and +market capitalization is unavailable, so size uses a dollar-volume proxy. +Historical source vintages and classification changes are not independently +verified. These limits are recorded in the downloadable JSON and report banner. +`--require-complete-sources` rejects the bundled mirror's incomplete source +contract rather than treating real prices as proof of point-in-time correctness. + +The forecast window is March 2014–October 2019; portfolio results cover January +2015–October 2019. The dataset ends November 14, 2019, where the benchmark source +ends. Benchmark coverage is checked for every price session. Forecast failures, +nonfinite predictions and differences in forecast coverage cannot be silently +dropped from a comparison. + +All score-based portfolios equal weight their top 50 eligible names, with +symbol-based tie breaking and no optimizer. The equal-weight baseline holds all +forecastable eligible names, so its diversification differs. The size ablation +removes only `log_market_cap` from model inputs; it does not undo earlier size +neutralization. This experiment neither tunes parameters nor chooses a seed or +model for deployment based on the held-out results. + +## Reproduction and verification + +```bash +python scripts/fetch_real_data.py --start 2010-01-01 --end 2019-11-14 +python scripts/run_comparison.py --out research/comparison +python scripts/verify_comparison.py research/comparison +``` + +The builder records raw/processed file hashes and source properties in +`DATA_ASSURANCE.json`. Comparison outputs include dataset identity, exact +parameters, per-fold metrics, per-run metrics, daily returns and an artifact +manifest. The verifier recomputes portfolio headlines and seed aggregates from +the saved return CSV without refitting models. Repeat with the recorded library +versions; vendor mirror updates can change source hashes. + +Real runs default to `research/real_runs` and comparisons to +`research/comparison`. They are separate from the published synthetic +`research/case_study.md` and its JSON; that case retains its synthetic identity. diff --git a/mkdocs.yml b/mkdocs.yml index 3cf4bfd..07bf8cc 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -18,6 +18,7 @@ theme: nav: - Home: index.md - Reproduce the sample: sample-run.md + - Real-market comparison: research-comparison.md - Validation & limitations: validation.md - Architecture: architecture.md - Quickstart: quickstart.md diff --git a/scripts/fetch_real_data.py b/scripts/fetch_real_data.py index 5f3ef39..4c4251d 100644 --- a/scripts/fetch_real_data.py +++ b/scripts/fetch_real_data.py @@ -44,6 +44,7 @@ REPO_ROOT = Path(__file__).resolve().parent.parent sys.path.insert(0, str(REPO_ROOT / "src")) +from alphaforge.data.assurance import write_mirror_assurance # noqa: E402 from alphaforge.data.providers.base import ( # noqa: E402 CONSTITUENT_COLUMNS, MACRO_COLUMNS, @@ -80,7 +81,7 @@ # spy 2000-01-03 -> 2019-11-14 # The benchmark is the binding constraint, so the default build starts in 2000. DEFAULT_START = "2000-01-01" -DEFAULT_END = "2019-12-31" +DEFAULT_END = "2019-11-14" @dataclass @@ -426,6 +427,8 @@ def main(argv: list[str] | None = None) -> int: help="never hit the network; fail if a cached copy is missing", ) args = ap.parse_args(argv) + if args.lag_days < 0: + ap.error("--lag-days must be nonnegative") if args.offline: missing = [ @@ -496,6 +499,26 @@ def main(argv: list[str] | None = None) -> int: fundamentals, args.lag_days, ) + raw_sources = { + name: RAW_DIR / name + for name in ( + "sp500_daily.parquet", + "sp500_constituents.parquet", + "spy_daily.jsonl", + "sp500_daily_ratios.zip", + ) + } + write_mirror_assurance( + PROCESSED_DIR, + raw_sources, + { + "prices": PRICES_URL, + "constituents": CONSTITUENTS_URL, + "benchmark": BENCHMARK_URL, + "fundamentals": RATIOS_URL, + }, + args.lag_days, + ) log.info( f"Real dataset ready: {stats.symbols} symbols | {stats.rows:,} rows | " diff --git a/scripts/run_comparison.py b/scripts/run_comparison.py new file mode 100644 index 0000000..a202226 --- /dev/null +++ b/scripts/run_comparison.py @@ -0,0 +1,48 @@ +"""Reproduce a same-dataset model/baseline comparison, with source limitations.""" + +from __future__ import annotations + +import argparse +import json +from pathlib import Path + +from alphaforge.comparison import run_comparison +from alphaforge.data.assurance import audit_local_dataset +from alphaforge.pipeline import ResearchPipeline +from alphaforge.utils.config import Config + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--config", default="configs/real_sp500.yaml") + parser.add_argument("--start", default="2010-01-01") + parser.add_argument("--end", default="2019-11-14") + parser.add_argument("--backtest-start", default="2015-01-01") + parser.add_argument("--backtest-end", default="2019-10-31") + parser.add_argument("--seeds", type=int, nargs="+", default=[11, 29, 42]) + parser.add_argument("--out", type=Path, default=Path("research/comparison")) + parser.add_argument("--require-complete-sources", action="store_true") + args = parser.parse_args() + cfg = Config.load( + args.config, + overrides={ + "data": {"start_date": args.start, "end_date": args.end}, + "backtest": {"start_date": args.backtest_start, "end_date": args.backtest_end}, + }, + ) + assurance = None + if cfg.get("data.provider") == "local": + assurance = audit_local_dataset( + "data/processed", + args.start, + args.end, + require_complete_sources=args.require_complete_sources, + ) + cfg.raw["data"]["assurance"] = assurance + state = ResearchPipeline(cfg).run(report_dir=str(args.out / "base-report")) + result = run_comparison(state, args.out, seeds=tuple(args.seeds), assurance=assurance) + print(json.dumps(result["aggregates"], indent=2, allow_nan=False)) + + +if __name__ == "__main__": + main() diff --git a/scripts/run_real_research.py b/scripts/run_real_research.py index e165fd5..9cd1619 100644 --- a/scripts/run_real_research.py +++ b/scripts/run_real_research.py @@ -1,10 +1,8 @@ """Run the full AlphaForge stack on the **real** S&P 500 dataset. -This is the script that produces the numbers in ``research/case_study.md``. -Nothing here is hard-coded: every figure in the case study is read back from -the returned :class:`~alphaforge.pipeline.ResearchState` and dumped to -``research/case_study_data.json``, so the narrative and the engine can never -drift apart. +Runs are exploratory when historical membership, filing dates or actual market +capitalization are unavailable. Output is kept in ``research/real_runs`` so a +real-data experiment cannot silently replace the published synthetic case. Prerequisites:: @@ -28,6 +26,7 @@ import pandas as pd # noqa: E402 +from alphaforge.data.assurance import audit_local_dataset # noqa: E402 from alphaforge.pipeline import ResearchPipeline # noqa: E402 from alphaforge.utils.config import Config # noqa: E402 from alphaforge.utils.logging import configure_logging, get_logger # noqa: E402 @@ -37,7 +36,7 @@ CONFIG_PATH = REPO_ROOT / "configs" / "real_sp500.yaml" DATA_DIR = REPO_ROOT / "data" / "processed" -OUT_JSON = REPO_ROOT / "research" / "case_study_data.json" +OUT_JSON = REPO_ROOT / "research" / "real_runs" / "case_study_data.json" def _require_dataset() -> None: @@ -143,7 +142,13 @@ def main(argv: list[str] | None = None) -> int: ) ap.add_argument("--start", default=None) ap.add_argument("--end", default=None) - ap.add_argument("--report-dir", default=str(REPO_ROOT / "research" / "reports")) + ap.add_argument("--report-dir", default=str(REPO_ROOT / "research" / "real_runs" / "report")) + ap.add_argument("--out-json", type=Path, default=OUT_JSON) + ap.add_argument( + "--require-complete-sources", + action="store_true", + help="reject incomplete universe, assumed filing dates or proxy market cap", + ) ap.add_argument("--no-json", action="store_true", help="skip writing case_study_data.json") args = ap.parse_args(argv) @@ -156,6 +161,15 @@ def main(argv: list[str] | None = None) -> int: overrides.setdefault("portfolio", {})["method"] = args.method cfg = Config.load(args.config, overrides=overrides) + if cfg.get("data.provider") != "local": + raise ValueError("This real-data script requires a local dataset with a source contract") + assurance = audit_local_dataset( + DATA_DIR, + args.start or cfg.get("data.start_date"), + args.end or cfg.get("data.end_date"), + require_complete_sources=args.require_complete_sources, + ) + cfg.raw.setdefault("data", {})["assurance"] = assurance log.info(f"Running real-data research with provider={cfg.get('data.provider')}") state = ResearchPipeline(cfg).run( start=args.start, @@ -165,17 +179,21 @@ def main(argv: list[str] | None = None) -> int: ) payload = collect(state, cfg.raw) + payload["data_assurance"] = assurance if not args.no_json: - OUT_JSON.parent.mkdir(parents=True, exist_ok=True) - OUT_JSON.write_text(json.dumps(payload, indent=2, default=str)) - log.info(f"wrote {OUT_JSON.relative_to(REPO_ROOT)}") + args.out_json.parent.mkdir(parents=True, exist_ok=True) + args.out_json.write_text(json.dumps(payload, indent=2, default=str), encoding="utf-8") + log.info(f"wrote {args.out_json}") # -- console summary ------------------------------------------------- bt = state.backtest s = bt.summary() if bt is not None else {} print("\n" + "=" * 72) print("ALPHAFORGE · REAL-DATA RESEARCH RUN") + print(f"Source status : {assurance['status']}") + for limitation in assurance["limitations"]: + print(f" - {limitation}") print("=" * 72) m = payload["meta"] print( @@ -206,7 +224,7 @@ def main(argv: list[str] | None = None) -> int: print("=" * 72) if state.report_path: print(f"HTML report : {state.report_path}") - print("Case study in : research/case_study.md (regenerate narrative from the JSON above)") + print("The published synthetic case study is separate from this exploratory real-data run.") return 0 diff --git a/scripts/verify_comparison.py b/scripts/verify_comparison.py new file mode 100644 index 0000000..ed96f4a --- /dev/null +++ b/scripts/verify_comparison.py @@ -0,0 +1,14 @@ +"""Check saved comparison hashes and independently recompute return metrics.""" + +from __future__ import annotations + +import argparse +import json + +from alphaforge.comparison import verify_comparison + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("directory") + args = parser.parse_args() + print(json.dumps(verify_comparison(args.directory), indent=2)) diff --git a/src/alphaforge/comparison.py b/src/alphaforge/comparison.py new file mode 100644 index 0000000..64549cd --- /dev/null +++ b/src/alphaforge/comparison.py @@ -0,0 +1,422 @@ +"""A frozen dataset, identical forecast coverage and explicit cost scenarios.""" + +from __future__ import annotations + +import copy +import gzip +import hashlib +import html +import json +import math +import platform +from dataclasses import replace +from pathlib import Path +from typing import Any + +import numpy as np +import pandas as pd +import sklearn + +from alphaforge.backtest.engine import BacktestConfig, BacktestEngine +from alphaforge.backtest.metrics import performance_stats +from alphaforge.models.evaluation import evaluate_predictions +from alphaforge.models.pipeline import AlphaModelPipeline, signal_panel + +MODEL_PARAMS = { + "ridge": {"alpha": 1.0}, + "lightgbm": { + "n_estimators": 100, + "num_leaves": 15, + "min_data_in_leaf": 200, + "num_threads": 1, + "feature_fraction": 0.7, + "bagging_fraction": 0.8, + "bagging_freq": 1, + "learning_rate": 0.05, + "lambda_l2": 1.0, + }, +} + + +def dataset_digest(dataset) -> str: + digest = hashlib.sha256() + for frame in ( + dataset.features, + pd.DataFrame( + { + "date": dataset.dates, + "symbol": dataset.symbols, + "target": dataset.target, + "forward_return": dataset.forward_returns, + } + ), + ): + digest.update(pd.util.hash_pandas_object(frame, index=False).to_numpy().tobytes()) + digest.update(json.dumps(list(frame.columns)).encode()) + return digest.hexdigest() + + +def validate_coverage(reference: pd.DataFrame, candidate: pd.DataFrame) -> None: + keys = ["date", "symbol", "fold", "realised"] + if candidate.duplicated(["date", "symbol"]).any(): + raise ValueError("Comparison has overlapping/duplicate out-of-sample forecasts") + if not np.isfinite(candidate["prediction"].to_numpy(dtype=float)).all(): + raise ValueError("Comparison has nonfinite predictions") + if not reference[keys].reset_index(drop=True).equals(candidate[keys].reset_index(drop=True)): + raise ValueError("Methods do not share the same forecast dates, names, folds and outcomes") + + +def _clean(value): + if isinstance(value, dict): + return {key: _clean(item) for key, item in value.items()} + if isinstance(value, (list, tuple)): + return [_clean(item) for item in value] + if isinstance(value, (np.integer, np.floating)): + value = value.item() + if isinstance(value, float) and not math.isfinite(value): + return None + return value + + +def ranked_weights(panel, scores: pd.DataFrame, top_n: int | None): + """Equal weight top-N scores with symbol ties; no optimizer or size proxy.""" + + def weights(decision, previous): + available = scores.loc[decision].where(panel.universe.loc[decision]).dropna() + if available.empty: + return None + ordered = sorted(available.index, key=lambda name: (-float(available[name]), str(name))) + selected = ordered if top_n is None else ordered[:top_n] + return pd.Series(1 / len(selected), index=selected, dtype=float) + + return weights + + +def run_comparison( + state, + destination: str | Path, + *, + seeds=(11, 29, 42), + cost_multipliers=(1.0, 2.0), + top_n=50, + assurance=None, +): + if ( + not seeds + or len(set(seeds)) != len(seeds) + or any(type(seed) is not int or not 0 <= seed < 2**32 for seed in seeds) + ): + raise ValueError("choose distinct uint32 seeds") + if not cost_multipliers or any(not np.isfinite(x) or x <= 0 for x in cost_multipliers): + raise ValueError("cost multipliers must be finite and positive") + if type(top_n) is not int or top_n < 1: + raise ValueError("top_n must be a positive integer") + provider = str(state.config.get("data", {}).get("provider", "sample")) + synthetic = provider in {"sample", "synthetic", ""} + if not synthetic and not assurance: + raise ValueError("Real-data comparisons need an explicit source assurance record") + dataset, panel = state.dataset, state.panel + output = Path(destination) + output.mkdir(parents=True, exist_ok=True) + config = copy.deepcopy(state.config) + reference = None + cases, forecasts, folds = [], {}, [] + daily: list[dict[str, Any]] = [] + variants = [("ridge", "ridge", dataset), ("lightgbm", "lightgbm", dataset)] + if "log_market_cap" in dataset.features.columns: + reduced = replace( + dataset, + features=dataset.features.drop(columns="log_market_cap"), + feature_names=[name for name in dataset.feature_names if name != "log_market_cap"], + ) + variants.append(("ridge_without_size_feature", "ridge", reduced)) + for name, model_type, inputs in variants: + for seed in seeds: + cfg = copy.deepcopy(config) + cfg.setdefault("project", {})["seed"] = seed + cfg["model"]["seed"] = seed + cfg["model"]["params"] = MODEL_PARAMS[model_type] + wf = AlphaModelPipeline.from_config(inputs, cfg).run(model_type) + predictions = wf.predictions + if reference is None: + reference = predictions + validate_coverage(reference, predictions) + forecasts[name, seed] = predictions + for row in wf.fold_metrics.to_dict(orient="records"): + folds.append({"method": name, "seed": seed, **row}) + assert reference is not None + for name in ("equal_weight", "single_momentum"): + predictions = reference.copy() + if name == "equal_weight": + predictions["prediction"] = 0.0 + else: + if "mom_12_1" not in dataset.features.columns: + raise ValueError("The fixed single-factor baseline requires mom_12_1") + lookup = pd.DataFrame( + { + "date": dataset.dates, + "symbol": dataset.symbols, + "momentum": dataset.features["mom_12_1"].to_numpy(), + } + ) + predictions = predictions.drop(columns="prediction").merge( + lookup, on=["date", "symbol"], how="left", validate="one_to_one" + ) + predictions = predictions.rename(columns={"momentum": "prediction"}) + validate_coverage(reference, predictions) + forecasts[name, None] = predictions + shared_index = None + for (name, seed), predictions in forecasts.items(): + scores = signal_panel(predictions, panel.dates, panel.symbols).ffill() + evaluation = evaluate_predictions( + predictions, + model_name=name, + horizon=int(dataset.metadata["horizon"]), + fold_id=predictions["fold"], + ) + for multiplier in cost_multipliers: + cost = dict(config.get("cost", {})) + for key in ("commission_bps", "slippage_bps", "impact_coeff_bps"): + cost[key] = ( + float( + cost.get( + key, + {"commission_bps": 2, "slippage_bps": 5, "impact_coeff_bps": 10}[key], + ) + ) + * multiplier + ) + bt = BacktestEngine( + panel, + weight_fn=ranked_weights(panel, scores, None if name == "equal_weight" else top_n), + cost_model=cost, + config=BacktestConfig.from_dict(config["backtest"]), + ).run() + if bt.diagnostics["n_skipped_rebalances"]: + raise ValueError( + f"{name} has failed rebalances; comparison cannot silently drop them" + ) + if shared_index is None: + shared_index = bt.returns.index + if not bt.returns.index.equals(shared_index): + raise ValueError("Comparison backtest calendars differ") + cases.append( + { + "method": name, + "seed": seed, + "cost_multiplier": multiplier, + "features": len(dataset.feature_names) + - int(name == "ridge_without_size_feature"), + "rank_ic_mean": evaluation.summary.get("rank_ic_mean"), + "icir": evaluation.summary.get("icir"), + **bt.summary(), + "n_rebalances": bt.diagnostics["n_rebalances"], + "backtest_start": str(bt.returns.index.min().date()), + "backtest_end": str(bt.returns.index.max().date()), + } + ) + assert bt.gross_equity is not None + gross = bt.gross_equity.pct_change().fillna(0.0) + daily.extend( + { + "method": name, + "seed": seed, + "cost_multiplier": multiplier, + "date": str(day.date()), + "net_return": float(bt.returns.loc[day]), + "gross_return": float(gross.loc[day]), + } + for day in bt.returns.index + ) + frame = pd.DataFrame(cases) + aggregates = [] + for (name, multiplier), group in frame.groupby(["method", "cost_multiplier"], sort=True): + aggregates.append( + { + "method": name, + "cost_multiplier": multiplier, + "runs": len(group), + **{ + f"{metric}_{stat}": ( + float(getattr(group[metric], stat)(ddof=0)) + if stat == "std" + else float(group[metric].mean()) + ) + for metric in ("cagr", "sharpe", "max_drawdown", "rank_ic_mean") + for stat in ("mean", "std") + }, + } + ) + summary = _clean( + { + "data_kind": "synthetic" if synthetic else "exploratory_real_market", + "source_assurance": assurance, + "dataset_sha256": dataset_digest(dataset), + "dataset": { + "samples": len(dataset), + "features": dataset.feature_names, + "oos_forecasts": len(reference), + "horizon_sessions": dataset.metadata["horizon"], + "forecast_start": str(reference["date"].min().date()), + "forecast_end": str(reference["date"].max().date()), + }, + "protocol": { + "seeds": list(seeds), + "model_params": MODEL_PARAMS, + "walk_forward": config["model"]["walk_forward"], + "backtest": config["backtest"], + "cost": config["cost"], + "cost_multipliers": list(cost_multipliers), + "portfolio": f"long-only equal-weight top {top_n}; equal-weight baseline holds all forecastable eligible names", + "ties": "score descending then symbol ascending", + "signal_availability": "forecast panel forward-fill only; no backfill", + "ablation": "drop explicit log_market_cap predictor only; earlier size neutralization remains", + "model_selection": "none; all seeds/cost cells reported; failed cells raise", + }, + "environment": { + "python": platform.python_version(), + "numpy": np.__version__, + "pandas": pd.__version__, + "scikit_learn": sklearn.__version__, + }, + "limitations": [ + "Seed variation is not market sampling uncertainty or proof of tradable alpha.", + "Cost inputs are fixed scenarios, not measured execution costs.", + "The equal-weight baseline differs in diversification; its holdings rule is explicit.", + "Source hashes establish identity, not complete historical data quality.", + ], + "aggregates": aggregates, + "cases": cases, + } + ) + (output / "summary.json").write_text( + json.dumps(summary, indent=2, sort_keys=True, allow_nan=False) + "\n", encoding="utf-8" + ) + frame.to_csv(output / "metrics.csv", index=False, lineterminator="\n") + pd.DataFrame(folds).to_csv(output / "folds.csv", index=False, lineterminator="\n") + pd.DataFrame(daily).to_csv(output / "daily_returns.csv", index=False, lineterminator="\n") + (output / "daily_returns.csv.gz").write_bytes( + gzip.compress((output / "daily_returns.csv").read_bytes(), mtime=0) + ) + table = "".join( + f"{html.escape(row['method'])}{row['cost_multiplier']:g}×" + f"{row['runs']}{row['cagr_mean']:.2%}" + f"{row['sharpe_mean']:.3f} ± {row['sharpe_std']:.3f}" + f"{row['max_drawdown_mean']:.2%}" + for row in summary["aggregates"] + ) + notes = list(summary["limitations"]) + (assurance or {}).get("limitations", []) + report = f""" +AlphaForge · Frozen comparison + +

{summary["data_kind"].upper()}

One dataset.
Declared comparisons.

+

{len(dataset):,} samples · {len(dataset.feature_names)} usable features · {len(reference):,} shared forecasts. +Models, the fixed momentum baseline and equal-weight baseline share dates, outcomes, execution lag and cost rules.

+ +

All methods and cost scenarios

{table}
MethodCostsRunsNet CAGRNet Sharpe mean ± seed stdMax drawdown
+

Source identity, exact protocol and all runs · Metrics CSV · Fold results · Daily returns (gzip CSV) · Hashes

+

This is a protocol comparison. Its real-market variant remains exploratory until the declared source limitations are resolved. No test result selects a model or seed for deployment.

""" + (output / "index.html").write_text(report, encoding="utf-8") + names = ("summary.json", "metrics.csv", "folds.csv", "daily_returns.csv.gz", "index.html") + manifest = { + "dataset_sha256": summary["dataset_sha256"], + "files_sha256": { + name: hashlib.sha256((output / name).read_bytes()).hexdigest() for name in names + }, + } + (output / "manifest.json").write_text( + json.dumps(manifest, indent=2, sort_keys=True) + "\n", encoding="utf-8" + ) + return summary + + +def verify_comparison(directory: str | Path): + """Recompute portfolio headlines from exported returns, without fitting models.""" + directory = Path(directory) + manifest = json.loads((directory / "manifest.json").read_text(encoding="utf-8")) + names = {"summary.json", "metrics.csv", "folds.csv", "daily_returns.csv.gz", "index.html"} + if set(manifest["files_sha256"]) != names: + raise ValueError("Unexpected comparison artifact inventory") + for name, expected in manifest["files_sha256"].items(): + if hashlib.sha256((directory / name).read_bytes()).hexdigest() != expected: + raise ValueError(f"Comparison artifact digest mismatch: {name}") + summary = json.loads((directory / "summary.json").read_text(encoding="utf-8")) + daily = pd.read_csv(directory / "daily_returns.csv.gz") + daily["date"] = pd.to_datetime(daily["date"]) + if not np.isfinite(daily[["net_return", "gross_return"]].to_numpy()).all(): + raise ValueError("Nonfinite comparison returns") + grouped = daily.groupby(["method", "seed", "cost_multiplier"], dropna=False, sort=False) + if len(grouped) != len(summary["cases"]): + raise ValueError("Comparison case coverage mismatch") + shared_dates = None + verified_cases = [] + metrics = pd.read_csv(directory / "metrics.csv") + for case in summary["cases"]: + rows = daily[ + (daily["method"] == case["method"]) + & (daily["cost_multiplier"] == case["cost_multiplier"]) + ] + rows = ( + rows[rows["seed"].isna()] + if case["seed"] is None + else rows[rows["seed"] == case["seed"]] + ) + if rows.empty or rows["date"].duplicated().any(): + raise ValueError("Missing or duplicate comparison return dates") + dates = pd.DatetimeIndex(rows["date"]) + if shared_dates is None: + shared_dates = dates + if not dates.equals(shared_dates): + raise ValueError("Comparison return calendars disagree") + actual = performance_stats(pd.Series(rows["net_return"].to_numpy(), index=dates)) + gross = performance_stats(pd.Series(rows["gross_return"].to_numpy(), index=dates)) + stated_csv = metrics[ + (metrics["method"] == case["method"]) + & (metrics["cost_multiplier"] == case["cost_multiplier"]) + ] + stated_csv = ( + stated_csv[stated_csv["seed"].isna()] + if case["seed"] is None + else stated_csv[stated_csv["seed"] == case["seed"]] + ) + if len(stated_csv) != 1: + raise ValueError("Comparison metrics CSV coverage mismatch") + for key in ("cagr", "sharpe", "max_drawdown", "ann_vol", "total_return"): + for title, computed in ((key, actual[key]), ("gross_" + key, gross[key])): + if title not in case: + continue + if ( + not math.isfinite(float(case[title])) + or abs(computed - case[title]) > 1e-8 + or abs(computed - float(stated_csv.iloc[0][title])) > 1e-8 + ): + raise ValueError(f"Comparison {title} disagrees with exported returns") + verified_cases.append( + { + **case, + "cagr": actual["cagr"], + "sharpe": actual["sharpe"], + "max_drawdown": actual["max_drawdown"], + } + ) + verified = pd.DataFrame(verified_cases) + for stated in summary["aggregates"]: + group = verified[ + (verified["method"] == stated["method"]) + & (verified["cost_multiplier"] == stated["cost_multiplier"]) + ] + if len(group) != stated["runs"]: + raise ValueError("Comparison aggregate run count mismatch") + for key in ("cagr", "sharpe", "max_drawdown"): + if ( + abs(float(group[key].mean()) - stated[key + "_mean"]) > 1e-8 + or abs(float(group[key].std(ddof=0)) - stated[key + "_std"]) > 1e-8 + ): + raise ValueError("Comparison aggregates disagree with exported returns") + assert shared_dates is not None + return { + "status": "verified", + "cases": len(verified_cases), + "return_dates_per_case": len(shared_dates), + "dataset_sha256": manifest["dataset_sha256"], + } diff --git a/src/alphaforge/data/assurance.py b/src/alphaforge/data/assurance.py new file mode 100644 index 0000000..9214bdc --- /dev/null +++ b/src/alphaforge/data/assurance.py @@ -0,0 +1,120 @@ +"""Source declarations and byte-level identity for exploratory local market data. + +Hashes establish reproducibility, not the truth of a vendor's financial data. +The bundled mirror builder does not provide complete historical membership or +actual filing availability, so its real-market runs remain exploratory. +""" + +from __future__ import annotations + +import hashlib +import json +from pathlib import Path + +import numpy as np +import pandas as pd + +TABLES = ("prices", "benchmark", "constituents", "fundamentals", "industry", "macro") + + +def file_digest(path: Path) -> str: + digest = hashlib.sha256() + with path.open("rb") as handle: + for chunk in iter(lambda: handle.read(1 << 20), b""): + digest.update(chunk) + return digest.hexdigest() + + +def write_mirror_assurance( + root: Path, sources: dict[str, Path], urls: dict[str, str], lag_days: int +): + if type(lag_days) is not int or lag_days < 0: + raise ValueError("fundamental lag must be a nonnegative integer") + payload = { + "schema_version": 1, + "data_kind": "public_market_mirror", + "source_declarations": { + "universe_history": "current members with entry dates; removed/delisted names incomplete", + "complete_historical_universe": False, + "fundamental_availability": "fiscal period end plus fixed lag, not actual filing date", + "actual_filing_availability": False, + "fundamental_lag_days": lag_days, + "market_capitalization": "unavailable; panel substitutes a dollar-volume proxy", + "actual_market_capitalization": False, + }, + "source_urls": urls, + "raw_sha256": {name: file_digest(path) for name, path in sources.items()}, + "processed_sha256": { + f"{name}.parquet": file_digest(root / f"{name}.parquet") for name in TABLES + }, + "scope": "Identity and declared source properties; not independent economic validation", + } + (root / "DATA_ASSURANCE.json").write_text( + json.dumps(payload, indent=2, sort_keys=True, allow_nan=False) + "\n", encoding="utf-8" + ) + return payload + + +def audit_local_dataset(root: str | Path, start: str, end: str, *, require_complete_sources=False): + root = Path(root) + path = root / "DATA_ASSURANCE.json" + if not path.is_file(): + raise ValueError( + "Missing DATA_ASSURANCE.json; rebuild the mirror or supply a source contract" + ) + assurance = json.loads(path.read_text(encoding="utf-8")) + expected = {f"{name}.parquet" for name in TABLES} + if set(assurance.get("processed_sha256", {})) != expected: + raise ValueError("Data assurance has an incomplete table inventory") + for name, digest in assurance["processed_sha256"].items(): + if file_digest(root / name) != digest: + raise ValueError(f"Source identity changed: {name}; regenerate the assurance record") + prices = pd.read_parquet(root / "prices.parquet", columns=["date", "symbol"]) + benchmark = pd.read_parquet(root / "benchmark.parquet") + dates = pd.DatetimeIndex(pd.to_datetime(prices["date"])).unique().sort_values() + dates = dates[(dates >= pd.Timestamp(start)) & (dates <= pd.Timestamp(end))] + if len(dates) == 0 or pd.Timestamp(start) > pd.Timestamp(end): + raise ValueError("Requested data window has no price observations") + benchmark_dates = pd.DatetimeIndex(pd.to_datetime(benchmark["date"])) + if ( + benchmark_dates.has_duplicates + or not np.isfinite(benchmark["value"].to_numpy(dtype=float)).all() + ): + raise ValueError("Benchmark dates or values are invalid") + missing = dates.difference(benchmark_dates) + if len(missing): + raise ValueError( + f"Benchmark is missing {len(missing)} price sessions; first {missing[0].date()}. " + "Choose a shared window; missing benchmark sessions cannot be forward-filled." + ) + declaration = assurance["source_declarations"] + flags = ( + "complete_historical_universe", + "actual_filing_availability", + "actual_market_capitalization", + ) + if any(type(declaration.get(key)) is not bool for key in flags): + raise ValueError("Source properties require explicit boolean declarations") + limitations = [] + if not declaration["complete_historical_universe"]: + limitations.append( + "Historical membership is incomplete; survivorship/selection bias remains." + ) + if not declaration["actual_filing_availability"]: + limitations.append( + "Financial availability is an assumed lag, not actual publication history." + ) + if not declaration["actual_market_capitalization"]: + limitations.append("Size uses a dollar-volume proxy, not measured market capitalization.") + if require_complete_sources and limitations: + raise ValueError("Complete-source validation failed: " + " ".join(limitations)) + return { + **assurance, + "status": "exploratory" if limitations else "source_contract_checked", + "effective_start": str(dates.min().date()), + "effective_end": str(dates.max().date()), + "requested_start": start, + "requested_end": end, + "price_sessions": len(dates), + "limitations": limitations, + } diff --git a/src/alphaforge/pipeline.py b/src/alphaforge/pipeline.py index 4b196a0..3276d57 100644 --- a/src/alphaforge/pipeline.py +++ b/src/alphaforge/pipeline.py @@ -339,8 +339,12 @@ def _notes(state: ResearchState) -> list[str]: q = state.config.get("data", {}) if q.get("survivorship_bias_disclaimer"): notes.append( - "Survivorship bias disclaimer is ON: the sample provider supplies point-in-time membership only." + "Survivorship bias: source coverage is incomplete when current-member datasets omit historical removals." ) + assurance = q.get("assurance", {}) + if assurance: + notes.append(f"Source contract status: {assurance.get('status', 'unknown')}.") + notes.extend(assurance.get("limitations", [])) if state.backtest is not None: diag = state.backtest.diagnostics notes.append( diff --git a/tests/unit/test_research_comparison.py b/tests/unit/test_research_comparison.py new file mode 100644 index 0000000..1cecd1e --- /dev/null +++ b/tests/unit/test_research_comparison.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +import hashlib +import json +import shutil +from pathlib import Path +from types import SimpleNamespace + +import pandas as pd +import pytest + +from alphaforge.comparison import ranked_weights, validate_coverage, verify_comparison +from alphaforge.data.assurance import audit_local_dataset, write_mirror_assurance + + +def source_bundle(root): + dates = pd.to_datetime(["2020-01-02", "2020-01-03"]) + for name in ("constituents", "fundamentals", "industry", "macro"): + pd.DataFrame({"unused": []}).to_parquet(root / f"{name}.parquet") + pd.DataFrame({"date": dates, "symbol": ["A", "A"]}).to_parquet(root / "prices.parquet") + pd.DataFrame({"date": dates, "value": [0.01, -0.02]}).to_parquet(root / "benchmark.parquet") + raw = root / "source.txt" + raw.write_text("fixture") + write_mirror_assurance(root, {"raw": raw}, {"raw": "https://example.test/fixture"}, 90) + + +def test_incomplete_real_sources_are_exploratory_and_strict_mode_rejects(tmp_path): + source_bundle(tmp_path) + result = audit_local_dataset(tmp_path, "2020-01-01", "2020-01-03") + assert result["status"] == "exploratory" + assert len(result["limitations"]) == 3 + with pytest.raises(ValueError, match="Complete-source validation failed"): + audit_local_dataset(tmp_path, "2020-01-01", "2020-01-03", require_complete_sources=True) + + +def test_changed_source_bytes_and_missing_benchmark_dates_fail(tmp_path): + source_bundle(tmp_path) + pd.DataFrame({"date": pd.to_datetime(["2020-01-02"]), "value": [0.01]}).to_parquet( + tmp_path / "benchmark.parquet" + ) + with pytest.raises(ValueError, match="Source identity changed"): + audit_local_dataset(tmp_path, "2020-01-01", "2020-01-03") + raw = tmp_path / "source.txt" + write_mirror_assurance(tmp_path, {"raw": raw}, {"raw": "https://example.test/fixture"}, 90) + with pytest.raises(ValueError, match="missing 1 price sessions"): + audit_local_dataset(tmp_path, "2020-01-01", "2020-01-03") + + +def test_coverage_rejects_a_method_that_omits_a_hard_forecast(): + frame = pd.DataFrame( + { + "date": pd.to_datetime(["2020-01-02", "2020-01-02"]), + "symbol": ["A", "B"], + "fold": [0, 0], + "realised": [0.1, -0.1], + "prediction": [0.2, -0.2], + } + ) + validate_coverage(frame, frame.copy()) + with pytest.raises(ValueError, match="same forecast"): + validate_coverage(frame, frame.iloc[:1]) + with pytest.raises(ValueError, match="overlapping/duplicate"): + validate_coverage(frame, pd.concat([frame, frame.iloc[:1]])) + + +def test_top_names_use_only_eligible_scores_and_symbol_ties(): + day = pd.Timestamp("2020-01-02") + scores = pd.DataFrame([[100.0, 0.5, 0.5, -1.0]], index=[day], columns=["future", "B", "A", "C"]) + panel = SimpleNamespace( + universe=pd.DataFrame([[False, True, True, True]], index=[day], columns=scores.columns) + ) + weights = ranked_weights(panel, scores, 1)(day, None) + assert weights.to_dict() == {"A": 1.0} + all_weights = ranked_weights(panel, scores, None)(day, None) + assert set(all_weights.index) == {"A", "B", "C"} + assert all_weights.sum() == pytest.approx(1.0) + + +def test_saved_return_evidence_detects_rehashed_financial_headline(tmp_path): + saved = Path(__file__).parents[2] / "docs/experiments/real-sp500" + destination = tmp_path / "comparison" + shutil.copytree(saved, destination) + assert verify_comparison(destination)["cases"] == 22 + path = destination / "summary.json" + summary = json.loads(path.read_text()) + summary["cases"][0]["cagr"] += 0.1 + path.write_text(json.dumps(summary)) + manifest_path = destination / "manifest.json" + manifest = json.loads(manifest_path.read_text()) + manifest["files_sha256"]["summary.json"] = hashlib.sha256(path.read_bytes()).hexdigest() + manifest_path.write_text(json.dumps(manifest)) + with pytest.raises(ValueError, match="cagr disagrees"): + verify_comparison(destination) From 2634df4fff86971909a7b26cab382b219e07b0f0 Mon Sep 17 00:00:00 2001 From: dev-belly Date: Wed, 14 Oct 2026 06:19:28 +0800 Subject: [PATCH 2/2] fix: preserve frozen evidence and validate accounting and source contracts --- .gitattributes | 2 + docs/modules/backtesting.md | 17 ++ docs/research-comparison.md | 13 +- scripts/run_real_research.py | 2 + src/alphaforge/backtest/engine.py | 59 ++++-- src/alphaforge/comparison.py | 61 +++++- src/alphaforge/execution/broker.py | 32 ++- src/alphaforge/execution/costs.py | 25 ++- src/alphaforge/utils/math_utils.py | 18 +- tests/unit/test_accounting_limits.py | 206 ++++++++++++++++++++ tests/unit/test_real_research_entrypoint.py | 40 ++++ tests/unit/test_research_comparison.py | 158 +++++++++++++++ 12 files changed, 595 insertions(+), 38 deletions(-) create mode 100644 .gitattributes create mode 100644 tests/unit/test_accounting_limits.py create mode 100644 tests/unit/test_real_research_entrypoint.py diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..11d6b09 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Frozen evidence is hashed as bytes; checkouts must not rewrite line endings. +docs/experiments/real-sp500/** -text diff --git a/docs/modules/backtesting.md b/docs/modules/backtesting.md index 6213efc..da371f6 100644 --- a/docs/modules/backtesting.md +++ b/docs/modules/backtesting.md @@ -70,6 +70,18 @@ assumptions fail before a run rather than crediting NAV. The broker's `allow_fractional_shares` accepts booleans or explicit `"true"`/`"false"` strings; `"false"` enforces integer fills. Minimum trade value is finite and nonnegative. +Large finite notionals and basis-point rates are scaled before multiplying so +a representable fee does not overflow only because of the calculation order. +Nonfinite trade values, unrepresentable cost components or totals, and fees +greater than the available NAV raise `ValueError`. The engine applies the same +fee boundary to custom brokers and forced liquidation. Fees equal to NAV are +allowed: they produce a zero-capital bankruptcy, with zero subsequent returns. +That boundary is absorbing; a later price recovery cannot recreate capital. +Negative or nonfinite NAV and nonfinite reconstructed gross NAV are rejected. +Finite positive NAV that rounds to a -100% daily return is also rejected, as +the exported float return cannot represent that remaining wealth. Execution +rejects share quantities outside the finite float range. + > The benchmark is stored as a daily *return* series (the ETL layer converts > provider price levels exactly once). `ensure_returns` makes that contract > explicit: a return series is never double-differenced (an earlier bug turned a @@ -93,6 +105,11 @@ implementations differ: * Annualisation is **inferred from the index**, never assumed, and reported alongside the numbers that depend on it. +Compounded wealth rejects infinite returns, returns below -100%, and a curve +outside the finite float range instead of treating them as a successful run or +a fabricated wipeout. A return of exactly -100% legally reduces wealth to zero. +Missing returns retain the existing flat-period convention. + ## Output — `BacktestResult` `equity`, `returns`, end-of-day `weights`, rebalance-date `target_weights`, diff --git a/docs/research-comparison.md b/docs/research-comparison.md index 7870af2..e877401 100644 --- a/docs/research-comparison.md +++ b/docs/research-comparison.md @@ -33,7 +33,7 @@ verified. These limits are recorded in the downloadable JSON and report banner. `--require-complete-sources` rejects the bundled mirror's incomplete source contract rather than treating real prices as proof of point-in-time correctness. -The forecast window is March 2014–October 2019; portfolio results cover January +The forecast window is January 2014–October 2019; portfolio results cover January 2015–October 2019. The dataset ends November 14, 2019, where the benchmark source ends. Benchmark coverage is checked for every price session. Forecast failures, nonfinite predictions and differences in forecast coverage cannot be silently @@ -61,6 +61,17 @@ manifest. The verifier recomputes portfolio headlines and seed aggregates from the saved return CSV without refitting models. Repeat with the recorded library versions; vendor mirror updates can change source hashes. +Run real-data research commands from the repository root so the audited local +tables are the same tables that the provider reads. `run_real_research.py` +rejects a different working directory before loading data; `--help` remains +available from any directory. + +The published bundle is a byte-hashed record. Its `.gitattributes` rule disables +Git text conversion for `docs/experiments/real-sp500/`, preserving the original +CSV, JSON, HTML and gzip bytes with both LF and CRLF checkout settings. Do not +rewrite the manifest to accommodate a changed checkout: the verifier continues +to reject altered bytes and independently checks the financial headlines. + Real runs default to `research/real_runs` and comparisons to `research/comparison`. They are separate from the published synthetic `research/case_study.md` and its JSON; that case retains its synthetic identity. diff --git a/scripts/run_real_research.py b/scripts/run_real_research.py index 9cd1619..c99e9b0 100644 --- a/scripts/run_real_research.py +++ b/scripts/run_real_research.py @@ -152,6 +152,8 @@ def main(argv: list[str] | None = None) -> int: ap.add_argument("--no-json", action="store_true", help="skip writing case_study_data.json") args = ap.parse_args(argv) + if Path.cwd().resolve() != REPO_ROOT.resolve(): + raise SystemExit(f"Run real-data research from the repository root: {REPO_ROOT}") _require_dataset() overrides: dict = {} diff --git a/src/alphaforge/backtest/engine.py b/src/alphaforge/backtest/engine.py index 2adb077..28d6bf2 100644 --- a/src/alphaforge/backtest/engine.py +++ b/src/alphaforge/backtest/engine.py @@ -40,13 +40,31 @@ from alphaforge.features.panel import MarketPanel from alphaforge.utils.config import config_boolean, config_integer, config_number from alphaforge.utils.logging import Timer, get_logger -from alphaforge.utils.math_utils import ensure_returns +from alphaforge.utils.math_utils import compound, ensure_returns log = get_logger("backtest.engine") WeightFn = Callable[[pd.Timestamp, pd.Series | None], pd.Series | None] +def _checked_nav(nav: float) -> float: + if not np.isfinite(nav) or nav < 0: + raise ValueError("NAV must be finite and nonnegative") + return nav + + +def _checked_cost(cost: float, nav: float) -> None: + if not np.isfinite(cost) or cost < 0 or cost > nav: + raise ValueError("Transaction cost must be finite, nonnegative and cannot exceed NAV") + + +def _daily_return(nav: float, previous: float) -> float: + value = nav / previous - 1.0 if previous > 0 else 0.0 + if not np.isfinite(value) or (nav > 0 and value == -1.0): + raise ValueError("Daily returns must be finite and representable") + return value + + @dataclass class BacktestConfig: """Backtest mechanics - everything that is not alpha.""" @@ -276,6 +294,14 @@ def run(self) -> BacktestResult: raw_px = panel.close.loc[date] mark_px = valuation_px.loc[date] held = shares.abs() > 1e-12 + valued = shares != 0 + if not np.isfinite(shares.to_numpy()).all(): + raise ValueError("Held shares must be finite") + if not np.isfinite(mark_px[valued].to_numpy()).all() or (mark_px[valued] < 0).any(): + raise ValueError("Held prices must be finite and nonnegative") + with np.errstate(over="ignore", invalid="ignore"): + holdings_value = float((shares[valued] * mark_px[valued]).sum()) + nav_t = _checked_nav(holdings_value + cash) # -- 1. force-liquidate names that have gone dark ----------- dead = held & (stale.loc[date] >= cfg.delist_grace_days) @@ -285,18 +311,17 @@ def run(self) -> BacktestResult: cost = self.cost_model.estimate( notional, float(adv.loc[date].reindex(symbols[dead]).median() or 0.0) ).total + _checked_cost(cost, nav_t) shares[dead] = 0.0 cash += proceeds - cost cost_rows[date] = cost_rows.get(date, 0.0) + cost log.debug(f"{date.date()}: liquidated {int(dead.sum())} delisted names") # -- 2. mark to market on the pre-trade book ---------------- - holdings_value = float( - np.nansum(shares.to_numpy(dtype=float) * mark_px.to_numpy(dtype=float)) - ) - nav_t = holdings_value + cash - if prev_nav > 0: - rets[date] = nav_t / prev_nav - 1.0 + with np.errstate(over="ignore", invalid="ignore"): + holdings_value = float((shares[valued] * mark_px[valued]).sum()) + nav_t = _checked_nav(holdings_value + cash) + rets[date] = _daily_return(nav_t, prev_nav) equity[date] = nav_t # -- 3. execute anything signaled `lag` sessions ago -------- @@ -313,6 +338,7 @@ def run(self) -> BacktestResult: prices=raw_px, adv_value=adv.loc[date], ) + _checked_cost(result.cost_total, nav_t) if not result.trades.empty: frame = result.trades.copy() frame.insert(0, "date", date) @@ -331,24 +357,32 @@ def run(self) -> BacktestResult: / raw_px[tradable].to_numpy(dtype=float) ) new_shares[~tradable] = shares[~tradable] - shares = new_shares.replace([np.inf, -np.inf], np.nan).fillna(0.0) + if not np.isfinite(new_shares.to_numpy()).all(): + raise ValueError("Post-trade shares must be finite") + shares = new_shares cash = nav_after - float( np.nansum(shares.to_numpy(dtype=float) * mark_px.to_numpy(dtype=float)) ) + if not np.isfinite(cash): + raise ValueError("Post-trade cash must be finite") nav_t = nav_after # The day's return must be earned on the *post-cost* book, so that # transaction costs actually depress the return series and the equity # curve stays consistent with it. Without this, costs are deducted # from NAV (step 2 above used the pre-trade book) but never reflected # in `returns`, which inflates the net Sharpe/CAGR. - if prev_nav > 0: - rets[date] = nav_after / prev_nav - 1.0 + rets[date] = _daily_return(nav_after, prev_nav) n_rebalances += 1 # -- 4. record end-of-day book ------------------------------ if nav_t > 0: held_w = (shares * mark_px) / nav_t weight_rows[date] = held_w + else: + # Bankruptcy is legal but absorbing: a later price recovery + # must not resurrect positions with no remaining capital. + shares[:] = 0.0 + cash = 0.0 equity[date] = nav_t prev_nav = nav_t @@ -442,7 +476,10 @@ def run(self) -> BacktestResult: if bench is not None: metrics["gross_benchmark_cagr"] = gross_metrics.get("benchmark_cagr", float("nan")) # Pre-cost (gross) equity curve for the cost-drag overlay in the report. - gross_equity = (1.0 + gross_returns).cumprod() * float(cfg.initial_capital) + with np.errstate(over="ignore", invalid="ignore"): + gross_equity = compound(gross_returns) * float(cfg.initial_capital) + if not np.isfinite(gross_equity.to_numpy()).all(): + raise ValueError("Gross NAV must be finite") log.info( f"Backtest {returns_s.index[0].date()} -> {returns_s.index[-1].date()} | " diff --git a/src/alphaforge/comparison.py b/src/alphaforge/comparison.py index 64549cd..6f43fd5 100644 --- a/src/alphaforge/comparison.py +++ b/src/alphaforge/comparison.py @@ -330,6 +330,11 @@ def run_comparison( return summary +def _comparison_case_key(row): + seed = None if pd.isna(row["seed"]) else row["seed"] + return row["method"], seed, row["cost_multiplier"] + + def verify_comparison(directory: str | Path): """Recompute portfolio headlines from exported returns, without fitting models.""" directory = Path(directory) @@ -341,16 +346,32 @@ def verify_comparison(directory: str | Path): if hashlib.sha256((directory / name).read_bytes()).hexdigest() != expected: raise ValueError(f"Comparison artifact digest mismatch: {name}") summary = json.loads((directory / "summary.json").read_text(encoding="utf-8")) + dataset_sha256 = manifest.get("dataset_sha256") + if not isinstance(dataset_sha256, str) or summary.get("dataset_sha256") != dataset_sha256: + raise ValueError("Comparison dataset identity mismatch") daily = pd.read_csv(directory / "daily_returns.csv.gz") daily["date"] = pd.to_datetime(daily["date"]) if not np.isfinite(daily[["net_return", "gross_return"]].to_numpy()).all(): raise ValueError("Nonfinite comparison returns") grouped = daily.groupby(["method", "seed", "cost_multiplier"], dropna=False, sort=False) - if len(grouped) != len(summary["cases"]): + case_keys = [_comparison_case_key(case) for case in summary["cases"]] + daily_keys = { + _comparison_case_key(row) + for row in daily[["method", "seed", "cost_multiplier"]].drop_duplicates().to_dict("records") + } + if ( + not case_keys + or len(set(case_keys)) != len(case_keys) + or set(case_keys) != daily_keys + or len(grouped) != len(case_keys) + ): raise ValueError("Comparison case coverage mismatch") shared_dates = None verified_cases = [] metrics = pd.read_csv(directory / "metrics.csv") + metric_keys = [_comparison_case_key(row) for row in metrics.to_dict("records")] + if len(set(metric_keys)) != len(metric_keys) or set(metric_keys) != set(case_keys): + raise ValueError("Comparison metrics CSV coverage mismatch") for case in summary["cases"]: rows = daily[ (daily["method"] == case["method"]) @@ -383,12 +404,21 @@ def verify_comparison(directory: str | Path): raise ValueError("Comparison metrics CSV coverage mismatch") for key in ("cagr", "sharpe", "max_drawdown", "ann_vol", "total_return"): for title, computed in ((key, actual[key]), ("gross_" + key, gross[key])): - if title not in case: - continue + if title not in case or title not in metrics.columns: + raise ValueError(f"Missing required comparison headline: {title}") + try: + computed_value = float(computed) + stated_value = float(case[title]) + csv_value = float(stated_csv.iloc[0][title]) + except (TypeError, ValueError) as exc: + raise ValueError(f"Comparison {title} must be finite") from exc + if not all( + math.isfinite(value) for value in (computed_value, stated_value, csv_value) + ): + raise ValueError(f"Comparison {title} must be finite") if ( - not math.isfinite(float(case[title])) - or abs(computed - case[title]) > 1e-8 - or abs(computed - float(stated_csv.iloc[0][title])) > 1e-8 + abs(computed_value - stated_value) > 1e-8 + or abs(computed_value - csv_value) > 1e-8 ): raise ValueError(f"Comparison {title} disagrees with exported returns") verified_cases.append( @@ -400,6 +430,13 @@ def verify_comparison(directory: str | Path): } ) verified = pd.DataFrame(verified_cases) + aggregate_keys = [(row["method"], row["cost_multiplier"]) for row in summary["aggregates"]] + expected_aggregate_keys = {(method, multiplier) for method, _seed, multiplier in case_keys} + if ( + len(set(aggregate_keys)) != len(aggregate_keys) + or set(aggregate_keys) != expected_aggregate_keys + ): + raise ValueError("Comparison aggregate coverage mismatch") for stated in summary["aggregates"]: group = verified[ (verified["method"] == stated["method"]) @@ -408,10 +445,16 @@ def verify_comparison(directory: str | Path): if len(group) != stated["runs"]: raise ValueError("Comparison aggregate run count mismatch") for key in ("cagr", "sharpe", "max_drawdown"): - if ( - abs(float(group[key].mean()) - stated[key + "_mean"]) > 1e-8 - or abs(float(group[key].std(ddof=0)) - stated[key + "_std"]) > 1e-8 + try: + actual_mean, actual_std = float(group[key].mean()), float(group[key].std(ddof=0)) + stated_mean, stated_std = float(stated[key + "_mean"]), float(stated[key + "_std"]) + except (KeyError, TypeError, ValueError) as exc: + raise ValueError("Comparison aggregates must be finite") from exc + if not all( + math.isfinite(value) for value in (actual_mean, actual_std, stated_mean, stated_std) ): + raise ValueError("Comparison aggregates must be finite") + if abs(actual_mean - stated_mean) > 1e-8 or abs(actual_std - stated_std) > 1e-8: raise ValueError("Comparison aggregates disagree with exported returns") assert shared_dates is not None return { diff --git a/src/alphaforge/execution/broker.py b/src/alphaforge/execution/broker.py index 4ef0862..e1fd21b 100644 --- a/src/alphaforge/execution/broker.py +++ b/src/alphaforge/execution/broker.py @@ -112,6 +112,9 @@ def rebalance( Average daily traded value, used for participation and impact. """ cfg = self.config + nav = float(nav) + if not np.isfinite(nav) or nav < 0: + raise ValueError("NAV must be finite and nonnegative") target = target_weights.astype(float) current = ( current_weights.reindex(target.index).fillna(0.0).astype(float) @@ -119,6 +122,8 @@ def rebalance( else pd.Series(0.0, index=target.index) ) current = current.reindex(target.index).fillna(0.0) + if not np.isfinite(target.to_numpy()).all() or not np.isfinite(current.to_numpy()).all(): + raise ValueError("Target and current weights must be finite") px = prices.reindex(target.index) # Cash drag: the analyser wants to see it, but it is not an order. @@ -170,6 +175,13 @@ def rebalance( ) costs = self.cost_model.estimate_frame(active, adv) + with np.errstate(over="ignore"): + cost_total = float(costs["cost_total"].sum()) + traded_notional = float(active.abs().sum()) + if not np.isfinite(cost_total) or cost_total < 0 or cost_total > nav: + raise ValueError("Transaction cost must be finite, nonnegative and cannot exceed NAV") + if not np.isfinite(traded_notional): + raise ValueError("Traded notional must be finite") participation = [ self.cost_model.participation(v, a) for v, a in zip( @@ -183,6 +195,13 @@ def rebalance( ) ] + with np.errstate(over="ignore", divide="ignore", invalid="ignore"): + traded_shares = active.to_numpy(dtype=float) / px.reindex(active.index).to_numpy( + dtype=float + ) + if not np.isfinite(traded_shares).all(): + raise ValueError("Traded shares must be finite and representable") + trades = pd.DataFrame( { "side": np.where(active.to_numpy(dtype=float) > 0, "BUY", "SELL"), @@ -191,24 +210,25 @@ def rebalance( "target_weight": effective_target.reindex(active.index).to_numpy(dtype=float), "trade_weight": active.to_numpy(dtype=float) / float(nav), "trade_value": active.to_numpy(dtype=float), - "shares": active.to_numpy(dtype=float) - / px.reindex(active.index).to_numpy(dtype=float), + "shares": traded_shares, "participation": participation, "days_to_complete": days_needed, **{k: costs[k].to_numpy(dtype=float) for k in costs.columns}, }, index=active.index, ) - cost_total = float(trades["cost_total"].sum()) - traded_notional = float(trades["trade_value"].abs().sum()) - # Post-trade book: target weights, with costs taken out of NAV. The # weight vector is what the portfolio holds; the cash deduction shows up # in NAV, so weights are re-expressed on the smaller NAV. realised_weights = current.add(trade_weight, fill_value=0.0) nav_after = float(nav) - cost_total if nav_after > 0 and abs(float(nav)) > 0: - realised_weights = realised_weights * (float(nav) / nav_after) + with np.errstate(over="ignore", invalid="ignore"): + realised_weights = realised_weights * (float(nav) / nav_after) + if not np.isfinite(realised_weights.to_numpy()).all(): + raise ValueError("Post-cost weights must be finite") + elif nav_after == 0: + realised_weights = pd.Series(0.0, index=current.index) log.debug( f"rebalance: {len(trades)} orders | turnover {trades['trade_weight'].abs().sum():.3f} | " diff --git a/src/alphaforge/execution/costs.py b/src/alphaforge/execution/costs.py index fccb6eb..0b10c40 100644 --- a/src/alphaforge/execution/costs.py +++ b/src/alphaforge/execution/costs.py @@ -101,7 +101,17 @@ class TradeCost: @property def total(self) -> float: - return self.commission + self.slippage + self.impact + total = self.commission + self.slippage + self.impact + if not np.isfinite([self.commission, self.slippage, self.impact, total]).all(): + raise ValueError("Transaction cost components and total must be finite") + if min(self.commission, self.slippage, self.impact) < 0: + raise ValueError("Transaction cost components must be nonnegative") + return total + + +def _currency_cost(value: float, bps: float) -> float: + """Scale the larger factor first, avoiding an unnecessary intermediate overflow.""" + return (value / 10_000.0) * bps if value >= bps else value * (bps / 10_000.0) class CostModel: @@ -128,13 +138,18 @@ def estimate(self, trade_value: float, adv_value: float) -> TradeCost: """Cost of trading ``trade_value`` (signed) against ``adv_value`` of ADV.""" cfg = self.config value = abs(float(trade_value)) + if not np.isfinite(value): + raise ValueError("trade_value must be finite") if value <= 0: return TradeCost(0.0, 0.0, 0.0) participation = self.participation(value, adv_value) - commission = max(value * cfg.commission_bps / 10_000.0, cfg.min_commission) - slippage = value * cfg.slippage_bps / 10_000.0 - impact = value * self.impact_bps(participation) / 10_000.0 - return TradeCost(commission=commission, slippage=slippage, impact=impact) + commission = max(_currency_cost(value, cfg.commission_bps), cfg.min_commission) + slippage = _currency_cost(value, cfg.slippage_bps) + impact = _currency_cost(value, self.impact_bps(participation)) + cost = TradeCost(commission=commission, slippage=slippage, impact=impact) + # Validate even callers that only inspect one of the returned components. + _ = cost.total + return cost def estimate_frame(self, trade_values: pd.Series, adv_values: pd.Series) -> pd.DataFrame: """Vectorised cost estimate; returns a frame of currency costs.""" diff --git a/src/alphaforge/utils/math_utils.py b/src/alphaforge/utils/math_utils.py index 5e2704b..b0eb5d2 100644 --- a/src/alphaforge/utils/math_utils.py +++ b/src/alphaforge/utils/math_utils.py @@ -214,18 +214,24 @@ def compound(returns: pd.Series) -> pd.Series: long horizons — a naive ``cumprod`` silently leaves the float64 range (overflowing to ``inf`` or underflowing to ``0``) on multi-thousand-session backtests, which then poisons every downstream statistic (CAGR, drawdown, - Sharpe) with ``nan`` instead of a number. + Sharpe) with ``nan`` instead of a number. Nonfinite returns, losses below + -100%, and wealth outside the finite float range are rejected. A -100% + return is a legal, absorbing zero-wealth boundary; missing returns retain + the existing flat-period convention. The input must be *returns*, not return spreads. See :func:`alphaforge.backtest.metrics._relative_stats` for the trap this guards. """ r = returns.fillna(0.0).to_numpy(dtype=float) - with np.errstate(divide="ignore", invalid="ignore"): + if not np.isfinite(r).all() or (r < -1.0).any(): + raise ValueError("returns must be finite and at least -1") + with np.errstate(divide="ignore", invalid="ignore", over="ignore"): log_growth = np.log1p(r) - # r <= -1 means the position is wiped out; clamp to zero wealth rather than - # propagating inf/nan through the whole curve. - log_growth = np.where(np.isfinite(log_growth), log_growth, -np.inf) - return pd.Series(np.exp(np.cumsum(log_growth)), index=returns.index, name=returns.name) + wealth = np.exp(np.cumsum(log_growth)) + wiped_out = np.logical_or.accumulate(r == -1.0) + if not np.isfinite(wealth).all() or ((wealth == 0.0) & ~wiped_out).any(): + raise ValueError("Compounded wealth must be finite and representable") + return pd.Series(wealth, index=returns.index, name=returns.name) def max_drawdown(returns: pd.Series) -> tuple[float, pd.Timestamp | None]: diff --git a/tests/unit/test_accounting_limits.py b/tests/unit/test_accounting_limits.py new file mode 100644 index 0000000..9bcd2dc --- /dev/null +++ b/tests/unit/test_accounting_limits.py @@ -0,0 +1,206 @@ +"""Numerical boundaries must fail clearly without corrupting accounting.""" + +from __future__ import annotations + +import numpy as np +import pandas as pd +import pytest + +from alphaforge.backtest.engine import BacktestEngine +from alphaforge.execution.broker import BrokerSimulator +from alphaforge.execution.costs import CostModel, TradeCost +from alphaforge.features.panel import MarketPanel +from alphaforge.utils.math_utils import compound + + +def _costs(**kwargs): + return {"commission_bps": 0, "slippage_bps": 0, "impact_coeff_bps": 0, **kwargs} + + +@pytest.mark.parametrize("component", ["commission_bps", "slippage_bps", "impact_coeff_bps"]) +def test_cost_scaling_keeps_a_representable_large_result(component): + model = CostModel(_costs(**{component: 10_000}, participation_cap=1)) + assert model.estimate(1e308, 1e308).total == pytest.approx(1e308) + + +@pytest.mark.parametrize( + "settings", + [ + {"commission_bps": 20_000}, + {"slippage_bps": 20_000}, + {"impact_coeff_bps": 20_000, "participation_cap": 1}, + {"commission_bps": 10_000, "slippage_bps": 10_000}, + ], +) +def test_costs_outside_float_range_are_rejected(settings): + with pytest.raises(ValueError, match="finite"): + CostModel(_costs(**settings)).estimate(1e308, 1e308) + + +@pytest.mark.parametrize("value", [np.inf, -np.inf, np.nan]) +def test_nonfinite_trade_values_are_rejected(value): + with pytest.raises(ValueError, match="trade_value"): + CostModel().estimate(value, 1e6) + + +def test_broker_rejects_fees_larger_than_available_nav(): + broker = BrokerSimulator(_costs(commission_bps=20_000)) + with pytest.raises(ValueError, match="cost.*NAV"): + broker.rebalance(pd.Series({"A": 1.0}), None, 100.0, pd.Series({"A": 10.0})) + + +def test_broker_allows_fees_that_exactly_exhaust_nav(): + result = BrokerSimulator(_costs(commission_bps=10_000)).rebalance( + pd.Series({"A": 1.0}), None, 100.0, pd.Series({"A": 10.0}) + ) + assert result.cost_total == 100.0 + assert np.isfinite(result.weights).all() + + +def test_broker_keeps_representable_short_weights_without_intermediate_overflow(): + result = BrokerSimulator(_costs()).rebalance( + pd.Series({"A": -1.9}), + pd.Series({"A": -2.0}), + 1e308, + pd.Series({"A": 1.0}), + pd.Series({"A": 1e308}), + ) + assert result.weights.loc["A"] == pytest.approx(-1.9) + + +def test_broker_rejects_unrepresentable_traded_share_quantity(): + with pytest.raises(ValueError, match="Traded shares.*representable"): + BrokerSimulator(_costs()).rebalance( + pd.Series({"A": 1.0}), + None, + 1.0, + pd.Series({"A": np.nextafter(0.0, 1.0)}), + ) + + +@pytest.mark.parametrize("nav", [np.inf, -np.inf, np.nan, -1.0]) +def test_broker_rejects_invalid_nav(nav): + with pytest.raises(ValueError, match="NAV"): + BrokerSimulator(_costs()).rebalance( + pd.Series({"A": 1.0}), None, nav, pd.Series({"A": 10.0}) + ) + + +@pytest.mark.parametrize("value", [np.inf, -np.inf]) +def test_compound_rejects_nonfinite_returns_instead_of_a_fake_wipeout(value): + with pytest.raises(ValueError, match="returns"): + compound(pd.Series([0.1, value])) + + +def test_compound_rejects_losses_below_total_capital(): + with pytest.raises(ValueError, match="returns"): + compound(pd.Series([0.1, -1.1])) + + +def test_compound_rejects_unrepresentable_wealth(): + with pytest.raises(ValueError, match="wealth"): + compound(pd.Series([1e200, 1e200])) + + +def test_compound_rejects_underflow_instead_of_a_zero_curve_that_resurrects(): + with pytest.raises(ValueError, match="wealth.*representable"): + compound(pd.Series([-0.999999] * 60 + [1e308, 1e308])) + + +def test_compound_keeps_zero_wealth_after_a_legal_total_loss(): + assert compound(pd.Series([0.1, -1.0, 0.1])).tolist() == pytest.approx([1.1, 0.0, 0.0]) + + +def _panel(close_values): + dates = pd.bdate_range("2024-01-01", periods=len(close_values)) + close = pd.DataFrame({"A": close_values}, index=dates) + volume = pd.DataFrame(1e6, index=dates, columns=["A"]) + return MarketPanel( + dates=dates, + close=close, + raw_close=close.copy(), + returns=close.pct_change(fill_method=None), + volume=volume, + dollar_volume=close * volume, + market_cap=pd.DataFrame(1e9, index=dates, columns=["A"]), + universe=close.notna(), + industry=pd.DataFrame("Other", index=dates, columns=["A"]), + ) + + +def _engine(panel, *, target=1.0, initial_capital=100.0, cost_model=None, allow_short=False): + return BacktestEngine( + panel, + weight_fn=lambda _date, _weights: pd.Series({"A": target}), + cost_model=_costs() if cost_model is None else cost_model, + config={ + "rebalance": "daily", + "min_history_days": 0, + "initial_capital": initial_capital, + "allow_short": allow_short, + }, + ) + + +def test_engine_rejects_an_extreme_finite_fee_with_a_clear_value_error(): + with pytest.raises(ValueError, match="cost.*NAV"): + _engine(_panel([10.0] * 8), cost_model=_costs(commission_bps=1e308)).run() + + +@pytest.mark.parametrize("fee", [-1.0, np.inf, 101.0]) +def test_custom_broker_cannot_bypass_the_engine_fee_boundary(fee): + class FixedFeeBroker(BrokerSimulator): + def rebalance(self, **kwargs): + result = super().rebalance(**kwargs) + result.cost_total = fee + return result + + engine = _engine(_panel([10.0] * 8)) + engine.broker = FixedFeeBroker(_costs()) + with pytest.raises(ValueError, match="cost.*NAV"): + engine.run() + + +def test_forced_liquidation_cannot_charge_unpayable_fees(): + class LiquidationCostModel(CostModel): + calls = 0 + + def estimate(self, trade_value, adv_value): + self.calls += 1 + return TradeCost(0.0 if self.calls == 1 else 101.0, 0.0, 0.0) + + engine = _engine(_panel([10.0, 10.0, np.nan, np.nan, np.nan])) + engine.cost_model = LiquidationCostModel(_costs()) + engine.broker = BrokerSimulator(engine.cost_model) + engine.config.delist_grace_days = 1 + with pytest.raises(ValueError, match="cost.*NAV"): + engine.run() + + +def test_engine_rejects_mark_to_market_nav_overflow(): + with pytest.raises(ValueError, match="NAV.*finite"): + _engine(_panel([10.0, 10.0, 1000.0, 1000.0, 1000.0]), initial_capital=1e308).run() + + +def test_engine_rejects_negative_nav(): + with pytest.raises(ValueError, match="NAV.*nonnegative"): + _engine(_panel([10.0, 10.0, 30.0, 30.0, 30.0]), target=-1.0, allow_short=True).run() + + +def test_engine_preserves_zero_nav_as_a_legal_bankruptcy(): + result = _engine(_panel([10.0] * 8), cost_model=_costs(commission_bps=10_000)).run() + assert result.equity.tolist() == pytest.approx([100.0] + [0.0] * 7) + assert result.returns.tolist() == pytest.approx([0.0, -1.0] + [0.0] * 6) + assert result.metrics["max_drawdown"] == pytest.approx(-1.0) + assert np.isfinite(result.gross_equity).all() + + +def test_a_zero_price_wipeout_cannot_resurrect_capital(): + result = _engine(_panel([10.0, 10.0, 0.0, 20.0, 20.0])).run() + assert result.equity.tolist() == pytest.approx([100.0, 100.0, 0.0, 0.0, 0.0]) + assert result.returns.tolist() == pytest.approx([0.0, 0.0, -1.0, 0.0, 0.0]) + + +def test_positive_nav_cannot_be_reported_as_a_total_loss_then_resurrect(): + with pytest.raises(ValueError, match="Daily returns.*representable"): + _engine(_panel([10.0, 10.0, 1e-20, 10.0, 10.0, 10.0])).run() diff --git a/tests/unit/test_real_research_entrypoint.py b/tests/unit/test_real_research_entrypoint.py new file mode 100644 index 0000000..581241b --- /dev/null +++ b/tests/unit/test_real_research_entrypoint.py @@ -0,0 +1,40 @@ +"""The real-data command cannot audit one root while loading another.""" + +from __future__ import annotations + +import os +import subprocess +import sys +from pathlib import Path + +SCRIPT = Path(__file__).parents[2] / "scripts/run_real_research.py" + + +def test_real_research_help_remains_available_from_another_directory(tmp_path): + result = subprocess.run( + [sys.executable, str(SCRIPT), "--help"], + cwd=tmp_path, + text=True, + capture_output=True, + encoding="utf-8", + env={**os.environ, "PYTHONIOENCODING": "utf-8"}, + ) + assert result.returncode == 0, result.stderr + assert "--require-complete-sources" in result.stdout + + +def test_real_research_rejects_a_foreign_working_directory_before_loading_data(tmp_path): + foreign_data = tmp_path / "data/processed" + foreign_data.mkdir(parents=True) + (foreign_data / "prices.parquet").write_bytes(b"a different dataset must never be read") + result = subprocess.run( + [sys.executable, str(SCRIPT), "--no-json"], + cwd=tmp_path, + text=True, + capture_output=True, + encoding="utf-8", + env={**os.environ, "PYTHONIOENCODING": "utf-8"}, + ) + assert result.returncode != 0 + assert "from the repository root" in result.stderr + assert "Real dataset not found" not in result.stderr diff --git a/tests/unit/test_research_comparison.py b/tests/unit/test_research_comparison.py index 1cecd1e..c8abfef 100644 --- a/tests/unit/test_research_comparison.py +++ b/tests/unit/test_research_comparison.py @@ -1,8 +1,10 @@ from __future__ import annotations +import copy import hashlib import json import shutil +import subprocess from pathlib import Path from types import SimpleNamespace @@ -12,6 +14,39 @@ from alphaforge.comparison import ranked_weights, validate_coverage, verify_comparison from alphaforge.data.assurance import audit_local_dataset, write_mirror_assurance +HEADLINES = ( + "cagr", + "sharpe", + "max_drawdown", + "ann_vol", + "total_return", + "gross_cagr", + "gross_sharpe", + "gross_max_drawdown", + "gross_ann_vol", + "gross_total_return", +) + + +@pytest.fixture +def saved_comparison(tmp_path): + saved = Path(__file__).parents[2] / "docs/experiments/real-sp500" + destination = tmp_path / "comparison" + shutil.copytree(saved, destination) + return destination + + +def rehash_artifact(directory, name): + manifest_path = directory / "manifest.json" + manifest = json.loads(manifest_path.read_text(encoding="utf-8")) + manifest["files_sha256"][name] = hashlib.sha256((directory / name).read_bytes()).hexdigest() + manifest_path.write_text(json.dumps(manifest), encoding="utf-8") + + +def write_summary(directory, summary): + (directory / "summary.json").write_text(json.dumps(summary), encoding="utf-8") + rehash_artifact(directory, "summary.json") + def source_bundle(root): dates = pd.to_datetime(["2020-01-02", "2020-01-03"]) @@ -91,3 +126,126 @@ def test_saved_return_evidence_detects_rehashed_financial_headline(tmp_path): manifest_path.write_text(json.dumps(manifest)) with pytest.raises(ValueError, match="cagr disagrees"): verify_comparison(destination) + + +@pytest.mark.parametrize("autocrlf", ["false", "true"]) +@pytest.mark.parametrize("eol", ["lf", "crlf"]) +def test_frozen_evidence_survives_git_checkout_line_ending_settings(tmp_path, autocrlf, eol): + root = Path(__file__).parents[2] + relative = Path("docs/experiments/real-sp500") + repository = tmp_path / "repository" + checkout = tmp_path / "checkout" + repository.mkdir() + shutil.copytree(root / relative, repository / relative) + shutil.copyfile(root / ".gitattributes", repository / ".gitattributes") + subprocess.run(["git", "init", "-q"], cwd=repository, check=True, capture_output=True) + subprocess.run( + ["git", "-c", "core.autocrlf=false", "add", "."], + cwd=repository, + check=True, + capture_output=True, + ) + subprocess.run( + [ + "git", + "-c", + f"core.autocrlf={autocrlf}", + "-c", + f"core.eol={eol}", + "checkout-index", + "--all", + "--force", + f"--prefix={checkout.as_posix()}/", + ], + cwd=repository, + check=True, + capture_output=True, + ) + manifest = json.loads((root / relative / "manifest.json").read_text()) + for name in ("manifest.json", *manifest["files_sha256"]): + assert (checkout / relative / name).read_bytes() == (root / relative / name).read_bytes() + assert verify_comparison(checkout / relative)["cases"] == 22 + + +def test_saved_evidence_rejects_line_ending_changes_without_rehashing(tmp_path): + saved = Path(__file__).parents[2] / "docs/experiments/real-sp500" + destination = tmp_path / "comparison" + shutil.copytree(saved, destination) + path = destination / "folds.csv" + path.write_bytes(path.read_bytes().replace(b"\n", b"\r\n")) + with pytest.raises(ValueError, match="artifact digest mismatch: folds.csv"): + verify_comparison(destination) + + +@pytest.mark.parametrize("title", HEADLINES) +def test_rehashed_nan_metrics_csv_cannot_bypass_headline_comparison(saved_comparison, title): + path = saved_comparison / "metrics.csv" + metrics = pd.read_csv(path) + metrics.loc[0, title] = float("nan") + metrics.to_csv(path, index=False, lineterminator="\n") + rehash_artifact(saved_comparison, "metrics.csv") + with pytest.raises(ValueError, match=f"{title} must be finite"): + verify_comparison(saved_comparison) + + +@pytest.mark.parametrize("title", HEADLINES) +def test_rehashed_missing_case_headline_cannot_skip_verification(saved_comparison, title): + summary = json.loads((saved_comparison / "summary.json").read_text(encoding="utf-8")) + del summary["cases"][0][title] + write_summary(saved_comparison, summary) + with pytest.raises(ValueError, match=f"Missing required comparison headline: {title}"): + verify_comparison(saved_comparison) + + +@pytest.mark.parametrize("metric", ["cagr", "sharpe", "max_drawdown"]) +@pytest.mark.parametrize("stat", ["mean", "std"]) +def test_rehashed_nan_aggregates_cannot_bypass_comparison(saved_comparison, metric, stat): + summary = json.loads((saved_comparison / "summary.json").read_text(encoding="utf-8")) + summary["aggregates"][0][f"{metric}_{stat}"] = float("nan") + write_summary(saved_comparison, summary) + with pytest.raises(ValueError, match="aggregates must be finite"): + verify_comparison(saved_comparison) + + +def test_rehashed_summary_must_match_manifest_dataset_identity(saved_comparison): + summary = json.loads((saved_comparison / "summary.json").read_text(encoding="utf-8")) + summary["dataset_sha256"] = "0" * 64 + write_summary(saved_comparison, summary) + with pytest.raises(ValueError, match="dataset identity mismatch"): + verify_comparison(saved_comparison) + + +def test_rehashed_duplicate_deterministic_seed_cannot_replace_a_case(saved_comparison): + summary = json.loads((saved_comparison / "summary.json").read_text(encoding="utf-8")) + indices = [ + index + for index, case in enumerate(summary["cases"]) + if case["method"] == "ridge" and case["cost_multiplier"] == 1.0 + ] + summary["cases"][indices[1]] = copy.deepcopy(summary["cases"][indices[0]]) + write_summary(saved_comparison, summary) + with pytest.raises(ValueError, match="case coverage mismatch"): + verify_comparison(saved_comparison) + + +def test_rehashed_unused_metrics_row_is_rejected(saved_comparison): + path = saved_comparison / "metrics.csv" + metrics = pd.read_csv(path) + extra = metrics.iloc[[0]].copy() + extra["seed"] = 777 + pd.concat([metrics, extra], ignore_index=True).to_csv(path, index=False, lineterminator="\n") + rehash_artifact(saved_comparison, "metrics.csv") + with pytest.raises(ValueError, match="metrics CSV coverage mismatch"): + verify_comparison(saved_comparison) + + +@pytest.mark.parametrize("change", ["missing", "duplicate"]) +def test_rehashed_aggregate_inventory_must_match_all_cases(saved_comparison, change): + summary = json.loads((saved_comparison / "summary.json").read_text(encoding="utf-8")) + if change == "missing": + summary["aggregates"].pop() + else: + summary["aggregates"].append(copy.deepcopy(summary["aggregates"][0])) + write_summary(saved_comparison, summary) + with pytest.raises(ValueError, match="aggregate coverage mismatch"): + verify_comparison(saved_comparison)