Commit Graph

12 Commits

Author SHA1 Message Date
a0c6efc4ec docs: move no-hosted-version section above results, remove spoiler
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 18:02:15 +02:00
03de1bd9c3 docs: drop other caveats section
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 18:01:28 +02:00
04b44bfb0f docs: name insidercopytrading.com explicitly in scam analysis
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 18:01:16 +02:00
1cbf6fe91c docs: drop non-Alpaca commission row from results table
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 18:00:23 +02:00
399f69b817 feat: HP sweep heatmap + equity curve plots, scam analysis in README
- backtest/plot.py: generates two plots saved to plots/
  - hp_sweep.png: 7x7 heatmap of holding_days x round-trip cost, showing
    annualised excess vs SPY and raw annualised return per cell
  - equity_curves.png: portfolio equity vs SPY for 4 cost scenarios
- backtest/simulate.py: accept pre-loaded prices dict to avoid reloading
  on every sweep iteration; return equity_curve in result
- main.py: add `plot` command
- README: updated results section with Alpaca-specific cost breakdown
  (zero commission, costs are spread+slippage only); added honest analysis
  of why insidercopytrading.com-style services show outperformance that
  cannot be replicated in practice; note Alpaca integration not finished

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 17:59:18 +02:00
4d111e0a3a docs: add reality-check results showing strategy underperforms SPY after costs
Actual simulation results with 1.5% round-trip show -2.5% annualized (vs SPY +16%).
The per-trade signal exists but the margin (~0.68% alpha) is too thin to survive
realistic small-cap execution costs and a 1-day entry delay.

Also explains why insider-copytrade sites report outperformance: they use same-day
entry and omit spread/slippage from their simulations.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 17:50:03 +02:00
e340d59a69 docs: update README with results section, simulator usage, and caveats
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 17:49:29 +02:00
08abb341f2 add joke to README 2026-05-04 20:02:54 +02:00
e383cd4845 add icon 2026-05-04 19:59:45 +02:00
b119b9abae feat: SQLAlchemy ORM models, filing cache incremental fetch, yfinance price cache
- Replace db/schema.sql + raw sqlite3 with SQLAlchemy ORM (db/models.py)
  - Filing, Signal, PriceCache models with proper indexes
  - db/db.py uses SQLAlchemy sessions throughout; no raw SQL strings
- Add PriceCache table: stores daily close prices per ticker
  - backtest._fetch_prices checks DB first; skips yfinance for completed ranges
  - New data persisted via upsert_prices()
  - get_cached_prices() / upsert_prices() added to db.py
- EDGAR poller incremental fetch: get_latest_filed_date() returns newest
  filed_date in DB; fetch_and_store_new_filings skips entries older than
  that cutoff before even checking accession_exists
- Add get_signals_for_backtest() to db.py; backtest no longer opens its
  own sqlite3 connection
- requirements.txt: add sqlalchemy>=2.0.0

Co-authored-by: dodox <dodox@users.noreply.local>
2026-05-04 17:21:23 +00:00
2e2be3e9c7 fix: address sanity-check issues + rebrand to Smaug
Co-authored-by: dodox <dodox@users.noreply.local>
2026-05-04 16:32:00 +00:00
8c0085e503 docs: add README
Co-authored-by: dodox <dodox@users.noreply.local>
2026-05-04 16:24:25 +00:00