Backtest and bot share one function
Deciding and filling are the same code in backtests and in the worker. Replaying the scheduled run over past trading days on real QQQ data matched the backtest down to the fills.
Runs rule-based strategies on US daily bars from Toss Securities' Open API, compares them in backtests, and paper-trades them on a schedule. No real orders, and every decision is explained in plain words.

The end goal is automated trading. The first milestone is smaller on purpose: a bot that paper-trades on a schedule for two weeks with nobody touching it, and no code path to a real order at all.
It's built so someone who doesn't know stocks can follow along. Strategies have nicknames (“slow trend rider” is the 50/200 golden cross), settings are choices, and each decision reads like “It's trending up. Buy QQQ when the market opens tomorrow.” It's a private tool, so there's no link; the screenshots use synthetic data, since Toss market data can't be shared.




Deciding and filling are the same code in backtests and in the worker. Replaying the scheduled run over past trading days on real QQQ data matched the backtest down to the fills.
Toss starts filling in the day's bar before the US market even opens. Only bars two hours past the close count, and a later change triggers a re-sync.
Unique keys on bot, symbol and trading day, one pending order per bot, and an advisory lock so only one worker runs. Evaluating the same bar again does nothing.
On QQQ since 2000, the 50/200 cross made 10.5% a year with a −36% worst drop, against 8.1% and −83% for holding. Since 2010, holding wins on return.
Not investment advice. Every order is simulated, and the screenshots use synthetic data.