What this tool does
Theta Workbench is a browser-based options strategy modeling and position-tracking tool. It combines structure diagramming, Greeks analysis, probability estimation, quote hydration from Yahoo Finance, encrypted save/load, and spreadsheet-compatible clipboard interop — all in a single HTML file with no backend dependency.
Built by SCVdata, Inc. as an operator workflow tool for managing calendar butterfly structures and similar multi-leg premium strategies.
Getting started
A fresh session opens with a default underlying (MSFT) and the options panel visible. The upper toolbar flows left to right: Underlying (set the ticker and assumptions) → Structure / Historical DMA (switch analysis mode) → Import / Export (file operations). The options builder panel at the bottom can be collapsed and expanded using the small tab handle at the top of the panel. The chart sub-bar below shows mode-specific controls: Strategy A/B/C slots, Compare, Slices, and Sensitivity when in Structure mode; DMA period presets when in Historical DMA mode.
Each leg needs a direction (long/short), type (call/put), quantity, strike, expiration, and entry premium. You can type these manually, paste an OCC symbol (e.g. MSFT260919C00450000), or paste a full spreadsheet row.
Strategy slots — A / B / C
The three strategy slots (A, B, C) let you model and compare different option structures side by side. Use them for scenario analysis: the same position with different IV assumptions, comparing a butterfly to a condor, or testing what happens when you roll a short leg to a different strike.
Slot A is always your primary strategy. B and C are comparison slots — click the slot buttons in the control strip to switch between them. Clicking a slot immediately enables it for individual viewing. Toggle Compare: ON to overlay all enabled strategies on the same structure chart with distinct colors (blue / brown / green).
Each slot has its own legs and label. When compare mode is off, only the active slot renders on the chart and in the side panel.
Paste workflow — importing from spreadsheets
Click Import ▾ → 📥 Paste Rows to open the paste modal. Paste tab-delimited rows from your spreadsheet with these 12 columns:
1. Status (L / S / CL / CS)
2. Initial Investment (total dollars — auto-normalized to per-share)
3. Current Value (total dollars)
4. Performance %
5. Yahoo/OCC Ticker
6. Portfolio Label
7. Expiration (or blank — derived from OCC symbol)
8. Strike (or blank — derived from OCC symbol)
9. Instrument type (or blank — derived from OCC symbol)
10. Transaction Date
11. Underlying Price @ Entry
12. Contracts
Negative dollar values on short legs are automatically normalized to positive per-share premiums. Direction is determined by the status code (L/S), not the premium sign. Columns 7–9 are automatically populated from the OCC symbol when left blank.
You can also paste a single 12-column row directly into a leg's symbol field in the builder — the smart parser detects tab-delimited input and fills all fields.
When imported legs reference a different ticker than the current underlying, the app will prompt you to update. On confirmation, it updates the underlying label and fetches the current spot price from Yahoo Finance. If the fetch fails, the label updates and you're prompted to enter the spot manually.
OCC symbol parsing
Standard OCC option symbols encode the underlying, expiration, type, and strike. For example:
MSFT260919C00450000 → MSFT · Sep 19 2026 · Call · $450 strike
Paste or type an OCC symbol into any leg's symbol field. The parser extracts structural fields automatically. Use the ↻ Refresh button to hydrate all legs with the latest Yahoo Finance quotes.
Yahoo quote hydration
The unified ↻ Refresh button in the underlying panel fetches spot price (Yahoo), fundamentals (Finnhub), and option quotes for all open legs in one action. Fetched quotes are stored in each leg's valuation history with timestamps and source tags.
Quote hydration is optional enrichment — the app works fully without it. All errors degrade gracefully to manual entry.
Market value precedence: manual override (newest) → Yahoo quote (newest) → Yahoo quote (last known) → retain prior value as stale. The BSM/CRR model price never silently replaces a market quote.
Lock entries — then vs. now
Click 🔒 Lock Entries in the builder footer to freeze entry snapshots on all legs. Once locked, entry basis (premium, date, underlying price at entry) becomes immutable — it can't be accidentally changed by subsequent edits or quote fetches.
This enables then-vs-now comparison: the locked entry snapshot represents where you started, and the active valuation (from Yahoo fetch or manual override) represents where you are now. Position analytics use both to compute unrealized P&L, return percentages, and other tracking metrics.
Legs can carry staggered entry dates — the app doesn't assume all legs were opened on the same date.
Pricing models — CRR vs. BSM
American-style options (standard US equity and ETF options) are priced using the Cox-Ross-Rubinstein (CRR) binomial tree with 100 steps. Greeks for American legs are derived from the tree via finite differences.
European-style options (index options like SPX, NDX, and futures options) are priced using Black-Scholes-Merton (BSM) with closed-form Greeks.
Model selection is automatic based on the underlying type set in the configuration panel (Equity → CRR, Index → BSM, ETF → CRR with verify reminder, Futures → BSM). You can override the exercise style per leg using the Ex: dropdown in the builder.
The status bar shows the current model: CRR American, BSM European, or Mixed when legs use different models.
Sensitivity controls
Click the Sensitivity button to adjust spot price, implied volatility, and time forward. Sliders let you stress-test your structure under different market conditions. The chart and all analytics update in real time.
In compare mode, you can scope sensitivity adjustments to All strategies or Active only — useful for isolating what-if scenarios against a fixed baseline.
Side panel tabs
Summary: net premium, max profit/loss (capped vs unlimited), breakeven prices, and static return at current spot. Includes a target-price calculator.
Greeks: per-leg and net position delta, gamma, vega, theta, and rho with descriptions (Price Move, Delta Accel., Vol Sensitivity, Time Decay, Rate Sensitivity). Rounded to hundredths, sorted by strike descending. Position-scaled (×quantity ×multiplier).
Volatility: Organized into three sub-tabs. Analysis (default): Cap / Short-Leg / Anchor / Blended Imp. Vol., term structure, expected move by expiry. Guidance: vol-based strike guide with beta secondary reference, cycle-based earnings labeling (CLEAN/PRE-EARNINGS/EARNINGS-EXPOSED), cap structure sizing. Context: DMA technical context (nearest resistance/support, stack summary), Options Management tolerance bands (beta-derived strike + duration target zones per role with position indicator dots).
Probability: probability of profit and breakeven zone analysis using lognormal risk-neutral distribution.
Position: Organized into four sub-tabs. Overview (default): Theta Balance, Management Notes (auto-generated condition→statement alerts, max 5, goal-sensitive), compact paydown line, compact 3-role band summary with driving dimension. Management: full band readiness detail for top long, short cycles, and anchor with strike/duration/overall status and LTCG indicator. Economics: Structure Paydown (top cost, harvest, anchor cost, net basis, % subsidized), Capital Basis, P&L, Theta Bank. Legs: filter bar (All/Open/Resolved/Longs/Shorts/Bottom/Middle/Top), leg cards with 3-zone layout (identity+role+health, economics, quote provenance), sorted by strike descending.
Chart modes
The upper toolbar contains two analysis modes:
Structure: options structure diagram with time slices. The sub-bar shows Strategy A/B/C slots, Compare toggle, Slice mode (Nearest Expiry, Each Leg Expiry, Farthest Expiry, Since Entry), and Sensitivity controls. Since Entry mode shows At Entry / Midpoint / Today / Expiry curves using model reconstruction (current IV assumptions, not historical market data). Use the copy buttons between slots (📋→B, 📋→C) to fork a structure for scenario testing. The structure chart applies a protective P&L cap at ±10× max contract notional to prevent runaway render scaling; if this cap is reached, a notice appears in the chart showing the exact cap amount. Displayed values are trustworthy unless that notice appears.
Structure diagram (bottom right): Each leg shows four visual layers: full lifespan bar (entry date → expiry), segmented premium band (intrinsic on the left at higher opacity, extrinsic on the right at lower opacity, total width = current premium relative to entry premium), remaining DTE bottom line (left-justified from axis), and compact label. Hover over any bar for detailed tooltip showing entry premium, current price, intrinsic/extrinsic composition, and DTE. Horizontal scroll available when premium overlays extend beyond the time-locked chart width.
Historical DMA: 600-day price history chart with 50/100/150/200/250-day moving average overlays. Data fetched from Yahoo on first switch. Sub-bar lets you view all five DMAs together or isolate individual periods. The summary overlay shows current DMA values and percentage distance from spot (green = above, red = below). Camera button exports the chart with the DMA summary composited into the PNG.
Trendlines (╱): click-drag-release on the chart to draw a line. Endpoint handles reshape the line; the midpoint handle translates it vertically. Horizontal snap magnetically aligns near-flat lines to shelves where price has touched repeatedly. Peak/trough assist softly gravitates sloped lines toward visible swing highs/lows. Hold Alt or Shift while dragging to bypass snap. Lines persist per ticker, render into chart PNG exports, and (when any lines exist for the active ticker) export into AI/TRIAD prompts with spot-normalized slope (%/30d), projected value at today's bar, and spot relation. Use the × button beside the trendline tool to clear all lines on the active ticker.
Fibonacci overlay: toggle the Fib tool to overlay horizontal retracement levels (0, 23.6, 38.2, 50, 61.8, 78.6, 100%) anchored to the visible 52-week high/low. A second button inverts the orientation (High→Low vs. Low→High). Labels were moved out of the chart to reduce clutter — the hover tooltip carries the readable Fib context at the cursor price. Fibonacci state persists per ticker, and Fib context exports into AI/TRIAD prompts only when the overlay is active.
Chart tooltip: the floating tooltip on the Historical DMA chart uses a two-column layout — DMA values and spot offsets on the left, Fibonacci level at the cursor price on the right (when Fib is active). This keeps the chart surface clean while surfacing more context on hover.
Implied earnings move & event context
The Technicals & Events panel on the right surfaces per-ticker context relevant to timing decisions: RSI(14), VIX, next earnings date, last/next ex-dividend dates, and the Implied Move row. RSI sits above VIX to prioritize the underlying-specific momentum signal over the market-wide volatility reference. The older composite Signal and Trend rows were removed — the RSI / VIX pair plus the Implied Move row carry more actionable information than a derived composite.
Confidence hierarchy. When an upcoming earnings date is available, Theta computes an implied 1-SD earnings move using a three-tier hierarchy (first match wins):
HIGH · Short-leg IV — an active short leg spans the earnings date and has a live IV quote. The cleanest available estimate.
MODERATE · Chain lookup — no earnings-spanning active short, but Adjustment Context is loaded and contains a usable chain IV near spot on an earnings-exposed expiry.
LOW · Blended fallback — neither of the above. Falls back to the blended IV reference from Volatility Intelligence. This systematically understates day-of earnings volatility because blended IV averages across all expiries and smooths out the event spike.
Suppression near earnings. When confidence is LOW and earnings are within 7 days, the headline number is withheld entirely and the row reads unavailable in red. This prevents a misleadingly small blended-IV estimate from being read as authoritative going into an event. Trust market/analyst-published implied moves in that window.
Same-day earnings. When the event is today (0 days), the volatility math floors DTE at 0.5 days to avoid mathematical collapse, and the display reads [today] instead of [0d]. The estimate reflects residual event-window pricing but should be treated as a stability heuristic, not true event pricing.
Pre-structure limitation. Automatic event-chain discovery is not part of the live product. For a ticker with no active options legs, the implied move will stay at the LOW blended fallback tier — there is no chain-specific IV for Theta to read. To upgrade the estimate: add a provisional earnings-spanning short leg at the relevant expiry, then use Load Adjustment Context to populate chain IV. The suppression row will guide you toward the appropriate path when the current state is limiting.
Dividend handling. Last ex-div date is retrieved via a Yahoo v8/chart fallback path. Next ex-div is inferred from last ex-div plus standard quarterly cadence — it is a planning aid, not a confirmed event date. Dividend threshold warnings on short legs should be treated accordingly: useful for risk-staging, not a definitive trigger.
Adjustment Context
The Load Adjustment Context button (in the builder footer) fetches a focused options chain snapshot for the active ticker: adjacent strikes around each active short / top / anchor, across nearby weekly and monthly expirations plus relevant LEAPS. The result populates a per-ticker rollContextData cache.
That cache powers several things:
→ Roll candidate tables in AI and TRIAD prompt exports (adjacent strike × nearby expiry grids with quote data for each active short/top)
→ MODERATE-tier chain lookup for the implied earnings move when no earnings-spanning active short exists
→ Cap / anchor expansion candidates when staging repairs or wing adjustments
Requires at least one active leg. The fetch builds its strike and expiry grid around existing positions, so a pre-structure ticker with zero legs cannot load Adjustment Context directly. For pre-structure earnings analysis, add a provisional earnings-spanning short leg first (strike near spot, expiry after the earnings date), then click Load Adjustment Context. The chain IV that populates will serve both the roll-candidate surface and the implied-move MODERATE tier.
Adjustment Context is cached per ticker until manually refreshed with the ↻ Reload button in the roll-candidate table, or auto-refreshed by the prompt-copy action when stale. Reloading during an active session is cheap — a handful of batched quote requests.
Strategy framing (Goal + Bias)
Goal (per strategy slot): Defines the evaluation lens for the structure. Options: Custom, Anchor Subsidization, Income / Theta Harvest, Directional Spread. Shown as a dropdown in the upper toolbar. A/B/C slots can have different goals. Feeds into AI and TRIAD prompt framing.
Bias (per ticker): Defines your directional posture on the underlying. Five levels from Strongly Bullish to Strongly Bearish. Set in the Underlying Configuration panel. Persisted per ticker workspace. Feeds into AI and TRIAD prompt framing as operator posture, not prediction.
Builder columns
The builder shows 17 columns per leg: Symbol · Dir · Type · Qty · Strike · Expiry · Entry · Entry Date · Current · P&L $ · P&L % · Imp. Vol. · Intrinsic · Extrinsic · Ext % · ×. Intrinsic is computed from spot vs. strike. Extrinsic is current price minus intrinsic. Ext % shows the extrinsic share of premium — useful for assessing whether a short leg is still harvesting meaningful time value.
Browser persistence
Your working session is automatically saved to your browser's local storage on every change. If you refresh the page or close and reopen the tab, your structure, underlying settings, and all leg data are restored automatically. A "Session restored from browser" toast confirms the restore.
This is a working draft — not a durable backup. Clearing browser data will erase it. For permanent storage, use Export ▾ → 🔒 Export Secure (.twb) to save an encrypted file.
Import and export
Import ▾ opens two options:
📂 Load File: open a .twb (encrypted) or .json (diagnostic) file.
📥 Paste Rows: import legs from a spreadsheet in 12-column tab-delimited format.
Export ▾ opens:
🔒 Export Secure (.twb): AES-GCM encrypted file. You set a password on first export — all encryption runs in-browser via Web Crypto API. No server-side key storage. Lost password = unrecoverable file.
📋 Copy Positions: copies all legs across all slots to clipboard in 12-column tab-delimited format.
🧠 Copy AI Prompt: generates a general-purpose analysis prompt for your current options structure. Includes position snapshot, Greeks, analytics, and a comprehensive framework covering structure integrity, theta efficiency, technical alignment, event timing, and risk-control paths. Paste into any AI tool for top-3 revision suggestions.
🎯 Copy TRIAD Prompt: generates a tighter structural deliberation prompt designed for multi-agent panels. Uses a 7-section judgment format: Structural Diagnosis → Immediate Action → Core Assumption → Primary Blocking Condition → Most Vulnerable Point → Reversal Condition → Final Stance. No routing instructions embedded — the prompt focuses purely on structural judgment.
Export freshness gate: both prompt exports check data age before assembling the prompt. If data is fresh (underlying ≤5 min, Adjustment Context ≤15 min when applicable), one click copies immediately. If data is stale, the first click runs a refresh and shows "Data refreshed — click Copy AI Prompt again to copy." A second click then writes the freshly-built prompt to the clipboard. This two-step flow is required because the browser's clipboard API needs the click-to-write window to remain short; running a refresh on the first click would consume that window and silently fail the clipboard write. The prompt always carries an EXPORT FRESHNESS block at the top with a Status verdict (FRESH / MIXED / STALE), per-source timestamps, and refresh outcome.
Export Diagnostic / Export JSON: developer tools for debugging and full session inspection. Diagnostic export now includes a Freshness section with raw timestamps and the last refresh outcome. JSON export format note: as of v0.5.238, plain JSON exports use a top-level wrapper { exportMeta, session } — exportMeta carries generation timestamp, eval date, freshness status, and refresh history for forensic review when manually inspecting artifacts. Imports automatically detect and unwrap both old (raw session) and new (wrapped) formats.
📋 Copy All: (in the options panel footer) copies all legs in the active slot to clipboard in 12-column tab-delimited format. Per-leg copy also available via the 📋 button on each leg row.
📷 Screenshot: click the camera icon on the chart sub-bar to export the active chart (Structure or Historical DMA) as a PNG.
AI analysis workflow
General use (any AI tool): Use 🧠 Copy AI Prompt and paste into Claude, ChatGPT, Gemini, Grok, or any capable model. The prompt is self-contained and produces top-3 revision suggestions.
TRIAD / multi-agent workflow (recommended):
Phase 1 — Research brief: Run Perplexity (or Gemini for document-heavy research) to gather current facts: earnings date, IV context, RSI, DMA levels, recent news, VIX reading. Paste the research brief alongside the structure data.
Phase 2 — Structural deliberation: Use 🎯 Copy TRIAD Prompt and run it through a deliberation panel. Recommended trio: Claude (structural critique) + ChatGPT (synthesis and salvage framing) + Grok (contrarian stress-test). Perplexity belongs in Phase 1, not the deliberation panel.
Phase 3 — Fork resolution: If the panel splits (e.g. close vs. salvage), run an extended exchange to resolve the disagreement by identifying the single deciding condition and the fastest way to validate it.
Keyboard shortcuts
U — toggle underlying config ·
S — toggle sensitivity ·
1 / 2 / 3 — switch to slot A / B / C
Ctrl+S — export secure ·
Ctrl+O — import file ·
Esc — close panels and modals
About
Theta Workbench is built with plain HTML, CSS, and JavaScript — no frameworks, no build tooling, no server-side dependencies. Chart rendering uses Chart.js. Quote hydration uses a lightweight Netlify Function proxy to Yahoo Finance.
This is an analytical and educational tool. It does not constitute financial advice, a recommendation to trade, or a solicitation to buy or sell any security.
SCVdata, Inc. · scvdata.com/work · theta.scvdata.com