À propos du projet

Watchy est un démon d'auto-surveillance boursière auto-hébergé, bâti sur le framework de trading multi-agents LLM TradingAgents. Il surveille une liste de valeurs définie par l'utilisateur et pousse des conseils tenant compte des positions vers Telegram. C'est explicitement un système d'aide à la décision : il ne passe jamais d'ordres et ne prétend pas prédire les rendements ni générer de l'alpha. Conception à deux niveaux. Le niveau 1 est un scan technique gratuit (par défaut toutes les 30 minutes, uniquement pendant les heures de cotation régulières américaines, avec gestion correcte de l'heure d'été via exchange_calendars) qui récupère les données OHLCV via yfinance et calcule des indicateurs sans aucun appel LLM. Il détecte 11 types de signaux, notamment le croisement doré/de la mort avec confirmation par escalier de moyennes mobiles, les extrêmes du RSI, les croisements du MACD, les franchissements des bandes de Bollinger, les anomalies de volume et les pics d'ATR. Le niveau 2 exécute le pipeline complet TradingAgents à quatre analystes (Marché, Sentiment, Actualités, Fondamentaux) avec un débat Haussier/Baissier et une gestion des risques, dont la profondeur s'intensifie jusqu'à un débat complet à trois volets sur le risque le premier jour de cotation de chaque semaine. Watchy 2.0 (v2.0.0-rc.1) passe à un plan hebdomadaire complété par une surveillance événementielle. L'exécution hebdomadaire complète demande au conseiller un bloc WEEKLY PLAN strict (décision, urgence, thèse, zone d'achat, plafond de poursuite, niveau/condition d'invalidation, condition d'allègement, résistance, prix de prise de profit, conseils et un « à ne pas faire » concret). Les plans sont validés avant activation ; toute sortie invalide est stockée pour diagnostic et ne devient jamais exploitable. Chaque scan classe le prix par rapport au plan et ne notifie qu'aux changements d'état, persistés afin que les redémarrages ne répètent pas les alertes. Un routeur pur associe les déclencheurs à l'une des actions TAKE_PROFIT, TRIGGERED_RISK, FAST_RECHECK, NOTIFY_ONLY ou NO_ACTION, les routes payantes étant rétrogradées en rappels en mode shadow (le défaut livré), lorsqu'un ticker n'est pas sur liste blanche, ou lorsque les budgets de session par ticker/globaux sont épuisés. Des libellés d'état déterministes (ACT NOW, WAIT FOR LIMIT, DO NOT CHASE, RISK REVIEW, PLAN INVALID, STALE, INFORMATION ONLY) ne peuvent pas être outrepassés par le LLM. Définir tier2_schedule: daily restaure le comportement de la version 1.x. Autres fonctionnalités documentées : un filtre de proximité de prix qui évite l'analyse coûteuse pour les tickers en simple surveillance éloignés de leur cible d'entrée tout en analysant toujours les positions détenues ; une bande adaptative à l'ATR optionnelle avec un script de calibration ; un chemin de prise de profit / anti-aller-retour qui injecte une directive riche en faits pour les positions gagnantes détenues au-delà d'un seuil de gain et adapte les propositions au nombre de titres (tranches de titres entiers, sortie complète, allègement fractionnaire au marché) ; une source de positions en couches (API Schwab en direct, instantané en cache, YAML manuel) avec étiquetage d'ancienneté et alertes d'expiration de jeton ; et une observabilité via des lignes de journal, une table route_log et des commandes scripts/watchy_ctl.py pour le statut, l'inspection des plans, le routage à blanc/aperçu, les exécutions hebdomadaires forcées et une relecture de routage en lecture seule. Le déploiement se fait via systemd avec une configuration scindée entre un config.yaml versionnable et un secrets.yaml ignoré par git. Python 3.11+, licence MIT.