TradeScout

inzicht zonder hype insight without hype

Over TradeScout

Een gratis beleggingsplatform voor Europese particuliere beleggers — live koersen, grafieken met indicatoren, een portefeuille die het rendement wél goed uitrekent, een ETF-index over heel Xetra, en koersalerts. Zonder account, zonder advertenties, zonder tracking, zonder cookiebanner. Gebouwd in zes dagen, in de standaard­bibliotheek van Python, zonder ook maar één externe dependency.

Euronext-koersen lopen ±15 minuten achter. Dat staat op elk scherm erbij.

Online op
trade-scout.nlNederlands & Engels
Eerste bestand
22 juli2026 — zes dagen geleden
Regels code
23.607app, API en tests
Dependencies
0alleen Python-stdlib
Tests groen
365167 Python · 198 JS
Serverfuncties
1voor 32 endpoints
Databronnen
10publiek of gratis laag
Prijs
Gratisaccount niet nodig

01 Wat het is

TradeScout is één pagina om je eigen beleggingen bij te houden en de markt eromheen te volgen. Het is gemaakt voor de Europese particuliere belegger — het soort mens dat een paar ETF's aanhoudt bij een Nederlandse of Duitse broker en zou willen weten wat hij nou eigenlijk bezit en wat het werkelijk heeft opgeleverd.

De meeste tools in dit hoekje willen je brokerinloggegevens, willen een abonnement, of zijn zo Amerikaans dat een Euronext-notering ze in de war brengt. TradeScout wil niets van dat alles. Je typt in wat je hebt — of importeert de CSV van je broker — en de rest wordt in je eigen browser uitgerekend.

02 Waar het vandaan komt

Het begon op 22 juli 2026 als privégereedschap: iemand wilde een watchlist die Amsterdamse tickers liet zien zonder eerst in te loggen. Zes dagen later zat er een portefeuille in met tijdgewogen rendement, een ETF-index gebouwd op de officiële lijst van Deutsche Börse, een fiscaal jaaroverzicht voor je Box 3-aangifte, en bezoekers uit Duitsland en Italië die het op eigen houtje gevonden hadden.

Dat is de eerlijke ontstaansgeschiedenis, en het verklaart de vorm: het is ongewoon diep op de plekken waar één persoon het echt nodig had, en bewust leeg waar dat niet zo was.

03 Wat erin zit

Portefeuille
Posities in elke valuta, omgerekend naar euro's tegen live koersen. Tijdgewogen rendement, maximale terugval, geannualiseerde volatiliteit, beta en correlatie tegen S&P 500 / AEX / IWDA. Gerealiseerd resultaat volgens FIFO en geldgewogen rendement (XIRR) zodra je je transacties importeert. Meerdere portefeuilles, een dividendtracker, herbalanceer-hulp, en een fiscaal jaaroverzicht waarin de stand op 1 januari uit je transactiehistorie wordt gereconstrueerd.
Grafieken
Lijn of candlesticks, 1 dag tot Max, met SMA-overlays, RSI(14)- en MACD-panelen, volume en een crosshair-tooltip. Je eigen transacties staan in de grafiek; je koersdoel en stop uit het journaal ook, als stippellijn.
ETF-index
Twee lagen. Een keuzehulp met 152 UCITS-ETF's die je bij een Nederlandse broker koopt, te filteren op categorie, dividendbeleid en kosten. Daarachter ruim 3.425 producten, dagelijks rechtstreeks van de officiële Xetra-lijst — doorzoekbaar op naam, aanbieder, ticker of ISIN, met actief beheerde fondsen, ETC's, ETN's en hefboomproducten gemarkeerd zodat je ziet waar je naar kijkt.
Fundamentals
Marktkapitalisatie, K/W, marges, analistenkoersdoelen. Daaronder de jaarcijfers rechtstreeks uit de XBRL-indieningen van het bedrijf zelf bij de SEC, en echte dividendhistorie: wat er werkelijk is uitgekeerd, de groei over vijf jaar en het aantal jaren op rij verhoogd.
Alerts
Op koers, dagbeweging, RSI, of "10% onder mijn aankoopprijs" — gemeten vanaf je werkelijke gewogen instap over al je portefeuilles. Met een account bewaakt de server ze terwijl het portaal dicht staat en krijg je een melding op je telefoon.
En verder
Paper trading tegen echte koersen, een DCA-backtester, een kostencalculator, een technische screener, een correlatiematrix, een agenda met cijfers en ex-dividenddata, een journaal per ticker, Nederlands beursnieuws, de euro-rentecurve van de ECB, CFTC-posities, AFM-shortposities, en een installeerbare app die offline blijft werken.

