Permet de configurer des alertes « préviens-moi par mail quand NVDA atteint 200$ » depuis la Console IA. Un sidecar surveille les cours en continu. - finlab/watcher.py : boucle toutes les 5 min, lit price_alerts.yaml (workspace), évalue les seuils above/below, envoie un email au franchissement. Anti-spam (1 mail/seuil, état .watcher-state.json, ré-armé en ré-éditant). Modes --once / --test - Email via le relais postfix du lab (storage-01:25, SMTP_HOST) qui réécrit l'expéditeur en Gmail — AUCUN secret (pods k8s dans mynetworks) - price_alerts.yaml : config seedée dans le workspace (email_to + rules), éditée par la Console IA sur demande - deployment : conteneur sidecar `watcher` (boucle 5 min, ressources minimes) - Dockerfile : seed price_alerts.yaml ; persona console + admin/ia/finlab.md documentés Logique testée en local (SMTP mocké) : franchissement → envoi, anti-spam au 2e run, seuil non atteint → rien. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4.9 KiB
FinLab — dashboard finance + console Claude Code + toolkit d'analyse
Quoi : boîte à outils d'analyse de marché maison (finlab, données Yahoo Finance gratuites)
déployée in-cluster sous deux faces (une seule image) : un dashboard web (graphiques,
portefeuille, watchlists, actions) et une console Claude Code finance. Remplace l'approche
OpenAlice abandonnée (cf. admin/ia/openalice.md) par plus simple et plus puissant : ton vrai
Claude Code (sur ton abonnement, pas l'API au compteur) + une UI graphique gratuite.
- Dashboard (
finance.lab.local/) — graphiques chandeliers (MM50/200 + volume), portefeuille (P&L/poids/secteurs), watchlists thématiques scannées, alertes du jour, plan de trade R:R. FastAPIdashboard/server.py, aucun LLM/clé (analyse technique pure). - Console (
finance.lab.local/console/) — terminal web (ttyd) →claudeagentique, persona + outils finlab en MCP, login abonnement persisté.
Où :
- Source :
tools/finlab/(code finlab + Dockerfile + personaworkspace/CLAUDE.md). - Image : CI
.github/workflows/build-finlab.yml→ghcr.io/alkatrazz24/funk-finlab. - Déploiement : ns
ai,finance.lab.local, manifestsk8s/apps/finlab/, app ArgoCDk8s/apps-of-apps/apps/finlab.yaml. - MCP local :
.mcp.json(racine repo lab) → outils finlab dans les sessions Claude Code du lab.
Cadre : analyse/aide à la décision uniquement, aucun ordre réel (seul le paper trading
Alpaca fictif est exécutable). Persona dans tools/finlab/workspace/CLAUDE.md (profil swing
trader concentré tech/semis, philosophie R:R/concentration/discipline).
Architecture
| Composant | Détail |
|---|---|
initContainer seed |
Peuple le workspace (cp -rn), robuste au piège NFS (fsGroup non honoré → recrée le dossier s'il est root/non-inscriptible). Tourne avant les conteneurs |
container dashboard |
uvicorn dashboard.server:app :8800 — UI + API JSON finlab |
container console |
ttyd -b /console :7681 → claude dans le workspace |
container watcher |
python -m finlab.watcher — alertes de prix par email, boucle 5 min |
| Cerveau (console) | Abonnement Claude Code (login OAuth persisté dans ~/.claude sur le PVC) — pas de clé API |
| Code vs data | Code (finlab + dashboard) dans l'image /opt/app (maj avec l'image) ; configs éditables via FINLAB_HOME=/home/finlab/workspace (PVC) |
PVC finlab-data |
5Gi NFS → /home/finlab : login + workspace (configs + .cache) |
| Auth | basicAuth Traefik (finlab-auth) sur les deux routes — un shell web ne s'expose pas nu |
| Routes | /console → 7681 · reste → 8800 |
Découplage code/data : finlab lit ses configs depuis FINLAB_HOME si défini (sinon repli
sur le dossier du package → dév local inchangé). Le workspace est seedé au 1er boot puis vit sur
le PVC (edits + login persistent ; une nouvelle image n'ajoute que les fichiers manquants).
Outils finlab
digest (vue d'ensemble compacte, à privilégier), portfolio_summary, opportunities/scan,
technical_analysis/tech (RSI/MACD/MM50-200/Bollinger/ATR), fundamentals (PER/PEG/ROE/dette/
cible), trade_plan/plan (entrée/stop ATR/objectifs/taille/R:R), alerts_today, price,
plus paper trading (paper_account/paper_positions/paper_order, clés Alpaca optionnelles).
Configs (workspace, éditables) : portfolio.yaml (multi-comptes : accounts avec
name/type/cash/positions — ex. Revolut + BNP Paribas PEA ; agrégats globaux + par compte),
watchlists.yaml (thèmes chaîne IA/datacenter), alerts.yaml (règles).
Onboarding (premier boot)
Checklist détaillée : k8s/apps/finlab/README.md.
- Secrets manuels dans
ai:ghcr-pull(pull GHCR) +finlab-auth(htpasswd basicAuth). - Ouvrir
finance.lab.local→claude→/login(abonnement, persisté sur le PVC).
Alertes de prix par email
Sidecar watcher (finlab/watcher.py) : boucle toutes les 5 min, lit
price_alerts.yaml (workspace), et envoie un email quand un seuil (above/below) est
franchi. Envoi via le relais postfix du lab (storage-01:25, SMTP_HOST) qui réécrit
l'expéditeur en Gmail — aucun secret (les pods k8s sont dans mynetworks, cf.
admin/infra/email.md). Anti-spam : un seuil ne notifie qu'une fois (état .watcher-state.json),
ré-armé en ré-éditant la règle. La Console IA édite price_alerts.yaml sur demande
(« mets un mail quand NVDA atteint 200$ »). Test : python -m finlab.watcher --test <email> / --once.
Accès programmatique
- MCP dans le repo lab :
.mcp.jsonracine pointetools/finlab/.venv→ outils finlab dans les sessions Claude Code du lab (approbation MCP au 1er lancement). - Headless :
kubectl -n ai exec deploy/finlab -- python -m finlab.cli digest.
Liens
- Source historique : ex-projet
Projets/Finance(rapatrié ici). - Approche précédente abandonnée :
admin/ia/openalice.md.