Automated options trading system
SPY 0DTE TradeBot

From market open to close, it watches every tick, sizes up momentum, and places real risk-minimized options trades without any manual intervention.

See it in action →
--:--:--
LIVE
SPY · last ·
VWAP
ROC 5m
RSI 14
Trend
Regime
Open Pos
Txns
0
Blocked
0
Day Type
Threshold
Session P&L
net realized + unrealized
unrealized
realized
Data Health
Initializing…
P&L by Minute
Events
Replay starting…
Architecture

How it works

01 / 05
WS
01 — Live data stream
Every tick retrieved in milliseconds
Tick-by-tick SPY equity and options chain data arrives via Schwab WebSocket. Every price update is dispatched to the signal engine before the next one arrives without batching or polling.
+THRESH −THRESH ▲ CALL ▼ PUT KALMAN VELOCITY
02 — Momentum signal detection
The signal layer watches every tick
On each update, the signal layer evaluates Kalman-filtered price momentum against a calibrated threshold. When velocity crosses the threshold, a buy signal fires — CALL on the way up, PUT on the way down.
▲ SIGNAL IN RSI gate RSI 54.2 — within range Regime gate bull trend — confirmed Position cap 0 of 2 slots used ORDER ↓
03 — Risk & gate layer
Every signal goes through the gate
Before any order is placed, the system checks RSI, market regime, and concurrent position limits to ensure it's safe to fire. Orders are then placed and verified with minimal latency.
TIME CONTRACT ENTRY EXIT P&L REASON SESSION NET
04 — Live order execution
Real orders, on a real account
Qualifying signals place actual 0DTE options orders via Schwab's REST API. The system selects the strike by delta, manages trailing stops and take-profits automatically, and logs every fill in real time for future analysis.
CONFIG THRESHOLD WIN RATE SESSION P&L STATUS
05 — Simulation & optimization
Every session makes the next one smarter
After each session, trade data is fed into a Bayesian table to optimize live parameter configurations for future sessions.
Demo
Full
Dashboard
Replay mode

The same UI that runs during live trading with a real partial session replay showing actual signals, orders, and P&L.

Open Dashboard →
Background

How and why I 'built' this

In my own words, no AI copy

When I first learned about stock options, they scared me. "Investing" in them seemed like a good way to burn money quickly, so I vowed I'd never touch them. A few years later, I was shocked and appalled at the rise of 0-days-to-expiration (0DTE) options. As if there wasn't enough market volatility already, it seemed like the massive volume of short-dated options was causing the market to swing even more violently. Then I started tracking the price action on 0DTE SPY options. I could immediately see the appeal.

0DTE options on SPY whipsaw back and forth on every little price swing. They are torqued up and ready to run, cutting either for or against your P&L with every tick. I was certainly terrified by them, but I also understood their potential to amass (or destroy) capital, so I decided to try my hand at trading them manually. After some mixed results — okay, it was one positive month followed by a down month where I lost all of my first month's profits — I knew that it wasn't for me. The stress of trying to time SPY moves and make trades was too much. But I knew that the potential was still there.

Of course I'd been inundated with stories of the magic of vibe coding and how it allowed anyone to slop a project together, but I was skeptical. I had used a few AI tools in the past with varying degrees of success — there was no way that I could actually deploy anything vibe-coded to trade my own money… right?

In late February 2026, after swearing off trading 0DTEs on my own, I decided to enlist Claude to see if it could help me. It's simple, right? SPY goes up → buy calls, SPY goes down → buy puts. It started with a simple prompt: "how can I identify momentum as it starts?" I didn't know about any of the existing infrastructure that could be leveraged to take that simple concept and turn it into a functioning tool.

Claude (with some help from Gemini) helped me to learn a lot about Charles Schwab's REST API and WebSocket framework, the backend tools to get the plumbing all connected, and also about Flask and web tools to be able to visualize everything as it happens. After realizing that I could get second-by-second SPY and SPY options ticks, and that I could actually place orders nearly instantaneously, I knew that it was an avenue worth pursuing.

Over the next couple of weeks, I used Claude to help me research, plan out, and build a custom platform to continuously stream market data, analyze the quotes it retrieves, and place orders, all autonomously. It began as a crude tool: a Python script that used a basic strategy and wrote everything to the terminal. That made my eyes bleed, so I prompted my way into creating a dashboard to house all of the live market data I was logging along with trackers for all of the different strategies I wanted to test.

As I logged these early paper trades, I continued to dig into trading strategies and implemented refinements as I went. At one point, I was running 26 different test variants concurrently during live market hours! I quickly learned that being able to backtest different configurations against the SPY tick data that I had accumulated was a must, so I had Claude help me build that out, which led to discovering that the variant using a Kalman filter was outperforming the rest at detecting SPY momentum early.

Diving into multiprocessing allowed me to build out a robust simulation tool to sweep over dozens of config tweaks for weeks of SPY tick data at a time, which I then used to fine-tune the parameters the signal algorithm uses. But after deploying, it was apparent that a single parameter set was overfitting to the sample data that I had collected, so I studied up on tuning strategies. Claude helped me cook up a Bayesian lookup table that dynamically adjusts signal parameters in response to varying market conditions. As I accumulate more trade data daily, it feeds back into the table to refine its recommendations for future sessions.

So where are we now? I'm currently running this tradebot daily with real (albeit small) money trades, and it's showing a lot of promise. The slippage on real fills for my orders is eating into the edge that the tradebot had when it was only creating paper trades, but it is consistently bringing in capital. I'm excited to continue to optimize the bot's performance in hopes that it can continue to scale up.

This was my first big vibe coding project, and while it isn't yet the infinite money glitch that I had imagined, I'm really proud of what I've accomplished with it. Along the way, I have learned so much about system architecture, testing and debugging, data analysis, and quantitative concepts. But perhaps most importantly, I have gained a deeper appreciation for the power of the tools at my disposal. I now feel much more confident in my ability to leverage AI to learn and to create new things, and I know that's going to be priceless in our ever-accelerating world.

Tweaks
Accent color
Hero background
Dashboard tilt