slipstream / README.md
s-ttp's picture
Upload folder using huggingface_hub
f429b7e verified
|
Raw History Blame Contribute Delete
5.05 kB
---
title: Slipstream
emoji: πŸ“ˆ
colorFrom: blue
colorTo: green
sdk: docker
app_port: 7860
pinned: false
short_description: Smart-money, quality, trend-adaptive paper fund + picks
---
# Slipstream
A quality, trend-adaptive equity **paper fund** that drafts the smart money.
**Strategy (rule v2, Oct 2026):** hold the large-caps that concentrated 13F managers are collectively
buying β€” every filer with 10–150 positions, $250M–$100B and β‰₯40% in its top 10 (rule-based, ~900–1,500 a
quarter); signal = 2Β·new + add βˆ’ 2Β·exit conviction positions β€” restricted to the top-1,000 by market cap
and to companies whose ROA is in the **top 30% of their sector**; top-20 dollar-weighted (**1–10% per
name**, ≀5 per sector) with a **dynamic sector cap** (each sector 30% Β± its 12-1m relative strength,
15–45%) and a **regime overlay** that rotates into large-cap momentum when SPY is in a confirmed
downtrend. An AI overlay excludes only names hit by a critical adverse event. Rebalanced monthly.
Backtest 2014-03 β†’ 2026-10 (survivorship-free, data through *d* βˆ’ 1, 20 bp/side, Sharpe net of T-bills):
CAGR 19.9% vs SPY 13.9%, Sharpe 0.85 vs 0.73, max drawdown -37.5% vs -33.7%,
alpha +3.9% (t 1.8), Ξ² 1.17. Chosen on 2016–2021 from ~210 configurations; it trailed SPY over the
never-used 2014-03 β†’ 2016-02 window. Research and pre-registrations: `Quant Model/data/research/slipstream/`.
The page shows the live Alpaca **paper** portfolio, performance vs SPY, the current
target book, and the informational **Top AI Picks of the Month** panels.
## Setup (Space secrets)
Add these under *Settings β†’ Variables and secrets*:
| Secret | Purpose |
|---|---|
| `ALPACA_API_KEY`, `ALPACA_SECRET_KEY` | your Alpaca **paper** account (required) |
| `ALPACA_PAPER_ENDPOINT` | optional, defaults to `https://paper-api.alpaca.markets` |
| `REBALANCE_TOKEN` | enables the rebalance executor (send as `X-Rebalance-Token`) |
| `GEMINI_API_KEY` | optional β€” picks screener + event-risk overlay (preferred). Model via `GEMINI_MODEL`, default `gemini-flash-lite-latest` (~$0.10/mo at this volume) |
| `ALPHAVANTAGE_API_KEY` | optional β€” needed to refresh the News panel with live data |
| `ANTHROPIC_API_KEY` / `OPENAI_API_KEY` | optional β€” fallback screeners if no `GEMINI_API_KEY` |
| `SLIPSTREAM_CASH_BUFFER` | optional, default `0.01` β€” fraction of equity the executor keeps in cash |
The picks panels ship with a **cached fallback** (`data/*_deep.json`): a panel whose live
refresh fails β€” no key, a rate-limit, a scrape change β€” serves the last good result flagged
*stale* instead of erroring. A key only enables the ↻ Refresh button to re-screen live.
Screener preference: Gemini β†’ Anthropic β†’ OpenAI.
The fund only ever trades the **paper** endpoint. Rebalance is dry-run by default; a real
submit needs `dry=0` **and** the matching `REBALANCE_TOKEN`.
## Rebalance
`POST /api/rebalance?dry=1` returns the trade plan (no orders). Monthly, trigger a real
rebalance with `POST /api/rebalance?dry=0` and header `X-Rebalance-Token: <token>`. A Hugging
Face scheduled Job (`rebalance`, weekdays 15:00 UTC, `ops/hf_ops.py` in the Refinery Space) does this
every weekday, and the Space no-ops until the first market-open day of the month.
The executor sizes the book off `(1 βˆ’ CASH_BUFFER) Γ— equity`, never 100%: a fully-invested
target plus the min-trade deadband (small overweights are never sold) had left the account on a
standing margin balance. Sells are placed first and **waited for** before buys go in.
## Ops
- **Supervisor** β€” `GET /api/supervisor` is a flag-only monitor (tracking vs SPY, guardrails,
freshness). The HF scheduled Job `supervisor` runs it **daily** (13:00 UTC). On ALERT it opens
a discussion on this Space, which HF notifies you about. It doubles as the keep-alive: free Spaces
sleep after 48 h idle, and the weekday-only rebalance ping left it asleep every weekend.
All schedules (refresh, rebalance, supervisor, shadow book) are HF Jobs. See the Refinery README.
- **Restarts are safe.** All fund state lives in Alpaca. `data/` caches (picks, risk screen) are
ephemeral inside the container β€” a restart just recomputes them (one LLM call per panel, one
for the screen), and the shipped caches serve meanwhile.
- **Public by design.** The dashboard, holdings and dry-run plan are world-readable (it's a paper
account). If you flip the Space to private under *Settings*, give the Jobs' requests an
`Authorization: Bearer` header (`ops/hf_ops.py` currently calls the public URL).
## Data refresh
The smart-money signal bundle in `data/` is regenerated by `engine/export_bundle.py` (run where
the licensed Sharadar cache lives) and committed. Refresh it **weekly**: 13F is quarterly and
~45-day lagged, but `prices.parquet` feeds the sector-strength and momentum sleeves, and the
supervisor WATCHes at 10 days / ALERTs at 14. The regime test (SPY vs 200-day MA) additionally
pulls SPY **live** from Alpaca, so the fund's biggest switch never waits on the bundle.