Skip to main content
Each problem the script editor reports has a code. A code never changes meaning, so a person or an agent can act on it. Codes from the Pine translation start with PN; see Pine Script.

Writing the script

Found when the script is checked, before it runs.

OX1000

The source does not parse. Fix the syntax at the line shown.

OX1001

The script must start with indicator(…). Make indicator(name, options) the first statement.

OX1002

This statement cannot run at the top level. The top level may hold only indicator(), const declarations, plot.level(), function declarations and handler registrations. Move logic into a handler such as chart.onBar(() => { ... }).

OX1003

Top-level let and var are not allowed. Persistent values are declared state: use const x = state.bar(0) and write x.value in a handler.

OX1004

A top-level collection is changed after setup. Top-level arrays, objects, Maps and Sets are constants. Use state.list(n) or state.map(n) for data that changes.

OX1006

indicator(…) may be called only once, at the top level. Keep one indicator(...) call, as the first statement.

OX1010

Scripts have no imports or exports. A script is one file. Everything it can use is a global of the script API.

OX1011

eval and the Function constructor are not available. Write the code directly.

OX1012

The with statement is not allowed. Name the object explicitly.

OX1013

async and await are not available. Handlers run synchronously per bar or event; data arrives through streams.

OX1014

Generators are not available. Use a loop or an array.

OX1015

Classes are not available. Use plain objects and functions; persistent values are declared state.

OX1016

this is not available at the top level. Name the value you mean.

OX1017

finally blocks are not allowed. A finally block can swallow the step limit. Use try/catch without finally.

OX1018

debugger statements are not allowed. Use log.info(...) to inspect values.

OX1019

This TypeScript construct is not supported. Scripts use erasable TypeScript only: no enum, namespace, decorators or parameter properties. Use a union of string literals instead of an enum.

OX1020

This global is not available in scripts. Scripts see only the script API and plain JavaScript values (Math, Number, String, Array, Object, JSON, Map, Set).

OX1021

Math.random is not available. Use random(seed), which gives the same numbers everywhere.

OX1022

constructor, prototype and proto are not accessible. Work with the values directly.

OX1023

Globals and API objects cannot be assigned to. Declare your own value, or write a state cell’s .value.

OX1024

**= works on a plain variable only. Write a.b = a.b ** c.

OX1025

Names starting with __ are reserved for the engine. Rename the variable.

OX1101

This constructor can be called only at the top level (setup). Create inputs, streams, state, indicators, plots and alerts once at the top level; update them in handlers.

OX1103

Handlers must be registered at the top level, unconditionally. Write stream.onBar(...) as its own top-level statement.

OX1104

API objects cannot be indexed dynamically. Name the member: chart.close, or read a bar value by name with chart.source(name).

OX1105

This state is updated from two streams’ handlers. Each state object, series and indicator belongs to one stream. Give each stream its own, and read the other stream’s value instead of writing it.

OX1106

Event handlers may change only tallies and live state. Events are never replayed, so they cannot change state that rolls back. Add to a tally() or tallyBy(n), or use state.live(...), and use the result in the chart’s onBar.

OX1107

Tallies are filled by event handlers. Call tally.add(...) in trades.onTrade or liquidations.onLiquidation. In a bar handler, use a local or state.bar(...).

OX1108

Plots, markers and drawings are set from the chart’s handlers. Set them in the onBar or onClose of the chart’s own bars() stream, reading the other stream there.

OX1109

This stream has no such handler. Bar streams have onBar and onClose, trades() has onTrade, liquidations() has onLiquidation. Sample streams have no handlers: read them in a bar handler.

OX1110

A handler must be a function. Pass an arrow function, or the name of a top-level function.

OX1901

This indicator is updated inside a condition. (warning) An indicator advances only when update runs, so it skips the bars where the condition is false (Pine’s call-site rule). Update it on every bar and use the value conditionally, unless that is what you mean.

Running the script

Found while the script runs: a limit, a value out of range, a call in the wrong place.

OX2001

A constructor was called inside a handler. Create it once at the top level and update it in the handler.

OX2002

This can be called only inside a handler. Indicators update and handlers register at the times docs/scripting.md §2 sets out.

OX2003

This state cell holds numbers. Its initial value was a number. Declare state.bar<number | null>(null) or similar for a cell that can hold other values.

OX2004

A state list, map or tally is full. Raise its capacity (up to the limit) or remove old entries.

OX2005

A size is over the limit. Series keep at most 5,000 bars, tallyBy 10,000 keys, lists and maps 100,000 entries, drawings 500 per kind.

OX2006

A series was read further back than its lookback. Declare a larger lookback: series(n).

OX2007

More than 64 plots. Combine plots, or split the script.

OX2008

An input is declared wrongly. Check the default value and the options.

OX2009

Plots, markers and drawings can be set only from the chart’s handlers. Set them in the chart stream’s onBar or onClose.

OX2010

An argument is not valid. Check the value named in the message.

OX2011

Unknown time zone. Use an IANA name such as America/New_York, or UTC.

OX2012

More than 9 tables. Reuse a table: clear it and write new cells.

OX2013

A list index is out of range, or the list is empty. Check list.length first.

OX2100

The script threw an error. Read the message and the line.

OX2105

This state is updated from two streams’ handlers. Each state object, series and indicator belongs to the stream whose handler first updated it.

OX2106

An event handler changed state that rolls back. Event handlers may change only tallies and live state.

OX2107

A tally was added to outside an event handler. Fill tallies in onTrade or onLiquidation.

OX2200

The step limit ran out. A script gets 10 million steps (loop iterations and function calls) for setup, per batch of 512 bars and per live update. Look for a loop that does not end, or work that can move out of the loop.

The engine’s own failures

Never the script’s fault. Simplifying what the message names may get past one.

OX9001

The engine failed on this script, which is our bug, not yours. Please report the script. Simplifying what the message names (a very deeply nested expression, say) may get past it meanwhile.

OX9002

The engine could not read the data this script reads, which is our bug, not yours. Please report it. Reloading the page starts the data over.

Next step

Back to the reference.
Last modified on October 16, 2026