About this template
This bot tries to mimic a weekly wheel strategy using only put spreads that are perpetually rolled and never take assignment of stock. The goal is to capture as much theta decay as possible by placing the long leg far below the short leg (-.50 and -.10 deltas).
I currently limit this to stocks below $500 (and preferably below $100) to do this without a significant capital requirement.
I've ran this for 3 weeks and saw a 30% return with no significant drawdowns:

Entry Criteria
- EMAs: 5 above 14, 14 above 50, 30 above 50, 50 above 200
- MACD Above Signal Line
- BBANDS above middle band and below upper band
- RSI Below 70
- Earnings not within 15 days
Additional Entry Criteria (optional and controlled by switch)
- Stoch Below 80
- CCI Below 100
- IV Rank Above 20
- ROC (Stock price above where it was 14, 50, 100 and 200 days ago)
- Crossover of any of EMAs, BBANDS, or MACD (see recipe for details)
Other Entry Sanity Checks
- Less than 1 position with Symbol
- Bot can open a new position
- Opportunity is available
- Bot has enough capital
- Open Interest Check (>20)
- ROR Check (>9%)
- COP Check (>50%)
- Symbol Price Check (below $500)
- Bot doesn't have tag "scanners off"
- Scanner switch is turned on
- Bid Ask Spread Check
Entry Position
- Short Put Spread expiring 6-13 days from now (-.50/-.10 deltas)
- Uses up to 10% of bot's net liquid
Wheel Monitor
- Take Early Profits: Trails 65% by 10% and return >= 50%
- Close Rolled Positions Early: If premium decreased 85% or short put leg delta greater than -0.15
- Early Roll at Breakeven: If within 2 days of expiration and return between 5-30%
- Rolls at 3:45pm on day of expiration
- Optional: Early Roll if Reaches 25% profit but reverses below 5% (to reduce gamma risk)
- Now checks if bullish conditions turn bearish and tags the positions as such, and you can optionally close the positions or prevent them from rolling at expiration
Other Monitors (these don't actively manage positions)
- Tags positions with bullish or bearish conditions (this is used by the Wheel Monitor)
- Tags positions if they are ITM
- Tags position with highest short delta
New in v5
- Ability to Run a Bear Version
There's now 2 scanners that are basically inverses of each other (1 bear, 1 bull). There's only 1 monitor which works for both bear and bull. If you clone the bot for a bear version, just update the tickers as normal (you may want to delete the bull scanner, but this is not required). I recommend cloning a version for bull and a version for bear and cohort your tickers accordingly to keep things cleaner (and title the bot with Bull or Bear in the name).
- New Sanity Checks
I recommend only 1 contract position size and tickers between $40-90 (lower is better). All of these are bot level settings now. I've found anything below $40 requires more than 1 contract to see meaningful profits, but adds commission drag. Anything above $90 makes it hard to sustain the liquidity this bot needs to perpetually roll positions. Also I recommend no more than 9 tickers at a time, and ideally not more than 6-7 positions at a time. This is so the bot has enough breathing room to roll positions* and absorb drawdowns. I've started with a $10k allocation but am prepared to increase it if needed.
When rolling, the bot needs extra capital as it first opens the next-week position, then closes the old position, so double the capital is required for a few seconds. This is so the new position can reference the strikes of the old position, which is not possible to do if the old position is first closed.
- Improved Rolling Logic
I improved the rolling logic to avoid cases where previously positions sometimes got rolled to same week. Because of this, all of the rolling criteria now sits under one combined recipe block to avoid having to build out the rolling steps multiple times.
- More Things Controllably by Switch
Almost everything in the scanners and monitor can now be controlled by switch. Some major ones are at the bot level, and then there's many more at automation level for the scanners. The out of the box version is fairly liberal (just looking for EMA momentum + ROC + avoiding earnings).
More details to come...
There's a few other minor things I'll elaborate on when I have more time, but these are the big ones. Overall the bot feels a lot more robust now after a few weeks of testing. The description below is for the old v4 and I'll also update to reflect the state of v5 when I have more time.
This version hasn't been fully-fully tested yet so please let know if you see any weird behavior and I'm happy to fix it. Note that this version does roll early / conservatively if it makes sense to do so based on some parameters I've set, but this can all be turned off with a single switch if you prefer to either take hard profits or roll only at expiration.