Before you paste
- Line 1 is //@xfscript 1.
- There is at most one indicator("...") call and it names the indicator.
- Every statement is on one line and no call is split across lines.
- Every series let and var is at the top level, never inside an if branch; a let inside a function or loop body is a local.
- Every := or += target is a var or a local.
- Every loop whose end can fall below its start says by 1, and no ta.*, input.* or per bar drawing is called inside a loop.
- Every name called appears in the builtin tables on this page.
- Every colour is a "#RRGGBB" or "#RRGGBBAA" string.
- Every argument count matches a signature on this page.
- No annotation says int unless the value is always a finite whole number.
- Numbers are turned into text with format.compact or format.fixed before str.concat.
- Any use of tape.price, tape.size, tape.side or tape.time is guarded by tape.prints_available().
- Any use of cell.* is guarded by cell.available().
- Any use of l1.*, l2.*, mbo.* or gex.* is guarded by supported() and available(), and the script still draws when that data is absent.
- Any use of an indicator read by name, such as bigtrades, effort_zones, important_levels or chart_stats, checks available(), because it needs that indicator on the chart, and a find(name) answer of -1 is handled.
- Quotes, live depth and gamma exist only on bars the chart saw since the script started; values meant to span the chart are carried forward in a var.
- plot.hbar and plot.table calls are not inside an if; their colours and text are picked with ? :.
- Effort Zones output is used on the bar it describes.
- Oscillators, ratios, counts and deltas go in the sub panel; only prices go on the price chart.
- There is at least one plot call, otherwise the indicator draws nothing.
