StockVS

Bronnen

Methodologie

Hoe StockVS werkt

StockVS komt tot stand via een geautomatiseerde pipeline: gegevensverzameling, een nachtelijke build, geautomatiseerde controles en publicatie, elk hieronder beschreven.

Gegevensverzameling

Marktgegevens komen van Yahoo Finance via de opensource-bibliotheek yfinance: dagelijkse koersen en volume, dividenden, bedrijfs- en fondsprofielen met kernstatistieken, jaarlijkse winst-en-verliesrekeningen voor aandelen en de grootste posities voor ETF's. De gevolgde effecten komen uit openbare beursnoteringen van Amerikaanse en Canadese beurzen; nieuwskopjes komen van de nieuwsdienst Finnhub. Voor depositobewijzen (ADR's) is de marktkapitalisatie de ADR-koers vermenigvuldigd met het aantal ADR-equivalente aandelen, zoals Yahoo Finance dit rapporteert; dit kan afwijken van de waarde van het bedrijf op zijn thuismarkt wanneer het ADR met een premie wordt verhandeld (bijvoorbeeld TSM en SKHY).

De gegevenspipeline

Verzameltaken schrijven de koersen en het profiel van elk effect, en nieuwskopjes voor aandelen, naar een PostgreSQL-database. Elke nacht rendert een statische-site-build elke pagina vanuit die database, en geautomatiseerde controles inspecteren het resultaat; als een controle faalt, wordt niets geüpload en blijft de vorige versie online. Een build die slaagt, wordt geüpload naar statische hosting achter het netwerk van Cloudflare, en vervolgens wordt een willekeurige steekproef van de nieuwe pagina's geladen om te bevestigen dat ze reageren.

Updateschema

Koersen worden op elke handelsdag na het sluiten van de markt verzameld, en de nachtelijke build start zodra het verzamelen is afgerond, zodat pagina's meestal nog dezelfde avond de slotkoers van die dag tonen; builds in het weekend gebruiken de gegevens van de laatste sessie. Bedrijfsprofielen en kernstatistieken worden elke werkdag vernieuwd, ETF-posities en volledige ETF-koersgeschiedenissen wekelijks, en de jaarrekeningen van elk bedrijf ongeveer eens per kwartaal, bij een nieuwe notering binnen een week. Nieuwskopjes voor aandelen worden voor de grootste bedrijven dagelijks vernieuwd, voor kleinere elke paar dagen. Als het verzamelen op een werkdag faalt, draait de build van die avond niet, blijft de vorige versie online en slaat een bewakingssysteem alarm.

Hoe cijfers worden berekend

Rendementen over voortschrijdende periodes, kalenderjaren en maanden worden berekend uit de opgeslagen dagelijkse slotkoersen, zoals Yahoo Finance deze bij het downloaden heeft gecorrigeerd voor aandelensplitsingen en dividenden; volatiliteit is de geannualiseerde standaarddeviatie van de dagelijkse rendementen. Marktkapitalisatie, waarderingsratio's, marges, winst per aandeel en dividendrendementen worden getoond zoals Yahoo Finance ze rapporteert, en een waarde buiten een plausibel bereik wordt niet getoond. Cijfers behouden hun rapportagevaluta, Amerikaanse of Canadese dollar, en worden nooit omgerekend; totalen die beide valuta's omvatten, worden per valuta gegeven. Branchevergelijkingen gebruiken de mediaan van de branche, en verschillen tussen percentages worden uitgedrukt in procentpunten.

Hoe de analyse wordt geschreven

De analyse op aandelen- en ETF-pagina's wordt samengesteld uit vooraf geschreven zinsjablonen in elke ondersteunde taal, aangevuld met cijfers uit de database. Ontbrekende gegevens laten een zin gewoon wegvallen in plaats van een plaatshouder achter te laten. De sjablonen beschrijven de gegevens en hoe deze zich verhouden tot de mediaan van de branche, zonder beoordelingen, aanbevelingen of voorspellingen. Er draait geen taalmodel wanneer de site wordt gebouwd, en geen model schrijft tekst over een individueel aandeel of fonds. De abstracte illustraties naast sommige nieuwskopjes zijn eenmalig gegenereerd door een beeldmodel en beelden de verhalen niet uit.

Kwaliteitscontroles

Al tijdens het verzamelen worden koersen alleen opgeslagen voor dagen waarop de eigen markt van het effect open was, een koers van de lopende dag pas na het sluiten van de sessie, en de dagelijkse update kan een opgeslagen slotkoers niet overschrijven met een live koers. Een afgekapte naam uit de gegevensfeed kan een opgeslagen volledige naam niet vervangen, en effecten die geen koersen meer opleveren, worden gemarkeerd in het uitvoerrapport. Op de pagina's toont een koers die niet meer actueel is de datum van de laatste transactie, en dubbel genoteerde bedrijven worden maar één keer geteld.

Vóór elke nachtelijke publicatie lezen geautomatiseerde controles de afgeronde site, pagina voor pagina of via een steekproef. De build moet qua omvang dicht bij de laatst gepubliceerde versie liggen, minstens zoveel pagina's bevatten als de sitemaps vermelden, en koersen bevatten die zo actueel zijn als het schema vereist. Gestructureerde gegevens moeten correct gevormd zijn, koersdatums moeten op handelsdagen vallen en nooit in de toekomst liggen, elke pagina mag maar één gegevensdatum dragen, en aantallen en totalen moeten op alle pagina's overeenkomen. Geen tabel mag een bedrijf twee keer vermelden of verschillende valuta's optellen. De analyse en de overzichtssamenvattingen moeten in het schrift van de paginataal zijn geschreven.

Bekende beperkingen

StockVS biedt geen realtime koersen: de gegevens zijn van na de handelsdag, en sommige pagina's kunnen een sessie of meer achterlopen wanneer Yahoo Finance een koers vertraagd publiceert of het verzamelen faalt. Cijfers zijn alleen zo nauwkeurig als de gegevens van Yahoo Finance. Niet alle financiële kengetallen zijn beschikbaar voor elk aandeel of ETF. De beschikbaarheid van historische gegevens verschilt per ticker. De meeste geschiedenissen worden dag na dag uitgebreid, zodat een latere aandelensplitsing- of dividendcorrectie oudere koersen mogelijk niet meer bereikt en rendementen op lange termijn kunnen afwijken van andere bronnen. Effecten die niet meer worden verhandeld, houden hun pagina, waarbij de laatste koers als niet meer actueel is gemarkeerd, en bedrijfsomschrijvingen verschijnen alleen op de Engelse aandelenpagina's.

Correcties

Fouten worden gevonden door de hierboven beschreven geautomatiseerde controles en door doorlichtingen van gepubliceerde pagina's. Elke fout wordt gecorrigeerd bij de bron ervan — in de gegevens, een berekening of een sjabloon — en de volgende nachtelijke rebuild brengt de correctie naar elke betrokken pagina; correcties worden vastgelegd in het interne ticketsysteem van het project. Er is momenteel geen openbaar kanaal om fouten te melden.