# SOAP2 User Manual
This is the full, consolidated SOAP2 user manual — a single reference covering installation, day-to-day
operation, and every user-facing feature. For a fast 60-second start, see the
[Quick Help Guide](./index.md.html) instead; for narrow topics, the per-feature pages linked throughout
this manual go deeper than the summaries here.
SOAP2 (*Simple Options Analysis Platform*) is a Windows desktop application that connects to your
**Interactive Brokers (TWS or IB Gateway)** account and turns live options-chain data into an analysis
and trade-preparation workspace: live chains, risk graphs, skew, exposure tools, trade logging, and more —
all wired directly into your own IB session. SOAP2 is a **companion to TWS, not a replacement for it**: it
prepares orders for you to review, but every order is transmitted from TWS under your own control. SOAP2
is **not affiliated with Interactive Brokers**, and is currently in **early access** — expect bugs and
rough edges, and please report anything you find.
If you are more hands-on, consider reading the [Initial Walk-Through](./initial_walkthrough.md.html) first —
it shows the core workflow end-to-end with easy steps and screenshots. Only 4 pages including many pictures.
---
## Table of Contents
- [1. Introduction](#introduction)
- [2. Getting Started](#getting-started)
- [3. Main Window Tour](#main-window)
- [4. Options Analysis (OA) Window](#oa-window)
- [5. Trade Management](#trade-management)
- [6. Settings](#settings)
- [7. Licensing & Registration](#licensing)
- [8. Keyboard Shortcuts](#keyboard-shortcuts)
- [9. Troubleshooting / FAQ](#troubleshooting)
- [10. Appendix](#appendix)
---
## 1. Introduction
### What SOAP2 does
- **Live options chains** — calls and puts side by side, with pricing, volume, open interest, implied
volatility, and the Greeks, updating in real time from your own IB feed.
- **Risk graphs** — the profit/loss curve for a recorded position, a model ("what-if") idea, or both at
once, including how it evolves as time passes (T+0 / T+n).
- **Skew and exposure tools** — vertical/horizontal skew (HSkew/VSkew), GEX/VEX gamma & vanna exposure,
a Volatility Surface, and background regime diagnostics.
- **Rewind** — step a chain backward to a past date/time and see historical prices, Greeks, and risk
exactly as they looked then.
- **Trade log & reporting** — every IB fill recorded, allocated to a trade, and summarized in reports.
- **Watchlist** — live quotes for the symbols you track, one click from a full analysis window.
SOAP2 does **not** currently do backtesting or strategy optimization, does not transmit orders on its
own, and is Windows desktop only (no mobile/tablet). See
[What SOAP doesn't do (yet)](./index.md.html#what-soap-doesn39t-do-yet) in the Quick Help Guide for the
full list.
### Who it's for
Retail and semi-professional options traders who already have an **Interactive Brokers account** and
want a faster, clearer analysis workflow than TWS's native tools provide. Basic familiarity with options
(calls, puts, strikes, expiries, the Greeks) is assumed — SOAP2 is an analysis tool, not an options
tutorial. No coding or configuration-file editing is needed for normal use.
### Requirements
- Windows 10 or later, 64-bit. 8 GB RAM minimum (16 GB+ recommended).
- **.NET 10** runtime (bundled with the installer, or installable separately).
- **Interactive Brokers TWS** (latest stable) or **IB Gateway**, with an active or paper IB account.
The IB API itself is bundled with SOAP2 — no separate install.
### Editions
SOAP2 ships in five editions — **Free Trial**, **Freeware**, **Regular**, **Premium**, and
**WhiteLabel** — which gate access to certain features (Rewind, GEX/VEX, Volatility Surface, HSkew/VSkew,
the regime dashboards, Financial Advisor tools) and, for Freeware, the watchlist size. See
[§7 Licensing & Registration](#licensing) for the full breakdown.
*SOAP2 is an independent product and is not affiliated with, endorsed by, or sponsored by Interactive
Brokers LLC. Options trading involves substantial risk and is not suitable for all investors; nothing in
SOAP2 constitutes investment advice.*
---
## 2. Getting Started
### Install
Install SOAP2 from the provided MSI (or unzip/repair an existing install with it). Prerequisites are
checked and displayed during setup.
### Connect to IB
1. Install and launch **IB Trader Workstation (TWS)** — latest stable version — or IB Gateway.
2. In TWS: **Global Configuration → API → Settings**:
- Enable **ActiveX and Socket Clients**.
- Leave **Read-Only API** **unchecked**, so SOAP2 isn't constrained.
- Socket port: typically **7496** (paper) or **7497** (live) — SOAP2 works with either.
- SOAP2's default client id is typically **9**.
- Optional but recommended: download open orders / trades on connection; expose the entire trading
schedule to the API.
3. Launch SOAP2 and click the **IB connection** button (red IB icon, top toolbar) → **TWS → Connect**.
SOAP2 can start TWS itself if it isn't already running, and will show the login form.
A tunnel connection (TWS not actually local) is possible but not fully tested — use with caution. See
[Connection prerequisites](./index.md.html#connection-prerequisites-tws) for the full settings table and
IB error-code references.
**Order safety:** SOAP2 can prepare and send orders to TWS, but automatic transmission is disabled by
default — prepared orders land in the TWS API tab for you to review and transmit manually.
### First launch and the watchlist
The default watchlist ships with `SPX`, `RUT`, `NDX`, `SPY`, `IWM`, `QQQ` (auto-restored if deleted).
Which symbols you can actually pull data for depends on your IB market-data subscriptions — unsubscribed
symbols show limited/delayed or no data, and the Message Log will usually explain why.
- Open the **Watchlist** window via the glasses icon on the top toolbar.
- Manage the underlying symbol list via **Settings → Symbols** (see [§6 Settings](#settings)).
- The top-left dropdown on the main window picks the current **symbol**; the top-right dropdown picks
the current **account**.
### Your first Options Analysis window
1. Pick a symbol (e.g. `SPY`) and an account (**Demo Account** is always available, risk-free).
2. **Shift+Click** the **Show Selected OA** button on the main toolbar to open a new Options Analysis
(OA) window.
3. Pick an **expiry** on the calendar and press **Confirm Expiry** (or **Enter**) — this populates the
chain grids.
That's the core loop the rest of this manual builds on: **Symbol → Account → OA → Expiry → analyze/model
→ optionally Commit**.
For a fuller, screenshot-led run through this same loop — including Preferred Settings, strike
intervals, building a model, and committing it to a Position — see the
[Initial Walk-Through](./initial_walkthrough.md.html).
---
## 3. Main Window Tour
The main SOAP2 window (internally the `Parent`/container window) is the hub: a watchlist, account and
trade selection, the list of open OA windows, and status/diagnostics.
### Top toolstrip
| Item | Purpose |
|---|---|
| Symbol dropdown (top-left) | Selects the current symbol for new OAs, charts, etc. |
| Account dropdown (top-right) | Selects the current trading account. |
| Watchlist (glasses icon) | Opens the live Watchlist window. |
| Data Chart (chart icon) | Opens the historical OHLC chart for the current symbol; its dropdown also holds the Sticky-Strike/Sticky-Delta and Dispersion/Correlation regime dashboards. |
| Settings & Windows (gear icon) | All application/symbol/account configuration — see [§6](#settings). |
| **Show Selected OA** | Shows the current OA for the selected symbol; **Shift+Click** creates a new OA instead. |
| Trade controls (star icon) | Creates a new trade; opens the Trade List for renaming. |
| Message Log (notepad icon) | Diagnostics — see [§9 Troubleshooting](#troubleshooting). |
| Help | Opens this documentation. |
Hover any toolstrip icon for a tooltip that includes its keyboard shortcut, if it has one. Full reference:
[Using the Main Top Toolstrip](./toolstrip_tutorial.md.html).
### Bottom status bar
Shows IB connection status (click the button to reconnect if red — the top toolbar's IB button is what
*disconnects*), current time, session status, and data usage per category (Live, TLog, other background
data). The bottom-left icon list shows every open OA — click one to switch to it. Full reference:
[Using the bottom Toolstrip](./bottomtoolstrip_tutorial.md.html).
### Multi-monitor support
- `Ctrl+Shift+M` — toggle the main window spanning all connected monitors (also under the SOAP dropdown
menu: **Span Multiple Monitors** / **Restore to Single Monitor**).
- `Ctrl+Shift+F` (in an OA window), or right-click an OA → **Float on Separate Monitor** — detaches that
OA into its own floating window you can drag to any monitor; right-click it again for **Move to
Monitor**, or toggle `Ctrl+Shift+F` again to dock it back into the main window.
- Window positions are remembered per monitor; if a monitor is disconnected, its windows move back onto
an available screen automatically.
- If a window ever ends up off-screen, close SOAP2 and delete `WindowSettings.json` (and/or
`MultiMonitorSettings.json`, `OA_{Symbol}_WindowSettings.json`) from your SOAP data folder to reset
positions.
Full reference: [SOAP2 Multi-Monitor Quick Reference](./multi_monitor_quick_reference.md.html).
### Data Chart (historical chart)
A historical OHLC/candlestick chart per symbol, opened from the toolstrip's **Historical Chart** item or
`Alt+D` (from the main window or from an open OA). One window per symbol — reselecting an already-open
symbol brings its window to the front rather than duplicating it. Includes symbol switching from the
chart's own toolbar, Heikin-Ashi candles, manual Y-axis zoom/pan, and ALMA/JMA/Cycle/Pivots indicator
overlays. Full reference: [Data Chart — Controls & Indicators](./datachart_indicators_user_guide.md.html).
### Accounts
A **Demo Account** is always available for risk-free practice. Manage accounts via **Alt+C** or
**Settings → Accounts**; that submenu also has **IB Accounts** (live Account Summary/Updates/Positions/
Family Codes) and **Financial Advisor** (Premium — aliases, allocation groups/profiles). Full reference:
[Accounts, Financial Advisor & IB Account Info](./accounts_user_guide.md.html).
### Data usage / IB pacing
IB caps API request pacing. SOAP2 keeps load down by requesting data mainly for **visible** grid rows.
If you open many OAs or scroll aggressively, you may see temporary delays — reduce the number of open OAs
and let data catch up.
---
## 4. Options Analysis (OA) Window
The **Options Analysis (OA)** window is where you analyze a chain and prepare a trade. It combines an
**options chain view** (calls + puts at the same strikes), a **trade workspace** (model legs and/or
recorded positions), and **analysis tools** (skew, risk graph, exposure).
### The Symbol-Account-Trade (SAT) triplet
Every OA is tied to exactly one **Symbol**, **Account**, and **Trade** — internally called a **SAT**
triplet. Symbol and Account are chosen on the *main window*; the **Trade is chosen on the OA window
itself**. The Symbol is fixed at OA creation and can't be changed later — open a new OA for a different
symbol. You can have multiple OAs open for the same symbol/account if you're analyzing more than one
trade, but each individual OA is tied to a single trade.
**Opening an OA:**
- Select a symbol on the main window, then **Shift+Click Show Selected OA** to create a new one, or
- Use the OA dropdown (top of any OA window, or the bottom-left list on the main window) to switch
between existing OAs.
Full reference: [OptionsChain (OA Window) Guide](./optionschain_overview.md.html).
### Layout
- **Top panel** — trading-class selectors, strike-interval controls, expiry calendar/tabs. Toggle with
`Alt+Down` (show) / `Alt+Up` (hide).
- **Chain grids** — calls (top) and puts (bottom), aligned by strike.
- **Charts** — Risk Graph, HSkew/VSkew, and (SPX/RUT) GEX/VEX tabs.
- **Trade controls** — model/position entry and the Commit button.
Toolstrip button reference: [OptionsChain Toolstrips — Button Reference](./optionschain_toolstrip_tutorial.md.html).
### Selecting expiries and trading class
For IB, an *expiry* is a chain's last trading day, which isn't always the same day as *settlement* — most
notably for US index options in their regular monthly class. SOAP2 resolves the correct trading class
automatically in almost all cases; a manual override (`M` monthly / `W` weekly / `A` AM settlement / `P`
PM settlement) is available when it can't.
- The **main Expiry Calendar** shows roughly the next 6 months (scrollable further); regular monthly
expiries are shown in **bold**. Click a date, then **Confirm Expiry** (or **Enter**).
- Four **expiry tabs** (Exp1–Exp4) above the grids show the first four available weeklies/monthlies in
order; right-click a tab to pick a different date for just that tab. Whether weeklies are offered at
all is controlled by the **W** toggle above the main calendar.
- `Ctrl+Right` / `Ctrl+Left` move to the next/previous expiry tab; `F1`/`F2`/`F3` quick-jump to the
first/second/third available regular expiry.
Full reference: [Handling expiries in SOAP2](./optionschain_expiries.md.html).
### Strike interval and filtering
Chains can have hundreds of strikes; SOAP2 lets you filter what's displayed to keep grids responsive and
requests focused. `Ctrl+M` (or `Ctrl+Down`) toggles the **minimum strike interval**, on by default for
short-dated (0DTE/1DTE) trading. More than one interval filter can be combined. Permanent, per-symbol
defaults live in **Symbol Settings** (see [§6](#settings)); the top panel's controls apply immediately for
the current session.
### Reading the chain grids
Columns can include bid/ask/last/mark, volume/open interest, implied volatility, the Greeks
(Delta/Gamma/Vega/Theta and more), and model/theoretical values. Values populate fastest for the
**visible** rows — invisible rows don't receive live updates, so you may see brief blanks while scrolling
quickly and subscriptions catch up. IB itself limits how many strikes it returns per request, so grids use
a scrolling/batching mechanism: reaching the edge of loaded strikes fetches the next batch automatically.
**Mouse and hover reference:**
| Where | Action | Effect |
|---|---|---|
| BID/ASK/MID/IV cell | Hover | Tooltip: last update time (UTC); MID also shows its price source. |
| STRIKE cell | Hover | Tooltip: ConId, ReqId, last update time, Active/Inactive, row Visible flag. |
| STRIKE cell | Left-click | In Verbose mode, prints ConId/ReqId/strike/visibility + live bid-ask to the quick-info bar. |
| MODEL cell (non-zero) | Left-drag | Moves that single model leg to another strike. |
| MODEL cell (non-zero), Ctrl held | Left-drag | Shifts **all** models in the current expiry by the same strike delta. |
| MODEL cell (empty/zero) | Right-click | Opens "Save Current Model". |
| POSITION column header | Right-click | Prompts to auto-fill closing legs for the whole trade (all expiry tabs). |
| A Greek column header | Right-click | Opens the floating Greeks menu in swap mode — replaces that column's Greek in place. |
| STRIKE cell, **Rewind mode only** | Double-click | Backfills/shows the nearest historical bar for that strike. |
Non-visible Delta/Gamma/Vega/Theta columns are still computed every refresh (only the *display* is
skipped); Vanna/Vomma are only computed while their column is visible. Charm and Color are placeholder
columns — no formula is wired up for either yet.
Grids not populating? See [§9 Troubleshooting](#troubleshooting).
### Models (combo legs)
Enter values in the **MODEL** column (the only editable grid column); SOAP2 matches the entry to the
row's strike/expiry and updates the Risk Graph. Models can be **saved to a trade** and recalled later
(`Ctrl+M` or the Models button opens the full saved-models list) — a saved model is associated with the
expiry/strikes it was saved against, but can be removed from a trade without deleting the saved model
itself.
- Hovering a saved model in the **Load Model** dropdown (or the Models TreeView) previews its
at-expiration risk graph after ~500ms, without loading it — green line = current price, red line =
break-even, blue curve = P/L, green dot = current P/L if held to expiry. Double-click to actually load
it. See [Model Hover Popup](./model_hover_popup_user_guide.md.html) for worked examples (iron condor,
straddle, covered call) and limitations (expiration-only view, no dividends, zero commissions assumed).
- Transferring legs between expiry tabs: switch to the **target** tab first, then `Ctrl+Shift+T`
(transfer the focused row's leg from the *previous* tab) or `Ctrl+Shift+A` (transfer *all* legs from
the previous tab). `Ctrl+Shift+B` / `Ctrl+Shift+Z` return a leg / all legs back to the previous tab.
Full reference: [Handling grids in SOAP](./optionschain_grids.md.html).
### Model trade vs. recorded trade
- **Model Trade** — a simulation, not saved until you Commit. Unlimited legs.
- **Recorded Trade** — a saved trade with a Trade Log of real executions, used to compute live exposure.
Recorded-combo Commit supports up to **6 legs** (disabled above that, except straight IB conversion).
### Skew charts (HSkew / VSkew)
**Vertical skew (VSkew)** plots IV vs. strike at a fixed expiry; **horizontal skew (HSkew)** plots IV
across expiries/sampled strikes. Both are "shape" tools for spotting rich/cheap wings, smile vs. skew, and
call- vs. put-side behavior. **RR25** (25-delta risk reversal, `IV(25Δ call) − IV(25Δ put)`) reads the
smile's directional slope; **BF25** (25-delta butterfly, `0.5×(IV 25Δ call + IV 25Δ put) − IV ATM`) reads
its curvature. VSkew includes a historical comparison overlay (1 day / 2 days / 1 week ago), and both
HSkew and VSkew are **Premium** features. See
[OptionsChain — Risk Reversal Guide](./optionschain_riskreversal.md.html) for the underlying definitions
and worked examples.
### Risk Graph
Visualizes the P/L of your **recorded position**, your **model legs**, or the combination — payoff shape,
comparison of current-vs-proposed, and sensitivity as time advances (T+0 vs. T+n curves). It depends on
inputs (underlying price, IV, DTE, rates, dividends) that can still be loading right after an expiry
change, so it may fill in over a moment rather than appearing instantly. Curves support mouse zoom/pan;
the toolbar offers full-display (hide grids), show/hide the expiry curve, the T+0 time line, and Greek
selection. `Ctrl+U` restarts the repaint timer; `Ctrl+S` saves a snapshot.
### GEX / VEX — Gamma & Vanna Exposure (SPX/RUT only, gated)
Two extra tabs next to Risk Graph/HSkew/VSkew, computed live from your own IB feed for any expiry:
- **GEX** — per-strike Gamma Exposure (call/put bars) plus **Flip** (where aggregate dealer gamma is
expected to cross sign), **Min/Max** ("gamma walls"), and an orange GEX reference line. Above the flip
and near large positive-gamma strikes, these levels tend to act as **attractors** (price gets pinned/
dampened); below the flip, they tend to act as **repellors** (moves accelerate through them).
- **VEX** — per-strike Vanna Exposure, capturing hedging flows driven by IV changes rather than spot —
matters most around vol events, month/quarter-end, and OPEX.
- A **change subchart** below the main chart shows the delta since the last recompute (or since the last
saved snapshot, if **Δ Since Last Save** is on).
- The **Filters** dropdown controls strike range/interval, an explicit Min/Max Strike override (disabled
for expiries 0–7 days out), manual **Recompute**, **Auto-Recompute (History)** at a chosen interval
(saves to `SOAP_Data\GexVex\{Symbol}_History.json`), the **Δ Since Last Save** toggle, and **Flip GEX/VEX
Sign** (purely a display flip — sign conventions vary by data source).
- Treat Flip/Min/Max as directional guidance, not a precise prediction — this is a newer feature and
accuracy is still being refined. Available on **Free Trial, Premium, and WhiteLabel** editions only.
Full reference: [GEX / VEX — Gamma & Vanna Exposure](./gexvex_user_guide.md.html).
### Volatility Surface (Premium)
A visual, poly-fit map of implied volatility across strikes and expiries, with RMSE/R² fit-quality
indicators and a solver toggle, and an option to feed the Risk Graph from the fitted surface instead of
raw quotes. Access it from the OA's chart tabs alongside Risk Graph/HSkew/VSkew (icon and exact controls
may vary by build — hover the toolstrip for tooltips). Available on **Free Trial, Premium, and
WhiteLabel** editions.
### Rewind — historical OA playback (Premium)
Steps an OA back to a past date/time so prices, Greeks, IV, sigma lines, and the Risk Graph reflect that
moment instead of live data — useful for reviewing a trade entry/exit or studying a chain under past
conditions.
- **Open**: toolbar **Rewind** button or `Ctrl+Shift+R`. A calendar/scrollbar window opens; bolded dates
have data already available. Rewind doesn't change anything until you actually click a date.
- **Scrub**: click a bolded date to jump to its last bar, then drag the scrollbar for other times (each
position = one snapshot, no continuous animation). Times are each bar's **opening** time, in UTC. Picking
a non-bolded date triggers an automatic background backfill (first visit to a new area can take up to a
minute; revisits are instant) — but only if the symbol/expiry already has a recorded trade to anchor the
fetch; otherwise you're told to run the historical downloader manually.
- **Resume**: click the toolbar button again (now labeled **Resume**) or close the Rewind window — grids
clear and repopulate from live quotes, and the OA's pre-Rewind live state is restored exactly.
- The Risk Graph deliberately stays blank until every leg's history has settled, rather than draw from a
partially-fetched set of legs.
- **Editing the model** and opening **Commit** both still work during Rewind; **sending an order to IB is
blocked** until you Resume Live.
- Limitations: single historical price per strike (no bid/ask reconstruction), no continuous scrubbing,
a row with no bar at/before the selected time is left blank, and the risk-free rate uses the same live
curve as normal (not a per-timestamp historical rate).
Full reference: [Rewind — Historical OA Playback](./rewind_user_guide.md.html).
### Regime dashboards (Premium, standalone)
Two background diagnostics, opened from the main toolbar's **Data Chart** dropdown — neither needs an OA
window open:
- **Sticky-Strike / Sticky-Delta Regime** (SPX only) — tracks whether SPX's vol surface is behaving
sticky-strike (range-bound character) or sticky-delta (trending character) via a rolling Sticky-Strike
Ratio (SSR), with a reversal flag for an emerging regime break.
- **Dispersion / Correlation Regime** — tracks S&P 500 index-vs-constituent behavior (via DSPX, COR1M,
SPW, VVIX) to flag Low-Corr/High-Disp (benign) vs. High-Corr/Low-Disp (crowded-trade unwind risk)
conditions.
Both auto-download roughly the needed history on first use (a few minutes for Sticky-Strike/Delta, a few
seconds for Dispersion/Correlation) and are explicitly **diagnostics, not standalone trading signals**.
See [Sticky-Strike/Sticky-Delta guide](./stickyskew_regime_user_guide.md.html) and
[Dispersion/Correlation guide](./dispersion_regime_user_guide.md.html) for the interpretation tables.
### Commit — preparing orders for TWS
**Commit** turns a model or position into an order reviewed in TWS before you transmit it:
1. Build/select legs in the OA, then open Commit (toolbar, `T`, or `Ctrl+C`).
2. Review the **Combo grid** (option legs) and/or **Underlying grid**, and the live aggregate mid price.
3. Set the working price: **unlocked** follows the live mid automatically; **locked** lets you set a limit
via the tick slider or by typing a price (always rounds to the instrument's minimum tick).
4. Optionally open the **Sensitivity** tool (toolstrip dropdown) — a 3D surface of your combo's theoretical
price minus your limit price across a range of Underlying/IV moves, so you can see how far the market
needs to move for the order to become marketable. The green line marks the fill boundary; click the
surface for a LIKELY/UNLIKELY read at that point.
5. Set order settings — Buy/Sell, order type, TIF, routing, Outside RTH, quantity/multiplier.
6. **Send order** (places it in TWS at the current price), **Edit order** (re-submits an existing order id
with updated parameters), or request **Margin impact (What-If)** first.
7. Optionally **Convert** selected model legs into recorded Trade Log positions (blocked for expired
contracts).
**Auto Transmit**, if enabled, sends at the working price immediately — always confirm what appears in
TWS before transmitting. Full reference: [Commit Window (Order Preparation)](./commit_overview.md.html).
### Performance / IB pacing tips
Keep strike filtering tight, avoid opening too many OAs at once, give an OA a moment to populate after
switching symbol/expiry before scrolling aggressively, and reduce request load if you see delays.
---
## 5. Trade Management
### Trades: model vs. recorded
Trades are saved per account as text files in that account's folder (Demo Account ships with sample
trades). A trade with no Trade Log is cleaned up automatically at startup; a trade with a Trade Log is
kept. See [§4's Model trade vs. recorded trade](#oa-window) for the OA-level distinction.
### Trade List (Alt+T)
Organized per symbol and account, with three views cycled by the **View** button:
| View | Contents |
|---|---|
| **Active** | Trades with Status `0` (Unmonitored) or `1` (Monitored) — the normal working view. Click the Status dropdown, or select a row and press `0`/`1`, to toggle monitoring (subscribes/cancels live IB data for that trade's legs). |
| **Archived** | Deleted/expired trades, read-only, restorable. |
| **Orphaned** | Executions found in a log file with no matching trade entry — should never happen in normal operation; the view exists to recover, not lose, the executions if it does. |
Key buttons: **Delete** (archives, doesn't erase — cancels data, clears any open OA showing the trade),
**Restore** (Archived → Active, or Orphaned → Active), **New Empty Trade**, **Execs** (opens Trade
Allocations), **Import/Export** (JSON, for sharing/backup), **Import ONE TLog Report** (see below),
**Load List**, **Trade Log** (full execution history for the selected trade).
One quirk worth knowing: restoring an archived trade whose legs are genuinely past expiration is
re-archived automatically the next time SOAP2 starts (every startup re-validates expiry against the real
current date) — so an expired trade you restore to review in Rewind is only available for that session.
Full reference: [Trade List Guide](./TradeList.md.html).
### Executions and allocation
Two windows: **Orders** (its **Execs** tab is the raw IB executions log) and **Trade Allocations** (the
fuller curate-then-book workflow).
**Quick path:** Orders → Execs tab → tick the fills you want → right-click a ticked row → pick an
existing trade (or **New Trade**) from the context menu.
**Full path (Trade Allocations):**
1. Open **Trade Allocations**; pick **Account** and **Symbol** (executions auto-load the first time a
symbol is opened with nothing showing).
2. Untick anything that shouldn't be allocated (e.g. fills placed directly in TWS unrelated to a
SOAP-managed trade) — only ticked rows/legs are staged. Combo (BAG) legs across partial fills are
collated into one row per leg (weighted-average price, total qty/commission).
3. Pick the destination trade (an existing row, or the **New Trade** placeholder — typing a name and
clicking Allocate registers it on the fly, no separate save step).
4. Click **Allocate to Trade**.
Executions are keyed by IB `ExecId` everywhere, so re-sent execs (e.g. after a reconnect) update the
existing record rather than duplicating it. IB only retains 7 days of executions online — use **Load
Saved Execs** to pull from SOAP2's own per-symbol cache for anything older. Full reference:
[Checking Executions and Allocating them to Trades](./executions_allocation.md.html).
### Importing trades from ONE
Export trades from tastytrade's **ONE** platform (Reports → Export Trades, CSV) then, in SOAP2's Trade
List, use **Import ONE TLog Report**. The older paste-content import style is deprecated.
### Accounts
See [§3 Accounts](#main-window) and the full
[Accounts, Financial Advisor & IB Account Info](./accounts_user_guide.md.html) guide for account naming,
automatic managed-account matching on connect, the live IB Accounts tabs, and the Premium Financial
Advisor tools (aliases, allocation groups/profiles — mirrors TWS's own Advisor Setup).
---
## 6. Settings
All SOAP2 settings (other than IB connection itself) live under the **Settings & Windows** gear icon on
the top toolstrip.
| Section | Purpose |
|---|---|
| **Options Analysis** | List/select open OAs — also available from the top toolbar or the bottom-left list. |
| **Symbols** (`Alt+P`) | Per-symbol configuration — see below. |
| **Watchlist Setup** | Add/remove/reorder tracked tickers; saved automatically on change. |
| **Accounts** | Accounts List, IB Accounts, Financial Advisor (Premium) — see [§5](#trade-management). |
| **Trade List** | Specific to the currently selected account. |
| **Rates** | Update/store and plot short- and longer-term risk-free rates. |
### Symbol Settings
A default watchlist ships with sensible settings; new symbols get limited defaults, so it's always worth
reviewing this once per symbol (settings then persist).
- **Exchange** — SMART (IB's standard routing) works for stocks and index options; futures or VIX need
the specific exchange (GLOBEX, CME, etc.).
- **Trading Class** — the class used for monthly expirations (usually the symbol itself for stocks).
- **Max Strike Interval** — the largest gap allowed between displayed strikes.
- **Weekly trading** — enable/disable, and which weekday(s) to include.
- **Alt Underlying** — for symbols that aren't themselves tradable (e.g. an index), a substitute
underlying to use instead. Locked to symbols already in your Watchlist — leave it as the symbol itself
unless you need a substitute.
- **OTM strike gap** (used for Vertical Skew) — pre-filled from the symbol's own strike interval so it
scales sensibly for both small-increment (VIX) and large-increment (SPX) underlyings; adjust via the
dropdown if needed.
Full reference: [Symbol Settings](./symbolsettings.md.html).
### Watchlist management
- **Removing a symbol permanently**: press **Delete** on a row in the Watchlist grid, or in "Add to
Watchlist" search results — closes any open OAs for that symbol first, with a confirmation prompt. From
search results, this also deletes the symbol's saved settings/chain files from disk. `SPX`, `SPY`,
`NDX`, `QQQ`, `RUT`, `IWM` cannot be removed this way.
- **Hiding a symbol for one session**: in the **Live Watchlist** (glasses icon), press **Delete** on a
row to disable it for the current run only (closes its OAs, stops its data) — the saved Watchlist is
untouched, so it returns next launch.
- The Live Watchlist also shows a **Last Update** column with each row's most recent quote time.
### Bank Holidays
**Settings → Bank Holidays** manages non-trading days, listed automatically by country with support for
custom additions. A bank holiday is added as a non-trading day by default; double-click an entry to
toggle trading/non-trading status. SOAP2 uses calendar days for DTE calculations, but non-trading days are
excluded when building the list of available trading days for strategy evaluation. Full reference:
[Bank Holidays](./BankHolidays.md.html).
---
## 7. Licensing & Registration
Your active edition is shown in square brackets on the first line of the Message Log at every startup,
e.g. `[Free Trial]` or `[Regular]`.
| Edition | Who it's for | Expiry | Full features | Premium features | Volatility Surface | GEX/VEX | Watchlist |
|---|---|---|---|---|---|---|---|
| **Free Trial** | Early-access/trial users | Yes* | Yes | Yes | Yes | Yes | Unlimited |
| **Freeware** | Beginners, small accounts (free) | No | Core only | No | No | No | SPY, IWM, QQQ only |
| **Regular** | Experienced traders (paid) | No | Yes | No | No | No | Unlimited |
| **Premium** | Paid premium/enterprise | No | Yes | Yes | Yes | Yes | Unlimited |
| **WhiteLabel** | Mentors/group leaders, 20+ users | No | Yes | Yes | Yes | Yes | Unlimited |
\* Whether a given build has a trial expiry date depends on how it was built; the Message Log states the
exact date, if any, on first startup.
**Premium features** are: Rewind, the premium VIX/interest-rate history recorder, HSkew & VSkew
(including historical comparison), the Sticky-Strike/Sticky-Delta and Dispersion/Correlation regime
tools, and the Financial Advisor tools. **Volatility Surface** and **GEX/VEX** are separate gates covering
the same edition set (Free Trial, Premium, WhiteLabel). During the Free Trial, every feature is active
regardless of which edition you'll eventually register for. **Freeware** limits the watchlist to `SPY`,
`IWM`, `QQQ` — other symbols already present (e.g. from an earlier trial) are hidden, not deleted, and
reappear automatically on upgrade.
### Registration
Once the Free Trial ends, SOAP2 opens a **Registration** dialog on startup instead of the main window
(developer installs are always exempt). Choose an edition: **Freeware** (free), **Regular**/**Premium**
(paid — paste the license key emailed to you after purchase, or click **Don't have a key? Buy one** to
check out via Paddle in your browser), or **WhiteLabel** (billing arranged directly with the author — see
the website's Editions & pricing section; aimed at groups of 20+ users, with a 15% discount for members
registering under a holder). Registration sends your details to the SOAP2 servers directly — no SMTP
setup of your own is required.
### Developer mode
A machine with a valid, machine-bound developer key starts in Developer mode regardless of edition or
expiry, logging `Launching SOAP in Developer Mode`.
Full reference (startup message formats, the `BetaEditionOverride.cfg` test-override file, WhiteLabel
group mechanics, FAQ): [Licensing & Editions — User Guide](./licensing_user_guide.md.html).
### Version handling and updates
SOAP2 checks silently at startup for a newer **build** (by timestamp, not just version number — a hotfix
build can be newer without a version bump). If found, one line appears near the top of the Message Log
with a direct download link; if not, nothing appears — no news is no news, whether you're current or just
offline. Nothing is ever downloaded or installed automatically, and your data (trades, settings,
watchlist) is untouched by an update — only the program files change. Your current version and status are
also always visible via **Help → About SOAP2** and the title bar. Full reference:
[Version Handling & Updates](./version_handling_user_guide.md.html).
---
## 8. Keyboard Shortcuts
Press **F12** anywhere for an in-app Keyboard Shortcuts window — the fastest way to check a shortcut
without leaving SOAP2. The tables below are pulled from the same reference.
### Global (main window)
| Shortcut | Description |
|---|---|
| F12 | Show the Keyboard Shortcuts window. |
| Shift+Enter / Shift+Down | Select the current Options Analysis window. |
| Alt+B | Open Bank Holidays. |
| Alt+C | Open the Accounts list. |
| Alt+D | Open a data chart for the current symbol. |
| Alt+E | Open the Orders list. |
| Alt+F | Show available date formats. |
| Alt+I | Show TWS (IB) status. |
| Alt+L | Open the Live Watchlist. |
| Alt+N | Create a new OA for the selected symbol. |
| Alt+O | Select the current OA. |
| Alt+S / Alt+W | Open Watchlist setup. |
| Alt+T | Open the Trades list. |
| Alt+Delete / Alt+H | Hide the Message Log window. |
| Ctrl+Shift+M | Toggle main window spanning across monitors. |
### Options Chain (OA) window
| Shortcut | Description |
|---|---|
| Alt+D | Reset/refresh the Risk Graph initialization. |
| Alt+1..4 | Jump to expiry tab 1–4. |
| Alt+A | Auto-size the option grids. |
| Alt+R | Toggle fast-path chart reuse. |
| Alt+I | Toggle diagnostic/debug display. |
| Alt+P | Force an immediate chain refresh. |
| Alt+V | Toggle visibility of rows without live data. |
| Alt+Up / Alt+Down | Show/hide the chain top panel. |
| Ctrl+Right / Ctrl+Left | Next/previous expiry tab. |
| Ctrl+C | Show Commit (if valid). |
| Ctrl+D | Refresh chain descriptors. |
| Ctrl+E | Toggle Expand Graph Area. |
| Ctrl+Down | Toggle Minimum Strike Interval. |
| Ctrl+H | Request HSkew for the current expiry. |
| Ctrl+F | Cancel background contract-detail requests. |
| Ctrl+G | Open the Greeks column selector. |
| Ctrl+M | Show the Models list. |
| Ctrl+P | Re-center the call/put grids on the position-size-weighted average strike of the loaded trade's legs. |
| Ctrl+Q | Disconnect IB and cancel live data requests. |
| Ctrl+R | Re-center the call/put grids on AnchorPrice. |
| Ctrl+S | Save a Risk Graph snapshot. |
| Ctrl+T | Clear models/positions, switch to the default model trade. |
| Ctrl+U | Restart the Risk Graph repaint timer. |
| Ctrl+W | Toggle weekly expiries. |
| Ctrl+Shift+R | Toggle Rewind mode (Premium). |
| Ctrl+Shift+T / A | Transfer focused/all legs from the previous expiry tab. |
| Ctrl+Shift+B / Z | Return focused/all legs to the previous expiry tab. |
| Ctrl+Shift+F | Toggle floating the OA on a separate monitor. |
| A / P / M / W | Select AM / PM / Monthly / Weekly. |
| I | Show IB/TWS status. |
| T | Commit the current model. |
| Delete | Remove the model from selected grid rows. |
| Enter | Confirm the selected expiry (calendar visible). |
| F1 / F2 / F3 | Quick-select the 1st/2nd/3rd available regular expiry. |
| Left-drag (MODEL cell) | Move a single model leg. |
| Ctrl+Left-drag (MODEL cell) | Shift all models in the expiry by the same delta. |
### Other windows
| Window | Shortcut | Description |
|---|---|---|
| Orders | Escape | Hide the combo-legs TreeView. |
| Orders | Delete | Delete selected execution row(s) (grid focused). |
| Trade Log | Escape | Hide the Trade Log window. |
| Message Log | Alt+Delete / Alt+H | Hide the Message Log. |
| Watchlist Setup | Delete (Watchlist grid) | Remove a symbol (confirmation prompt); closes its OAs. Core defaults exempt. |
| Watchlist Setup | Delete (search results) | Remove a symbol entirely, including saved settings/chain files. |
| Live Watchlist | Delete | Disable a symbol for this session only. |
| Data Chart | Alt+Delete | Delete contract definitions for the selected calendar date. |
| Data Chart | Alt+Insert | Load contract definitions for the selected calendar date. |
Full reference (mirrors this section, kept authoritative): [Keyboard Shortcuts](./keyboard_shortcuts.md.html).
---
## 9. Troubleshooting / FAQ
**Grids not populating after selecting an expiry.** Wait a moment — the first selection for a chain has
to fetch and process definitions from IB; subsequent selections are cached and much faster. If it's still
stuck, try `Ctrl+D` to refresh chain descriptors, or reselect a different expiry and back.
**Connection shows red / can't connect.** Confirm TWS/Gateway is running with **ActiveX and Socket
Clients** enabled and the correct port. The bottom-left status button reconnects when red; the top
toolbar's IB button is what *disconnects*. See [Connection prerequisites](./index.md.html#connection-prerequisites-tws).
**Offline mode.** Possible, but not recommended without at least one prior successful IB connection —
some features rely on that initial sync. Offline shows a clear disconnected indicator and avoids showing
blank/zeroed data when nothing is cached.
**Delays or pacing errors with many OAs open.** IB caps API request pacing; SOAP2 already prioritizes
visible strikes, but reducing the number of open OAs or tightening strike filters will help. See
[§4 Performance tips](#oa-window).
**Closing SOAP2 cleanly.** Disconnect IB first (top toolbar IB button), then exit SOAP2 — the same button
closes OAs and shuts down. This helps ensure data saves properly and OA windows close cleanly.
**Reporting a bug.** Use the **Message Log** (notepad icon) and attach `MessageLog.txt` from your SOAP
data folder — it may contain sensitive info (account numbers, partial keys), so review before sharing.
Severe crashes may also produce `CrashReport.txt` in the same folder (only finalized when SOAP2 next
closes, so it isn't viewable from within a still-running session). Enter SMTP details under Settings to
send feedback directly from SOAP2, or email
[soap.2.bv@gmail.com](mailto:soap.2.bv@gmail.com?subject=SOAP2%20Support&body=Please%20attach%20your%20MessageLog.txt%20and%20a%20short%20description.)
with a screenshot (if UI-related), steps to reproduce, and the log/crash files attached.
---
## 10. Appendix
### Bank Holidays and non-trading days
See [§6 Bank Holidays](#settings) above and the full
[Bank Holidays](./BankHolidays.md.html) guide — non-trading days affect which days are considered
available for strategy/backtest evaluation, though DTE math itself always uses calendar days.
### Email / SMTP setup (for sending feedback from SOAP2)
To send Message Log / feedback emails directly from SOAP2 via Gmail:
- Server `smtp.gmail.com`, port `587` (TLS/STARTTLS) or `465` (SSL), authentication required.
- Username: your full Gmail address. If 2-factor auth is enabled (recommended), generate an **App
Password** at Google Account → Security → App passwords, and use that instead of your normal password —
Google shows it only once.
- Settings are saved to `SmtpSettings.csv` in your SOAP2 Settings subfolder — keep a backup copy.
- Other mail providers use the same general SMTP model with their own server/port; consult your
provider's documentation (e.g. Outlook: File → Account Settings → Account Settings → your account →
Change).
Full reference: [Setting up SMTP for GMail](./emailsetup.md.html).
### Glossary
- **SOAP2** — Simple Options Analysis Platform (v2)
- **OA** — Options Analysis window
- **SAT** — Symbol-Account-Trade (the internal binding for every OA)
- **TWS** — Trader Workstation (Interactive Brokers)
- **IV** — Implied Volatility
- **HV** — Historical Volatility
- **HSkew** — Horizontal Skew (IV difference between strikes across different expiries)
- **VSkew** — Vertical Skew (IV difference between strikes of the same expiry)
- **GEX / VEX** — Gamma Exposure / Vanna Exposure
- **RR25 / BF25** — 25-delta Risk Reversal / 25-delta Butterfly (skew slope / curvature measures)
- **DTE** — Days To Expiration
- **TLog** — Trade Log (a trade's recorded execution history)
### Community and feedback
- Slack: [SOAP2 Community](https://app.slack.com/client/T552P5XBK/C55N3GHLM)
- Contact: `soap.2.bv@gmail.com`
- Latest changes: [Release Notes](./ReleaseNotes.md.html)
---
Go back to the main help page: [SOAP2 Quick Help Guide](./index.md.html)