Most of the 0DTE credit spread content floating around the internet describes the same trade: sell something far out of the money, collect $30 to $80, and put $500 to $1,000 of defined risk behind it. The win rate on that structure looks spectacular. The math behind it is brutal — a handful of losers can erase a quarter of winners, and one fast move against you can cost several times what you collected.
The EMA Open bot flips that ratio on its head. On a defined-risk XSP spread it risks a small, capped amount to make a comparable or larger one, and the worst case is fixed the moment the position goes on. The win rate is far lower than the far-OTM crowd advertises — it loses more trades than it wins — and that is the entire point: when a loser costs a fraction of what a winner pays, you no longer need to be right nine times out of ten.
This article walks through a full week of that bot running with real money — the broker fee problem that forced an account move mid-week, how the fills got imported and reviewed in MyATMM, the risk philosophy driving the position sizing, and the four-year backtest that sits behind it all. If you want the wider context first, our earlier overview of 0DTE options trading bots for small accounts and their backtest results covers the general approach these bots share.
Here is the public description of the strategy, in full:
That last sentence carries more weight than it looks like it does. A bot that trades every single signal is easy to build. A bot that generates a signal, looks at the terms available, and then declines to place the order is making a judgment call about whether the trade is worth having. About half of signal days end with no position at all.
Once an entry does fill, there is a take-profit target working. Beyond that, the position is left alone for the session. No stop loss, no intraday management, no watching a screen — which is possible only because of how the risk is structured, covered further down.
The exact entry conditions, spread construction, and profit-target placement are part of the paid bot package, so they are not detailed here. What is public is the shape of the strategy and every number the backtest produced.
XSP is the Mini-SPX index option — the same S&P 500 exposure as SPX, sized at roughly one-tenth of it. For an account measured in the low four figures, that ratio is the difference between a strategy being usable and being theoretical.
That last point comes with an asterisk, and it is the one that cost this bot an account move.
XSP and SPX are cash-settled. When one of these options finishes in the money, no shares change hands — the difference is simply settled in cash. There is nothing to deliver, nothing to assign, and no share position to clean up on Monday morning.
Despite that, several brokers still charge an exercise or assignment fee when you let a cash-settled index position run to expiration. It is worth understanding before you pick where a small-account strategy is going to live.
| Broker | Exercise / assignment fee on cash-settled index options |
|---|---|
| TastyTrade | Charged — roughly $5 per leg |
| Tradier | Charged |
| Schwab | Not charged |
| Public.com | Not charged |
Run the arithmetic against a strategy where the average winning trade is in the $50 neighborhood. A two-leg spread left to settle at roughly $5 a leg is $10 off the top — a fifth of the win, on a trade the bot already got right. Do that a few times a week and the fee line stops being a rounding error and starts being a meaningful share of the strategy's output.
None of this is a recommendation about where to hold an account. Fee schedules change, and every broker balances commissions, fees, platform quality, and execution differently. The takeaway is narrower: read your broker's fee schedule for exercise and assignment on cash-settled index products before you build a strategy that regularly lets positions run to expiration. If your broker does charge, closing before the bell avoids it — but that changes how the strategy behaves, which is a trade-off worth making deliberately rather than discovering on a statement.
A daily 0DTE bot generates a lot of fills. Entry legs, exit legs, expirations, and the occasional stray transaction add up fast, and typing that into a spreadsheet is exactly the chore that quietly stops happening after a few weeks. The end-of-week routine here takes about two minutes.
Because the account moved mid-week, this particular import needed two files. Both went through the AI CSV import on the Import/Export screen, one after the other.
The first attempt at this import stalled and then came back with an error saying nothing could be imported. The cause was not the importer — it was the wrong export.
TastyTrade lets you export order history and transaction history, and they are very different files. Order history is a record of orders you submitted. It contains no fills, so there is literally nothing for a cost basis tracker to import. Transaction history is the record of what actually executed, which is what you want.
Re-exporting the transaction history and dropping it in produced a near-instant parse. If your import comes back empty from TastyTrade, check which history you exported before you check anything else.
Once everything is in, two screens do the work. The Dashboard shows the account balance and week-over-week performance — useful for spotting whether the bot is grinding forward or stalling. Note that a mid-week account move temporarily distorts the balance figure, since two partially funded accounts get combined until the transition settles.
The Strategy Summary screen is where the trade-by-trade picture lives. For the reviewed week it listed each day individually — Monday through Friday, all five days closing green with a small profit. Small is the operative word. This is not a strategy that produces one enormous day; it produces a lot of modest ones and relies on the losses being modest too.
If you track spreads more broadly, the same views handle any defined-risk structure. Our rundown of the best credit spread trackers for options sellers covers what to demand from those screens whether you are running a bot or entering trades by hand.
"No stop loss" sounds reckless until you look at the structure. On a defined-risk credit spread, the maximum loss is fixed the instant the order fills. The long leg is the stop. There is no scenario where the position keeps bleeding past that number, no matter what the index does.
Compare that with the far-OTM approach. Selling a five- or ten-point-wide SPX spread far from the money means putting $500 to $1,000 of defined risk behind $30 to $80 of credit. As long as price stays away, it works beautifully. When price starts drifting toward your strikes — or gaps toward them — you are watching a position that can cost several times what you collected. Managing that requires either a hard stop that locks in a loss well above the credit, or an eyeball on the screen all day.
There is a second effect worth naming. If you have watched SPX intraday for any length of time, you know it rarely moves in a straight line. A sharp drop in the morning frequently gets partially or fully recovered by the afternoon. A position that would have been stopped out at the bottom of that move can end the day as a wash or even a win. Holding a defined-risk position through the full session takes advantage of that behavior rather than being punished by it.
On a bad day, a bot risking roughly $50 per contract in a $1,000 account gives back single-digit percentages. The far-OTM structure, on a genuinely bad day, can take a much larger bite. That difference in worst-case shape is the whole reason for the design.
None of this would have been practical two years ago. The pattern day trader rule required any account making frequent same-day round trips to hold at least $25,000. A bot entering and exiting 0DTE positions inside a single session generates day trades constantly, so under the old rules every account running one needed that balance — and a cushion on top, in case a drawdown pushed it below the line.
The PDT rule went away in mid-2026. That single change is what makes a fleet of small-account bots viable. Instead of one large account trying to run everything, five bots run in five separate accounts, each holding a couple of thousand dollars. Each bot gets its own account, its own balance, and its own clean set of transactions to track.
Every bot page in MyATMM carries its full backtest, and the EMA Open numbers below cover 1,066 trading days from June 2022 through August 2026 running a single contract on every trade the bot chose to take.
| Metric | Backtested result (Jun 2022 – Aug 2026, 1 contract) |
|---|---|
| Trading days covered | 1,066 |
| Total P&L | $6,051 |
| Win rate | 42.6% (210 wins / 283 losses) |
| Average ROI per trade | 81.8% |
| Average win | $48.72 per contract |
| Average loss | $14.77 per contract |
| Maximum drawdown | $302 |
| Green months | 76% |
| Profitable years | 5 of 5 |
| Trade frequency | About 1 of every 2 signal days |
A 42.6% win rate is a minority win rate. The strategy loses more trades than it wins, and that is worth saying plainly rather than burying: on this data, more than half of the positions it opened finished underwater. It is nowhere near the 90%-plus figures advertised for far-OTM credit spreads.
Look at the two averages instead, because that is where the result actually comes from. The average win is $48.72. The average loss is $14.77. A winner is worth roughly three and a third losers, so the strategy only needs to be right a little under a quarter of the time to break even, and it was right 42.6% of the time. That is the mirror image of the far-OTM shape, where a 90% win rate is paired with losses that dwarf the wins and a single bad day erases a quarter of winners.
It also means the ride is choppier than the headline suggests. Losing trades are the common case, losing streaks are normal, and 24% of the months in the window finished red. $302 is the worst peak-to-trough stretch across four years on one contract — larger than the figure this post originally carried, and still small enough to be compatible with an account holding a couple of thousand dollars. A strategy with a higher total return and a $3,000 drawdown would be unusable at that account size, regardless of how good the headline looked.
An 81.8% average ROI per trade is not a statement about account growth. ROI here is measured against the capital actually at risk on each spread — a small, fixed, defined amount decided the moment the position goes on — not against the account balance. A small denominator is what produces a large percentage.
It is worth being clear about what that figure does and does not mean. It does not mean the account grows 81.8% per trade. It means the strategy returned more than it risked on an average trade, which is a statement about the payoff structure, not about account growth.
The equity curve viewer on each bot page has a scaling toggle that re-runs the same historical signals with a position-sizing rule applied: one contract per $1,000 of account value. Simulated balance crosses $2,000, it trades two contracts; crosses $3,000, three; and so on. The tool caps the simulation at 100 contracts.
That cap exists for a reason. Left uncapped, a compounding simulation eventually produces thousands of contracts per trade and numbers with no connection to reality — fill quality, liquidity, and market impact would break down long before that. Even 100 is aggressive; somewhere in the 50-to-100 range is a more plausible ceiling before partial fills start becoming the norm.
On the unscaled curve, one contract finished the first backtest year in the neighborhood of $2,370 of cumulative profit, and took until the back half of the window to roughly double that again. Turn the scaling toggle on and the curve steepens, reaching the simulation's contract ceiling in the spring of 2025 — getting on for three years into the window.
A backtest describes what a set of rules did historically. Your own transaction history describes what is happening now. Those two things are only comparable if the second one is tracked accurately — costs included, fees attached where they occurred, and nothing double-counted.
That is the gap MyATMM is built to close, and it applies whether or not you ever run a bot:
Automation just raises the transaction volume enough that spreadsheets stop being an option. The tracking problem itself is the same one every premium seller has.
Backtested results are hypothetical and simulated. Every performance figure in this article — total P&L, win rate, average trade, maximum drawdown, equity curve, and the scaled simulation — comes from applying a set of rules to historical option data after the fact. Simulated results have inherent limitations: they do not represent actual trading, they cannot fully account for slippage, liquidity, order fills, or the experience of following a system through a drawdown, and they are prepared with the benefit of hindsight. Simulated performance is not indicative of future results.
Past performance does not guarantee future results. Options trading involves risk and is not suitable for all investors. 0DTE index options in particular carry rapid time decay and can move against a position very quickly. You can lose the entire amount at risk on any defined-risk spread. Broker fee schedules described here reflect what was observed at the time of writing and can change without notice — verify them with your own broker.
MyATMM is a tracking and research tool, not an investment adviser. This content is for educational purposes only and should not be considered financial advice. Nothing here is a recommendation to buy or sell any security, to adopt any strategy, or to use any particular broker. Always consult with a qualified financial advisor before making investment decisions.
MyATMM provides purpose-built cost basis tracking for option sellers, with the flexibility to track covered calls, cash-secured puts, and wheel strategy positions.
Track up to 3 tickers completely free forever. No credit card required.
Create Your Free Account TodayBuilt for covered calls, cash-secured puts, and the wheel strategy