/changelog

Changelog

current v1.0.9updated June 8, 20264 releases
v1.0.9June 8, 2026Latest

Chart panning performance fix

A targeted patch on top of v1.0.8: packaged builds were over-obfuscating the chart engine, which throttled panning and zooming. This restores full frame rate. No feature or API changes; everything from v1.0.8 carries over.

Performance

  • perfSmooth chart panning in the installed app. The production build no longer applies control-flow flattening and number-to-expression transforms to the chart rendering hot path, which were the cause of low-FPS panning and zooming on packaged v1.0.8. Dev builds were never affected.
v1.0.8June 8, 2026

Multi-day data, warmup, and limit orders

Strategies and indicators can finally see across the day boundary: warm up indicators on prior sessions, run daily and hourly timeframe strategies, and build volume profiles that span weeks. The single-day wall is gone, and your existing strategies run exactly as before unless you opt in. Plus resting limit-order entries, a single faithful execution model, less API to learn, and a terminal that tells you the truth.

Multi-day data & warmup

  • featWarmup history. Add warmup_days= to @strategy or @indicator and prior sessions are prepended before each trading day, so a 200-bar SMA is warm on the first bar instead of NaN for the first 199.
  • featContinuous mode. @strategy(..., continuous=True) lets positions carry across calendar-day boundaries instead of force-closing at end of day. This is what daily, hourly, and swing strategies need.
  • featRollover safe by default. Even in continuous mode, positions are force-flat at a detected contract rollover and at maintenance or session gaps, and a warmup window is truncated at a rollover so indicators are never warmed with the prior contract's prices.
  • featPrevious-session helpers. prev_day_high(df), prev_day_low/open/close/volume, and prev_session_volume_profile(df) return the immediately-preceding session's aggregate broadcast onto every current bar, so df['close'] > prev_day_high(df) is a plain vectorized comparison.
  • featChart matches the Analyzer exactly. Multi-day and continuous=True strategies run the same shared day-replay model on the chart preview as in the Analyzer, so trades, fills, equity, and stats are identical between the two.
  • featAdding OHLC data to the chart now opens the last three trading days instead of one, so a left-pan into history is instant.
  • featBackward compatible. A strategy that declares no warmup and is not continuous produces the exact same trades, equity, and stats as before. No silent changes.

Limit-order entries

  • featFill at a price level, not the next bar's open. Return entry_limit_long / entry_limit_short (price arrays, NaN = no order) to rest a limit at a level. The engine fills AT that price when the market reaches it, with no adverse slippage. Repeat the price to keep it resting, change it to move the order, set NaN to cancel. Works on TBBO and OHLC across the chart, Analyzer, optimization, and walk-forward. Rust strategies get .with_entry_limit_long() / .with_entry_limit_short().
  • featA line that shows the order's life. A dashed limit-order line draws from where the order was placed to where it filled or was removed, stepping with each price change and marking the fill. strategies/value_area_limit.py rests limits at the prior session's value-area edges.

Execution model

  • breakExecution modes are gone. Position Mode (sequential / first-fill / independent), the Flip Trades toggle, and the global Contracts knob were removed. The engine is a single faithful executor that holds one position at a time; reverse, close, and stay-in all emerge from the entry / exit booleans you emit.
  • featPosition size via the size key. Return size (a scalar or per-bar array) to set contracts per position. PnL, equity, MAE/MFE, and fees all scale by it.
  • featAuthoritative position key. Return position as a signed per-bar array (NaN = carry, 0 = flat, sign = side, magnitude = contracts) to drive the held net directly, scaling in, partial-scaling out (FIFO), and reversing off the per-bar diff.
  • breakSession Hours retired. A strategy owns its trading window in code: gate entries with qc.hour / qc.minute or a block_entries array. Time-of-day is no longer a settings-panel knob.
  • featFees are applied in-engine at close, scaled by trade size, so the chart and analyzer can never disagree on net PnL.

Cross-timeframe indicator visibility

  • featHigher-timeframe indicators draw on finer charts, not coarser. A 1m VWAP shows on 1m, 30s, and tick, and is hidden on 5m where a single point per several bars would be misleading. A strategy's plotted lines follow the same rule from the strategy timeframe; trades and markers always reposition regardless.
  • feattimeframe is compute, visible_on is visibility. The new visible_on controls which chart timeframes a script draws on: auto (the default directional rule), all, or a list like ['1m', '5m']. Available on @indicator and @strategy.
  • breakBefore v1.0.8 a pinned indicator stayed visible on every chart timeframe. With the auto default it is now hidden on timeframes coarser than its compute timeframe. Set visible_on='all' to restore the old behavior.

