@@ -33,6 +33,37 @@ against appropriate benchmarks. See [PERFORMANCE.md](PERFORMANCE.md).
3333
3434---
3535
36+ ## Project Demo
37+
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:
41+
42+ ``` bash
43+ PYTHONPATH=. python scripts/generate_report.py \
44+ --prices-csv local_data/rotation_prices.csv \
45+ --start 2018 --end 2025 --n-trials 10 \
46+ --data-provider " $DATA_PROVIDER " \
47+ --permission-basis " $DATA_PERMISSION_BASIS " \
48+ --retrieved-at " $DATA_RETRIEVED_AT " \
49+ --adjustment-method " $DATA_ADJUSTMENT_METHOD "
50+ ```
51+
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.
64+
65+ ---
66+
3667## Getting Started
3768
3869The scientific core, test suite, broker mocks, and labeled paper-trading dry run
@@ -110,14 +141,15 @@ python scripts/paper_trade_cycle.py --offline # labeled synthetic dry-run; no br
110141
111142` validate_performance.py ` explicitly fetches live yfinance data; ` --pit ` uses a
112143fixed start-date cohort from historical index membership. ` generate_report.py `
113- accepts either an owner-supplied wide CSV or explicit live yfinance, writes three
114- charts under ignored ` reports/img/ ` , and prints source metadata plus markdown
115- tables. Its default report requires at least 274 pre-evaluation sessions for
116- full signal initialization; ` --warmup-years 0 ` explicitly permits and labels a
117- cold start. ` survivorship_demo.py ` requires the same explicit live-data opt-in and
118- shows the current pricing gap for past index members. ` verify_brokers.py ` checks
119- Alpaca/IB/CCXT request construction and response parsing against SDK-shaped
120- mocks; it does not verify a live SDK or authenticated connection.
144+ accepts either an owner-supplied wide CSV or explicit live yfinance, writes a
145+ Markdown report plus nine plots under ignored ` reports/ ` , and prints source
146+ metadata plus markdown tables. Its default report requires at least 274
147+ pre-evaluation sessions for full signal initialization; ` --warmup-years 0 `
148+ explicitly permits and labels a cold start. ` survivorship_demo.py ` requires the
149+ same explicit live-data opt-in and shows the current pricing gap for past index
150+ members. ` verify_brokers.py ` checks Alpaca/IB/CCXT request construction and
151+ response parsing against SDK-shaped mocks; it does not verify a live SDK or
152+ authenticated connection.
121153` paper_trade_cycle.py ` runs the full execution path (use
122154` --live-yfinance --submit ` with ` ALPACA_* ` set to place paper orders). It
123155refuses unresolved open orders, records deterministic client order IDs before
@@ -162,11 +194,11 @@ PYTHONPATH=. python scripts/generate_report.py \
162194The report records the file path, SHA-256 digest, observed date window, cost
163195assumptions, signal warm-up, DSR trial count/variance assumption, and whether
164196liquidity constraints are active.
165- Each run writes ` equity_vs_benchmarks.png ` , ` drawdown .png` , and
166- ` rolling_sharpe.png ` under ignored ` reports/img/ ` , and prints performance and
167- monthly-return tables. These are local research evidence, not repository
168- fixtures. The README intentionally contains no fixed performance plot because
169- the repository does not ship a redistributable input dataset. See
197+ Each 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
170202[ PERFORMANCE.md] ( PERFORMANCE.md ) for interpretation requirements and known
171203limitations.
172204
0 commit comments