Repository navigation
Releases: simonro/edge-trader-for-schwab
Release list
v1.2.0: options on the ticket and the leg guard
Options on the ticket, more ways to size and send a trade, and a guard against closing one leg of a spread.
New
- Options on the New trade ticket. Switch to Option, pick the expiry, calls or puts and a strike from the chain (bid, ask, mark, delta, spread %, open interest), then buy or sell to open. Index options (SPX/SPXW, NDX) included. Stops, targets, partials, B/E, trailing stops and Auto B/E work on option positions; prices follow each contract's own tick grid.
- Size by risk or by quantity. Type the shares or contracts yourself; quantity sizing also allows no stop (red warning plus a confirmation) and either way no target.
- Set stop / Set target add the missing exit later; once a trade has both they are paired as one OCO. A trade sent without a stop gets its R from the first stop you set from the app.
- Lmt entry at your own price, next to Mid, Market, Ask and Bid.
- Leg guard. Close and partials ask before sending when the contract looks like one leg of a bigger position (opposite-side option on the same underlying, short calls against long shares, or a working multi-leg order on it).
- Open trades panel lists every position, with ticket P&L on Today's tickets and the executions of closed trades.
Changed
- Auto B/E follows the stop into an exit bracket the app itself rebuilds (Replace target, partial, Set stop), never into one rebuilt in thinkorswim.
- A position closed by its target fill is recognized as closed, not as an unclear close.
- A rejected entry shows Schwab's reason.
Update
Stop the app (stop.bat), then git pull (or unzip the new release into a new folder and copy .env and data across), run setup.bat, then launch.bat. Your data, keys and tokens are untouched.
v1.1.0: entry lock and true Auto B/E
Place trade now sends exactly what the ticket showed, and Auto B/E 1R finally does what its name says.
Not financial advice. Not a signal service. Every screenshot is synthetic demo data.
Walkthrough video: https://youtu.be/41VQNmCN2r4
Place trade locks the plan you saw
Before, a quote that ticked a cent between showing the ticket and clicking could change the share count by one, and the click was refused. Now, if price moved against your entry by no more than 0.1R (at least 2 ticks), the click sends exactly the shares, limit, stop and targets the ticket showed. Your risk cannot exceed what you saw, because the limit caps the fill price. It still refuses when price moved further than that, when the entry would sit within 2 ticks of your stop, or when a trailing stop would start looser than shown. A Market entry keeps its size and can still slip.
Auto B/E 1R: a fixed stop that jumps to break-even once
Auto B/E used to send a Schwab trailing stop 1R behind price, which tightened from the very first tick. Now it sends a normal fixed stop, and when the mark reaches +1R of your actual fill, the app moves that stop to break-even once.
This is the one thing the app does without a click, and only when you pick Auto B/E on that ticket. It never retries, never loosens a stop, never replaces a trailing stop, and only touches the stop that ticket placed (a re-entry or a stop you rebuilt yourself is left alone). It checks every 3 seconds on a fresh real-time quote and only while the app is running; if the app is closed, your original stop stays at Schwab.
Fixed
- Live R showed "not set" after you edited an entry in thinkorswim before it filled. Schwab gives the edited order a new id with no link back. Edge Trader now follows the replacement, so Live R, 1R and the R buttons work for that trade.
SCHWAB_ENV_FILEwas ignored when.envkept the blank key lines (fixed in 1.0.1, listed here for anyone upgrading from 1.0.0).
Also
- Recording mode:
python -m companion --privatehides positions carried from earlier sessions, their orders, the carried P&L and the account value, for screen recordings. Display only; orders work as usual. - README: the Schwab developer app steps now match Schwabdev's setup guide (separate developer account, Trader API - Individual, both Production API products, "Ready For Use", thinkorswim enabled), plus the walkthrough video.
- Ticket placeholders read "Symbol" and "$$$".
- New tests for the entry lock, Auto B/E and the replaced-entry case (123 in the public suite).
Install
Download the zip below, unzip it, run setup.bat, then launch.bat. Windows 10 or 11 and Python 3.11 or newer; you also need your own Schwab developer app (see the README). A new install starts empty.
Upgrading
Your data (data/) and your keys (.env) are not part of a release, so updating never touches them. Stop the app first (stop.bat).
If you cloned with git: git pull, then launch.bat. Dependencies did not change.
If you downloaded the ZIP: unzip this one into a new folder, copy your two items across, run setup.bat once, then start it with launch.bat.
old-folder/data -> new-folder/data
old-folder/.env -> new-folder/.env
Edge Trader for Schwab v1.0.1
Sharing another app's Schwab sign-in with SCHWAB_ENV_FILE now works with the .env that setup creates.
Not financial advice. Not affiliated with Charles Schwab.
Fixed
SCHWAB_ENV_FILEwas ignored when.envstill had the blankSCHWAB_APP_KEY=andSCHWAB_APP_SECRET=lines copied from.env.example, so the app reported missing keys. The shared file now fills any value that is blank or missing in your own.env; values you set yourself still win. If you use your own App Key and Secret in.env, nothing changes for you.
Also
- A test for the shared sign-in file.
Install
Download the zip below, unzip it, run setup.bat, put your App Key and Secret in .env, run login.bat, then launch.bat. Windows 10 or 11 and Python 3.11 or newer. A new install starts empty.
Upgrading
Your data (data/), your keys (.env) and your Schwab tokens are not part of a release, so updating never touches them.
If you cloned with git: git pull, then launch.bat.
If you downloaded the ZIP: unzip this one into a new folder, copy your two items across, run setup.bat once, then start it with launch.bat.
old-folder/data -> new-folder/data
old-folder/.env -> new-folder/.env
Edge Trader for Schwab v1.0.0
First public release: a local day-trading dashboard and one-click bracket ticket for a Charles Schwab account.
Not financial advice. Not a signal service. Not affiliated with Charles Schwab. Every screenshot is invented demo data.
Edge Trader for Schwab 1.0.0
Edge Trader runs on your own computer next to thinkorswim or your charts. It shows your open positions with live R, open and realized P&L and every working order, and lets you enter a fully protected bracket (entry, stop and target, sized from the dollars you want to risk) with one click. Once you are in, the workbench moves the stop to break-even, moves or trails it, replaces the target, takes partials, cancels orders or closes the position.
Every order is your click. Nothing is sent on its own, nothing is retried, and an order with an unclear outcome blocks further orders for that symbol until Schwab confirms it or you press Resolve. The stop and target live at Schwab as one bracket, so they protect you even if the app or your PC is off.
It connects to Schwab through Schwabdev by Tyler Bowers (MIT). Thank you, Tyler.
What's in it
- Dashboard: day trades and carried positions, protection status, P&L at the stop, working orders, closed trades and realized P&L from your own fills, with coverage labels on every number.
- New trade ticket: four risk buttons you set yourself, entry at the mid, market, ask or bid, one or two targets by R or by price, and a fixed, trailing or auto break-even stop.
- Workbench: R ruler, stop to B/E, move stop, Schwab-held trailing stop, replace target, partials at the mid, market, ask or bid, cancel and close.
- Floating always-on-top Entry and Manage windows.
- Market clock with the session countdown and an optional spoken alert 10 minutes before the close.
- A daily check for a newer release (notice only, never installs anything; turn it off with
EDGE_TRADER_NO_UPDATE_CHECK=1). - Demo mode (
python -m companion --demo): invented data, no Schwab connection, every order refused.
Install
You need your own Schwab developer app with the Accounts and Trading Production product and an Order Limit above 0 (the README walks through it), Windows 10 or 11 and Python 3.11 or newer.
Download the zip below, unzip it, run setup.bat, put your App Key and Secret in .env, run login.bat, then launch.bat. A new install starts empty.
Upgrading
Your data (data/), your keys (.env) and your Schwab tokens (~/.schwabdev/tokens.db) are not part of a release, so updating never touches them.
If you cloned with git: git pull, then setup.bat if dependencies changed, then launch.bat.
If you downloaded the ZIP: unzip this one into a new folder, copy your two items across, run setup.bat once, then start it with launch.bat.
old-folder/data -> new-folder/data
old-folder/.env -> new-folder/.env