Multi-day panning performance

  • perfIndicators and strategies extend as you pan. Pan left into history and the strategy and indicator fill in across every loaded day and keep updating, instead of staying stuck on the day you opened.
  • featCausality is auto-detected (no incremental kwarg). The system probes each indicator once: a causal one merges per panned-in day; a span-aggregate one recomputes over the span. The old @indicator(incremental=True) is gone (still accepted with a deprecation warning).
  • perfCoalesced recompute. A fast multi-day pan no longer kicks a full recompute on every loaded day; it runs once after the pan settles.
  • fixFiner execution timeframes cover the whole range. A 1m strategy while the chart shows 5m now backtests across every day of the selected range, not just the most recent day, so bars-only days stop silently producing zero trades.

Less API to learn

  • featDecorators infer themselves. @indicator and @strategy read the name, description, overlay, data mode, SL/TP usage, and required columns from your class and calculate() body when you do not state them. A bare decorator is usually enough, and anything explicit still wins.
  • featqc.Tag for readable tags. Declare tag metadata as a class attribute, tags = {'at_poc': qc.Tag('At POC', color=...)}, instead of scattered define_tag() calls.
  • featqc.volume_profile() in one call. Build a Volume Profile over any window from a DataFrame or from raw price and volume, get POC / VAH / VAL / HVN / LVN back, and .draw() it.
  • featOne canonical import. import quant_charts as qc is the form every bundled example uses now; the whole surface hangs off qc..

Terminal

  • featOne honest output surface. System messages, backtest progress, data notices, and errors all flow into the bottom terminal. The old pop-up toasts are gone. Rich strategy output (plots, DataFrames, tables) still renders inline in the editor.
  • featCtrl+C that means it. With text selected, Ctrl+C copies like VS Code; with nothing selected it sends a cancel to the newest running operation; Ctrl+Shift+C cancels everything in flight.
  • featLive progress bars for backtests, sweeps, and optimization runs, settling green on success, yellow on cancel, red on error. Plus interactive [y/N] prompts and readable, clickable tracebacks.

Analyzer

  • fixMetrics for the whole run, not just the visible day. The bottom metrics strip now reflects the full backtest range, drawn from the same per-tag stats the scatter uses.
  • featStaged before shown. Adding a strategy or indicator stages with a dashed pill that reads 'Run to show on chart' and joins the on-chart legend only when you hit Run, Optimize, or Apply.
  • fixPreventive tag filtering everywhere. Flipping a tag re-runs the engine with a trading mask rather than hiding trades after the fact, now covering the single-day main chart and the range chart, not just sweeps.
  • fixIndicator visuals survive the analyzer. Custom drawing (programmable Volume Profile, the custom_layer canvas, bar coloring, shapes, regions, pinned overlays) renders in the analyzer exactly as on the main chart.
  • featContinuous attribution. A continuous backtest reports one equity curve; each day's slice is a window of that curve, and the control bar shows effective warmup, a continuous badge, and truncation warnings.

Notebooks

  • featEditor parity. Every notebook code cell now matches the .py and .rs editors: full Quant Charts completions, signature help, hovers, and semantic highlighting, resolved per cell.
  • featLive kernel IntelliSense. Cells complete against the running Jupyter kernel, so variables from earlier cells, df. columns, and your own functions complete from real runtime state.

Chart & visualization

  • featSkipped-signal markers. Faint half-opacity markers show the entry signals the engine passed on because a position was already open, drawn under the executed-trade markers. Toggle under Chart Settings > Trades.
  • featChart Settings overhaul. Six trade visualization presets (Minimal, Classic, TradingView, Professional, Heatmap, NinjaTrader), per-object configuration for each trade element, and a dedicated Backtest tab.
  • featRefreshed built-in library. 6 Python + 5 Rust strategies and 5 Python + 4 Rust indicators, auto-migrated into existing workspaces on update.
v1.0.7May 17, 2026

AI rewrite, MCP, native Rust strategies

The biggest release yet. Full AI rewrite, MCP server, native Rust strategies for TBBO, Volume Profile end-to-end, GitHub integration, multi-window analyzer with synced popouts, array-based trade modification, a notebook overhaul, and a final cleanup of the bundled template set. Plus a long tail of polish, performance, and bug fixes.

