Missing features
Known gaps and closed Pine Script™ v6 items — 0.6.4 convert-to-v6; 0.6.3 hosted runner; 0.6.2 P1p official builtins 0 MISMATCH; 0.6.1 correctness follow-up on 0.6.0 parity.
This page
Missing features
Abstract
“Missing” in PYNE is a moving frontier. As of 2026-09-14 (hoox-pyne 0.6.4), core v6 support remains very high (~99%+ for core language), with post-launch TV items closed (multiline strings, library export const, footprint mocks, risk enforcement, matrix LA, compile-mode strategy, drawing GC, …) plus open-source corpus parse/Runtime hardening, incremental bar-mode TA (including 0.3.10–0.3.12 kernels), alert engine + L2 webhooks, series caps, warm-compile, pending-fill averaging, timeframe.change (intraday buckets + 0.6.0 D/W/M exchange calendar), package Runtime SoT (pynescript.runtime; backend.runtime is a shim), compile object-mode residual recovery (UDF locals, nopython None/unicode, matrix handles, UDT returns, x = switch, drawing copy, int(na), round() extras, import stubs, color type dispatch, nested UDT methods), type-aware intraday risk enforcement on both brokers, intrabar var rollback on realtime ticks, request.security barmerge on HTF resample paths, and linter legacy-rule retirements. Remaining gaps cluster into optional set0x community-corpus plot parity (P1p official builtins closed), by-design platform differences, and editor-only features. Incremental ta.nvi/ta.pvi/aroon/dpo/donchian/kst and Supertrend mid±factor·ATR goldens have landed.
Authoritative narrative: docs/missing_features.md. Canonical IDs: docs/ROADMAP.md (2026-08-17).
Conceptual model
Rendering…
Interface surface
Recently completed (do not re-open as “missing”)
Summarized — full prose in source doc:
| Area | Notes |
|---|---|
Multiline """ / ''' | Lexer + LexerBase + unparser |
Library export const + types/enums | Parse/AST/runtime registry |
UDT sort_field on array/matrix sort | Implemented |
UDT sort_field on array.binary_search* (August 2026) | Implemented (interpret + compile, 0.3.6) |
once conditional structure (August 2026) | Implemented in 0.4.4 — parse/unparse, interpret (confirmed-bar latch + realtime re-fire), compile historical flags. Statement-only. |
input.*.active | Metadata-driven |
Dynamic request.* | Shared resolvers; mock/feed scaling |
| Enums runtime + input.enum | Type kind + LSP partial |
| Strategy open/closed trades, risk, OCA, commission | Golden tests |
Drawing *.all, plot registry, max_*_count GC | Effects recorded; GC on package + Pro + AXIS |
| Numba compile + object mode + warm-compile (H2) | Disk IR cache, prewarm API/CLI, deploy defaults |
| Compile object-mode residuals (0.3.16–0.3.17) | UDF locals / free-series, nopython None/timestamp, matrix handles, UDT returns, x = switch, drawing copy, pine_int(na), sanitize chrome, round() extras, import stubs as na, color type dispatch, nested UDT methods |
| Official matrix LA & predicates | det/inv/eigen/… |
| 0 missing vs public TV v6 function reference list (434 symbols, 2026-07-25) | |
Runtime _pine_defs_locked + append-only current_series | Host hygiene (backend + pyne-worker) |
Incremental ta.* (MAs, oscillators, bb/kama/stochrsi, volume obv/wad/cmf/klinger/nvi/pvi) | Bar mode; PYNE_TA_INCREMENTAL=0 to disable |
| Series caps (T1) | PYNE_SERIES_CAP default ON + goldens |
| Pending-fill averaging (F2) | Pyramiding ≤ 0; interpret + compile broker goldens |
| Alert engine + L2 webhooks (L2) | Dual-host /run export, ALERT_WEBHOOK_URL / webhook_url |
request.security foreign-na policy | Foreign/complex → na both backends; same-symbol OHLCV passthrough |
| Plot parity harness (P1p) | scripts/compare_interp_compile.py, first-party goldens + official TV builtins 0 MISMATCH |
fill() export for AXIS | series + plot_meta / compile __drawings |
Still incomplete / by design
| Item | Status posture |
|---|---|
Real (non-mock) multi-symbol request.* market data (B1) | ⚙️ By design for library core; feeds optional. Foreign-na policy landed (no invent). |
request.security foreign data | ⚙️ Not filled with real series — emits na for foreign/complex (honest). Same-symbol simple OHLCV may lower. |
| Auto Fib / pivot-heavy scripts | ⚙️ Need real pivot structure (or registered ZigZag lib). Flat synthetic bars → intentional runtime.error (insufficient pivots); both hosts should agree (both_error_same in parity harness). |
| Pixel chart host | External (AXIS / clients) |
| Some unlimited-history / trim edge cases | High-level support; exotic TV behaviors may differ |
| Editor word-wrap / UI-only release notes | ⬜ N/A |
| PyneTS full builtin parity (L3) | ⚙️ interpret + JS compile landed in @hoox-sh/pynets 0.2.0; Python remains oracle |
| Bit-identical every recursive smoother vs TV | Numerical bounds, not bits |
| Dual Runtime host copies (H1) | ✅ largely done — package pynescript.runtime SoT + backend.* shims + pyne-worker thin wrap. Residual = worker-only extras (logs/profile, CF first-plot), not a forked bar loop |
| Warm-compile product path (H2) | ✅ SLOs / prewarm / deploy IR cache defaults (2026-08) |
| Runtime residual (C1) | ✅ set01–04 Runtime interpret 100% excl. EXPECTED_FAIL (2026-08-09); third-party corpus not shipped |
| Series cap (T1) | ✅ PYNE_SERIES_CAP default ON |
| Residual TA inc (T2) | ✅ R7 bb/kama/cmo/stochrsi + wma/hma/linreg; 0.3.10 obv/wad/cmf/klinger; 0.3.11 nvi/pvi; 0.3.12 aroon/dpo/donchian/kst |
| Pending-fill (F2) | ✅ R7 interpret + compile goldens |
| Plot parity residual (P1p) | ✅ Harness + first-party goldens + official TV builtins 0 MISMATCH; optional set0x community corpus unmeasured |
| Compile leftover library stubs | ⚙️ Some float(None) / UDF arity on missing import libraries; INV expected-fail fixtures stay fail |
| TV Wilder RMA-ATR / supertrend (F1) | ✅ interpret ATR is ta.rma(ta.tr); Supertrend mid±factor·ATR locked. TV ratchet is out of scope |
| Alert webhooks (L2) | ✅ Pro API + pyne-worker; see Alerts |
Post-v6 launch themes (historical gap list)
v6 launch items (dynamic requests, strict bool, enums, polylines, log.*, negative indices, truediv, …) are largely supported or intentionally stubbed where platform-bound.
2025–2026 monthly TV updates introduced footprint types, active inputs, multiline strings, export const, UDT sort fields — tracked and largely closed in this repo’s July 2026 work.
Corpus + performance snapshot (2026-08-09)
Open-source set01–04 (2477 scripts; measured locally, not shipped in-repo):
| Metric | Value |
|---|---|
| Parse + unparse | 99.96% (2476 / 2477) — residual: 1 intentional invalid line-wrap docs demo |
| Runtime interpret | 100% excl. EXPECTED_FAIL — 2466 OK + 11 intentional demos |
| set01 Runtime | 249 / 249 (100%) |
| EXPECTED_FAIL class | library runtime.error demos, lower-TF security guards, pathological loops, truncated mid-call scrapes |
ta_sma bar loop (≈3.2k bars) | ~9.5× vs full recompute |
ta_atr bar loop | ~10× |
| macd+atr+rsi+sma combo | ~8.5× |
Not TradingView® platform parity. OK% excludes only path-listed intentional demos (never soft-suppress unknown failures).
Plans: .opencode/plans/2026-07-28-runtime-performance.md. Skill: .grok/skills/pynescript-perf/. Golden: tests/test_ta_incremental.py, tests/test_series_cap.py.
Internals
| Path | Role |
|---|---|
docs/missing_features.md | Living gap analysis |
tests/test_v6_features.py | v6 feature coverage |
tests/test_pine_surface_gaps.py | Surface gap probes |
tests/test_ta_incremental.py | Incremental TA ≡ full recompute |
tests/test_series_cap.py | Series cap goldens (T1) |
scripts/compare_interp_compile.py | Plot parity harness (P1p) |
docs/pine_v6_full_surface_inventory.md | Full name-level inventory |
resource/*.g4 + builder | Grammar-level feature work |
.../technical_submodules/core.py | _sma_inc_update, _macd_inc_update, _atr_inc_update, … |
Invariants & edge cases
- Closing a syntax gap requires grammar + builder + unparser + tests, not only an evaluator stub.
- Mock data can green tests while production feeds differ — declare data source explicitly.
- Compile does not fill foreign
request.securitydata — multi-asset plots staynaon compile unless same-symbol simple OHLCV; do not treat invent-as-close as a fix. - Auto Fib needs pivots — without swing structure (or ZigZag library registration), expect structured insufficient-pivot errors, not fib lines.
- “0 missing vs reference list” ≠ identical semantics for every edge case.
- Perf changes must keep bar-by-bar semantics — no whole-script vectorization; prefer golden tests vs current oracle.
- Update this annex when
missing_features.mdchanges major status lines.
Worked examples
Detect multiline string support
from pynescript.ast.helper import parse, unparse
src = '''//@version=6
indicator("m")
s = """a
b"""
plot(1)
'''
tree = parse(src)
assert '"""' in unparse(tree) or "'''" in unparse(tree)
Footprint mock call
Prefer tests in tests/test_v6_features.py as executable specification for request.footprint methods.
Incremental TA parity smoke
.venv/bin/python -m pytest tests/test_ta_incremental.py -q
# Disable hot path if needed:
PYNE_TA_INCREMENTAL=0 python -c "from pynescript.runtime import Runtime; ..."
Failure modes
| Symptom | Likely gap class |
|---|---|
| Lexer error on triple quotes | Stale generated lexer (should be fixed on main) |
| Import member missing | Library export registration |
| Empty footprint rows | Mock seed / data_feed not configured |
| Risk not blocking entry | Old runtime path; ensure risk kwargs applied |
| Runtime TIMEOUT on method-heavy scripts | Missing _pine_defs_locked on host (fixed 2026-07-28) |
| Corpus PARSE_FAIL mid-block | Truncated scrape — not a grammar hole |