Bumps and Bruises: Trading Bot Mistakes Nobody Warns You About (Part 1)

Last Updated 07/14/26

Trading bot mistakes - Bumps and Bruises Part 1 - Bot and Bull

There is a version of this story where I tell you I built a trading bot, made none of the classic trading bot mistakes, and now I’m printing money. That would be a much shorter post. This is the other version — the one where things broke in ways I didn’t expect, at times I definitely didn’t want, and where I learned more from the failures than from anything that went right.

This is Part 1 of what I suspect will be a long series.

The Bot Was Live. The Protection Wasn’t.

When you run an automated trading system, you think about entries. You think about scoring, signals, when to buy. What I didn’t think hard enough about — at least not at first — was what happens to open positions after the market closes.

My stop updater ran during regular market hours. Every few minutes it would check each position, compare the current price to its stop level, and adjust if the math called for it. Clean, automated, exactly what I designed it to do.

What I hadn’t fully built out was what happens between 4 PM and 9:30 AM the next morning.

The answer, for a while, was nothing. Positions sat overnight with stops that couldn’t be actively monitored. If something moved against me in extended hours — an earnings surprise, a news event, a sudden gap — there was no system watching it. The stops were there, resting as open orders, but nobody was home to react if something went wrong.

The fix was building an entirely separate component — a night guard — that picks up exactly where the stop updater leaves off. Regular hours end, night guard activates. Extended hours end, it goes quiet. The handoff is clean now. But getting there required first realizing the gap existed, which only happened because I was paying close attention to what the system was and wasn’t doing at every hour of the day. Trading Bot mistakes #1. For this article at least.

Lesson: Automation doesn’t protect you from the gaps in your automation.

The Day the Scores Tied

Here’s a thing that can happen when you’re scoring stocks with a multi-factor model: every single candidate can end up with the exact same score.

That’s what I woke up to one morning. The system ran, produced its ranked list, and the top twenty names were all tied. Not similar scores — identical. The sorting had fallen back to alphabetical order because there was nothing to sort by. The model had stopped discriminating.

I won’t go into the mechanics of why it happened or how I fixed it — that’s the part that stays proprietary. But I’ll tell you what it felt like: unsettling in a specific way that only comes from realizing your system has been confidently wrong in silence. It wasn’t crashing. It wasn’t throwing errors. It was running perfectly and producing meaningless output.

I paused the live trading cron that day, rebuilt the relevant piece of the scoring logic, ran a dry test to confirm real spread in the results, and then made the call to go live again — same day, with one run of validation under my belt and real money on the line. Not comfortable. Necessary. Trading Bot mistakes #2.

Lesson: A system that doesn’t fail loudly is harder to fix than one that crashes. Silence isn’t the same as correct.

The Data That Was Never There

For the first several weeks of live trading, I thought I was saving my data. I had a file that logged every buy — symbol, price, shares, the factors that drove the score. It felt like a record.

What I eventually realized was that the file was being overwritten every time the scanner ran. Not appended. Overwritten. The previous run’s data simply ceased to exist the moment a new run completed.

I discovered this at the worst possible time: the night I needed to go back and look at the exact factor breakdown for a specific buy, to understand why the system had bought what it bought. The data was gone. Not corrupted — just gone, replaced by that afternoon’s output.

That was the night I built a proper database. Every run now gets its own permanent row. Every scored candidate, every buy, every gate pass and failure — all of it written once and never touched again. Going back weeks to understand a trade is now possible. Before that night, it wasn’t. Trading Bot mistakes #3.

Lesson: “Saving data” and “having a durable record” are not the same thing. Know the difference before you need it.

The Bug That Was One Word

The bot is designed to work through a ranked list of candidates and buy the best ones until it runs out of buying power. Straightforward enough.

What it was actually doing — for longer than I’d like to admit — was stopping entirely the moment it hit a candidate it couldn’t afford. Not moving to the next one. Stopping. Which meant if the top candidate was priced out of reach, nothing got bought at all, regardless of what was further down the list.

The fix was a single word in the code. One word, in the right place, and the behavior changed completely. But finding it required looking at a real trade, noticing that something was off about which position had been bought, and tracing it back through the logic until the word revealed itself. Trading Bot mistakes #4. Ughhh!

Lesson: The smallest bugs are sometimes the ones with the biggest behavioral consequences. Read the code like it means exactly what it says — because it does.

This Is What Trading Bot Mistakes Actually Look Like

None of these stories are the ones I planned to write when I started this project. I planned to write about strategy and signals and the theory behind the approach. And I will — that content is coming.

But the trading bot mistakes are real, and I think they’re more useful to anyone building something similar than a polished version of events would be. Every one of these failures made the system more reliable. Every one of them was invisible until it wasn’t.

If you’ve been following along from the beginning, you already know what I’d do differently if I started over. This post is the companion to that one — the specific moments where the gap between “what I planned” and “what actually happened” showed up and forced a fix.

Part 2 is already written — just not published yet. It involves a rate limit, a shared authentication token, and ten open positions that briefly had no protection at all. That one was a longer day.

If you’re building something like this and you haven’t hit your first major unexpected failure yet — you will. The goal isn’t to avoid them. It’s to catch them fast, fix them cleanly, and know what to watch for next time.

Steve is the founder of Bot and Bull. He personally uses every tool reviewed on this site and only recommends what he genuinely believes in — no press releases, no paid placements.

BotAndBull.com may earn commissions when you sign up for platforms or tools through links on this site. This does not influence our content. Nothing on this site constitutes financial, investment, or trading advice. Content reflects the author’s personal experience building and operating an automated trading bot. Past performance of any trading strategy or bot is not indicative of future results. AI tools are used to assist with content research, outlining, and drafting; all content is reviewed and approved by a human author before publishing. Promotional amounts, terms, and availability are set by each platform and can change at any time. Always review and confirm the current offer before signing up. Terms apply. Full Disclosure →

Leave a Comment