# What Quant Charts cannot do

Quant Charts is a research environment. It does not connect to brokers, does not stream live prices, and does not route orders.

Every backtest replays from a local parquet file. Strategy output is signals, not orders. The trade simulator is deterministic; nothing leaves your machine. If you want a paper-trading bridge or a live execution layer, you need a different tool.

<a id="only-python-and-rust-are-supported"></a>
## Only Python and Rust are supported

Indicators and strategies must be written in Python (.py) or Rust (.rs). No JavaScript, TypeScript, C++, C#, MQL, EasyLanguage, NinjaScript, or Pine.

Python files run on OHLC bars. Rust files can run on either OHLC bars (`data_mode = "ohlc"`) or TBBO ticks (`data_mode = "tick"`). Both languages share the same authoring surface (decorators / macros, signal helpers, ta.* namespace, plotting).

If you have an existing strategy in another language, you port it; there is no transpiler.

<a id="python-is-ohlc-only-tick-precision-needs-rust"></a>
## Python is OHLC-only; tick precision needs Rust

Python receives aggregated bars at the chart timeframe. For per-tick decisions (microprice, spread compression, large-trade detection, tick-by-tick imbalance) write a Rust .rs file with `data_mode = "tick"`.

When the source file is TBBO, Python strategies still see an aggregated DataFrame (open / high / low / close / volume / bid_vol / ask_vol / delta) built at the active timeframe before `calculate()` runs. The aggregation throws away per-tick ordering. If your logic needs to react to a specific print before the bar closes, Rust is the only path.

<a id="single-day-single-asset-execution"></a>
## Single-day, single-asset execution

Each strategy and indicator runs against one symbol and one trading day at a time. There is no built-in cross-day state, no cross-asset pairs, no inter-market spread.

The analyzer can sweep across many days, but each day is computed independently and aggregated post-hoc. Within a single `calculate()` call you see one day of data for one symbol. There is no "yesterday's close" object that persists across days inside a strategy, and no way to fetch a second symbol's series from inside the strategy file. If you need cross-day state, fold it into the signal at analysis time (notebooks / scripts) rather than inside the strategy.

<a id="the-lookahead-validator-is-not-exhaustive"></a>
## The lookahead validator is not exhaustive

The static check flags the common lookahead forms (negative `.shift`, forward slices like `close[i+1:]`) but cannot prove a strategy is causal. A clean validator is necessary, not sufficient.

Lookahead encoded through computed indices, helper-wrapped access, or data-dependent slicing can pass the validator and still read the future. The authoritative test is behavioral: the backtest result must not change when the data is truncated to bar i. If truncating the series changes earlier signals, the strategy is peeking ahead regardless of what the validator said.

<a id="supported-data-shapes-tbbo-and-ohlc-parquet"></a>
## Supported data shapes: TBBO and OHLC parquet

Quant Charts ingests TBBO (tick-level top-of-book bid/ask) and OHLC (pre-aggregated bars) parquet files. No MBP-10, no full order book depth, no level-2, no time-and-sales-only feeds.

TBBO files give you bid price, ask price, bid size, ask size, volume, and delta per tick. OHLC files give you open / high / low / close / volume per bar, with optional delta and vwap columns. Other parquet schemas (MBP-10 with 10 levels of depth, Databento basic OHLCV without TBBO, Polygon's aggregated quotes, etc.) are not supported and will fail at load time or silently misbehave.

<a id="indicator-parameter-types-are-scalar"></a>
## Indicator parameter types are scalar

`input.*` ships seven types: int, float, bool, string, source, color, and timeframe. No tuple ranges, no multi-select sets, no typed enums, no nested groups.

For enum-style choices use [`input.string("SMA", "MA Type", options=["SMA", "EMA", "WMA"])`](https://quantchartsllc.com/docs/python/py-inputs.md#input-string). The dropdown is identical; you only lose static type narrowing. For paired ranges (min / max) use two separate [`input.float`](https://quantchartsllc.com/docs/python/py-inputs.md#input-float) parameters; the analyzer sweeps each axis independently. Multi-select is not currently expressible through any `input.*` factory.

<a id="no-remote-workspaces"></a>
## No remote workspaces

Your strategies, indicators, notebooks, and data live on the machine you installed Quant Charts on. No cloud sync, no shared team workspace, no remote backtest farm.

Everything runs locally. If you want collaboration, source-control your workspace folder (Git is wired in: the in-app GitHub integration lets you push the strategies/indicators folders to a private repo). The compute is your laptop's CPU; there is no offload to a backend.