AI & MCP

  • featFull Claude rewrite. First-message context dropped from ~12k tokens to a few hundred. Tool calls are streamed, prompt cache hits are way higher, and the chat panel feels far more responsive.
  • featMCP server (Model Context Protocol). Drive Quant Charts from Claude Desktop or Cursor. Your Claude Pro / Max plan pays for the tool calls, no bundled API key required.
  • feat18 MCP tools: read / write / delete / rename files, search, list strategies and indicators, query parquet, run a single-day backtest with live progress, validate code, edit notebook cells, and more.
  • feat3 MCP resources for cheap context: workspace tree, last backtest summary, app version.
  • featLocal-only transport. Stdio between the client and the MCP subprocess, a named pipe between the subprocess and Quant Charts. No network ports are opened.
  • featIn-app kill switch and config-export buttons under Account > MCP server.

TBBO & order flow

  • featEnd-to-end TBBO. Chart, Analyzer, and multi-day optimization all run on tick-level bid / ask data with the same fill conventions.
  • fixTrade-price misalignment fix. Trade markers now sit on the actual fill price, not a snapped bar boundary. Long entry uses ask, long exit uses bid (and the inverse for shorts).
  • featBar-aggregated order flow (bid_vol, ask_vol, volume) is exposed to Python strategies on TBBO data at any execution timeframe.
  • featOrder-flow helpers: imbalance(bid, ask), cvd(delta), vwap_band(vwap, atr) re-exported from quant_charts.
  • featVolume pane on the chart with a histogram colored green / red by close vs open. TBBO bars without a volume column fall back to tick count.
  • featAvg volume per trade is now a first-class metric in the analyzer's metric grid.
  • perfBig chart-side speedups for TBBO data switching, panning, and zooming.

Volume Profile

  • featTick-fidelity Volume Profile indicator (vp.rs). Six essential parameters (anchor, row size, value area %, HVN / LVN thresholds, proximity ticks). Tags for at_poc, inside_value_area, above_vah, below_val, near_hvn, near_lvn.
  • featVP combined with order flow (vp_orderflow.rs) emits zone-conditioned dominance tags: bid_dom_at_poc, ask_dom_at_poc, bid_dom_at_hvn, ask_dom_at_hvn.
  • featVP zone-trading strategies in Rust: vp_zone.rs (HVN reject / LVN break / shelf break, parameterized) and vp_shelf.rs (shelf rejection on the last completed VP, no lookahead).
  • featVP expansion in the Analyzer with drawing-tools integration for marking up shelves and rejection zones.
  • featPython volume_profile.py overhaul. Its histogram now renders by default, and each bar's volume is spread across its full high/low range instead of charged entirely to the typical price, so the OHLC profile is far more accurate. The Rust vp.rs stays the tick-fidelity path.

Strategies & indicators

  • featNative Rust strategies and indicators for TBBO. Compiled per-edit, color-coded outputs, full Monaco signature help and completions.
  • featArray-based trade modification. Move stops and targets by returning per-bar sl_long/tp_long/sl_short/tp_short arrays; the engine ratchets them in the favorable direction so trailing stops just work. A new block_entries array gates new entries per bar, and the breakeven_when() / shift_levels() helpers build breakeven and tick-shift stops from a tag. trail_sltp.py shows the full chandelier-trail pattern.
  • featMulti-setup tagging (multi_setup.py) labels each trade by entry condition (breakout vs pullback) so the analyzer's per-tag panel splits stats automatically.
  • featQuant Charts language overhaul. New qc.ta namespace, expanded API surface, better completions, redesigned strategy / indicator panel, parameter dropdowns, and per-instance timeframe override.
  • featStrategy / indicator tab overhaul with cleaner template browsing and folder grouping in the explorer.
  • fixBetter robustness, scatter-plot tag preservation, and clear-button reliability across optimization runs.

Final template cleanup

  • breakBundled templates renamed and trimmed. Old grab-bag of 31 files cut and renamed to a final 22 (16 showcase + 6 baseline indicators) plus 3 notebooks. Every name is now short and clear.
  • featBaseline indicators that "just work": ATR, VWAP, Volume in both Python (OHLC) and Rust (TBBO bar-aggregated), plus tick-fidelity VP in Rust. Drop them on any strategy for tag-based filtering without writing them yourself.
  • breakTBBO bucket cleaned up. Strategies now use TBBO-only metrics (VP zones, bid/ask imbalance, CVD slope) instead of EMA crosses on tick mids.
  • breakNo more skeleton clutter. STARTER files were redundant with the auto-injected new-file templates.
  • featCombined notebooks. analysis.ipynb (tags + filtering + group comparison) and multi_day.ipynb (runner API + multi-day backtests + Monte Carlo + sweeps) replace five smaller notebooks.
  • featAuto-migration removes the legacy filenames from existing workspaces and seeds the new short names without overwriting user-authored files.

