Daily Stock Analysis: een AI-systeem dat een watchlist omzet in een dagelijks beslissingsdashboard
daily_stock_analysis van ZhuLinsen is een van de best gewaardeerde AI-financeprojecten van dit moment — de #1 Python-repository van de dag op Trendshift. Maar het interessante zit hem niet in het aantal sterren. Het gaat erom dat het project niet doet alsof het koersen kan voorspellen. In plaats daarvan lost het een nauwer, veel nuttiger probleem op: neem elke handelsdag je watchlist en produceer een gestructureerd, uitlegbaar analyserapport — en lever dat af waar je het daadwerkelijk leest, je messenger.
Disclaimer van de projectauteur: alleen voor leer- en onderzoeksdoeleinden. Dit is geen beleggingsadvies. Markten brengen risico met zich mee.
Kernidee: geen bot, een dagelijkse analist-verslaggever

De meeste "AI trading"-repo's jagen op dezelfde fantasie: model erin, signaal eruit, geld omhoog. daily_stock_analysis is gebouwd op een eerlijker uitgangspunt — het moeilijke deel van beleggen is niet nóg een signaal genereren, maar een compleet, consistent beeld samenstellen van een aandeel en dat elke dag op dezelfde manier vastleggen.
Het gedraagt zich dus als een junior analist op een schema. De pipeline is lineair en overzichtelijk:
| Fase | Wat er gebeurt |
|---|---|
| Data ophalen | Koersen, dagelijkse candles, indicatoren, kapitaalstromen, fundamentals, chips |
| Technische analyse | Voortschrijdende gemiddelden, RSI, volume, bias-ratio, trendclassificatie |
| Nieuws & intelligence | Doorzoekt recent nieuws, aankondigingen, sentiment per ticker |
| LLM-analyse | Bouwt een contextpakket en prompt, produceert een JSON-beslissingsdashboard |
| Rapportweergave | Markdown-rapport, optioneel omgezet naar een afbeelding |
| Notificatie | Verstuurt naar WeCom, Feishu, Telegram, Discord, Slack of e-mail |
Standaard draait het volgens een schema (werkdagen, na sluitingstijd) en slaat het niet-handelsdagen over. Het dekt A-aandelen, Hongkong, Amerikaanse aandelen en ETF's, met Japanse en Zuid-Koreaanse markten die op een lager niveau worden ondersteund daar waar databronnen niet reiken.
Het stille slimme onderdeel: data-fallback


De meest robuuste engineeringkeuze in het project is niet de LLM — het is hoe het data standaard als onbetrouwbaar behandelt.
Marktdata wordt opgehaald via een prioriteitsketen van zes providers, elk een fallback voor de vorige:
Efinance (P0) → Tencent (P0) → Akshare (P1) → Pytdx (P2) → Baostock (P3) → Yfinance (P4)
Wanneer je een Amerikaanse ticker analyseert, slaat het systeem automatisch de providers over die alleen voor China gelden en routeert het naar Yahoo Finance. Als een bron faalt, een timeout geeft of gedeeltelijke data teruggeeft, degradeert de run alleen dat ene blok in plaats van het hele rapport te laten crashen. De prompt krijgt zelfs te horen welke blokken fallback, partial of missing zijn — zodat het model verplicht is "data niet beschikbaar" te schrijven in plaats van een getal te verzinnen.
Dit is het juiste instinct voor elk productiesysteem: het uitvallen van één databron mag nooit de hele analyse onderuithalen. Behandel elke feed als best-effort, standaardiseer de velden, en maak ontbrekende data zichtbaar in plaats van stilzwijgend in te vullen.
Het beslissingsdashboard

