Skip to content

Account-aware multi-position engine, plain-language Report, anonymized council, market discovery#1

Open
baderale wants to merge 1 commit into
mainfrom
feat/account-aware-multiposition-report
Open

Account-aware multi-position engine, plain-language Report, anonymized council, market discovery#1
baderale wants to merge 1 commit into
mainfrom
feat/account-aware-multiposition-report

Conversation

@baderale

Copy link
Copy Markdown
Owner

What & why

Make quant-wheel work for any account balance (not just the personal $1,000 setup), add a beginner-friendly report, anonymize the council, and add reverse-search discovery. The scoring/Monte-Carlo/Black-Scholes math is unchanged — this generalizes the account assumptions and the presentation layer around it.

Highlights

  • Multi-position sizingcore/portfolio.py allocates up to config.max_positions enterable names within deployable cash (identical to single-position behavior at $1,000). Sidebar control + CLI --max-positions; services/report_service.py builds a PortfolioReport.
  • Plain-language Report tabcore/narrative.py explains each trade and the council's reasoning in plain English, defining jargon (POP, EV, premium, assignment…) inline. New Report tab with per-trade tracker logging, plus a verdict legend (also surfaced on the Scan tab).
  • Anonymized council — real-person personas replaced with archetypes: Value Investor, Risk Manager, Macro Strategist, Systematic Quant (Statistician was already generic). The per-persona rubric is now account-aware (no hardcoded "$1,000 / one position"). Guarded by tests/test_personas.py.
  • Discovery / reverse searchcore/data/screener.py uses Yahoo's live screener as a cheap affordability prefilter; services/discovery_service.py scores the survivors with the same engine; the Report tab auto-suggests names that fit when the watchlist comes up empty.
  • Live-data provenance surfaced (source + fetched_at + live/estimated badges) so you can verify real data is used.
  • Reset + invalidation — a reset button and automatic clearing of stale scan/council/report/discovery/backtest when the watchlist or account settings change.

Repo fix included

The old .gitignore data/ rule was unanchored and had been silently ignoring the src/quantwheel/core/data/ source packagebars.py / chains.py / earnings.py were never committed, so a fresh clone wouldn't run. Anchored the rule to /data/ (root tracker store only); those files are restored to version control in this PR.

Out of scope (by design)

The walk-forward backtest and the LangGraph weekly agent remain single-position; multi-position lives in the dashboard's Report path.

Tests

pytest111 passing (added: portfolio, narrative, report, discovery, personas). test_architecture still confirms no UI imports leak into the backend.

🤖 Generated with Claude Code

…d council, market discovery

Make the tool work for any account balance, not just the personal $1,000 setup,
and add a beginner-friendly report plus reverse-search discovery.

- Multi-position: core/portfolio.py allocates up to config.max_positions
  enterable names within deployable cash (identical to single-position at $1k);
  sidebar control + CLI --max-positions; report_service builds a PortfolioReport.
- Plain-language Report tab: core/narrative.py explains each trade and the
  council's reasoning in plain English with jargon defined inline; new Report tab
  with per-trade tracker logging and a verdict legend (also surfaced on Scan).
- Anonymized council: real-person personas replaced with archetypes (Value
  Investor, Risk Manager, Macro Strategist, Systematic Quant); rubric is now
  account-aware (no hardcoded "$1,000 / one position"). Guarded by test_personas.
- Discovery / reverse search: core/data/screener.py uses Yahoo's live screener as
  an affordability prefilter; discovery_service scores the survivors; Report tab
  auto-suggests names that fit when the watchlist comes up empty.
- Live-data provenance surfaced (source + fetched_at + live/estimated badges);
  reset button + input-change invalidation of stale results.
- Fix .gitignore: anchor the runtime tracker-store rule to /data/ so it no longer
  swallows the core/data source package (which restores the previously-untracked
  bars.py / chains.py / earnings.py to version control).
- Tests: 111 passing (portfolio, narrative, report, discovery, personas added).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant