playitsmart.nl

Back to home

11 May 2026 · 4 min read

Post #1

Which stock actually belongs to which exchange?

How a seemingly simple question turns into an afternoon of decisions

A trading system needs a universe. A list of stocks it's allowed to pick from. For me that was clear: every company in the S&P 500, plus every company in AEX and AMX. Five hundred American, fifty-four Dutch, done.

The S&P 500 took one call to my data provider. Three seconds. Fifty-four Dutch stocks took an entire afternoon.

What is an endpoint, anyway

Quick aside, because this word is going to come up a few more times. My data provider is Financial Modeling Prep. They have a menu, and every menu item has a fixed question you can ask. "Give me all companies in the S&P 500", "give me Apple's price today", "give me Tesla's annual profit". Each menu item is called an endpoint. A fixed address with a fixed answer format.

If there is no endpoint for what you want to know, you can't ask. Problem for today.

No endpoint for AEX

FMP has an endpoint for the S&P 500. No endpoint for AEX. No endpoint for AMX. Tried ten variants, all ten gave me a 404. Makes sense in hindsight: FMP is American, S&P 500 is their core business, European indexes are a sidekick.

Plan B seemed simple. Take all Dutch stocks above one billion euros in market cap. Roughly good.

Until I asked myself: "roughly good" for a system that's going to hold ten thousand euros of my own money?

Not good enough.

Hardcoded lists as the right call

Hardcoded sounds like a dirty word. In software you're supposed to automate the work, not maintain lists by hand. But for data that changes four times per year, can be perfectly documented, and where precision matters more than elegance, hardcoded is actually the right call. An exception, not laziness.

First source: investing.com. AEX should have thirty members there.

Except investing.com was off. Some companies that had left the index were still shown. AMX was worse: twenty-four members instead of twenty-five. Then it hit me that IEX exists, a Dutch investor website with daily updated data. Two screenshots later: AEX at twenty-nine members, AMX at twenty-five, totaling fifty-four.

Plot twist 1: country versus exchange

Wrote a quick test script that tried all fifty-four tickers against FMP. Seventeen failed.

First reaction: I need to fix those tickers.

Second reaction, after reading the errors: no, my check itself is wrong. I asked the system "give me all tickers where the country is Netherlands". But Shell is registered in London. ArcelorMittal in Luxembourg. DSM-Firmenich in Switzerland. They all trade on Euronext Amsterdam, but their corporate headquarters are elsewhere.

What actually matters for a trading system: does this stock trade on AMS, in EUR? Not: where is the corporate office.

Check adjusted to "exchange is AMS". From seventeen failures, four remained.

Plot twist 2: guessing tickers

Those last four I hadn't pulled from a list. I'd guessed them based on standard Euronext naming. Wrong.

FMP fortunately has a search endpoint. Searching by company name:

  • Magnum Ice Cream: ticker MICC.AS, not MAGM.AS like I guessed
  • Air France-KLM: ticker AF.PA, primary listing in Paris, not Amsterdam
  • Fagron: ticker FAGR.BR, Brussels
  • WDP: ticker WDP.BR, also Brussels

Three of the four don't have their primary listing on Amsterdam at all. They appear on the IEX AEX/AMX page because Euronext is an integrated group. But if I want to trade them, I'd need to place orders in Brussels or Paris, not Amsterdam.

The decision

Three options on the table:

  1. Strict AMS only: skip the three cross-listed companies. AEX twenty-eight plus AMX twenty-three, totaling fifty-one tickers.
  2. All Euronext: mixed convention .AS/.BR/.PA, full coverage.
  3. Hybrid with exceptions.

Option 1 won. Three reasons. It aligns with an earlier decision to write all Dutch tickers with the .AS suffix. Order placement at my broker is per exchange, mixed conventions create complications. And WDP is a real estate REIT that my strategy excludes anyway.

What an AEX member actually is

A simple question turned into an afternoon of decisions. Not because I was making it difficult, but because reality is difficult.

An AEX member is not the same as a stock that trades in Amsterdam. A ticker is not the same as a symbol at a data provider. A source is not automatically correct.

The win from today isn't the fifty-one tickers now in my config. The win is that I now know why it's fifty-one, not fifty-four. That explanation lives in a decisions document. In six months I'll still understand why.

Precision over convenience. For real-money systems, that's not overkill. That's the baseline.

Follow weekly?