Analyzer & multi-window

  • featMulti-window analyzer. Pop tabs out into their own windows; state syncs across windows automatically.
  • fixConcurrent popout reruns are now safe. Tag-filter and exec-options reruns serialize cleanly across windows, no more half-applied tick-cache state.
  • fixStale-bundle protection. Switching the data file or the analyzer mode (strategy / indicator) drops preserved signal bundles so the next rerun starts fresh.
  • perfMulti-day TBBO optimization with much lower memory pressure.
  • fixTrade reconnection fix in the analyzer (was caching stale chart trades).
  • fixScatter plot final fix: per-tag stats survive optimization re-runs and clear-button cycles.

GitHub integration

  • featConnect a GitHub account from inside the app via OAuth Device Flow.
  • featPush, pull, branches, and remote URL handling straight from the source-control panel.
  • featToken handling is automatic and short-lived; you don't manage anything.
  • fixArgument validation rejects shell-meta and dangerous git flags so a malformed command from anywhere can't escape the workspace.

Notebooks & research

  • featNotebook overhaul. Faster cell execution, smarter kernel restart, better matplotlib inline rendering, fewer auto-save races.
  • featStreamlined built-in notebooks: getting_started.ipynb (the broad entry point covering decorators, data, plotting, backtesting, optimization), analysis.ipynb (tag analysis, filtering, group comparison), and multi_day.ipynb (multi-day backtests, Monte Carlo, parameter sweeps for both .py and .rs).
  • featqc.runner API for both .py and .rs strategies, identical to what the Analyzer tab uses.
  • featMath / LaTeX support in markdown cells (Greek, fractions, summations, integrals, matrices).

UI & quality of life

  • featHelp tab overhaul. All the docs you actually need without leaving the app.
  • featExplorer overhaul with folder grouping, panel folder grouping, and faster context menus.
  • featTerminal overhaul with better code-output styling, an audio oscilloscope, and crisper visuals.
  • featBottom status bar shows live py / np / rs / qc / win / gpu health at a glance.
  • fixDrawing tools fix for crosshair clamping and label layout.
  • featPer-strategy timeframe pill in the chart top bar so you can switch exec-TF in one click without diving into settings.
  • featTradingView script converter for porting Pine snippets into Quant Charts indicators.

Data import & conversion

  • featMore CSV formats. 12-hour timestamps with AM / PM (e.g. 1/2/2014 5:00 AM), European decimals (3.575,75 to 3575.75), and mixed thousands separators.
  • featBetter parquet preview with type-aware coloring.
  • featTBBO parquet streaming through the Rust path on Windows where the DuckDB Arrow extension isn't available.

Performance & stability

  • perfMajor memory reductions during multi-day TBBO sweeps.
  • perfFaster TBBO chart switching and analyzer-side data loads.
  • fixMore robust subscription checks that never spam the auth backend.
  • fixLots of small race-condition fixes around popouts, tab restoration, and chart-registry persistence.
  • fixStrategies that read TBBO-only fields (e.g. bid_vol, ask_vol, spread) on a native OHLC file now error loudly instead of silently producing all-NaN trades.

Compliance & email

  • featAuth emails now come from auth@quantchartsllc.com via a verified SMTP. Reliable delivery, no more password-reset emails landing in spam.
  • featLegal acceptances for EULA, Terms of Service, Privacy Policy, and Refund Policy are now recorded on login / signup.
  • featPayments backend cutover to LemonSqueezy. Existing Whop subscriptions keep working through a grace window; new checkouts go through LemonSqueezy. Manage billing from Account > Subscription.
  • docsSee legal/ in the app folder for the bundled copies you agreed to at checkout.
v1.0.6Apr 12, 2026

Performance & free Quant Charts

Changes

  • featFree Quant Charts for everyone.
  • featLicense enforcement.
  • featImproved session management.
  • featEnhanced execution pipeline integrity checks.
  • perfPerformance improvements for large optimizations.
  • fixBug fixes and stability improvements.