2 May 2026 · 5 min read
Post #1The moment my trading system formed an opinion
From a design on paper to a ranked list of 462 stocks. Two days of work, three perspectives, not a line of code from my keyboard.
A week ago my trading system existed only on paper. A design document with factor groups, exit triggers and theoretical weights. Nothing that looked at live stocks, nothing that made a statement.
Today, two days of work later, I can literally ask the system: which stocks would you buy today? And the answer comes back, not as feeling or hunch, but as a ranked list of 462 stocks with a score for each.
Here is how that happened.
What is this exactly
Quick context. I am building playitsmart.nl, an automated trading system that goes live end of June with 10,000 euro of my own money. It selects stocks based on four factors: how strong are the fundamentals (quality), how much do you pay for them (value), how is the price action (momentum), and are there recent positive events like earnings beats or buybacks (catalyst). No human decides. The system ranks, the system signals.
What it has been doing the past two days is learning to rank. And that is the most fun part of building.
Who writes the code
Important to say up front: I do not type a single line of code myself. Not on principle, but because I committed to this experiment to see how far you can get with AI as the builder.
How it works: I design what needs to be built. Claude (my AI sparring partner, called Harry de hulp in this project) helps think, writes prompts and reviews. Cursor, an AI coding tool, writes the actual code. Then I review the result and we test together whether it works. Three perspectives on every decision.
I repeat that pattern all day. Designing, prompting, reviewing, testing. My own value sits in making choices, asking questions the AI does not ask, and recognizing when something is off. The AI does the writing.
Step one: getting the data in
A trading system without data is an empty shell. So I started by pulling in prices.
My data comes from FMP, an American data provider that tracks daily financial information for thousands of companies and makes it available to developers through an interface. Their service costs money, but gives me access to 5 years of daily prices, quarterly reports, and analyst forecasts for pretty much every listed company worldwide.
My trading universe consists of 554 stocks: roughly 500 from the S&P 500 (the largest American companies) plus 54 Dutch stocks from AEX and AMX. For each of those 554, I wanted the past 5 years of daily prices.
That is 686,804 data points. All in my database, which in my case is Supabase, an online database service you can fill like Excel but with millions of rows and lightning fast queries.
Step two: building factors, one by one
With all those prices I now had the input. But the system had to learn what they mean. For that I built four factors, each a separate angle on a stock.
Momentum went first. Simple idea: stocks that have done well over the past 12 months often continue to do well in the months ahead. Not always, but academic research over decades shows a statistical edge. For every stock, my system calculates the return over the past 12 months, converts it to a z-score (more on that in a moment), and produces a ranking.
Value came next. How much do you pay for what a company produces? Cheap is good, expensive is bad. I measure valuation through four ratios: free cash flow yield, enterprise value over earnings before depreciation, and two other classics.
Quality was the third. Good companies tend to outperform bad ones over the long run. But what is "good"? In my case: high return on invested capital, low debt, healthy growth in free cash flow. Companies that deliver quality of earnings instead of buying growth with debt.
Catalyst was the fourth. Recent earnings beats? Buybacks? Positive analyst revisions? This is the most time-sensitive factor: positive today, possibly different a month from now.
Each factor has its own formula, its own logic, its own pitfalls. But all four produce the same thing: a z-score per stock.
What is a z-score, exactly
Quick explanation. A z-score tells you how far you deviate from the average, measured in standard deviations.
Say: the average momentum across my 554 stocks is 36 percent over the past 12 months, with a standard deviation of 154 percent. A stock up 50 percent gets z-score plus 0.09. Slightly above average. A stock up 200 percent gets plus 1.07. Top quartile.
The beauty of z-scores: they make factors with completely different scales directly comparable. You cannot just add momentum in percent to ROIC in percent, they have totally different distributions. Z-scores put everything on one scale: standard deviations from the mean.
Why multi-factor
With four factors and z-scores per stock, the final step is the weighted sum. Quality weighs the heaviest (fundamentals are more durable than momentum), followed by Value, Momentum and Catalyst.
The reason for that mix is simple. A momentum-only system mostly buys what has already won. Often expensive, often hype. A value-only system mostly buys what has been declining for a while. Often for good reason. Only by combining multiple factors do you get confirmed signals: stocks that align across multiple independent dimensions. Not the extreme winners on one factor, but reasonable winners on all four.
And then the first list arrived
Two days ago this was a collection of working code modules. Today it is a system that has an opinion. No money invested. No backtest run. But the output is concrete, traceable and arguable.
The system produced its first top 5 BUY signals today. Not what I expected. No NVIDIA, no Microsoft, no Apple. For some tech watchers maybe disappointing.
That is what the next blog is about. What is in my top 5, why exactly those names, and what that says about multi-factor investing. Plus an honest conversation about what stood out and where I have my doubts.
The difference between working code and a working system sits in that moment. The code worked for a few days. The system works today.