Skip to content

calesthio/OptionsCanvas

v0.1.9 Feature

This release adds 3 notable features for engineering teams evaluating rollout.

Published 8d Self-Hosted
✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Topics

0dte algorithmic-trading alpaca charting day-trading fintech
+9 more
flask lightweight-charts local-first options options-trading python self-hosted trading-platform vanilla-js

Affected surfaces

breaking_upgrade

Summary

AI summary

Broker-driven strike snapping provides actual strike lists from the broker for precise order placement.

Changes in this release

Feature Medium

Added `/api/symbol/strikes/<symbol>` endpoint returning broker's actual strike list.

Added `/api/symbol/strikes/<symbol>` endpoint returning broker's actual strike list.

Source: llm_adapter@2026-05-29

Confidence: high

Feature Medium

Queued‑order card now displays strike, limit price, live bid/ask, and fill distance hint.

Queued‑order card now displays strike, limit price, live bid/ask, and fill distance hint.

Source: llm_adapter@2026-05-29

Confidence: high

Feature Medium

Added drag‑to‑add stop‑loss and take‑profit chips on existing position pills.

Added drag‑to‑add stop‑loss and take‑profit chips on existing position pills.

Source: llm_adapter@2026-05-29

Confidence: high

Bugfix Medium

Fixed ATM-window increment math causing invalid strike errors.

Fixed ATM-window increment math causing invalid strike errors.

Source: llm_adapter@2026-05-29

Confidence: low

Bugfix Medium

Corrected `broker_module.get_option_contracts()` to use plural `underlying_symbols` field.

Corrected `broker_module.get_option_contracts()` to use plural `underlying_symbols` field.

Source: llm_adapter@2026-05-29

Confidence: low

Refactor Low

Upgrade instructions: pull `main`, restart platform, hard‑refresh browser.

Upgrade instructions: pull `main`, restart platform, hard‑refresh browser.

Source: llm_adapter@2026-05-29

Confidence: high

Full changelog

Broker-driven strike snapping

v0.1.8 fixed the ATM-window increment math, but a deeper bug surfaced on MSTR: orders for valid strikes like $160 still failed with "Strike not available."

Root cause: broker_module.get_option_contracts() was passing underlying_symbol (singular) to alpaca-py. The real API field is underlying_symbols (plural list) — pydantic silently dropped the bad field, so every contracts query ran across all underlyings and relied on a post-filter. Narrow strike filters happened to work; wider ones returned junk.

Fixed to use underlying_symbols=[symbol] + limit=10000 — real server-side filtering.

No more guessing increments. New endpoint GET /api/symbol/strikes/<symbol>?dte=X&type=Y returns the broker's actual sorted strike list. The trading panel snaps to the nearest entry in that list (refreshed on symbol switch, DTE change, and CALL↔PUT toggle) instead of synthesizing strikes from an increment. Works correctly even when the strike grid varies per expiration.

Queued-order fill visibility

The queued-order card used to show "Limit @ Midpoint" with no numbers — you had no idea what your actual limit was or how close the market was to filling you.

Now each pending_fill row shows:

  • Strike
  • Limit Price (what we sent to the broker — the midpoint at submit time)
  • Bid / Ask (live quote, polled every 3s)
  • Mark with a distance hint: "$0.05 below ask" or "at or above ask — should fill"

Server-side enrichment so the UI does one round trip, not N.

Drag-to-add SL/TP on existing positions

If you opened a position without setting a stop or target, you'd have no way to add them from the chart later. Now the position pill on the chart shows compact outlined + SL / + TP chips beside CLOSE — only when the corresponding level isn't set.

Click a chip → a dashed pending line spawns at 2% off the current underlying price (always on the validatePrice-acceptable side) and immediately enters drag mode. As soon as your cursor enters the chart area, the line follows it. Click anywhere on the chart to drop it, confirm the price, and it's persisted via the existing POST /api/position/update_sl_tp.

No hunting for a tiny line, no precision grab required — same drag-out interaction you'd expect dragging an icon onto a chart. Once saved, the dashed line goes solid and the chip disappears.

Upgrade

Pull main, restart the platform, hard-refresh the browser.

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track calesthio/OptionsCanvas

Get notified when new releases ship.

Sign up free

About calesthio/OptionsCanvas

All releases →

Related context

Related tools

Earlier breaking changes

  • v0.1.1 External scripts must read and include the CSRF token in X-CSRF-Token header for POST/PUT/PATCH/DELETE calls.

Beta — feedback welcome: [email protected]