De LLM levert geen proza — hij levert een strikte JSON-"beslissingsdashboard" dat het rapport in een consistente lay-out verwerkt:
- Kernconclusie — één zin: kopen, aanhouden of wachten, plus tijdgevoeligheid.
- Gesplitst advies — ander advies voor wie de positie al aanhoudt versus wie cash heeft.
- Data-perspectief — MA-uitlijning, koers versus steun/weerstand, bias-ratio, volumelezing.
- Intelligence — risicowaarschuwingen en positieve katalysatoren, elk verplicht voorzien van een datum.
- Slagplan — concrete scherpschutterspunten: ideale koop, stop-loss, doelwit, positiegrootte.
- Checklist — elke voorwaarde gemarkeerd met ✅ / ⚠️ / ❌ (bullish uitlijning, bias binnen bereik, volume, geen groot slecht nieuws, waardering).
De discipline die in de prompt is ingebakken is uitgesproken en verstandig: niet achterna jagen (een bias van meer dan 5% boven MA5 is een harde "niet kopen"), alleen handelen bij bullish MA-uitlijning (MA5 > MA10 > MA20), de voorkeur geven aan het kopen van een terugval met krimpend volume richting steun, en nooit binnen één dag omslaan tussen kopen en verkopen.
Agentstrategieën: stel het systeem een vraag

Naast het dagelijkse rapport levert het project een agentmodus met 15 ingebouwde strategiehandleidingen die je per ticker kunt bevragen:
| Familie | Voorbeelden |
|---|---|
| Trend / voortschrijdende gemiddelden | MA golden cross, bullmarkt-trend |
| Structuurtheorie | Chan (Zen)-theorie, Elliott-golf |
| Gedrag / liquiditeit | emotiecyclus, volume-uitbraak, bodemvolume, krimpende terugval |
| Katalysator / narratief | hot theme, event-driven, verwachtingsherprijzing |
| Kwaliteit / groei | groeikwaliteit |
Elke strategie is een YAML-bestand met eigen regels, vereiste tools en scoringsaanpassingen — dus de "intelligentie" is configureerbaar en controleerbaar, niet verstopt in één gigantische prompt.
Hoe je het leest zonder jezelf voor de gek te houden

Elk project van dit type kan al snel te veel vertrouwen krijgen. Een eerlijke evaluatie-checklist:
- Kwaliteit van de nieuwsbron. Het intelligence-blok is maar zo goed als je geconfigureerde zoekproviders — zonder die blijven sentiment en katalysatoren leeg en leunt het rapport volledig op technische analyse.
- Determinisme. LLM-uitvoer varieert; dezelfde ticker kan bij elke run net iets anders lezen. Behandel het dashboard als een gestructureerde mening, niet als een vaste waarheid.
- Dekking per markt. De diepte voor A-aandelen (kapitaalstroom, chips, dragon-tiger) degradeert netjes naar
not_supportedop markten die de data niet dekt. - Actualiteit van data. Let op
fallback/partial-vlaggen — gedegradeerde input zou je vertrouwen moeten verlagen, precies zoals de prompt voorschrijft. - Backtesten ≠ winst. Het rapport is beslissingsondersteuning, geen bewezen edge.
Beperkingen en eerlijke beoordeling

Wat daily_stock_analysis niet is:
- Geen uitvoeringssysteem. Het analyseert en rapporteert; het plaatst geen orders en modelleert geen liquiditeit.
- Modelafhankelijk. De kwaliteit van de uitvoer volgt de LLM waarop je het richt.
- Zoekafhankelijk. Zonder nieuws-API-sleutels wordt de kwalitatieve helft van het rapport dunner.
- Niet-deterministisch. Identieke input kan licht verschillende dashboards opleveren.
Links
- 💻 GitHub: ZhuLinsen/daily_stock_analysis
- 📄 Licentie: MIT
Conclusie
daily_stock_analysis is waardevol, niet als orakel, maar als een herhaalbare, geautomatiseerde analytische gewoonte:
- Standaardiseer wat "een aandeel bekijken" elke dag betekent.
- Behandel data als onbetrouwbaar en maak gaten zichtbaar.
- Maak de conclusie uitlegbaar — score, niveaus, checklist, risico's.
- Scheid het genereren van ideeën (15 strategieën) van een gedisciplineerd beslissingskader.
Voor leren, dagelijkse review en het prototypen van een onderzoeksworkflow is het goed gebouwd. Voor productie is de volgende laag dezelfde die elk serieus systeem nodig heeft: gevalideerde data, controle op modeldrift, realistische uitvoering, en risicoregels die in code leven, niet alleen in prompts.
Auteurs
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.