04 Hoe het gebouwd is

De achterkant is Python zonder één externe package — alleen de standaardbibliotheek, van boven tot onder. HTTP, JSON, HMAC, hashing, CSV-verwerking, XBRL-uitlezen: allemaal stdlib. De voorkant is handgeschreven JavaScript zonder framework en zonder buildstap. De enige meegeleverde code van derden is TradingView Lightweight Charts (Apache-2.0, zelf gehost) voor de hoofdgrafiek; elke andere visualisatie — sparklines, heatmap, vergelijking, RSI- en MACD-panelen, allocatiebalken — is een eigen SVG-component.

Hetzelfde bestand, _portal.py, bedient zowel de lokale ontwikkelserver als de productieomgeving. Het gratis hostingpakket staat hooguit twaalf functies per project toe, dus alle 32 API-routes zitten achter één catch-all-functie met een rewrite ervoor.

De cache heeft twee lagen: het geheugen van de eigen instantie, met daarachter een gedeelde Redis. Een koude start leest uit Redis in plaats van bij de bron, en dat is precies wat voorkomt dat de koersbron een datacenter-IP gaat afknijpen. Redis bewaart waarden vijftien minuten langer dan hun houdbaarheidsdatum, zodat een verse instantie tijdens een storing nog steeds de laatst bekende koers kan tonen — een kapotte pagina is erger dan een koers van een kwartier oud.

Alle 365 tests draaien zonder netwerk. Dat is bewust: deze functies falen niet met een foutmelding, maar met een verkeerd getal, een stil verdwenen positie of een alert die nooit afgaat.

05 Vier keuzes die uitleg verdienen

Rendement is tijdgewogen, anders lijkt je eigen inleg winst

De naïeve portefeuillegrafiek telt elke euro die je bijstort als koerswinst. Eén storting die de pot verviervoudigde leverde een "dagrendement" van +300% op en tilde de geannualiseerde volatiliteit boven de 1.000%. De statistieken rekenen nu per dag met (waarde − wat je die dag zelf inlegde) / waarde gisteren, waarbij de kasstromen apart worden geteld in plaats van afgeleid uit de kostprijs — anders leest elke wisselkoersbeweging als een storting.

De ETF-gids klopte niet, en juist het controleren bewees dat

De gids van 152 fondsen is met de hand samengesteld. Toen hij eindelijk tegen de officiële Xetra-lijst werd gelegd, rolden er zes fouten uit: drie fondsen stonden als herbeleggend gemarkeerd terwijl ze uitkeren (of andersom), en bij drie andere hoorde de ISIN bij een ánder fonds dan de naam ernaast. Dat laatste telt zwaar — die ISIN is precies wat er in de zoekbalk van je broker geplakt wordt. ISIN, ticker en kosten komen nu uit beursdata in plaats van uit het hoofd, en een offline test controleert van elke ISIN het controlecijfer.

Twee apparaten die synchroniseren mogen geen werk kwijtmaken

De sync duwt het hele document, dus "de laatste wint" zou stilletjes weggooien wat het andere apparaat had gedaan — terwijl het scherm opgewekt "opgeslagen" meldt. Elke push stuurt daarom mee welk tijdstempel de client dacht te hebben; is het opgeslagen document nieuwer, dan geeft de server een 409 met dat document erbij en voegt de client samen met exact dezelfde functie die ook bij inloggen wordt gebruikt. Zonder dialoog, want er valt niets te kiezen.

Een account is optioneel, en de alternatieven zijn echt

Het hele portaal werkt zonder account; alles blijft dan in je browser en er gaat niets naar de server. Maar browseropslag is niet blijvend — WebKit ruimt hem op na zeven dagen zonder bezoek — dus er zijn twee uitwegen waarvoor je geen e-mailadres hoeft achter te laten. Een overzetcode parkeert je gegevens een kwartier in Redis onder een code van acht tekens, precies één keer op te halen. Of een tijdelijk account: geen naam, geen adres, alleen een willekeurig nummer en een herstelcode van zestien tekens die uitsluitend als hash wordt bewaard. Dat is bewust een kale SHA-256 en geen HMAC: er een sleutel aan hangen zou "het geheim roteren" veranderen van "iedereen moet opnieuw inloggen" in "iedereen is zijn account definitief kwijt".

06 Privacy

Geen advertenties, geen trackers, geen verkoop van gegevens — in de privacyverklaring opgeschreven als belofte, niet slechts als huidige stand van zaken. Eén functionele sessiecookie, en alleen nadat je inlogt. Daarom is er ook geen cookiebanner.

Bezoekers worden anoniem geteld: geen cookies, geen opgeslagen IP-adressen. Unieke bezoekers per dag via een onomkeerbare hash die dagelijks wisselt, zodat gisteren en vandaag niet aan elkaar te koppelen zijn. De browsertaal wordt geaggregeerd geteld, los van enig bezoek — zo vielen die Duitse en Italiaanse bezoekers überhaupt op. Lees de volledige privacyverklaring.

07 Wat het niet doet

Lees dit stuk

Dit is een zes dagen oud project op een gratis hostingpakket met een daglimiet. Het is oprecht bruikbaar en oprecht onaf, en de beperkingen hieronder gaan je later niet verrassen.

Gebouwd door één persoon in Nederland, in zes dagen, met Claude Code (Opus). Python 3-standaardbibliotheek · vanilla JavaScript · TradingView Lightweight Charts · een eigen Redis-server in Nederland. Data van Yahoo Finance, SEC EDGAR & XBRL, Finnhub, FRED, de ECB, de CFTC, de AFM, Deutsche Börse, Google Nieuws en alternative.me.

Feedback komt rechtstreeks bij de maker terecht via het tekstballonnetje in de kopbalk van het portaal — ingelogd of anoniem.

Koersen kunnen vertraagd zijn. De signalen zijn puur technisch en informatief en vormen geen beleggingsadvies. De cijfers op deze pagina zijn gemeten op 27 juli 2026.

About TradeScout

A free investing portal for European retail investors — live quotes, charts with indicators, a portfolio tracker that does the return maths properly, an ETF index covering the whole of Xetra, and price alerts. No account needed, no ads, no tracking, no cookie banner. Built in six days, in Python's standard library, with no runtime dependencies at all.

Euronext quotes run ~15 min behind. The site says so, on every screen.

Live at
trade-scout.nlDutch & English
First file written
22 Jul2026 — six days ago
Lines of code
23,607app, API, tests
Dependencies
0Python stdlib only
Tests passing
365167 Python · 198 JS
Serverless functions
1routing 32 endpoints
Data sources
10public or free tier
Price
Freeno account required

01 What it is

TradeScout is a single page for keeping track of your own investments and the markets around them. It is aimed at European retail investors — the sort of person who holds a few ETFs at a Dutch or German broker and would like to know what they actually own and what it actually returned.

Most tools in this space either want your brokerage credentials, want a subscription, or are American enough that a Euronext listing confuses them. TradeScout wants none of those. You type in what you hold — or import your broker's CSV — and everything is computed in your browser.

02 Where it came from

It started on 22 July 2026 as a private tool: one person wanted a watchlist that showed Amsterdam tickers without a login. Six days later it had a portfolio tracker with time-weighted returns, an ETF index built from the official Deutsche Börse listing, a tax year overview for the Dutch Box 3 declaration, and visitors from Germany and Italy who found it on their own.

That is the honest origin story, and it explains the shape of the thing: it is unusually deep in the places one person actually needed, and deliberately empty where they did not.

03 What's in it

Portfolio
Positions in any currency, converted to EUR at live rates. Time-weighted return, max drawdown, annualised volatility, beta and correlation against S&P 500 / AEX / IWDA. FIFO realised gains and money-weighted return (XIRR) once you import transactions. Multiple portfolios, a dividend tracker, rebalancing help, and a Dutch tax-year overview with the 1 January valuation reconstructed from your transaction history.
Charts
Line or candlestick, 1D to Max, with SMA overlays, RSI(14) and MACD panels, volume and a crosshair tooltip. Your own trades appear on the chart; so do your journal's target and stop, as dotted lines.
ETF index
Two layers. A hand-curated guide of 152 UCITS ETFs buyable at Dutch brokers, filterable by category, distribution policy and cost. Behind it, roughly 3,425 products pulled daily from the official Xetra list — searchable by name, provider, ticker or ISIN, with actively managed funds, ETCs, ETNs and leveraged products flagged so you can see what you are looking at.
Fundamentals
Market cap, P/E, margins, analyst targets. Below that, annual figures straight from the company's own XBRL filings at the SEC, and real dividend history — what was actually paid, five-year growth, consecutive years increased.
Alerts
Price, daily move, RSI, or "10% below my average entry" — measured from your real weighted cost across every portfolio. With an account the server watches them while the site is closed and pushes to your phone.
And
Paper trading against live prices, a DCA backtester, a cost calculator, a technical screener, a correlation matrix, an earnings and ex-dividend calendar, a per-ticker investment journal, Dutch market news, ECB yield curves, CFTC positioning, AFM short positions, and an installable app that keeps working offline.

