@@ -27,17 +27,84 @@ w_t = R_t( T_t( A_t( S_t( X<=t ) ) ) )
2727
2828** Design targets are not performance claims.** The reference strategies retain
2929aspirational Sharpe targets of 1.10 (multi-asset rotation) and 0.9 (momentum
30- ML), but this repository publishes no fixed backtest result. Evaluate them on
31- data you are permitted to use, record the true number of trials, and compare
32- against appropriate benchmarks. See [ PERFORMANCE.md] ( PERFORMANCE.md ) .
30+ ML). The published reference run below materially misses its target and both
31+ gross benchmarks; it demonstrates the audit path rather than strategy quality.
32+ See [ PERFORMANCE.md] ( PERFORMANCE.md ) .
3333
3434---
3535
3636## Project Demo
3737
38- The best demonstration is a locally generated, provenance-bearing report rather
39- than a permanent equity curve detached from its input data. With an authorized
40- price file, run:
38+ The repository owner confirms permission to publish these derived charts. The
39+ raw market-data file remains uncommitted; its digest and the complete chart
40+ hashes are recorded in
41+ [ ` performance_manifest.json ` ] ( docs/img/performance_manifest.json ) .
42+
43+ ![ Multi-Asset Rotation diagnostic overview] ( docs/img/report_overview.png )
44+
45+ | Reference-run result | Value |
46+ | ---| ---:|
47+ | Evaluation window | 2018-01-02 to 2025-12-31 |
48+ | CAGR | -0.07% |
49+ | Annualized volatility | 6.53% |
50+ | Sharpe | 0.02 |
51+ | Maximum drawdown | -14.22% |
52+ | Annualized one-way turnover | 10.84x |
53+ | Sum of modeled cost fractions | 15.06% |
54+ | SPY Sharpe, gross | 0.78 |
55+ | Equal-weight six-ETF Sharpe, gross | 0.96 |
56+
57+ Strategy returns are net of 3 bps commission and 10 bps flat slippage per
58+ trade; benchmark returns are gross. The ADV cap is inactive because this run
59+ has no volume input. The reported DSR is 0.065 using an assumed 10 trials and a
60+ single-series variance estimate. The true historical trial count is unknown,
61+ so that DSR is not a validated multiple-testing correction.
62+
63+ <details >
64+ <summary ><strong >Open the full diagnostic gallery</strong ></summary >
65+
66+ ### Equity Versus Benchmarks
67+
68+ ![ Net strategy equity versus gross benchmarks] ( docs/img/equity_vs_benchmarks.png )
69+
70+ ### Drawdown
71+
72+ ![ Strategy underwater drawdown] ( docs/img/drawdown.png )
73+
74+ ### Rolling Sharpe
75+
76+ ![ Rolling 126-session Sharpe] ( docs/img/rolling_sharpe.png )
77+
78+ ### Rolling Risk
79+
80+ ![ Rolling annualized volatility and beta to SPY] ( docs/img/rolling_risk.png )
81+
82+ ### Allocation And Exposure
83+
84+ ![ Post-trade allocation, exposure, and cash] ( docs/img/allocation_and_exposure.png )
85+
86+ ### Turnover And Costs
87+
88+ ![ Executed turnover and cumulative modeled cost fractions] ( docs/img/turnover_and_costs.png )
89+
90+ ### Monthly Returns
91+
92+ ![ Monthly net-return heatmap] ( docs/img/monthly_returns.png )
93+
94+ ### Return Distribution
95+
96+ ![ Daily net-return distribution and normal Q-Q diagnostic] ( docs/img/return_distribution.png )
97+
98+ </details >
99+
100+ The published run uses Yahoo Finance data retrieved through yfinance 1.4.1 on
101+ June 15, 2026. It covers QQQ, VGT, GLD, TLT, SPY, and VIG from January 4, 2016
102+ through December 31, 2025; the first 503 sessions are signal warm-up. The local
103+ adjusted-close CSV has SHA-256
104+ ` 3b256ef083794a67f173d635a3cd297237b7a3d01489ccf53cc807c99602607c ` .
105+ Permission is owner-asserted and not independently verified by the software.
106+
107+ To generate the same report from an authorized file matching that digest:
41108
42109``` bash
43110PYTHONPATH=. python scripts/generate_report.py \
@@ -49,18 +116,9 @@ PYTHONPATH=. python scripts/generate_report.py \
49116 --adjustment-method " $DATA_ADJUSTMENT_METHOD "
50117```
51118
52- Open ` reports/report.md ` . It links a compact diagnostic overview and detailed
53- performance, drawdown, rolling-risk, allocation, exposure, turnover, cost,
54- monthly-return, and tail-distribution plots. The report also records the input
55- digest, evaluation window, warm-up, cost assumptions, DSR settings, and whether
56- all publication metadata was supplied. Metadata records the owner's assertions;
57- the tool does not determine whether a license permits redistribution.
58-
59- The architecture diagram below is safe to publish because it is independent of
60- market data. A generated ` report_overview.png ` should be added to this README
61- only when the input license permits publication of derived images and the
62- adjacent text identifies the source, date window, file digest, costs, benchmark
63- treatment, and true research trial count. Never publish an equity curve alone.
119+ The command writes ` reports/report.md ` and the same nine-plot diagnostic set.
120+ Metadata records owner-supplied assertions; the tool does not determine whether
121+ a license permits publication or redistribution.
64122
65123---
66124
@@ -179,9 +237,11 @@ credential variables.
179237
180238## Performance Reporting
181239
182- No market-data snapshot, executed notebook output, generated chart, or fixed
183- performance number is published in this repository. This avoids redistributing
184- provider data and prevents a changing data vintage from looking immutable.
240+ The README publishes one owner-authorized reference run as derived images with
241+ adjacent provenance and an artifact manifest. Raw market data, executed
242+ notebook output, and ordinary local reports remain excluded. Published results
243+ must identify their data vintage and must not be silently regenerated from a
244+ different input file.
185245
186246For a licensed local dataset, run:
187247
@@ -195,12 +255,10 @@ The report records the file path, SHA-256 digest, observed date window, cost
195255assumptions, signal warm-up, DSR trial count/variance assumption, and whether
196256liquidity constraints are active.
197257Each run writes ` reports/report.md ` , a compact ` report_overview.png ` , and eight
198- detailed diagnostics under ignored ` reports/img/ ` . These are local research
199- evidence, not repository fixtures. The README intentionally contains no fixed
200- performance plot because the repository does not ship a redistributable input
201- dataset. See
202- [ PERFORMANCE.md] ( PERFORMANCE.md ) for interpretation requirements and known
203- limitations.
258+ detailed diagnostics under ignored ` reports/img/ ` . These remain local research
259+ evidence unless the owner explicitly approves publication and adds complete
260+ provenance plus artifact hashes. See [ PERFORMANCE.md] ( PERFORMANCE.md ) for the
261+ reference run, interpretation requirements, and known limitations.
204262
205263---
206264
@@ -369,6 +427,7 @@ quantcortex/ # repo root
369427├── local_data/README.md # ignored local-data schemas and provenance rules
370428├── reports/ # ignored generated charts and report output
371429├── docs/
430+ │ ├── img/ # approved reference-run plots + hash manifest
372431│ ├── production-readiness.md # blockers before production capital
373432│ └── history-rewrite-plan.md # optional purge procedure; not executed
374433├── docker-compose.yml
0 commit comments