04 How it's built

The backend is Python with no third-party packages — standard library only, top to bottom. HTTP, JSON, HMAC, hashing, CSV parsing, XBRL extraction: all stdlib. The frontend is hand-written JavaScript with no framework and no build step. The only vendored code is TradingView's Lightweight Charts (Apache-2.0, self-hosted) for the main chart; every other visualisation — sparklines, heatmap, comparison, RSI and MACD panels, allocation bars — is a bespoke SVG component.

The same file, _portal.py, serves both the local development server and production. On the free hosting tier a project may have at most twelve functions, so all 32 API routes live behind one catch-all function with a rewrite in front of it.

Caching is two-layer: per-instance memory in front of a shared Redis. Cold starts read from Redis rather than hitting the upstream source, which is what keeps the quote provider from rate-limiting a datacenter IP. Redis holds values fifteen minutes past their TTL so that stale-while-error works even for a freshly started instance during an outage — a broken page is worse than a slightly old price.

All 365 tests run without a network. That is deliberate: these functions do not fail with an error message, they fail with a wrong number, a silently vanished position, or an alert that never fires.

05 Four decisions worth explaining

Returns are time-weighted, because otherwise deposits look like profit

The naive portfolio chart treats every euro you add as a gain. One deposit that quadrupled the pot produced a "daily return" of +300% and pushed annualised volatility past 1,000%. The statistics now compute per day as (value − what you deposited that day) / yesterday's value, with cash flows counted separately rather than inferred from cost basis — otherwise every exchange-rate move reads as a deposit.

The curated ETF list was wrong, and checking it proved it

The 152-fund guide was assembled by hand. When it was finally checked against the official Xetra listing, six errors fell out: three funds labelled accumulating when they distribute (or the reverse), and three ISINs that belonged to a different fund than the name beside them. That last category matters — the ISIN is what gets copied into your broker's search box. ISIN, ticker and cost now come from exchange data instead of from memory, and an offline test verifies the check digit of every ISIN.

Two devices syncing must not silently lose work

Sync pushes the whole document, so last-write-wins would quietly discard whatever the other device did — and the UI would cheerfully say "saved". Every push now carries the timestamp the client believed it had; if the stored document is newer the server returns 409 with that document attached, and the client merges using exactly the same pure function it uses when you log in. No dialog, because there is nothing to choose.

Accounts are optional, and the alternatives are real

The entire portal works with no account; everything lives in your browser and nothing reaches the server. But browser storage is not permanent — WebKit clears it after seven days without a visit — so there are two ways out that don't require an email address. A transfer code parks your data in Redis for fifteen minutes under an eight-character code, retrieved exactly once. Or a temporary account: no name, no email, just a random identifier and a 16-character recovery code stored only as a hash. It is a plain SHA-256 and not an HMAC on purpose — keying it would turn "rotate the secret" from "everyone logs in again" into "everyone loses their account permanently".

06 Privacy

No ads, no trackers, no data sold — stated in the privacy policy as a commitment rather than a current state of affairs. One functional session cookie, and only after you log in, which is why there is no cookie banner.

Visitors are counted anonymously: no cookies, no stored IPs. Unique visitors are counted per day through an irreversible hash that changes daily, so yesterday and today cannot be linked. Browser language is counted in aggregate, unlinked to any visit — that is how the German and Italian visitors were noticed in the first place. Read the full privacy policy.

07 What it doesn't do

Read this part

This is a side project six days old, running on a free hosting tier with a daily ceiling. It is genuinely useful and genuinely unfinished, and the limitations below are not going to surprise you later.

Built by one person in the Netherlands, in six days, with Claude Code (Opus). Python 3 standard library · vanilla JavaScript · TradingView Lightweight Charts · a self-hosted Redis server in the Netherlands. Data from Yahoo Finance, SEC EDGAR & XBRL, Finnhub, FRED, the ECB, the CFTC, the AFM, Deutsche Börse, Google News and alternative.me.

Feedback goes to the maker directly, through the speech-bubble button in the site's header — logged in or anonymously.

Prices may be delayed. Signals are technical and informational and do not constitute investment advice. Figures on this page were measured on 27 July 2026.