[{"data":1,"prerenderedAt":5865},["ShallowReactive",2],{"wrun-open-editor-url":3,"indicators:faq/best-practices":4},"https://openmarket.xyz/chart/#wrun-open=v1",{"slug":5,"filePath":6,"frontmatter":7,"rawMarkdown":12,"tree":13},"faq/best-practices","faq/best-practices.md",{"title":8,"description":9,"order":10,"section":11},"Best practices","Guidelines for writing wrun indicators that are fast, honest about warm-up, and safe to replay: where state lives, what belongs in onStart() and what in onBar(…",117,"faq","---\ntitle: \"Best practices\"\ndescription: \"Guidelines for writing wrun indicators that are fast, honest about warm-up, and safe to replay: where state lives, what belongs in onStart() and what in onBar(…\"\norder: 117\nsection: \"faq\"\n---\n\n\u003C!-- source: docs/indicators/faq/best-practices.md; generated by packages/cli/scripts/gen-indicator-docs.ts, do not edit -->\n\n# Best practices\n\nGuidelines for writing wrun indicators that are fast, honest about warm-up, and safe to replay: where state lives, what belongs in `onStart()` and what in `onBar()`, why the generated accessors beat slot literals, and the handful of habits that keep a file fast and readable.\n\n## Code structure\n\n### Variable declarations\n\nAn indicator has three kinds of state, and each has one right home.\n\n**Module-level `let` for anything that survives between bars.** This is where accumulators, the previous bar's close, running session highs, and the TA objects live. Give every one a type and a starting value (`let cvd: f64 = 0.0`, `let prevClose: f64 = NaN`).\n\n**Locals inside `onBar()` for this bar's arithmetic.** A `const typical = (high + low + close) / 3.0` that nothing needs next bar belongs in the function, not at module level. It is cheaper and it cannot go stale.\n\n**A `StaticArray\u003Cf64>` ring buffer for a window.** A window you index into (the value five bars back) is a buffer you fill yourself: allocate it once, sized from the param's `max`, walk it with a cursor, and count how full it is. `History` from `./sdk/stats` is that buffer ready-made, with `ago(n)` for the value `n` bars back ([Stats, history and lists](../functions/stats-history-lists.md#history-xn-from-pine)). The zone tracker and the [previous-bar FAQ sample](general.md) show the shape.\n\n### Allocate in `onStart()` or at module start, never in `onBar()`\n\n`onBar()` runs once per loaded bar and again on the forming bar as live updates arrive. Anything allocated there is allocated thousands of times, an array that grows on every call is the one pattern that makes a long history slow, and the chart stops a module whose memory grows once the bars start (\"The Indicator allocated memory after init() ... the sandbox forbids growth once the bars start.\"). Size buffers from the param's declared `max`, at module start, and let `onStart()` set the live length:\n\n```typescript sample=faq-allocate-init\nparam(\"window\", 100, { min: 10, max: 500, description: \"Bars the rank is measured against\" });\noutput(\"rank\", line, lower, { unit: \"%\", description: \"Share of the window's closes below this bar's close\" });\n\n// Allocate once, at module start, sized from the param's max: never inside onBar().\nconst MAX_WINDOW = 500;\nconst closes = new StaticArray\u003Cf64>(MAX_WINDOW);\nlet n: i32 = 100;\nlet cursor: i32 = 0;\nlet count: i32 = 0;\n\nfunction onStart(): void {\n  n = i32(p_window());\n}\n\nfunction onBar(): void {\n  const close = bar.close();\n  let below = 0;\n  for (let i = 0; i \u003C count; i++) if (closes[i] \u003C close) below += 1;\n  closes[cursor] = close;\n  cursor = (cursor + 1) % n;\n  if (count \u003C n) count += 1;\n  if (count \u003C n) return;\n  out_rank((100.0 * f64(below)) / f64(n));\n}\n```\n\nThe TA classes follow the same rule: `new Sma(period)` allocates its window in the constructor and `update()` never allocates, which is why they are constructed in `onStart()` and fed in `onBar()`.\n\n### Nothing to reset\n\nThere is no reset step to write. The chart runs the module once over the loaded bars, and the forming bar does not depend on any reset: the chart replays that bar from a snapshot of the module's memory taken after the last closed bar, so a live value never double-counts. Give every module-level `let` its starting value where it is declared, build what depends on a param in `onStart()`, and let a `count` field say how much of a buffer is valid instead of clearing the buffer.\n\n### Accessors over slot literals\n\nParams, inputs, and outputs reach the code by name: `p_period()`, `bar.close()`, `in_funding()`, `out_sma(value)`, generated from the declarations on every check. Underneath, the host passes values positionally, and the raw calls (`getFloat(0)`, `setOutput(0, ...)`) bind by position, so adding a declaration above them silently rebinds them. The editor refuses the raw form in your source (`Raw slot literal 0 passed to getFloat(): raw positional slots rebind silently when the sheet changes`) and names the accessor to use instead. The same rule keeps a rename honest: rename `output(\"sma\", ...)` to `output(\"average\", ...)` and the compiler points at every stale `out_sma` ([Declarations and the sheet](../reference/declarations.md)).\n\n## Technical indicators\n\n### Read the period once, cast it once\n\nParams are `f64`; a period is `i32`. Read each param in `onStart()`, cast it there (`new Sma(i32(p_period()))`), and keep the class in a module-level variable. Reading `p_period()` in `onBar()` works but does the cast on every bar for nothing, and constructing a class in `onBar()` allocates on every bar.\n\n### Be honest about warm-up\n\nA window that is not full has no value, and the honest output is `NaN`. Two ways to write it, both correct: `return` from `onBar()` before any write while nothing on the bar is meaningful (every output stays `NaN`, and the bar draws nothing), or write `NaN` to the one output that is still warming while the others draw ([Execution model](../core-concepts/execution-model.md)). What is never correct is a placeholder that draws as if it were true. The chart reads no warm-up count: every bar has a row, and what `onBar()` writes alone decides what is drawn.\n\n### Name what the module computes, not how it is drawn\n\nA decision is an output too. Emit `1` or `0` from a data-only `none` output and let a declaration turn it into a look (`shape_where`, `color_by`, a box's `when`). That keeps the numeric surface reusable: the same gate that draws a mark can drive a declared `alert(...)`, and you can read it by name at the Console prompt.\n\n## Plotting and visualization\n\n### Describe every declaration\n\n`label` on a setting is its name in the settings dialog (`description` stands in when there is none, and `hint` is the words behind the row's glyph); on an input `description` documents the input in the sheet **Run** derives; on an output it is the note the Console prompt shows beside the output's name. Write them the way you would want to read them a month later: \"Bars of history that define normal volume\" beats \"lookback\". Give small-magnitude series (oscillators, percentages, counts) the `lower` panel and a `unit` (`%`, `price`, or a short label) so the axis formats itself.\n\n### One namespace for shape names\n\nOutputs, boxes, segments, renderers, and drawings share one namespace. A box named `range` beside an output named `range` is refused at the sheet (`box name 'range' is already taken by an output`). Name shapes for what they draw (`demand_zone`, `pdh_line`) and outputs for what they compute (`demand_top`, `pdh`).\n\n## Debugging\n\n### Probe with an output\n\nLog it or draw it. The debug log is the indicator's `print()`: a string slot named `debug`, written in `onBar()`, prints each bar's line in the editor's Console. For a number, declare the suspect intermediate as `none` (readable by name at the Console prompt, never drawn) or as a `lower` line to see its shape across every bar, then delete the declaration when you are done. [Debugging](debugging.md) is the full workflow.\n\n## Error prevention\n\n### NaN checks and safe division\n\n`NaN` is the only \"nothing here\" value, and it propagates: `NaN + 1` is `NaN`, and `NaN > 0` is `false`. Test with `isNaN(x)` before a comparison that decides something, and guard every division by a value that can be zero. The two helpers most indicators need are two lines each:\n\n```typescript sample=faq-nan-helpers\nparam(\"len\", 20, { min: 1, max: 200 });\noutput(\"ratio\", line, lower, { description: \"Volume over its average, 0 while the average warms\" });\noutput(\"smooth\", line, lower, { description: \"Close average, last good value carried across gaps\" });\n\n// nz: a number, or the fallback when it is NaN.\nfunction nz(value: f64, fallback: f64): f64 {\n  return isNaN(value) ? fallback : value;\n}\n\n// Division that refuses to blow up: NaN when the denominator is zero or missing.\nfunction safeDiv(numerator: f64, denominator: f64): f64 {\n  return isNaN(denominator) || denominator == 0.0 ? NaN : numerator / denominator;\n}\n\nlet avgVolume = new Sma(20);\nlet avgClose = new Sma(20);\nlet lastGood: f64 = NaN;\n\nfunction onStart(): void {\n  avgVolume = new Sma(i32(p_len()));\n  avgClose = new Sma(i32(p_len()));\n}\n\nfunction onBar(): void {\n  const volume = bar.volume();\n  out_ratio(nz(safeDiv(volume, avgVolume.update(volume)), 0.0));\n  // fixnan: keep the last non-NaN value instead of showing a gap.\n  const smooth = avgClose.update(bar.close());\n  if (!isNaN(smooth)) lastGood = smooth;\n  out_smooth(lastGood);\n}\n```\n\n### Buffer bounds\n\nA ring buffer never reads past what it has been given: keep a `count` beside the `cursor` and only scan `count` entries until the buffer is full. There is no `barIndex` to compare against and no negative index to worry about; the buffer's own bookkeeping is the bound. A `History` from `./sdk/stats` keeps that bookkeeping for you: `ago(n)` reads `NaN` until it holds `n + 1` values ([Stats, history and lists](../functions/stats-history-lists.md#history-xn-from-pine)).\n\n### `missing` on sparse primaries\n\nA feed that only has rows when something happened (liquidations, for one) makes a poor primary input as-is: the grid has holes. Declare `missing: \"zero\"` (or `\"nan\"`) on it and the grid densifies to one row per bar, with the fill on the quiet bars. On a secondary sparse input the same policies decide what the module sees on bars without an observation; the default carries the last value forward, which is right for a coarse candle and wrong for a volume you would double-count ([Data sources](../core-concepts/data-sources.md)).\n\n## Performance optimization\n\n### Avoid redundant calculations\n\nCompute a value once and keep it in a local for every output that needs it; do not fold the same input into two classes when one class and a copy will do. Loops are fine when they are bounded by a param with a declared `max`; a loop whose bound comes from history length is the thing to avoid.\n\n### Keep the row cheap\n\n`onBar()` should be arithmetic and writes. Building a string per bar is fine inside the string channel's shared buffer (`sb_clear` / `sb_text` / `sb_f64` allocate nothing), but text built with `+` or `toString()` allocates on every bar, and memory that grows once the bars start stops the run; build every per-bar line with `sb_*`.\n\n## Canvas cost\n\nA price canvas costs what it draws. A TPO costs rows x letters x the periods on screen: the chart folds every row from the candles and paints every letter as a block. The folding counts toward the \"is slowing your chart\" notice like your script's own time, and a live tick refolds only the forming period. On BTC at 15m the chart's 75-dollar rows make about 230 blocks a day; 1.5-dollar rows would make about 9,300.\n\n### Prefer `\"auto\"`\n\nLeave `row_height` out. `\"auto\"` takes the row from what the chart serves for the market (the bucket width of your `cells`, else the market's TPO or volume profile catalog) times the chart's row table, so your canvas draws the rows the chart's own footprint, TPO or profile would: on BTC at 15m, a TPO gets about 25 to 90 rows a day, each tall enough for its letters ([Row height](../presentation/price-canvases.md#row-height)).\n\n### When to declare a number\n\n- **A market with no catalog, whose tick you know.** `\"auto\"` falls back to a quarter of the median candle range there; a whole number of ticks (`row_height: 0.25` on a market that trades in 0.05 steps) keeps every row on a price the market can print.\n- **A deliberately coarse profile.** Fewer, taller rows than auto, such as `row_height: 250` for a BTC day profile read at a glance.\n\nSize the number from the range: a period's high minus its low, divided by `row_height`, is the rows it holds, and under 512 the chart keeps your height.\n\n### The coarsening notice\n\n`tpo 'tpo': row_height 1 coarsened to 8 (512 rows per day is the chart's limit)`, a warning row in the Console and the warning on the legend chip, means a period held more than 512 rows at the height you declared, so the chart doubled it until the period fit (at most 6 times). The TPO still draws, at the coarser height, and the notice repeats on every run. To clear it, declare the height it names or a larger one, or remove `row_height` and let `\"auto\"` pick. On `\"auto\"` (`row_height auto coarsened from 1.5 to 12`) the market's own unit is too fine for how far its price moves in a period: declare a `row_height` of at least the height the notice names.\n\n## Code organization\n\n### Group related code\n\nRead top to bottom: declarations, state, helpers, then `onStart()` and `onBar()` in the order the chart calls them. A complete indicator laid out that way:\n\n```typescript sample=faq-structure\n// 1. Declarations: settings and outputs, each with the description the settings dialog and the Console prompt show.\nparam(\"fast\", 9, { min: 2, max: 100, description: \"Fast EMA length\" });\nparam(\"slow\", 21, { min: 5, max: 400, description: \"Slow EMA length\" });\noutput(\"fast\", line, overlay, { color: \"#38bdf8\", description: \"Fast EMA\" });\noutput(\"slow\", line, overlay, { color: \"#f59e0b\", width: 2, description: \"Slow EMA\" });\noutput(\"entry\", shape, overlay, { color: \"#22c55e\", shape_where: \"is_entry\", description: \"Fast crossed above slow\" });\noutput(\"is_entry\", none);\n\n// 2. State: everything that lives between bars, with its starting value.\nlet fast = new Ema(9);\nlet slow = new Ema(21);\nlet cross = new Cross();\n\n// 3. Lifecycle: onStart reads settings, onBar folds the bar and writes the row.\nfunction onStart(): void {\n  fast = new Ema(i32(p_fast()));\n  slow = new Ema(i32(p_slow()));\n  cross = new Cross();\n}\n\nfunction onBar(): void {\n  const close = bar.close();\n  const fastValue = fast.update(close);\n  const slowValue = slow.update(close);\n  const crossed = cross.update(fastValue, slowValue);\n  if (isNaN(slowValue)) return;\n  out_fast(fastValue);\n  out_slow(slowValue);\n  out_entry(bar.low());\n  out_is_entry(crossed == 1 ? 1.0 : 0.0);\n}\n```\n\n### Comment the why\n\nThe declarations already say what the indicator reads and writes, and the accessors keep the code readable, so comments earn their place explaining a decision: why a bucket folds in only on the next bucket's first bar, why a session that was already running stays `NaN`, why a pinned input reads `NaN` on a stock chart. The cookbook recipes are written that way.\n",{"type":14,"children":15,"data":5859,"position":5861},"root",[16,26,29,30,88,89,107,108,125,126,141,142,235,236,305,306,504,505,550,551,614,615,1376,1377,1468,1469,1484,1485,1557,1558,1574,1575,1805,1806,1822,1823,1838,1839,1986,1987,2002,2003,2152,2153,2168,2169,2319,2320,2336,2337,2352,2353,2537,2538,2553,2554,2702,2703,2717,2718,2734,2735,2864,2865,2881,2882,2897,2898,3018,3019,3866,3867,3882,3883,4083,4084,4112,4113,4188,4189,4204,4205,4220,4221,4255,4256,4270,4271,4405,4406,4420,4421,4436,4437,4464,4465,4555,4556,4571,4572,4696,4697,4730,4731,4745,4746,4866,4867,4882,4883,4897,4898,4946,4947,5793,5794,5809,5810],{"type":17,"value":18,"position":19},"comment"," source: docs/indicators/faq/best-practices.md; generated by packages/cli/scripts/gen-indicator-docs.ts, do not edit ",{"start":20,"end":23},{"line":21,"column":21,"offset":22},1,0,{"line":21,"column":24,"offset":25},125,124,{"type":27,"value":28},"text","\n",{"type":27,"value":28},{"type":31,"tagName":32,"properties":33,"children":34,"position":85},"element","p",{},[35,44,58,65,78],{"type":27,"value":36,"position":37},"Guidelines for writing wrun indicators that are fast, honest about warm-up, and safe to replay: where state lives, what belongs in ",{"start":38,"end":41},{"line":39,"column":21,"offset":40},5,144,{"line":39,"column":42,"offset":43},132,275,{"type":31,"tagName":45,"properties":46,"children":47,"position":55},"code",{},[48],{"type":27,"value":49,"position":50},"onStart()",{"start":51,"end":52},{"line":39,"column":42,"offset":43},{"line":39,"column":53,"offset":54},143,286,{"start":56,"end":57},{"line":39,"column":42,"offset":43},{"line":39,"column":53,"offset":54},{"type":27,"value":59,"position":60}," and what in ",{"start":61,"end":62},{"line":39,"column":53,"offset":54},{"line":39,"column":63,"offset":64},156,299,{"type":31,"tagName":45,"properties":66,"children":67,"position":75},{},[68],{"type":27,"value":69,"position":70},"onBar()",{"start":71,"end":72},{"line":39,"column":63,"offset":64},{"line":39,"column":73,"offset":74},165,308,{"start":76,"end":77},{"line":39,"column":63,"offset":64},{"line":39,"column":73,"offset":74},{"type":27,"value":79,"position":80},", why the generated accessors beat slot literals, and the handful of habits that keep a file fast and readable.",{"start":81,"end":82},{"line":39,"column":73,"offset":74},{"line":39,"column":83,"offset":84},276,419,{"start":86,"end":87},{"line":39,"column":21,"offset":40},{"line":39,"column":83,"offset":84},{"type":27,"value":28},{"type":31,"tagName":90,"properties":91,"children":92,"position":103},"h2",{},[93],{"type":27,"value":94,"position":95},"Code structure",{"start":96,"end":100},{"line":97,"column":98,"offset":99},7,4,424,{"line":97,"column":101,"offset":102},18,438,{"start":104,"end":106},{"line":97,"column":21,"offset":105},421,{"line":97,"column":101,"offset":102},{"type":27,"value":28},{"type":31,"tagName":109,"properties":110,"children":111,"position":121},"h3",{},[112],{"type":27,"value":113,"position":114},"Variable declarations",{"start":115,"end":118},{"line":116,"column":39,"offset":117},9,444,{"line":116,"column":119,"offset":120},26,465,{"start":122,"end":124},{"line":116,"column":21,"offset":123},440,{"line":116,"column":119,"offset":120},{"type":27,"value":28},{"type":31,"tagName":32,"properties":127,"children":128,"position":138},{},[129],{"type":27,"value":130,"position":131},"An indicator has three kinds of state, and each has one right home.",{"start":132,"end":135},{"line":133,"column":21,"offset":134},11,467,{"line":133,"column":136,"offset":137},68,534,{"start":139,"end":140},{"line":133,"column":21,"offset":134},{"line":133,"column":136,"offset":137},{"type":27,"value":28},{"type":31,"tagName":32,"properties":143,"children":144,"position":232},{},[145,185,192,205,212,225],{"type":31,"tagName":146,"properties":147,"children":148,"position":179},"strong",{},[149,159,172],{"type":27,"value":150,"position":151},"Module-level ",{"start":152,"end":156},{"line":153,"column":154,"offset":155},13,3,538,{"line":153,"column":157,"offset":158},16,551,{"type":31,"tagName":45,"properties":160,"children":161,"position":169},{},[162],{"type":27,"value":163,"position":164},"let",{"start":165,"end":166},{"line":153,"column":157,"offset":158},{"line":153,"column":167,"offset":168},21,556,{"start":170,"end":171},{"line":153,"column":157,"offset":158},{"line":153,"column":167,"offset":168},{"type":27,"value":173,"position":174}," for anything that survives between bars.",{"start":175,"end":176},{"line":153,"column":167,"offset":168},{"line":153,"column":177,"offset":178},62,597,{"start":180,"end":182},{"line":153,"column":21,"offset":181},536,{"line":153,"column":183,"offset":184},64,599,{"type":27,"value":186,"position":187}," This is where accumulators, the previous bar's close, running session highs, and the TA objects live. Give every one a type and a starting value (",{"start":188,"end":189},{"line":153,"column":183,"offset":184},{"line":153,"column":190,"offset":191},211,746,{"type":31,"tagName":45,"properties":193,"children":194,"position":202},{},[195],{"type":27,"value":196,"position":197},"let cvd: f64 = 0.0",{"start":198,"end":199},{"line":153,"column":190,"offset":191},{"line":153,"column":200,"offset":201},231,766,{"start":203,"end":204},{"line":153,"column":190,"offset":191},{"line":153,"column":200,"offset":201},{"type":27,"value":206,"position":207},", ",{"start":208,"end":209},{"line":153,"column":200,"offset":201},{"line":153,"column":210,"offset":211},233,768,{"type":31,"tagName":45,"properties":213,"children":214,"position":222},{},[215],{"type":27,"value":216,"position":217},"let prevClose: f64 = NaN",{"start":218,"end":219},{"line":153,"column":210,"offset":211},{"line":153,"column":220,"offset":221},259,794,{"start":223,"end":224},{"line":153,"column":210,"offset":211},{"line":153,"column":220,"offset":221},{"type":27,"value":226,"position":227},").",{"start":228,"end":229},{"line":153,"column":220,"offset":221},{"line":153,"column":230,"offset":231},261,796,{"start":233,"end":234},{"line":153,"column":21,"offset":181},{"line":153,"column":230,"offset":231},{"type":27,"value":28},{"type":31,"tagName":32,"properties":237,"children":238,"position":302},{},[239,275,282,295],{"type":31,"tagName":146,"properties":240,"children":241,"position":269},{},[242,251,262],{"type":27,"value":243,"position":244},"Locals inside ",{"start":245,"end":248},{"line":246,"column":154,"offset":247},15,800,{"line":246,"column":249,"offset":250},17,814,{"type":31,"tagName":45,"properties":252,"children":253,"position":259},{},[254],{"type":27,"value":69,"position":255},{"start":256,"end":257},{"line":246,"column":249,"offset":250},{"line":246,"column":119,"offset":258},823,{"start":260,"end":261},{"line":246,"column":249,"offset":250},{"line":246,"column":119,"offset":258},{"type":27,"value":263,"position":264}," for this bar's arithmetic.",{"start":265,"end":266},{"line":246,"column":119,"offset":258},{"line":246,"column":267,"offset":268},53,850,{"start":270,"end":272},{"line":246,"column":21,"offset":271},798,{"line":246,"column":273,"offset":274},55,852,{"type":27,"value":276,"position":277}," A ",{"start":278,"end":279},{"line":246,"column":273,"offset":274},{"line":246,"column":280,"offset":281},58,855,{"type":31,"tagName":45,"properties":283,"children":284,"position":292},{},[285],{"type":27,"value":286,"position":287},"const typical = (high + low + close) / 3.0",{"start":288,"end":289},{"line":246,"column":280,"offset":281},{"line":246,"column":290,"offset":291},102,899,{"start":293,"end":294},{"line":246,"column":280,"offset":281},{"line":246,"column":290,"offset":291},{"type":27,"value":296,"position":297}," that nothing needs next bar belongs in the function, not at module level. It is cheaper and it cannot go stale.",{"start":298,"end":299},{"line":246,"column":290,"offset":291},{"line":246,"column":300,"offset":301},214,1011,{"start":303,"end":304},{"line":246,"column":21,"offset":271},{"line":246,"column":300,"offset":301},{"type":27,"value":28},{"type":31,"tagName":32,"properties":307,"children":308,"position":501},{},[309,345,352,365,371,384,391,403,410,423,430,443,450,469,476,494],{"type":31,"tagName":146,"properties":310,"children":311,"position":339},{},[312,319,332],{"type":27,"value":313,"position":314},"A ",{"start":315,"end":317},{"line":249,"column":154,"offset":316},1015,{"line":249,"column":39,"offset":318},1017,{"type":31,"tagName":45,"properties":320,"children":321,"position":329},{},[322],{"type":27,"value":323,"position":324},"StaticArray\u003Cf64>",{"start":325,"end":326},{"line":249,"column":39,"offset":318},{"line":249,"column":327,"offset":328},23,1035,{"start":330,"end":331},{"line":249,"column":39,"offset":318},{"line":249,"column":327,"offset":328},{"type":27,"value":333,"position":334}," ring buffer for a window.",{"start":335,"end":336},{"line":249,"column":327,"offset":328},{"line":249,"column":337,"offset":338},49,1061,{"start":340,"end":342},{"line":249,"column":21,"offset":341},1013,{"line":249,"column":343,"offset":344},51,1063,{"type":27,"value":346,"position":347}," A window you index into (the value five bars back) is a buffer you fill yourself: allocate it once, sized from the param's ",{"start":348,"end":349},{"line":249,"column":343,"offset":344},{"line":249,"column":350,"offset":351},175,1187,{"type":31,"tagName":45,"properties":353,"children":354,"position":362},{},[355],{"type":27,"value":356,"position":357},"max",{"start":358,"end":359},{"line":249,"column":350,"offset":351},{"line":249,"column":360,"offset":361},180,1192,{"start":363,"end":364},{"line":249,"column":350,"offset":351},{"line":249,"column":360,"offset":361},{"type":27,"value":366,"position":367},", walk it with a cursor, and count how full it is. ",{"start":368,"end":369},{"line":249,"column":360,"offset":361},{"line":249,"column":200,"offset":370},1243,{"type":31,"tagName":45,"properties":372,"children":373,"position":381},{},[374],{"type":27,"value":375,"position":376},"History",{"start":377,"end":378},{"line":249,"column":200,"offset":370},{"line":249,"column":379,"offset":380},240,1252,{"start":382,"end":383},{"line":249,"column":200,"offset":370},{"line":249,"column":379,"offset":380},{"type":27,"value":385,"position":386}," from ",{"start":387,"end":388},{"line":249,"column":379,"offset":380},{"line":249,"column":389,"offset":390},246,1258,{"type":31,"tagName":45,"properties":392,"children":393,"position":400},{},[394],{"type":27,"value":395,"position":396},"./sdk/stats",{"start":397,"end":398},{"line":249,"column":389,"offset":390},{"line":249,"column":220,"offset":399},1271,{"start":401,"end":402},{"line":249,"column":389,"offset":390},{"line":249,"column":220,"offset":399},{"type":27,"value":404,"position":405}," is that buffer ready-made, with ",{"start":406,"end":407},{"line":249,"column":220,"offset":399},{"line":249,"column":408,"offset":409},292,1304,{"type":31,"tagName":45,"properties":411,"children":412,"position":420},{},[413],{"type":27,"value":414,"position":415},"ago(n)",{"start":416,"end":417},{"line":249,"column":408,"offset":409},{"line":249,"column":418,"offset":419},300,1312,{"start":421,"end":422},{"line":249,"column":408,"offset":409},{"line":249,"column":418,"offset":419},{"type":27,"value":424,"position":425}," for the value ",{"start":426,"end":427},{"line":249,"column":418,"offset":419},{"line":249,"column":428,"offset":429},315,1327,{"type":31,"tagName":45,"properties":431,"children":432,"position":440},{},[433],{"type":27,"value":434,"position":435},"n",{"start":436,"end":437},{"line":249,"column":428,"offset":429},{"line":249,"column":438,"offset":439},318,1330,{"start":441,"end":442},{"line":249,"column":428,"offset":429},{"line":249,"column":438,"offset":439},{"type":27,"value":444,"position":445}," bars back (",{"start":446,"end":447},{"line":249,"column":438,"offset":439},{"line":249,"column":448,"offset":449},330,1342,{"type":31,"tagName":451,"properties":452,"children":454,"position":464},"a",{"href":453},"../functions/stats-history-lists.md#history-xn-from-pine",[455],{"type":27,"value":456,"position":457},"Stats, history and lists",{"start":458,"end":461},{"line":249,"column":459,"offset":460},331,1343,{"line":249,"column":462,"offset":463},355,1367,{"start":465,"end":466},{"line":249,"column":448,"offset":449},{"line":249,"column":467,"offset":468},414,1426,{"type":27,"value":470,"position":471},"). The zone tracker and the ",{"start":472,"end":473},{"line":249,"column":467,"offset":468},{"line":249,"column":474,"offset":475},442,1454,{"type":31,"tagName":451,"properties":477,"children":479,"position":489},{"href":478},"general.md",[480],{"type":27,"value":481,"position":482},"previous-bar FAQ sample",{"start":483,"end":486},{"line":249,"column":484,"offset":485},443,1455,{"line":249,"column":487,"offset":488},466,1478,{"start":490,"end":491},{"line":249,"column":474,"offset":475},{"line":249,"column":492,"offset":493},479,1491,{"type":27,"value":495,"position":496}," show the shape.",{"start":497,"end":498},{"line":249,"column":492,"offset":493},{"line":249,"column":499,"offset":500},495,1507,{"start":502,"end":503},{"line":249,"column":21,"offset":341},{"line":249,"column":499,"offset":500},{"type":27,"value":28},{"type":31,"tagName":109,"properties":506,"children":507,"position":546},{},[508,516,528,534],{"type":27,"value":509,"position":510},"Allocate in ",{"start":511,"end":514},{"line":512,"column":39,"offset":513},19,1513,{"line":512,"column":249,"offset":515},1525,{"type":31,"tagName":45,"properties":517,"children":518,"position":525},{},[519],{"type":27,"value":49,"position":520},{"start":521,"end":522},{"line":512,"column":249,"offset":515},{"line":512,"column":523,"offset":524},28,1536,{"start":526,"end":527},{"line":512,"column":249,"offset":515},{"line":512,"column":523,"offset":524},{"type":27,"value":529,"position":530}," or at module start, never in ",{"start":531,"end":532},{"line":512,"column":523,"offset":524},{"line":512,"column":280,"offset":533},1566,{"type":31,"tagName":45,"properties":535,"children":536,"position":543},{},[537],{"type":27,"value":69,"position":538},{"start":539,"end":540},{"line":512,"column":280,"offset":533},{"line":512,"column":541,"offset":542},67,1575,{"start":544,"end":545},{"line":512,"column":280,"offset":533},{"line":512,"column":541,"offset":542},{"start":547,"end":549},{"line":512,"column":21,"offset":548},1509,{"line":512,"column":541,"offset":542},{"type":27,"value":28},{"type":31,"tagName":32,"properties":552,"children":553,"position":611},{},[554,567,573,585,592,604],{"type":31,"tagName":45,"properties":555,"children":556,"position":564},{},[557],{"type":27,"value":69,"position":558},{"start":559,"end":561},{"line":167,"column":21,"offset":560},1577,{"line":167,"column":562,"offset":563},10,1586,{"start":565,"end":566},{"line":167,"column":21,"offset":560},{"line":167,"column":562,"offset":563},{"type":27,"value":568,"position":569}," runs once per loaded bar and again on the forming bar as live updates arrive. Anything allocated there is allocated thousands of times, an array that grows on every call is the one pattern that makes a long history slow, and the chart stops a module whose memory grows once the bars start (\"The Indicator allocated memory after init() ... the sandbox forbids growth once the bars start.\"). Size buffers from the param's declared ",{"start":570,"end":571},{"line":167,"column":562,"offset":563},{"line":167,"column":123,"offset":572},2016,{"type":31,"tagName":45,"properties":574,"children":575,"position":582},{},[576],{"type":27,"value":356,"position":577},{"start":578,"end":579},{"line":167,"column":123,"offset":572},{"line":167,"column":580,"offset":581},445,2021,{"start":583,"end":584},{"line":167,"column":123,"offset":572},{"line":167,"column":580,"offset":581},{"type":27,"value":586,"position":587},", at module start, and let ",{"start":588,"end":589},{"line":167,"column":580,"offset":581},{"line":167,"column":590,"offset":591},472,2048,{"type":31,"tagName":45,"properties":593,"children":594,"position":601},{},[595],{"type":27,"value":49,"position":596},{"start":597,"end":598},{"line":167,"column":590,"offset":591},{"line":167,"column":599,"offset":600},483,2059,{"start":602,"end":603},{"line":167,"column":590,"offset":591},{"line":167,"column":599,"offset":600},{"type":27,"value":605,"position":606}," set the live length:",{"start":607,"end":608},{"line":167,"column":599,"offset":600},{"line":167,"column":609,"offset":610},504,2080,{"start":612,"end":613},{"line":167,"column":21,"offset":560},{"line":167,"column":609,"offset":610},{"type":27,"value":28},{"type":14,"children":616},[617],{"type":31,"tagName":618,"properties":619,"children":624,"data":-1},"pre",{"class":620,"style":621,"tabindex":622,"data-sample":623},"shiki shiki-themes github-dark github-light","--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff","0","faq-allocate-init",[625],{"type":31,"tagName":45,"properties":626,"children":629},{"class":627},[628],"language-typescript",[630,698,699,739,740,743,744,753,754,783,784,835,836,871,872,905,906,938,939,942,943,975,976,1007,1008,1016,1017,1020,1021,1049,1050,1082,1083,1108,1109,1196,1197,1214,1215,1255,1256,1290,1291,1320,1321,1368,1369],{"type":31,"tagName":631,"properties":632,"children":634},"span",{"class":633},"line",[635,641,647,653,657,663,668,673,678,683,688,693],{"type":31,"tagName":631,"properties":636,"children":638},{"style":637},"--shiki-dark:#B392F0;--shiki-light:#6F42C1",[639],{"type":27,"value":640},"param",{"type":31,"tagName":631,"properties":642,"children":644},{"style":643},"--shiki-dark:#E1E4E8;--shiki-light:#24292E",[645],{"type":27,"value":646},"(",{"type":31,"tagName":631,"properties":648,"children":650},{"style":649},"--shiki-dark:#9ECBFF;--shiki-light:#032F62",[651],{"type":27,"value":652},"\"window\"",{"type":31,"tagName":631,"properties":654,"children":655},{"style":643},[656],{"type":27,"value":206},{"type":31,"tagName":631,"properties":658,"children":660},{"style":659},"--shiki-dark:#79B8FF;--shiki-light:#005CC5",[661],{"type":27,"value":662},"100",{"type":31,"tagName":631,"properties":664,"children":665},{"style":643},[666],{"type":27,"value":667},", { min: ",{"type":31,"tagName":631,"properties":669,"children":670},{"style":659},[671],{"type":27,"value":672},"10",{"type":31,"tagName":631,"properties":674,"children":675},{"style":643},[676],{"type":27,"value":677},", max: ",{"type":31,"tagName":631,"properties":679,"children":680},{"style":659},[681],{"type":27,"value":682},"500",{"type":31,"tagName":631,"properties":684,"children":685},{"style":643},[686],{"type":27,"value":687},", description: ",{"type":31,"tagName":631,"properties":689,"children":690},{"style":649},[691],{"type":27,"value":692},"\"Bars the rank is measured against\"",{"type":31,"tagName":631,"properties":694,"children":695},{"style":643},[696],{"type":27,"value":697}," });",{"type":27,"value":28},{"type":31,"tagName":631,"properties":700,"children":701},{"class":633},[702,707,711,716,721,726,730,735],{"type":31,"tagName":631,"properties":703,"children":704},{"style":637},[705],{"type":27,"value":706},"output",{"type":31,"tagName":631,"properties":708,"children":709},{"style":643},[710],{"type":27,"value":646},{"type":31,"tagName":631,"properties":712,"children":713},{"style":649},[714],{"type":27,"value":715},"\"rank\"",{"type":31,"tagName":631,"properties":717,"children":718},{"style":643},[719],{"type":27,"value":720},", line, lower, { unit: ",{"type":31,"tagName":631,"properties":722,"children":723},{"style":649},[724],{"type":27,"value":725},"\"%\"",{"type":31,"tagName":631,"properties":727,"children":728},{"style":643},[729],{"type":27,"value":687},{"type":31,"tagName":631,"properties":731,"children":732},{"style":649},[733],{"type":27,"value":734},"\"Share of the window's closes below this bar's close\"",{"type":31,"tagName":631,"properties":736,"children":737},{"style":643},[738],{"type":27,"value":697},{"type":27,"value":28},{"type":31,"tagName":631,"properties":741,"children":742},{"class":633},[],{"type":27,"value":28},{"type":31,"tagName":631,"properties":745,"children":746},{"class":633},[747],{"type":31,"tagName":631,"properties":748,"children":750},{"style":749},"--shiki-dark:#6A737D;--shiki-light:#6A737D",[751],{"type":27,"value":752},"// Allocate once, at module start, sized from the param's max: never inside onBar().",{"type":27,"value":28},{"type":31,"tagName":631,"properties":755,"children":756},{"class":633},[757,763,768,773,778],{"type":31,"tagName":631,"properties":758,"children":760},{"style":759},"--shiki-dark:#F97583;--shiki-light:#D73A49",[761],{"type":27,"value":762},"const",{"type":31,"tagName":631,"properties":764,"children":765},{"style":659},[766],{"type":27,"value":767}," MAX_WINDOW",{"type":31,"tagName":631,"properties":769,"children":770},{"style":759},[771],{"type":27,"value":772}," =",{"type":31,"tagName":631,"properties":774,"children":775},{"style":659},[776],{"type":27,"value":777}," 500",{"type":31,"tagName":631,"properties":779,"children":780},{"style":643},[781],{"type":27,"value":782},";",{"type":27,"value":28},{"type":31,"tagName":631,"properties":785,"children":786},{"class":633},[787,791,796,800,805,810,815,820,825,830],{"type":31,"tagName":631,"properties":788,"children":789},{"style":759},[790],{"type":27,"value":762},{"type":31,"tagName":631,"properties":792,"children":793},{"style":659},[794],{"type":27,"value":795}," closes",{"type":31,"tagName":631,"properties":797,"children":798},{"style":759},[799],{"type":27,"value":772},{"type":31,"tagName":631,"properties":801,"children":802},{"style":759},[803],{"type":27,"value":804}," new",{"type":31,"tagName":631,"properties":806,"children":807},{"style":637},[808],{"type":27,"value":809}," StaticArray",{"type":31,"tagName":631,"properties":811,"children":812},{"style":643},[813],{"type":27,"value":814},"\u003C",{"type":31,"tagName":631,"properties":816,"children":817},{"style":637},[818],{"type":27,"value":819},"f64",{"type":31,"tagName":631,"properties":821,"children":822},{"style":643},[823],{"type":27,"value":824},">(",{"type":31,"tagName":631,"properties":826,"children":827},{"style":659},[828],{"type":27,"value":829},"MAX_WINDOW",{"type":31,"tagName":631,"properties":831,"children":832},{"style":643},[833],{"type":27,"value":834},");",{"type":27,"value":28},{"type":31,"tagName":631,"properties":837,"children":838},{"class":633},[839,843,848,853,858,862,867],{"type":31,"tagName":631,"properties":840,"children":841},{"style":759},[842],{"type":27,"value":163},{"type":31,"tagName":631,"properties":844,"children":845},{"style":643},[846],{"type":27,"value":847}," n",{"type":31,"tagName":631,"properties":849,"children":850},{"style":759},[851],{"type":27,"value":852},":",{"type":31,"tagName":631,"properties":854,"children":855},{"style":637},[856],{"type":27,"value":857}," i32",{"type":31,"tagName":631,"properties":859,"children":860},{"style":759},[861],{"type":27,"value":772},{"type":31,"tagName":631,"properties":863,"children":864},{"style":659},[865],{"type":27,"value":866}," 100",{"type":31,"tagName":631,"properties":868,"children":869},{"style":643},[870],{"type":27,"value":782},{"type":27,"value":28},{"type":31,"tagName":631,"properties":873,"children":874},{"class":633},[875,879,884,888,892,896,901],{"type":31,"tagName":631,"properties":876,"children":877},{"style":759},[878],{"type":27,"value":163},{"type":31,"tagName":631,"properties":880,"children":881},{"style":643},[882],{"type":27,"value":883}," cursor",{"type":31,"tagName":631,"properties":885,"children":886},{"style":759},[887],{"type":27,"value":852},{"type":31,"tagName":631,"properties":889,"children":890},{"style":637},[891],{"type":27,"value":857},{"type":31,"tagName":631,"properties":893,"children":894},{"style":759},[895],{"type":27,"value":772},{"type":31,"tagName":631,"properties":897,"children":898},{"style":659},[899],{"type":27,"value":900}," 0",{"type":31,"tagName":631,"properties":902,"children":903},{"style":643},[904],{"type":27,"value":782},{"type":27,"value":28},{"type":31,"tagName":631,"properties":907,"children":908},{"class":633},[909,913,918,922,926,930,934],{"type":31,"tagName":631,"properties":910,"children":911},{"style":759},[912],{"type":27,"value":163},{"type":31,"tagName":631,"properties":914,"children":915},{"style":643},[916],{"type":27,"value":917}," count",{"type":31,"tagName":631,"properties":919,"children":920},{"style":759},[921],{"type":27,"value":852},{"type":31,"tagName":631,"properties":923,"children":924},{"style":637},[925],{"type":27,"value":857},{"type":31,"tagName":631,"properties":927,"children":928},{"style":759},[929],{"type":27,"value":772},{"type":31,"tagName":631,"properties":931,"children":932},{"style":659},[933],{"type":27,"value":900},{"type":31,"tagName":631,"properties":935,"children":936},{"style":643},[937],{"type":27,"value":782},{"type":27,"value":28},{"type":31,"tagName":631,"properties":940,"children":941},{"class":633},[],{"type":27,"value":28},{"type":31,"tagName":631,"properties":944,"children":945},{"class":633},[946,951,956,961,965,970],{"type":31,"tagName":631,"properties":947,"children":948},{"style":759},[949],{"type":27,"value":950},"function",{"type":31,"tagName":631,"properties":952,"children":953},{"style":637},[954],{"type":27,"value":955}," onStart",{"type":31,"tagName":631,"properties":957,"children":958},{"style":643},[959],{"type":27,"value":960},"()",{"type":31,"tagName":631,"properties":962,"children":963},{"style":759},[964],{"type":27,"value":852},{"type":31,"tagName":631,"properties":966,"children":967},{"style":659},[968],{"type":27,"value":969}," void",{"type":31,"tagName":631,"properties":971,"children":972},{"style":643},[973],{"type":27,"value":974}," {",{"type":27,"value":28},{"type":31,"tagName":631,"properties":977,"children":978},{"class":633},[979,984,989,993,997,1002],{"type":31,"tagName":631,"properties":980,"children":981},{"style":643},[982],{"type":27,"value":983},"  n ",{"type":31,"tagName":631,"properties":985,"children":986},{"style":759},[987],{"type":27,"value":988},"=",{"type":31,"tagName":631,"properties":990,"children":991},{"style":637},[992],{"type":27,"value":857},{"type":31,"tagName":631,"properties":994,"children":995},{"style":643},[996],{"type":27,"value":646},{"type":31,"tagName":631,"properties":998,"children":999},{"style":637},[1000],{"type":27,"value":1001},"p_window",{"type":31,"tagName":631,"properties":1003,"children":1004},{"style":643},[1005],{"type":27,"value":1006},"());",{"type":27,"value":28},{"type":31,"tagName":631,"properties":1009,"children":1010},{"class":633},[1011],{"type":31,"tagName":631,"properties":1012,"children":1013},{"style":643},[1014],{"type":27,"value":1015},"}",{"type":27,"value":28},{"type":31,"tagName":631,"properties":1018,"children":1019},{"class":633},[],{"type":27,"value":28},{"type":31,"tagName":631,"properties":1022,"children":1023},{"class":633},[1024,1028,1033,1037,1041,1045],{"type":31,"tagName":631,"properties":1025,"children":1026},{"style":759},[1027],{"type":27,"value":950},{"type":31,"tagName":631,"properties":1029,"children":1030},{"style":637},[1031],{"type":27,"value":1032}," onBar",{"type":31,"tagName":631,"properties":1034,"children":1035},{"style":643},[1036],{"type":27,"value":960},{"type":31,"tagName":631,"properties":1038,"children":1039},{"style":759},[1040],{"type":27,"value":852},{"type":31,"tagName":631,"properties":1042,"children":1043},{"style":659},[1044],{"type":27,"value":969},{"type":31,"tagName":631,"properties":1046,"children":1047},{"style":643},[1048],{"type":27,"value":974},{"type":27,"value":28},{"type":31,"tagName":631,"properties":1051,"children":1052},{"class":633},[1053,1058,1063,1067,1072,1077],{"type":31,"tagName":631,"properties":1054,"children":1055},{"style":759},[1056],{"type":27,"value":1057},"  const",{"type":31,"tagName":631,"properties":1059,"children":1060},{"style":659},[1061],{"type":27,"value":1062}," close",{"type":31,"tagName":631,"properties":1064,"children":1065},{"style":759},[1066],{"type":27,"value":772},{"type":31,"tagName":631,"properties":1068,"children":1069},{"style":643},[1070],{"type":27,"value":1071}," bar.",{"type":31,"tagName":631,"properties":1073,"children":1074},{"style":637},[1075],{"type":27,"value":1076},"close",{"type":31,"tagName":631,"properties":1078,"children":1079},{"style":643},[1080],{"type":27,"value":1081},"();",{"type":27,"value":28},{"type":31,"tagName":631,"properties":1084,"children":1085},{"class":633},[1086,1091,1096,1100,1104],{"type":31,"tagName":631,"properties":1087,"children":1088},{"style":759},[1089],{"type":27,"value":1090},"  let",{"type":31,"tagName":631,"properties":1092,"children":1093},{"style":643},[1094],{"type":27,"value":1095}," below ",{"type":31,"tagName":631,"properties":1097,"children":1098},{"style":759},[1099],{"type":27,"value":988},{"type":31,"tagName":631,"properties":1101,"children":1102},{"style":659},[1103],{"type":27,"value":900},{"type":31,"tagName":631,"properties":1105,"children":1106},{"style":643},[1107],{"type":27,"value":782},{"type":27,"value":28},{"type":31,"tagName":631,"properties":1110,"children":1111},{"class":633},[1112,1117,1122,1126,1131,1135,1139,1144,1148,1153,1158,1163,1168,1173,1177,1182,1187,1192],{"type":31,"tagName":631,"properties":1113,"children":1114},{"style":759},[1115],{"type":27,"value":1116},"  for",{"type":31,"tagName":631,"properties":1118,"children":1119},{"style":643},[1120],{"type":27,"value":1121}," (",{"type":31,"tagName":631,"properties":1123,"children":1124},{"style":759},[1125],{"type":27,"value":163},{"type":31,"tagName":631,"properties":1127,"children":1128},{"style":643},[1129],{"type":27,"value":1130}," i ",{"type":31,"tagName":631,"properties":1132,"children":1133},{"style":759},[1134],{"type":27,"value":988},{"type":31,"tagName":631,"properties":1136,"children":1137},{"style":659},[1138],{"type":27,"value":900},{"type":31,"tagName":631,"properties":1140,"children":1141},{"style":643},[1142],{"type":27,"value":1143},"; i ",{"type":31,"tagName":631,"properties":1145,"children":1146},{"style":759},[1147],{"type":27,"value":814},{"type":31,"tagName":631,"properties":1149,"children":1150},{"style":643},[1151],{"type":27,"value":1152}," count; i",{"type":31,"tagName":631,"properties":1154,"children":1155},{"style":759},[1156],{"type":27,"value":1157},"++",{"type":31,"tagName":631,"properties":1159,"children":1160},{"style":643},[1161],{"type":27,"value":1162},") ",{"type":31,"tagName":631,"properties":1164,"children":1165},{"style":759},[1166],{"type":27,"value":1167},"if",{"type":31,"tagName":631,"properties":1169,"children":1170},{"style":643},[1171],{"type":27,"value":1172}," (closes[i] ",{"type":31,"tagName":631,"properties":1174,"children":1175},{"style":759},[1176],{"type":27,"value":814},{"type":31,"tagName":631,"properties":1178,"children":1179},{"style":643},[1180],{"type":27,"value":1181}," close) below ",{"type":31,"tagName":631,"properties":1183,"children":1184},{"style":759},[1185],{"type":27,"value":1186},"+=",{"type":31,"tagName":631,"properties":1188,"children":1189},{"style":659},[1190],{"type":27,"value":1191}," 1",{"type":31,"tagName":631,"properties":1193,"children":1194},{"style":643},[1195],{"type":27,"value":782},{"type":27,"value":28},{"type":31,"tagName":631,"properties":1198,"children":1199},{"class":633},[1200,1205,1209],{"type":31,"tagName":631,"properties":1201,"children":1202},{"style":643},[1203],{"type":27,"value":1204},"  closes[cursor] ",{"type":31,"tagName":631,"properties":1206,"children":1207},{"style":759},[1208],{"type":27,"value":988},{"type":31,"tagName":631,"properties":1210,"children":1211},{"style":643},[1212],{"type":27,"value":1213}," close;",{"type":27,"value":28},{"type":31,"tagName":631,"properties":1216,"children":1217},{"class":633},[1218,1223,1227,1232,1237,1241,1245,1250],{"type":31,"tagName":631,"properties":1219,"children":1220},{"style":643},[1221],{"type":27,"value":1222},"  cursor ",{"type":31,"tagName":631,"properties":1224,"children":1225},{"style":759},[1226],{"type":27,"value":988},{"type":31,"tagName":631,"properties":1228,"children":1229},{"style":643},[1230],{"type":27,"value":1231}," (cursor ",{"type":31,"tagName":631,"properties":1233,"children":1234},{"style":759},[1235],{"type":27,"value":1236},"+",{"type":31,"tagName":631,"properties":1238,"children":1239},{"style":659},[1240],{"type":27,"value":1191},{"type":31,"tagName":631,"properties":1242,"children":1243},{"style":643},[1244],{"type":27,"value":1162},{"type":31,"tagName":631,"properties":1246,"children":1247},{"style":759},[1248],{"type":27,"value":1249},"%",{"type":31,"tagName":631,"properties":1251,"children":1252},{"style":643},[1253],{"type":27,"value":1254}," n;",{"type":27,"value":28},{"type":31,"tagName":631,"properties":1257,"children":1258},{"class":633},[1259,1264,1269,1273,1278,1282,1286],{"type":31,"tagName":631,"properties":1260,"children":1261},{"style":759},[1262],{"type":27,"value":1263},"  if",{"type":31,"tagName":631,"properties":1265,"children":1266},{"style":643},[1267],{"type":27,"value":1268}," (count ",{"type":31,"tagName":631,"properties":1270,"children":1271},{"style":759},[1272],{"type":27,"value":814},{"type":31,"tagName":631,"properties":1274,"children":1275},{"style":643},[1276],{"type":27,"value":1277}," n) count ",{"type":31,"tagName":631,"properties":1279,"children":1280},{"style":759},[1281],{"type":27,"value":1186},{"type":31,"tagName":631,"properties":1283,"children":1284},{"style":659},[1285],{"type":27,"value":1191},{"type":31,"tagName":631,"properties":1287,"children":1288},{"style":643},[1289],{"type":27,"value":782},{"type":27,"value":28},{"type":31,"tagName":631,"properties":1292,"children":1293},{"class":633},[1294,1298,1302,1306,1311,1316],{"type":31,"tagName":631,"properties":1295,"children":1296},{"style":759},[1297],{"type":27,"value":1263},{"type":31,"tagName":631,"properties":1299,"children":1300},{"style":643},[1301],{"type":27,"value":1268},{"type":31,"tagName":631,"properties":1303,"children":1304},{"style":759},[1305],{"type":27,"value":814},{"type":31,"tagName":631,"properties":1307,"children":1308},{"style":643},[1309],{"type":27,"value":1310}," n) ",{"type":31,"tagName":631,"properties":1312,"children":1313},{"style":759},[1314],{"type":27,"value":1315},"return",{"type":31,"tagName":631,"properties":1317,"children":1318},{"style":643},[1319],{"type":27,"value":782},{"type":27,"value":28},{"type":31,"tagName":631,"properties":1322,"children":1323},{"class":633},[1324,1329,1334,1339,1344,1349,1354,1359,1363],{"type":31,"tagName":631,"properties":1325,"children":1326},{"style":637},[1327],{"type":27,"value":1328},"  out_rank",{"type":31,"tagName":631,"properties":1330,"children":1331},{"style":643},[1332],{"type":27,"value":1333},"((",{"type":31,"tagName":631,"properties":1335,"children":1336},{"style":659},[1337],{"type":27,"value":1338},"100.0",{"type":31,"tagName":631,"properties":1340,"children":1341},{"style":759},[1342],{"type":27,"value":1343}," *",{"type":31,"tagName":631,"properties":1345,"children":1346},{"style":637},[1347],{"type":27,"value":1348}," f64",{"type":31,"tagName":631,"properties":1350,"children":1351},{"style":643},[1352],{"type":27,"value":1353},"(below)) ",{"type":31,"tagName":631,"properties":1355,"children":1356},{"style":759},[1357],{"type":27,"value":1358},"/",{"type":31,"tagName":631,"properties":1360,"children":1361},{"style":637},[1362],{"type":27,"value":1348},{"type":31,"tagName":631,"properties":1364,"children":1365},{"style":643},[1366],{"type":27,"value":1367},"(n));",{"type":27,"value":28},{"type":31,"tagName":631,"properties":1370,"children":1371},{"class":633},[1372],{"type":31,"tagName":631,"properties":1373,"children":1374},{"style":643},[1375],{"type":27,"value":1015},{"type":27,"value":28},{"type":31,"tagName":32,"properties":1378,"children":1379,"position":1465},{},[1380,1389,1401,1408,1421,1427,1439,1446,1458],{"type":27,"value":1381,"position":1382},"The TA classes follow the same rule: ",{"start":1383,"end":1386},{"line":1384,"column":21,"offset":1385},50,2899,{"line":1384,"column":1387,"offset":1388},38,2936,{"type":31,"tagName":45,"properties":1390,"children":1391,"position":1398},{},[1392],{"type":27,"value":1393,"position":1394},"new Sma(period)",{"start":1395,"end":1396},{"line":1384,"column":1387,"offset":1388},{"line":1384,"column":273,"offset":1397},2953,{"start":1399,"end":1400},{"line":1384,"column":1387,"offset":1388},{"line":1384,"column":273,"offset":1397},{"type":27,"value":1402,"position":1403}," allocates its window in the constructor and ",{"start":1404,"end":1405},{"line":1384,"column":273,"offset":1397},{"line":1384,"column":1406,"offset":1407},100,2998,{"type":31,"tagName":45,"properties":1409,"children":1410,"position":1418},{},[1411],{"type":27,"value":1412,"position":1413},"update()",{"start":1414,"end":1415},{"line":1384,"column":1406,"offset":1407},{"line":1384,"column":1416,"offset":1417},110,3008,{"start":1419,"end":1420},{"line":1384,"column":1406,"offset":1407},{"line":1384,"column":1416,"offset":1417},{"type":27,"value":1422,"position":1423}," never allocates, which is why they are constructed in ",{"start":1424,"end":1425},{"line":1384,"column":1416,"offset":1417},{"line":1384,"column":73,"offset":1426},3063,{"type":31,"tagName":45,"properties":1428,"children":1429,"position":1436},{},[1430],{"type":27,"value":49,"position":1431},{"start":1432,"end":1433},{"line":1384,"column":73,"offset":1426},{"line":1384,"column":1434,"offset":1435},176,3074,{"start":1437,"end":1438},{"line":1384,"column":73,"offset":1426},{"line":1384,"column":1434,"offset":1435},{"type":27,"value":1440,"position":1441}," and fed in ",{"start":1442,"end":1443},{"line":1384,"column":1434,"offset":1435},{"line":1384,"column":1444,"offset":1445},188,3086,{"type":31,"tagName":45,"properties":1447,"children":1448,"position":1455},{},[1449],{"type":27,"value":69,"position":1450},{"start":1451,"end":1452},{"line":1384,"column":1444,"offset":1445},{"line":1384,"column":1453,"offset":1454},197,3095,{"start":1456,"end":1457},{"line":1384,"column":1444,"offset":1445},{"line":1384,"column":1453,"offset":1454},{"type":27,"value":1459,"position":1460},".",{"start":1461,"end":1462},{"line":1384,"column":1453,"offset":1454},{"line":1384,"column":1463,"offset":1464},198,3096,{"start":1466,"end":1467},{"line":1384,"column":21,"offset":1385},{"line":1384,"column":1463,"offset":1464},{"type":27,"value":28},{"type":31,"tagName":109,"properties":1470,"children":1471,"position":1480},{},[1472],{"type":27,"value":1473,"position":1474},"Nothing to reset",{"start":1475,"end":1478},{"line":1476,"column":39,"offset":1477},52,3102,{"line":1476,"column":167,"offset":1479},3118,{"start":1481,"end":1483},{"line":1476,"column":21,"offset":1482},3098,{"line":1476,"column":167,"offset":1479},{"type":27,"value":28},{"type":31,"tagName":32,"properties":1486,"children":1487,"position":1554},{},[1488,1497,1509,1516,1528,1535,1548],{"type":27,"value":1489,"position":1490},"There is no reset step to write. The chart runs the module once over the loaded bars, and the forming bar does not depend on any reset: the chart replays that bar from a snapshot of the module's memory taken after the last closed bar, so a live value never double-counts. Give every module-level ",{"start":1491,"end":1494},{"line":1492,"column":21,"offset":1493},54,3120,{"line":1492,"column":1495,"offset":1496},297,3416,{"type":31,"tagName":45,"properties":1498,"children":1499,"position":1506},{},[1500],{"type":27,"value":163,"position":1501},{"start":1502,"end":1503},{"line":1492,"column":1495,"offset":1496},{"line":1492,"column":1504,"offset":1505},302,3421,{"start":1507,"end":1508},{"line":1492,"column":1495,"offset":1496},{"line":1492,"column":1504,"offset":1505},{"type":27,"value":1510,"position":1511}," its starting value where it is declared, build what depends on a param in ",{"start":1512,"end":1513},{"line":1492,"column":1504,"offset":1505},{"line":1492,"column":1514,"offset":1515},377,3496,{"type":31,"tagName":45,"properties":1517,"children":1518,"position":1525},{},[1519],{"type":27,"value":49,"position":1520},{"start":1521,"end":1522},{"line":1492,"column":1514,"offset":1515},{"line":1492,"column":1523,"offset":1524},388,3507,{"start":1526,"end":1527},{"line":1492,"column":1514,"offset":1515},{"line":1492,"column":1523,"offset":1524},{"type":27,"value":1529,"position":1530},", and let a ",{"start":1531,"end":1532},{"line":1492,"column":1523,"offset":1524},{"line":1492,"column":1533,"offset":1534},400,3519,{"type":31,"tagName":45,"properties":1536,"children":1537,"position":1545},{},[1538],{"type":27,"value":1539,"position":1540},"count",{"start":1541,"end":1542},{"line":1492,"column":1533,"offset":1534},{"line":1492,"column":1543,"offset":1544},407,3526,{"start":1546,"end":1547},{"line":1492,"column":1533,"offset":1534},{"line":1492,"column":1543,"offset":1544},{"type":27,"value":1549,"position":1550}," field say how much of a buffer is valid instead of clearing the buffer.",{"start":1551,"end":1552},{"line":1492,"column":1543,"offset":1544},{"line":1492,"column":492,"offset":1553},3598,{"start":1555,"end":1556},{"line":1492,"column":21,"offset":1493},{"line":1492,"column":492,"offset":1553},{"type":27,"value":28},{"type":31,"tagName":109,"properties":1559,"children":1560,"position":1570},{},[1561],{"type":27,"value":1562,"position":1563},"Accessors over slot literals",{"start":1564,"end":1567},{"line":1565,"column":39,"offset":1566},56,3604,{"line":1565,"column":1568,"offset":1569},33,3632,{"start":1571,"end":1573},{"line":1565,"column":21,"offset":1572},3600,{"line":1565,"column":1568,"offset":1569},{"type":27,"value":28},{"type":31,"tagName":32,"properties":1576,"children":1577,"position":1802},{},[1578,1585,1598,1603,1616,1622,1635,1641,1654,1661,1674,1680,1693,1700,1713,1720,1732,1739,1752,1759,1772,1778,1796],{"type":27,"value":1579,"position":1580},"Params, inputs, and outputs reach the code by name: ",{"start":1581,"end":1583},{"line":280,"column":21,"offset":1582},3634,{"line":280,"column":267,"offset":1584},3686,{"type":31,"tagName":45,"properties":1586,"children":1587,"position":1595},{},[1588],{"type":27,"value":1589,"position":1590},"p_period()",{"start":1591,"end":1592},{"line":280,"column":267,"offset":1584},{"line":280,"column":1593,"offset":1594},65,3698,{"start":1596,"end":1597},{"line":280,"column":267,"offset":1584},{"line":280,"column":1593,"offset":1594},{"type":27,"value":206,"position":1599},{"start":1600,"end":1601},{"line":280,"column":1593,"offset":1594},{"line":280,"column":541,"offset":1602},3700,{"type":31,"tagName":45,"properties":1604,"children":1605,"position":1613},{},[1606],{"type":27,"value":1607,"position":1608},"bar.close()",{"start":1609,"end":1610},{"line":280,"column":541,"offset":1602},{"line":280,"column":1611,"offset":1612},80,3713,{"start":1614,"end":1615},{"line":280,"column":541,"offset":1602},{"line":280,"column":1611,"offset":1612},{"type":27,"value":206,"position":1617},{"start":1618,"end":1619},{"line":280,"column":1611,"offset":1612},{"line":280,"column":1620,"offset":1621},82,3715,{"type":31,"tagName":45,"properties":1623,"children":1624,"position":1632},{},[1625],{"type":27,"value":1626,"position":1627},"in_funding()",{"start":1628,"end":1629},{"line":280,"column":1620,"offset":1621},{"line":280,"column":1630,"offset":1631},96,3729,{"start":1633,"end":1634},{"line":280,"column":1620,"offset":1621},{"line":280,"column":1630,"offset":1631},{"type":27,"value":206,"position":1636},{"start":1637,"end":1638},{"line":280,"column":1630,"offset":1631},{"line":280,"column":1639,"offset":1640},98,3731,{"type":31,"tagName":45,"properties":1642,"children":1643,"position":1651},{},[1644],{"type":27,"value":1645,"position":1646},"out_sma(value)",{"start":1647,"end":1648},{"line":280,"column":1639,"offset":1640},{"line":280,"column":1649,"offset":1650},114,3747,{"start":1652,"end":1653},{"line":280,"column":1639,"offset":1640},{"line":280,"column":1649,"offset":1650},{"type":27,"value":1655,"position":1656},", generated from the declarations on every check. Underneath, the host passes values positionally, and the raw calls (",{"start":1657,"end":1658},{"line":280,"column":1649,"offset":1650},{"line":280,"column":1659,"offset":1660},232,3865,{"type":31,"tagName":45,"properties":1662,"children":1663,"position":1671},{},[1664],{"type":27,"value":1665,"position":1666},"getFloat(0)",{"start":1667,"end":1668},{"line":280,"column":1659,"offset":1660},{"line":280,"column":1669,"offset":1670},245,3878,{"start":1672,"end":1673},{"line":280,"column":1659,"offset":1660},{"line":280,"column":1669,"offset":1670},{"type":27,"value":206,"position":1675},{"start":1676,"end":1677},{"line":280,"column":1669,"offset":1670},{"line":280,"column":1678,"offset":1679},247,3880,{"type":31,"tagName":45,"properties":1681,"children":1682,"position":1690},{},[1683],{"type":27,"value":1684,"position":1685},"setOutput(0, ...)",{"start":1686,"end":1687},{"line":280,"column":1678,"offset":1679},{"line":280,"column":1688,"offset":1689},266,3899,{"start":1691,"end":1692},{"line":280,"column":1678,"offset":1679},{"line":280,"column":1688,"offset":1689},{"type":27,"value":1694,"position":1695},") bind by position, so adding a declaration above them silently rebinds them. The editor refuses the raw form in your source (",{"start":1696,"end":1697},{"line":280,"column":1688,"offset":1689},{"line":280,"column":1698,"offset":1699},392,4025,{"type":31,"tagName":45,"properties":1701,"children":1702,"position":1710},{},[1703],{"type":27,"value":1704,"position":1705},"Raw slot literal 0 passed to getFloat(): raw positional slots rebind silently when the sheet changes",{"start":1706,"end":1707},{"line":280,"column":1698,"offset":1699},{"line":280,"column":1708,"offset":1709},494,4127,{"start":1711,"end":1712},{"line":280,"column":1698,"offset":1699},{"line":280,"column":1708,"offset":1709},{"type":27,"value":1714,"position":1715},") and names the accessor to use instead. The same rule keeps a rename honest: rename ",{"start":1716,"end":1717},{"line":280,"column":1708,"offset":1709},{"line":280,"column":1718,"offset":1719},579,4212,{"type":31,"tagName":45,"properties":1721,"children":1722,"position":1729},{},[1723],{"type":27,"value":1724,"position":1725},"output(\"sma\", ...)",{"start":1726,"end":1727},{"line":280,"column":1718,"offset":1719},{"line":280,"column":184,"offset":1728},4232,{"start":1730,"end":1731},{"line":280,"column":1718,"offset":1719},{"line":280,"column":184,"offset":1728},{"type":27,"value":1733,"position":1734}," to ",{"start":1735,"end":1736},{"line":280,"column":184,"offset":1728},{"line":280,"column":1737,"offset":1738},603,4236,{"type":31,"tagName":45,"properties":1740,"children":1741,"position":1749},{},[1742],{"type":27,"value":1743,"position":1744},"output(\"average\", ...)",{"start":1745,"end":1746},{"line":280,"column":1737,"offset":1738},{"line":280,"column":1747,"offset":1748},627,4260,{"start":1750,"end":1751},{"line":280,"column":1737,"offset":1738},{"line":280,"column":1747,"offset":1748},{"type":27,"value":1753,"position":1754}," and the compiler points at every stale ",{"start":1755,"end":1756},{"line":280,"column":1747,"offset":1748},{"line":280,"column":1757,"offset":1758},667,4300,{"type":31,"tagName":45,"properties":1760,"children":1761,"position":1769},{},[1762],{"type":27,"value":1763,"position":1764},"out_sma",{"start":1765,"end":1766},{"line":280,"column":1757,"offset":1758},{"line":280,"column":1767,"offset":1768},676,4309,{"start":1770,"end":1771},{"line":280,"column":1757,"offset":1758},{"line":280,"column":1767,"offset":1768},{"type":27,"value":1121,"position":1773},{"start":1774,"end":1775},{"line":280,"column":1767,"offset":1768},{"line":280,"column":1776,"offset":1777},678,4311,{"type":31,"tagName":451,"properties":1779,"children":1781,"position":1791},{"href":1780},"../reference/declarations.md",[1782],{"type":27,"value":1783,"position":1784},"Declarations and the sheet",{"start":1785,"end":1788},{"line":280,"column":1786,"offset":1787},679,4312,{"line":280,"column":1789,"offset":1790},705,4338,{"start":1792,"end":1793},{"line":280,"column":1776,"offset":1777},{"line":280,"column":1794,"offset":1795},736,4369,{"type":27,"value":226,"position":1797},{"start":1798,"end":1799},{"line":280,"column":1794,"offset":1795},{"line":280,"column":1800,"offset":1801},738,4371,{"start":1803,"end":1804},{"line":280,"column":21,"offset":1582},{"line":280,"column":1800,"offset":1801},{"type":27,"value":28},{"type":31,"tagName":90,"properties":1807,"children":1808,"position":1818},{},[1809],{"type":27,"value":1810,"position":1811},"Technical indicators",{"start":1812,"end":1815},{"line":1813,"column":98,"offset":1814},60,4376,{"line":1813,"column":1816,"offset":1817},24,4396,{"start":1819,"end":1821},{"line":1813,"column":21,"offset":1820},4373,{"line":1813,"column":1816,"offset":1817},{"type":27,"value":28},{"type":31,"tagName":109,"properties":1824,"children":1825,"position":1834},{},[1826],{"type":27,"value":1827,"position":1828},"Read the period once, cast it once",{"start":1829,"end":1831},{"line":177,"column":39,"offset":1830},4402,{"line":177,"column":1832,"offset":1833},39,4436,{"start":1835,"end":1837},{"line":177,"column":21,"offset":1836},4398,{"line":177,"column":1832,"offset":1833},{"type":27,"value":28},{"type":31,"tagName":32,"properties":1840,"children":1841,"position":1983},{},[1842,1850,1861,1868,1881,1888,1899,1906,1919,1926,1938,1945,1957,1964,1976],{"type":27,"value":1843,"position":1844},"Params are ",{"start":1845,"end":1847},{"line":183,"column":21,"offset":1846},4438,{"line":183,"column":1848,"offset":1849},12,4449,{"type":31,"tagName":45,"properties":1851,"children":1852,"position":1858},{},[1853],{"type":27,"value":819,"position":1854},{"start":1855,"end":1856},{"line":183,"column":1848,"offset":1849},{"line":183,"column":249,"offset":1857},4454,{"start":1859,"end":1860},{"line":183,"column":1848,"offset":1849},{"line":183,"column":249,"offset":1857},{"type":27,"value":1862,"position":1863},"; a period is ",{"start":1864,"end":1865},{"line":183,"column":249,"offset":1857},{"line":183,"column":1866,"offset":1867},31,4468,{"type":31,"tagName":45,"properties":1869,"children":1870,"position":1878},{},[1871],{"type":27,"value":1872,"position":1873},"i32",{"start":1874,"end":1875},{"line":183,"column":1866,"offset":1867},{"line":183,"column":1876,"offset":1877},36,4473,{"start":1879,"end":1880},{"line":183,"column":1866,"offset":1867},{"line":183,"column":1876,"offset":1877},{"type":27,"value":1882,"position":1883},". Read each param in ",{"start":1884,"end":1885},{"line":183,"column":1876,"offset":1877},{"line":183,"column":1886,"offset":1887},57,4494,{"type":31,"tagName":45,"properties":1889,"children":1890,"position":1896},{},[1891],{"type":27,"value":49,"position":1892},{"start":1893,"end":1894},{"line":183,"column":1886,"offset":1887},{"line":183,"column":136,"offset":1895},4505,{"start":1897,"end":1898},{"line":183,"column":1886,"offset":1887},{"line":183,"column":136,"offset":1895},{"type":27,"value":1900,"position":1901},", cast it there (",{"start":1902,"end":1903},{"line":183,"column":136,"offset":1895},{"line":183,"column":1904,"offset":1905},85,4522,{"type":31,"tagName":45,"properties":1907,"children":1908,"position":1916},{},[1909],{"type":27,"value":1910,"position":1911},"new Sma(i32(p_period()))",{"start":1912,"end":1913},{"line":183,"column":1904,"offset":1905},{"line":183,"column":1914,"offset":1915},111,4548,{"start":1917,"end":1918},{"line":183,"column":1904,"offset":1905},{"line":183,"column":1914,"offset":1915},{"type":27,"value":1920,"position":1921},"), and keep the class in a module-level variable. Reading ",{"start":1922,"end":1923},{"line":183,"column":1914,"offset":1915},{"line":183,"column":1924,"offset":1925},169,4606,{"type":31,"tagName":45,"properties":1927,"children":1928,"position":1935},{},[1929],{"type":27,"value":1589,"position":1930},{"start":1931,"end":1932},{"line":183,"column":1924,"offset":1925},{"line":183,"column":1933,"offset":1934},181,4618,{"start":1936,"end":1937},{"line":183,"column":1924,"offset":1925},{"line":183,"column":1933,"offset":1934},{"type":27,"value":1939,"position":1940}," in ",{"start":1941,"end":1942},{"line":183,"column":1933,"offset":1934},{"line":183,"column":1943,"offset":1944},185,4622,{"type":31,"tagName":45,"properties":1946,"children":1947,"position":1954},{},[1948],{"type":27,"value":69,"position":1949},{"start":1950,"end":1951},{"line":183,"column":1943,"offset":1944},{"line":183,"column":1952,"offset":1953},194,4631,{"start":1955,"end":1956},{"line":183,"column":1943,"offset":1944},{"line":183,"column":1952,"offset":1953},{"type":27,"value":1958,"position":1959}," works but does the cast on every bar for nothing, and constructing a class in ",{"start":1960,"end":1961},{"line":183,"column":1952,"offset":1953},{"line":183,"column":1962,"offset":1963},273,4710,{"type":31,"tagName":45,"properties":1965,"children":1966,"position":1973},{},[1967],{"type":27,"value":69,"position":1968},{"start":1969,"end":1970},{"line":183,"column":1962,"offset":1963},{"line":183,"column":1971,"offset":1972},282,4719,{"start":1974,"end":1975},{"line":183,"column":1962,"offset":1963},{"line":183,"column":1971,"offset":1972},{"type":27,"value":1977,"position":1978}," allocates on every bar.",{"start":1979,"end":1980},{"line":183,"column":1971,"offset":1972},{"line":183,"column":1981,"offset":1982},306,4743,{"start":1984,"end":1985},{"line":183,"column":21,"offset":1846},{"line":183,"column":1981,"offset":1982},{"type":27,"value":28},{"type":31,"tagName":109,"properties":1988,"children":1989,"position":1998},{},[1990],{"type":27,"value":1991,"position":1992},"Be honest about warm-up",{"start":1993,"end":1996},{"line":1994,"column":39,"offset":1995},66,4749,{"line":1994,"column":523,"offset":1997},4772,{"start":1999,"end":2001},{"line":1994,"column":21,"offset":2000},4745,{"line":1994,"column":523,"offset":1997},{"type":27,"value":28},{"type":31,"tagName":32,"properties":2004,"children":2005,"position":2149},{},[2006,2013,2026,2033,2044,2050,2061,2068,2079,2086,2098,2105,2123,2130,2142],{"type":27,"value":2007,"position":2008},"A window that is not full has no value, and the honest output is ",{"start":2009,"end":2011},{"line":136,"column":21,"offset":2010},4774,{"line":136,"column":1994,"offset":2012},4839,{"type":31,"tagName":45,"properties":2014,"children":2015,"position":2023},{},[2016],{"type":27,"value":2017,"position":2018},"NaN",{"start":2019,"end":2020},{"line":136,"column":1994,"offset":2012},{"line":136,"column":2021,"offset":2022},71,4844,{"start":2024,"end":2025},{"line":136,"column":1994,"offset":2012},{"line":136,"column":2021,"offset":2022},{"type":27,"value":2027,"position":2028},". Two ways to write it, both correct: ",{"start":2029,"end":2030},{"line":136,"column":2021,"offset":2022},{"line":136,"column":2031,"offset":2032},109,4882,{"type":31,"tagName":45,"properties":2034,"children":2035,"position":2041},{},[2036],{"type":27,"value":1315,"position":2037},{"start":2038,"end":2039},{"line":136,"column":2031,"offset":2032},{"line":136,"column":10,"offset":2040},4890,{"start":2042,"end":2043},{"line":136,"column":2031,"offset":2032},{"line":136,"column":10,"offset":2040},{"type":27,"value":385,"position":2045},{"start":2046,"end":2047},{"line":136,"column":10,"offset":2040},{"line":136,"column":2048,"offset":2049},123,4896,{"type":31,"tagName":45,"properties":2051,"children":2052,"position":2058},{},[2053],{"type":27,"value":69,"position":2054},{"start":2055,"end":2056},{"line":136,"column":2048,"offset":2049},{"line":136,"column":42,"offset":2057},4905,{"start":2059,"end":2060},{"line":136,"column":2048,"offset":2049},{"line":136,"column":42,"offset":2057},{"type":27,"value":2062,"position":2063}," before any write while nothing on the bar is meaningful (every output stays ",{"start":2064,"end":2065},{"line":136,"column":42,"offset":2057},{"line":136,"column":2066,"offset":2067},209,4982,{"type":31,"tagName":45,"properties":2069,"children":2070,"position":2076},{},[2071],{"type":27,"value":2017,"position":2072},{"start":2073,"end":2074},{"line":136,"column":2066,"offset":2067},{"line":136,"column":300,"offset":2075},4987,{"start":2077,"end":2078},{"line":136,"column":2066,"offset":2067},{"line":136,"column":300,"offset":2075},{"type":27,"value":2080,"position":2081},", and the bar draws nothing), or write ",{"start":2082,"end":2083},{"line":136,"column":300,"offset":2075},{"line":136,"column":2084,"offset":2085},253,5026,{"type":31,"tagName":45,"properties":2087,"children":2088,"position":2095},{},[2089],{"type":27,"value":2017,"position":2090},{"start":2091,"end":2092},{"line":136,"column":2084,"offset":2085},{"line":136,"column":2093,"offset":2094},258,5031,{"start":2096,"end":2097},{"line":136,"column":2084,"offset":2085},{"line":136,"column":2093,"offset":2094},{"type":27,"value":2099,"position":2100}," to the one output that is still warming while the others draw (",{"start":2101,"end":2102},{"line":136,"column":2093,"offset":2094},{"line":136,"column":2103,"offset":2104},322,5095,{"type":31,"tagName":451,"properties":2106,"children":2108,"position":2118},{"href":2107},"../core-concepts/execution-model.md",[2109],{"type":27,"value":2110,"position":2111},"Execution model",{"start":2112,"end":2115},{"line":136,"column":2113,"offset":2114},323,5096,{"line":136,"column":2116,"offset":2117},338,5111,{"start":2119,"end":2120},{"line":136,"column":2103,"offset":2104},{"line":136,"column":2121,"offset":2122},376,5149,{"type":27,"value":2124,"position":2125},"). What is never correct is a placeholder that draws as if it were true. The chart reads no warm-up count: every bar has a row, and what ",{"start":2126,"end":2127},{"line":136,"column":2121,"offset":2122},{"line":136,"column":2128,"offset":2129},513,5286,{"type":31,"tagName":45,"properties":2131,"children":2132,"position":2139},{},[2133],{"type":27,"value":69,"position":2134},{"start":2135,"end":2136},{"line":136,"column":2128,"offset":2129},{"line":136,"column":2137,"offset":2138},522,5295,{"start":2140,"end":2141},{"line":136,"column":2128,"offset":2129},{"line":136,"column":2137,"offset":2138},{"type":27,"value":2143,"position":2144}," writes alone decides what is drawn.",{"start":2145,"end":2146},{"line":136,"column":2137,"offset":2138},{"line":136,"column":2147,"offset":2148},558,5331,{"start":2150,"end":2151},{"line":136,"column":21,"offset":2010},{"line":136,"column":2147,"offset":2148},{"type":27,"value":28},{"type":31,"tagName":109,"properties":2154,"children":2155,"position":2164},{},[2156],{"type":27,"value":2157,"position":2158},"Name what the module computes, not how it is drawn",{"start":2159,"end":2162},{"line":2160,"column":39,"offset":2161},70,5337,{"line":2160,"column":273,"offset":2163},5387,{"start":2165,"end":2167},{"line":2160,"column":21,"offset":2166},5333,{"line":2160,"column":273,"offset":2163},{"type":27,"value":28},{"type":31,"tagName":32,"properties":2170,"children":2171,"position":2316},{},[2172,2181,2193,2200,2212,2219,2232,2239,2252,2258,2271,2278,2291,2297,2310],{"type":27,"value":2173,"position":2174},"A decision is an output too. Emit ",{"start":2175,"end":2178},{"line":2176,"column":21,"offset":2177},72,5389,{"line":2176,"column":2179,"offset":2180},35,5423,{"type":31,"tagName":45,"properties":2182,"children":2183,"position":2190},{},[2184],{"type":27,"value":2185,"position":2186},"1",{"start":2187,"end":2188},{"line":2176,"column":2179,"offset":2180},{"line":2176,"column":1387,"offset":2189},5426,{"start":2191,"end":2192},{"line":2176,"column":2179,"offset":2180},{"line":2176,"column":1387,"offset":2189},{"type":27,"value":2194,"position":2195}," or ",{"start":2196,"end":2197},{"line":2176,"column":1387,"offset":2189},{"line":2176,"column":2198,"offset":2199},42,5430,{"type":31,"tagName":45,"properties":2201,"children":2202,"position":2209},{},[2203],{"type":27,"value":622,"position":2204},{"start":2205,"end":2206},{"line":2176,"column":2198,"offset":2199},{"line":2176,"column":2207,"offset":2208},45,5433,{"start":2210,"end":2211},{"line":2176,"column":2198,"offset":2199},{"line":2176,"column":2207,"offset":2208},{"type":27,"value":2213,"position":2214}," from a data-only ",{"start":2215,"end":2216},{"line":2176,"column":2207,"offset":2208},{"line":2176,"column":2217,"offset":2218},63,5451,{"type":31,"tagName":45,"properties":2220,"children":2221,"position":2229},{},[2222],{"type":27,"value":2223,"position":2224},"none",{"start":2225,"end":2226},{"line":2176,"column":2217,"offset":2218},{"line":2176,"column":2227,"offset":2228},69,5457,{"start":2230,"end":2231},{"line":2176,"column":2217,"offset":2218},{"line":2176,"column":2227,"offset":2228},{"type":27,"value":2233,"position":2234}," output and let a declaration turn it into a look (",{"start":2235,"end":2236},{"line":2176,"column":2227,"offset":2228},{"line":2176,"column":2237,"offset":2238},120,5508,{"type":31,"tagName":45,"properties":2240,"children":2241,"position":2249},{},[2242],{"type":27,"value":2243,"position":2244},"shape_where",{"start":2245,"end":2246},{"line":2176,"column":2237,"offset":2238},{"line":2176,"column":2247,"offset":2248},133,5521,{"start":2250,"end":2251},{"line":2176,"column":2237,"offset":2238},{"line":2176,"column":2247,"offset":2248},{"type":27,"value":206,"position":2253},{"start":2254,"end":2255},{"line":2176,"column":2247,"offset":2248},{"line":2176,"column":2256,"offset":2257},135,5523,{"type":31,"tagName":45,"properties":2259,"children":2260,"position":2268},{},[2261],{"type":27,"value":2262,"position":2263},"color_by",{"start":2264,"end":2265},{"line":2176,"column":2256,"offset":2257},{"line":2176,"column":2266,"offset":2267},145,5533,{"start":2269,"end":2270},{"line":2176,"column":2256,"offset":2257},{"line":2176,"column":2266,"offset":2267},{"type":27,"value":2272,"position":2273},", a box's ",{"start":2274,"end":2275},{"line":2176,"column":2266,"offset":2267},{"line":2176,"column":2276,"offset":2277},155,5543,{"type":31,"tagName":45,"properties":2279,"children":2280,"position":2288},{},[2281],{"type":27,"value":2282,"position":2283},"when",{"start":2284,"end":2285},{"line":2176,"column":2276,"offset":2277},{"line":2176,"column":2286,"offset":2287},161,5549,{"start":2289,"end":2290},{"line":2176,"column":2276,"offset":2277},{"line":2176,"column":2286,"offset":2287},{"type":27,"value":2292,"position":2293},"). That keeps the numeric surface reusable: the same gate that draws a mark can drive a declared ",{"start":2294,"end":2295},{"line":2176,"column":2286,"offset":2287},{"line":2176,"column":2093,"offset":2296},5646,{"type":31,"tagName":45,"properties":2298,"children":2299,"position":2307},{},[2300],{"type":27,"value":2301,"position":2302},"alert(...)",{"start":2303,"end":2304},{"line":2176,"column":2093,"offset":2296},{"line":2176,"column":2305,"offset":2306},270,5658,{"start":2308,"end":2309},{"line":2176,"column":2093,"offset":2296},{"line":2176,"column":2305,"offset":2306},{"type":27,"value":2311,"position":2312},", and you can read it by name at the Console prompt.",{"start":2313,"end":2314},{"line":2176,"column":2305,"offset":2306},{"line":2176,"column":2103,"offset":2315},5710,{"start":2317,"end":2318},{"line":2176,"column":21,"offset":2177},{"line":2176,"column":2103,"offset":2315},{"type":27,"value":28},{"type":31,"tagName":90,"properties":2321,"children":2322,"position":2332},{},[2323],{"type":27,"value":2324,"position":2325},"Plotting and visualization",{"start":2326,"end":2329},{"line":2327,"column":98,"offset":2328},74,5715,{"line":2327,"column":2330,"offset":2331},30,5741,{"start":2333,"end":2335},{"line":2327,"column":21,"offset":2334},5712,{"line":2327,"column":2330,"offset":2331},{"type":27,"value":28},{"type":31,"tagName":109,"properties":2338,"children":2339,"position":2348},{},[2340],{"type":27,"value":2341,"position":2342},"Describe every declaration",{"start":2343,"end":2346},{"line":2344,"column":39,"offset":2345},76,5747,{"line":2344,"column":1866,"offset":2347},5773,{"start":2349,"end":2351},{"line":2344,"column":21,"offset":2350},5743,{"line":2344,"column":1866,"offset":2347},{"type":27,"value":28},{"type":31,"tagName":32,"properties":2354,"children":2355,"position":2534},{},[2356,2371,2377,2389,2396,2409,2416,2427,2434,2451,2458,2470,2477,2490,2496,2508,2514,2527],{"type":31,"tagName":45,"properties":2357,"children":2358,"position":2368},{},[2359],{"type":27,"value":2360,"position":2361},"label",{"start":2362,"end":2365},{"line":2363,"column":21,"offset":2364},78,5775,{"line":2363,"column":2366,"offset":2367},8,5782,{"start":2369,"end":2370},{"line":2363,"column":21,"offset":2364},{"line":2363,"column":2366,"offset":2367},{"type":27,"value":2372,"position":2373}," on a setting is its name in the settings dialog (",{"start":2374,"end":2375},{"line":2363,"column":2366,"offset":2367},{"line":2363,"column":280,"offset":2376},5832,{"type":31,"tagName":45,"properties":2378,"children":2379,"position":2386},{},[2380],{"type":27,"value":2381,"position":2382},"description",{"start":2383,"end":2384},{"line":2363,"column":280,"offset":2376},{"line":2363,"column":2021,"offset":2385},5845,{"start":2387,"end":2388},{"line":2363,"column":280,"offset":2376},{"line":2363,"column":2021,"offset":2385},{"type":27,"value":2390,"position":2391}," stands in when there is none, and ",{"start":2392,"end":2393},{"line":2363,"column":2021,"offset":2385},{"line":2363,"column":2394,"offset":2395},106,5880,{"type":31,"tagName":45,"properties":2397,"children":2398,"position":2406},{},[2399],{"type":27,"value":2400,"position":2401},"hint",{"start":2402,"end":2403},{"line":2363,"column":2394,"offset":2395},{"line":2363,"column":2404,"offset":2405},112,5886,{"start":2407,"end":2408},{"line":2363,"column":2394,"offset":2395},{"line":2363,"column":2404,"offset":2405},{"type":27,"value":2410,"position":2411}," is the words behind the row's glyph); on an input ",{"start":2412,"end":2413},{"line":2363,"column":2404,"offset":2405},{"line":2363,"column":2414,"offset":2415},163,5937,{"type":31,"tagName":45,"properties":2417,"children":2418,"position":2424},{},[2419],{"type":27,"value":2381,"position":2420},{"start":2421,"end":2422},{"line":2363,"column":2414,"offset":2415},{"line":2363,"column":1434,"offset":2423},5950,{"start":2425,"end":2426},{"line":2363,"column":2414,"offset":2415},{"line":2363,"column":1434,"offset":2423},{"type":27,"value":2428,"position":2429}," documents the input in the sheet ",{"start":2430,"end":2431},{"line":2363,"column":1434,"offset":2423},{"line":2363,"column":2432,"offset":2433},210,5984,{"type":31,"tagName":146,"properties":2435,"children":2436,"position":2446},{},[2437],{"type":27,"value":2438,"position":2439},"Run",{"start":2440,"end":2443},{"line":2363,"column":2441,"offset":2442},212,5986,{"line":2363,"column":2444,"offset":2445},215,5989,{"start":2447,"end":2448},{"line":2363,"column":2432,"offset":2433},{"line":2363,"column":2449,"offset":2450},217,5991,{"type":27,"value":2452,"position":2453}," derives; on an output it is the note the Console prompt shows beside the output's name. Write them the way you would want to read them a month later: \"Bars of history that define normal volume\" beats \"lookback\". Give small-magnitude series (oscillators, percentages, counts) the ",{"start":2454,"end":2455},{"line":2363,"column":2449,"offset":2450},{"line":2363,"column":2456,"offset":2457},497,6271,{"type":31,"tagName":45,"properties":2459,"children":2460,"position":2467},{},[2461],{"type":27,"value":2462,"position":2463},"lower",{"start":2464,"end":2465},{"line":2363,"column":2456,"offset":2457},{"line":2363,"column":609,"offset":2466},6278,{"start":2468,"end":2469},{"line":2363,"column":2456,"offset":2457},{"line":2363,"column":609,"offset":2466},{"type":27,"value":2471,"position":2472}," panel and a ",{"start":2473,"end":2474},{"line":2363,"column":609,"offset":2466},{"line":2363,"column":2475,"offset":2476},517,6291,{"type":31,"tagName":45,"properties":2478,"children":2479,"position":2487},{},[2480],{"type":27,"value":2481,"position":2482},"unit",{"start":2483,"end":2484},{"line":2363,"column":2475,"offset":2476},{"line":2363,"column":2485,"offset":2486},523,6297,{"start":2488,"end":2489},{"line":2363,"column":2475,"offset":2476},{"line":2363,"column":2485,"offset":2486},{"type":27,"value":1121,"position":2491},{"start":2492,"end":2493},{"line":2363,"column":2485,"offset":2486},{"line":2363,"column":2494,"offset":2495},525,6299,{"type":31,"tagName":45,"properties":2497,"children":2498,"position":2505},{},[2499],{"type":27,"value":1249,"position":2500},{"start":2501,"end":2502},{"line":2363,"column":2494,"offset":2495},{"line":2363,"column":2503,"offset":2504},528,6302,{"start":2506,"end":2507},{"line":2363,"column":2494,"offset":2495},{"line":2363,"column":2503,"offset":2504},{"type":27,"value":206,"position":2509},{"start":2510,"end":2511},{"line":2363,"column":2503,"offset":2504},{"line":2363,"column":2512,"offset":2513},530,6304,{"type":31,"tagName":45,"properties":2515,"children":2516,"position":2524},{},[2517],{"type":27,"value":2518,"position":2519},"price",{"start":2520,"end":2521},{"line":2363,"column":2512,"offset":2513},{"line":2363,"column":2522,"offset":2523},537,6311,{"start":2525,"end":2526},{"line":2363,"column":2512,"offset":2513},{"line":2363,"column":2522,"offset":2523},{"type":27,"value":2528,"position":2529},", or a short label) so the axis formats itself.",{"start":2530,"end":2531},{"line":2363,"column":2522,"offset":2523},{"line":2363,"column":2532,"offset":2533},584,6358,{"start":2535,"end":2536},{"line":2363,"column":21,"offset":2364},{"line":2363,"column":2532,"offset":2533},{"type":27,"value":28},{"type":31,"tagName":109,"properties":2539,"children":2540,"position":2549},{},[2541],{"type":27,"value":2542,"position":2543},"One namespace for shape names",{"start":2544,"end":2546},{"line":1611,"column":39,"offset":2545},6364,{"line":1611,"column":2547,"offset":2548},34,6393,{"start":2550,"end":2552},{"line":1611,"column":21,"offset":2551},6360,{"line":1611,"column":2547,"offset":2548},{"type":27,"value":28},{"type":31,"tagName":32,"properties":2555,"children":2556,"position":2699},{},[2557,2565,2578,2585,2597,2604,2617,2623,2636,2641,2654,2661,2674,2680,2693],{"type":27,"value":2558,"position":2559},"Outputs, boxes, segments, renderers, and drawings share one namespace. A box named ",{"start":2560,"end":2562},{"line":1620,"column":21,"offset":2561},6395,{"line":1620,"column":2563,"offset":2564},84,6478,{"type":31,"tagName":45,"properties":2566,"children":2567,"position":2575},{},[2568],{"type":27,"value":2569,"position":2570},"range",{"start":2571,"end":2572},{"line":1620,"column":2563,"offset":2564},{"line":1620,"column":2573,"offset":2574},91,6485,{"start":2576,"end":2577},{"line":1620,"column":2563,"offset":2564},{"line":1620,"column":2573,"offset":2574},{"type":27,"value":2579,"position":2580}," beside an output named ",{"start":2581,"end":2582},{"line":1620,"column":2573,"offset":2574},{"line":1620,"column":2583,"offset":2584},115,6509,{"type":31,"tagName":45,"properties":2586,"children":2587,"position":2594},{},[2588],{"type":27,"value":2569,"position":2589},{"start":2590,"end":2591},{"line":1620,"column":2583,"offset":2584},{"line":1620,"column":2592,"offset":2593},122,6516,{"start":2595,"end":2596},{"line":1620,"column":2583,"offset":2584},{"line":1620,"column":2592,"offset":2593},{"type":27,"value":2598,"position":2599}," is refused at the sheet (",{"start":2600,"end":2601},{"line":1620,"column":2592,"offset":2593},{"line":1620,"column":2602,"offset":2603},148,6542,{"type":31,"tagName":45,"properties":2605,"children":2606,"position":2614},{},[2607],{"type":27,"value":2608,"position":2609},"box name 'range' is already taken by an output",{"start":2610,"end":2611},{"line":1620,"column":2602,"offset":2603},{"line":1620,"column":2612,"offset":2613},196,6590,{"start":2615,"end":2616},{"line":1620,"column":2602,"offset":2603},{"line":1620,"column":2612,"offset":2613},{"type":27,"value":2618,"position":2619},"). Name shapes for what they draw (",{"start":2620,"end":2621},{"line":1620,"column":2612,"offset":2613},{"line":1620,"column":200,"offset":2622},6625,{"type":31,"tagName":45,"properties":2624,"children":2625,"position":2633},{},[2626],{"type":27,"value":2627,"position":2628},"demand_zone",{"start":2629,"end":2630},{"line":1620,"column":200,"offset":2622},{"line":1620,"column":2631,"offset":2632},244,6638,{"start":2634,"end":2635},{"line":1620,"column":200,"offset":2622},{"line":1620,"column":2631,"offset":2632},{"type":27,"value":206,"position":2637},{"start":2638,"end":2639},{"line":1620,"column":2631,"offset":2632},{"line":1620,"column":389,"offset":2640},6640,{"type":31,"tagName":45,"properties":2642,"children":2643,"position":2651},{},[2644],{"type":27,"value":2645,"position":2646},"pdh_line",{"start":2647,"end":2648},{"line":1620,"column":389,"offset":2640},{"line":1620,"column":2649,"offset":2650},256,6650,{"start":2652,"end":2653},{"line":1620,"column":389,"offset":2640},{"line":1620,"column":2649,"offset":2650},{"type":27,"value":2655,"position":2656},") and outputs for what they compute (",{"start":2657,"end":2658},{"line":1620,"column":2649,"offset":2650},{"line":1620,"column":2659,"offset":2660},293,6687,{"type":31,"tagName":45,"properties":2662,"children":2663,"position":2671},{},[2664],{"type":27,"value":2665,"position":2666},"demand_top",{"start":2667,"end":2668},{"line":1620,"column":2659,"offset":2660},{"line":1620,"column":2669,"offset":2670},305,6699,{"start":2672,"end":2673},{"line":1620,"column":2659,"offset":2660},{"line":1620,"column":2669,"offset":2670},{"type":27,"value":206,"position":2675},{"start":2676,"end":2677},{"line":1620,"column":2669,"offset":2670},{"line":1620,"column":2678,"offset":2679},307,6701,{"type":31,"tagName":45,"properties":2681,"children":2682,"position":2690},{},[2683],{"type":27,"value":2684,"position":2685},"pdh",{"start":2686,"end":2687},{"line":1620,"column":2678,"offset":2679},{"line":1620,"column":2688,"offset":2689},312,6706,{"start":2691,"end":2692},{"line":1620,"column":2678,"offset":2679},{"line":1620,"column":2688,"offset":2689},{"type":27,"value":226,"position":2694},{"start":2695,"end":2696},{"line":1620,"column":2688,"offset":2689},{"line":1620,"column":2697,"offset":2698},314,6708,{"start":2700,"end":2701},{"line":1620,"column":21,"offset":2561},{"line":1620,"column":2697,"offset":2698},{"type":27,"value":28},{"type":31,"tagName":90,"properties":2704,"children":2705,"position":2713},{},[2706],{"type":27,"value":2707,"position":2708},"Debugging",{"start":2709,"end":2711},{"line":2563,"column":98,"offset":2710},6713,{"line":2563,"column":153,"offset":2712},6722,{"start":2714,"end":2716},{"line":2563,"column":21,"offset":2715},6710,{"line":2563,"column":153,"offset":2712},{"type":27,"value":28},{"type":31,"tagName":109,"properties":2719,"children":2720,"position":2730},{},[2721],{"type":27,"value":2722,"position":2723},"Probe with an output",{"start":2724,"end":2727},{"line":2725,"column":39,"offset":2726},86,6728,{"line":2725,"column":2728,"offset":2729},25,6748,{"start":2731,"end":2733},{"line":2725,"column":21,"offset":2732},6724,{"line":2725,"column":2728,"offset":2729},{"type":27,"value":28},{"type":31,"tagName":32,"properties":2736,"children":2737,"position":2861},{},[2738,2746,2758,2764,2776,2783,2795,2802,2814,2820,2832,2838,2855],{"type":27,"value":2739,"position":2740},"Log it or draw it. The debug log is the indicator's ",{"start":2741,"end":2744},{"line":2742,"column":21,"offset":2743},88,6750,{"line":2742,"column":267,"offset":2745},6802,{"type":31,"tagName":45,"properties":2747,"children":2748,"position":2755},{},[2749],{"type":27,"value":2750,"position":2751},"print()",{"start":2752,"end":2753},{"line":2742,"column":267,"offset":2745},{"line":2742,"column":177,"offset":2754},6811,{"start":2756,"end":2757},{"line":2742,"column":267,"offset":2745},{"line":2742,"column":177,"offset":2754},{"type":27,"value":2759,"position":2760},": a string slot named ",{"start":2761,"end":2762},{"line":2742,"column":177,"offset":2754},{"line":2742,"column":2563,"offset":2763},6833,{"type":31,"tagName":45,"properties":2765,"children":2766,"position":2773},{},[2767],{"type":27,"value":2768,"position":2769},"debug",{"start":2770,"end":2771},{"line":2742,"column":2563,"offset":2763},{"line":2742,"column":2573,"offset":2772},6840,{"start":2774,"end":2775},{"line":2742,"column":2563,"offset":2763},{"line":2742,"column":2573,"offset":2772},{"type":27,"value":2777,"position":2778},", written in ",{"start":2779,"end":2780},{"line":2742,"column":2573,"offset":2772},{"line":2742,"column":2781,"offset":2782},104,6853,{"type":31,"tagName":45,"properties":2784,"children":2785,"position":2792},{},[2786],{"type":27,"value":69,"position":2787},{"start":2788,"end":2789},{"line":2742,"column":2781,"offset":2782},{"line":2742,"column":2790,"offset":2791},113,6862,{"start":2793,"end":2794},{"line":2742,"column":2781,"offset":2782},{"line":2742,"column":2790,"offset":2791},{"type":27,"value":2796,"position":2797},", prints each bar's line in the editor's Console. For a number, declare the suspect intermediate as ",{"start":2798,"end":2799},{"line":2742,"column":2790,"offset":2791},{"line":2742,"column":2800,"offset":2801},213,6962,{"type":31,"tagName":45,"properties":2803,"children":2804,"position":2811},{},[2805],{"type":27,"value":2223,"position":2806},{"start":2807,"end":2808},{"line":2742,"column":2800,"offset":2801},{"line":2742,"column":2809,"offset":2810},219,6968,{"start":2812,"end":2813},{"line":2742,"column":2800,"offset":2801},{"line":2742,"column":2809,"offset":2810},{"type":27,"value":2815,"position":2816}," (readable by name at the Console prompt, never drawn) or as a ",{"start":2817,"end":2818},{"line":2742,"column":2809,"offset":2810},{"line":2742,"column":1971,"offset":2819},7031,{"type":31,"tagName":45,"properties":2821,"children":2822,"position":2829},{},[2823],{"type":27,"value":2462,"position":2824},{"start":2825,"end":2826},{"line":2742,"column":1971,"offset":2819},{"line":2742,"column":2827,"offset":2828},289,7038,{"start":2830,"end":2831},{"line":2742,"column":1971,"offset":2819},{"line":2742,"column":2827,"offset":2828},{"type":27,"value":2833,"position":2834}," line to see its shape across every bar, then delete the declaration when you are done. ",{"start":2835,"end":2836},{"line":2742,"column":2827,"offset":2828},{"line":2742,"column":1514,"offset":2837},7126,{"type":31,"tagName":451,"properties":2839,"children":2841,"position":2850},{"href":2840},"debugging.md",[2842],{"type":27,"value":2707,"position":2843},{"start":2844,"end":2847},{"line":2742,"column":2845,"offset":2846},378,7127,{"line":2742,"column":2848,"offset":2849},387,7136,{"start":2851,"end":2852},{"line":2742,"column":1514,"offset":2837},{"line":2742,"column":2853,"offset":2854},402,7151,{"type":27,"value":2856,"position":2857}," is the full workflow.",{"start":2858,"end":2859},{"line":2742,"column":2853,"offset":2854},{"line":2742,"column":99,"offset":2860},7173,{"start":2862,"end":2863},{"line":2742,"column":21,"offset":2743},{"line":2742,"column":99,"offset":2860},{"type":27,"value":28},{"type":31,"tagName":90,"properties":2866,"children":2867,"position":2877},{},[2868],{"type":27,"value":2869,"position":2870},"Error prevention",{"start":2871,"end":2874},{"line":2872,"column":98,"offset":2873},90,7178,{"line":2872,"column":2875,"offset":2876},20,7194,{"start":2878,"end":2880},{"line":2872,"column":21,"offset":2879},7175,{"line":2872,"column":2875,"offset":2876},{"type":27,"value":28},{"type":31,"tagName":109,"properties":2883,"children":2884,"position":2893},{},[2885],{"type":27,"value":2886,"position":2887},"NaN checks and safe division",{"start":2888,"end":2891},{"line":2889,"column":39,"offset":2890},92,7200,{"line":2889,"column":1568,"offset":2892},7228,{"start":2894,"end":2896},{"line":2889,"column":21,"offset":2895},7196,{"line":2889,"column":1568,"offset":2892},{"type":27,"value":28},{"type":31,"tagName":32,"properties":2899,"children":2900,"position":3015},{},[2901,2915,2921,2933,2940,2951,2957,2970,2976,2988,2995,3008],{"type":31,"tagName":45,"properties":2902,"children":2903,"position":2912},{},[2904],{"type":27,"value":2017,"position":2905},{"start":2906,"end":2909},{"line":2907,"column":21,"offset":2908},94,7230,{"line":2907,"column":2910,"offset":2911},6,7235,{"start":2913,"end":2914},{"line":2907,"column":21,"offset":2908},{"line":2907,"column":2910,"offset":2911},{"type":27,"value":2916,"position":2917}," is the only \"nothing here\" value, and it propagates: ",{"start":2918,"end":2919},{"line":2907,"column":2910,"offset":2911},{"line":2907,"column":1813,"offset":2920},7289,{"type":31,"tagName":45,"properties":2922,"children":2923,"position":2930},{},[2924],{"type":27,"value":2925,"position":2926},"NaN + 1",{"start":2927,"end":2928},{"line":2907,"column":1813,"offset":2920},{"line":2907,"column":2227,"offset":2929},7298,{"start":2931,"end":2932},{"line":2907,"column":1813,"offset":2920},{"line":2907,"column":2227,"offset":2929},{"type":27,"value":2934,"position":2935}," is ",{"start":2936,"end":2937},{"line":2907,"column":2227,"offset":2929},{"line":2907,"column":2938,"offset":2939},73,7302,{"type":31,"tagName":45,"properties":2941,"children":2942,"position":2948},{},[2943],{"type":27,"value":2017,"position":2944},{"start":2945,"end":2946},{"line":2907,"column":2938,"offset":2939},{"line":2907,"column":2363,"offset":2947},7307,{"start":2949,"end":2950},{"line":2907,"column":2938,"offset":2939},{"line":2907,"column":2363,"offset":2947},{"type":27,"value":2952,"position":2953},", and ",{"start":2954,"end":2955},{"line":2907,"column":2363,"offset":2947},{"line":2907,"column":2563,"offset":2956},7313,{"type":31,"tagName":45,"properties":2958,"children":2959,"position":2967},{},[2960],{"type":27,"value":2961,"position":2962},"NaN > 0",{"start":2963,"end":2964},{"line":2907,"column":2563,"offset":2956},{"line":2907,"column":2965,"offset":2966},93,7322,{"start":2968,"end":2969},{"line":2907,"column":2563,"offset":2956},{"line":2907,"column":2965,"offset":2966},{"type":27,"value":2934,"position":2971},{"start":2972,"end":2973},{"line":2907,"column":2965,"offset":2966},{"line":2907,"column":2974,"offset":2975},97,7326,{"type":31,"tagName":45,"properties":2977,"children":2978,"position":2985},{},[2979],{"type":27,"value":2980,"position":2981},"false",{"start":2982,"end":2983},{"line":2907,"column":2974,"offset":2975},{"line":2907,"column":2781,"offset":2984},7333,{"start":2986,"end":2987},{"line":2907,"column":2974,"offset":2975},{"line":2907,"column":2781,"offset":2984},{"type":27,"value":2989,"position":2990},". Test with ",{"start":2991,"end":2992},{"line":2907,"column":2781,"offset":2984},{"line":2907,"column":2993,"offset":2994},116,7345,{"type":31,"tagName":45,"properties":2996,"children":2997,"position":3005},{},[2998],{"type":27,"value":2999,"position":3000},"isNaN(x)",{"start":3001,"end":3002},{"line":2907,"column":2993,"offset":2994},{"line":2907,"column":3003,"offset":3004},126,7355,{"start":3006,"end":3007},{"line":2907,"column":2993,"offset":2994},{"line":2907,"column":3003,"offset":3004},{"type":27,"value":3009,"position":3010}," before a comparison that decides something, and guard every division by a value that can be zero. The two helpers most indicators need are two lines each:",{"start":3011,"end":3012},{"line":2907,"column":3003,"offset":3004},{"line":2907,"column":3013,"offset":3014},281,7510,{"start":3016,"end":3017},{"line":2907,"column":21,"offset":2908},{"line":2907,"column":3013,"offset":3014},{"type":27,"value":28},{"type":14,"children":3020},[3021],{"type":31,"tagName":618,"properties":3022,"children":3024,"data":-1},{"class":620,"style":621,"tabindex":622,"data-sample":3023},"faq-nan-helpers",[3025],{"type":31,"tagName":45,"properties":3026,"children":3028},{"class":3027},[628],[3029,3075,3076,3106,3107,3136,3137,3140,3141,3149,3150,3214,3215,3252,3253,3260,3261,3264,3265,3273,3274,3336,3337,3402,3403,3410,3411,3414,3415,3452,3453,3489,3490,3522,3523,3526,3527,3554,3555,3597,3598,3638,3639,3646,3647,3650,3651,3678,3679,3708,3709,3760,3761,3769,3770,3808,3809,3844,3845,3858,3859],{"type":31,"tagName":631,"properties":3030,"children":3031},{"class":633},[3032,3036,3040,3045,3049,3054,3058,3062,3066,3071],{"type":31,"tagName":631,"properties":3033,"children":3034},{"style":637},[3035],{"type":27,"value":640},{"type":31,"tagName":631,"properties":3037,"children":3038},{"style":643},[3039],{"type":27,"value":646},{"type":31,"tagName":631,"properties":3041,"children":3042},{"style":649},[3043],{"type":27,"value":3044},"\"len\"",{"type":31,"tagName":631,"properties":3046,"children":3047},{"style":643},[3048],{"type":27,"value":206},{"type":31,"tagName":631,"properties":3050,"children":3051},{"style":659},[3052],{"type":27,"value":3053},"20",{"type":31,"tagName":631,"properties":3055,"children":3056},{"style":643},[3057],{"type":27,"value":667},{"type":31,"tagName":631,"properties":3059,"children":3060},{"style":659},[3061],{"type":27,"value":2185},{"type":31,"tagName":631,"properties":3063,"children":3064},{"style":643},[3065],{"type":27,"value":677},{"type":31,"tagName":631,"properties":3067,"children":3068},{"style":659},[3069],{"type":27,"value":3070},"200",{"type":31,"tagName":631,"properties":3072,"children":3073},{"style":643},[3074],{"type":27,"value":697},{"type":27,"value":28},{"type":31,"tagName":631,"properties":3077,"children":3078},{"class":633},[3079,3083,3087,3092,3097,3102],{"type":31,"tagName":631,"properties":3080,"children":3081},{"style":637},[3082],{"type":27,"value":706},{"type":31,"tagName":631,"properties":3084,"children":3085},{"style":643},[3086],{"type":27,"value":646},{"type":31,"tagName":631,"properties":3088,"children":3089},{"style":649},[3090],{"type":27,"value":3091},"\"ratio\"",{"type":31,"tagName":631,"properties":3093,"children":3094},{"style":643},[3095],{"type":27,"value":3096},", line, lower, { description: ",{"type":31,"tagName":631,"properties":3098,"children":3099},{"style":649},[3100],{"type":27,"value":3101},"\"Volume over its average, 0 while the average warms\"",{"type":31,"tagName":631,"properties":3103,"children":3104},{"style":643},[3105],{"type":27,"value":697},{"type":27,"value":28},{"type":31,"tagName":631,"properties":3108,"children":3109},{"class":633},[3110,3114,3118,3123,3127,3132],{"type":31,"tagName":631,"properties":3111,"children":3112},{"style":637},[3113],{"type":27,"value":706},{"type":31,"tagName":631,"properties":3115,"children":3116},{"style":643},[3117],{"type":27,"value":646},{"type":31,"tagName":631,"properties":3119,"children":3120},{"style":649},[3121],{"type":27,"value":3122},"\"smooth\"",{"type":31,"tagName":631,"properties":3124,"children":3125},{"style":643},[3126],{"type":27,"value":3096},{"type":31,"tagName":631,"properties":3128,"children":3129},{"style":649},[3130],{"type":27,"value":3131},"\"Close average, last good value carried across gaps\"",{"type":31,"tagName":631,"properties":3133,"children":3134},{"style":643},[3135],{"type":27,"value":697},{"type":27,"value":28},{"type":31,"tagName":631,"properties":3138,"children":3139},{"class":633},[],{"type":27,"value":28},{"type":31,"tagName":631,"properties":3142,"children":3143},{"class":633},[3144],{"type":31,"tagName":631,"properties":3145,"children":3146},{"style":749},[3147],{"type":27,"value":3148},"// nz: a number, or the fallback when it is NaN.",{"type":27,"value":28},{"type":31,"tagName":631,"properties":3151,"children":3152},{"class":633},[3153,3157,3162,3166,3172,3176,3180,3184,3189,3193,3197,3202,3206,3210],{"type":31,"tagName":631,"properties":3154,"children":3155},{"style":759},[3156],{"type":27,"value":950},{"type":31,"tagName":631,"properties":3158,"children":3159},{"style":637},[3160],{"type":27,"value":3161}," nz",{"type":31,"tagName":631,"properties":3163,"children":3164},{"style":643},[3165],{"type":27,"value":646},{"type":31,"tagName":631,"properties":3167,"children":3169},{"style":3168},"--shiki-dark:#FFAB70;--shiki-light:#E36209",[3170],{"type":27,"value":3171},"value",{"type":31,"tagName":631,"properties":3173,"children":3174},{"style":759},[3175],{"type":27,"value":852},{"type":31,"tagName":631,"properties":3177,"children":3178},{"style":637},[3179],{"type":27,"value":1348},{"type":31,"tagName":631,"properties":3181,"children":3182},{"style":643},[3183],{"type":27,"value":206},{"type":31,"tagName":631,"properties":3185,"children":3186},{"style":3168},[3187],{"type":27,"value":3188},"fallback",{"type":31,"tagName":631,"properties":3190,"children":3191},{"style":759},[3192],{"type":27,"value":852},{"type":31,"tagName":631,"properties":3194,"children":3195},{"style":637},[3196],{"type":27,"value":1348},{"type":31,"tagName":631,"properties":3198,"children":3199},{"style":643},[3200],{"type":27,"value":3201},")",{"type":31,"tagName":631,"properties":3203,"children":3204},{"style":759},[3205],{"type":27,"value":852},{"type":31,"tagName":631,"properties":3207,"children":3208},{"style":637},[3209],{"type":27,"value":1348},{"type":31,"tagName":631,"properties":3211,"children":3212},{"style":643},[3213],{"type":27,"value":974},{"type":27,"value":28},{"type":31,"tagName":631,"properties":3216,"children":3217},{"class":633},[3218,3223,3228,3233,3238,3243,3247],{"type":31,"tagName":631,"properties":3219,"children":3220},{"style":759},[3221],{"type":27,"value":3222},"  return",{"type":31,"tagName":631,"properties":3224,"children":3225},{"style":637},[3226],{"type":27,"value":3227}," isNaN",{"type":31,"tagName":631,"properties":3229,"children":3230},{"style":643},[3231],{"type":27,"value":3232},"(value) ",{"type":31,"tagName":631,"properties":3234,"children":3235},{"style":759},[3236],{"type":27,"value":3237},"?",{"type":31,"tagName":631,"properties":3239,"children":3240},{"style":643},[3241],{"type":27,"value":3242}," fallback ",{"type":31,"tagName":631,"properties":3244,"children":3245},{"style":759},[3246],{"type":27,"value":852},{"type":31,"tagName":631,"properties":3248,"children":3249},{"style":643},[3250],{"type":27,"value":3251}," value;",{"type":27,"value":28},{"type":31,"tagName":631,"properties":3254,"children":3255},{"class":633},[3256],{"type":31,"tagName":631,"properties":3257,"children":3258},{"style":643},[3259],{"type":27,"value":1015},{"type":27,"value":28},{"type":31,"tagName":631,"properties":3262,"children":3263},{"class":633},[],{"type":27,"value":28},{"type":31,"tagName":631,"properties":3266,"children":3267},{"class":633},[3268],{"type":31,"tagName":631,"properties":3269,"children":3270},{"style":749},[3271],{"type":27,"value":3272},"// Division that refuses to blow up: NaN when the denominator is zero or missing.",{"type":27,"value":28},{"type":31,"tagName":631,"properties":3275,"children":3276},{"class":633},[3277,3281,3286,3290,3295,3299,3303,3307,3312,3316,3320,3324,3328,3332],{"type":31,"tagName":631,"properties":3278,"children":3279},{"style":759},[3280],{"type":27,"value":950},{"type":31,"tagName":631,"properties":3282,"children":3283},{"style":637},[3284],{"type":27,"value":3285}," safeDiv",{"type":31,"tagName":631,"properties":3287,"children":3288},{"style":643},[3289],{"type":27,"value":646},{"type":31,"tagName":631,"properties":3291,"children":3292},{"style":3168},[3293],{"type":27,"value":3294},"numerator",{"type":31,"tagName":631,"properties":3296,"children":3297},{"style":759},[3298],{"type":27,"value":852},{"type":31,"tagName":631,"properties":3300,"children":3301},{"style":637},[3302],{"type":27,"value":1348},{"type":31,"tagName":631,"properties":3304,"children":3305},{"style":643},[3306],{"type":27,"value":206},{"type":31,"tagName":631,"properties":3308,"children":3309},{"style":3168},[3310],{"type":27,"value":3311},"denominator",{"type":31,"tagName":631,"properties":3313,"children":3314},{"style":759},[3315],{"type":27,"value":852},{"type":31,"tagName":631,"properties":3317,"children":3318},{"style":637},[3319],{"type":27,"value":1348},{"type":31,"tagName":631,"properties":3321,"children":3322},{"style":643},[3323],{"type":27,"value":3201},{"type":31,"tagName":631,"properties":3325,"children":3326},{"style":759},[3327],{"type":27,"value":852},{"type":31,"tagName":631,"properties":3329,"children":3330},{"style":637},[3331],{"type":27,"value":1348},{"type":31,"tagName":631,"properties":3333,"children":3334},{"style":643},[3335],{"type":27,"value":974},{"type":27,"value":28},{"type":31,"tagName":631,"properties":3338,"children":3339},{"class":633},[3340,3344,3348,3353,3358,3363,3368,3373,3378,3383,3388,3393,3397],{"type":31,"tagName":631,"properties":3341,"children":3342},{"style":759},[3343],{"type":27,"value":3222},{"type":31,"tagName":631,"properties":3345,"children":3346},{"style":637},[3347],{"type":27,"value":3227},{"type":31,"tagName":631,"properties":3349,"children":3350},{"style":643},[3351],{"type":27,"value":3352},"(denominator) ",{"type":31,"tagName":631,"properties":3354,"children":3355},{"style":759},[3356],{"type":27,"value":3357},"||",{"type":31,"tagName":631,"properties":3359,"children":3360},{"style":643},[3361],{"type":27,"value":3362}," denominator ",{"type":31,"tagName":631,"properties":3364,"children":3365},{"style":759},[3366],{"type":27,"value":3367},"==",{"type":31,"tagName":631,"properties":3369,"children":3370},{"style":659},[3371],{"type":27,"value":3372}," 0.0",{"type":31,"tagName":631,"properties":3374,"children":3375},{"style":759},[3376],{"type":27,"value":3377}," ?",{"type":31,"tagName":631,"properties":3379,"children":3380},{"style":659},[3381],{"type":27,"value":3382}," NaN",{"type":31,"tagName":631,"properties":3384,"children":3385},{"style":759},[3386],{"type":27,"value":3387}," :",{"type":31,"tagName":631,"properties":3389,"children":3390},{"style":643},[3391],{"type":27,"value":3392}," numerator ",{"type":31,"tagName":631,"properties":3394,"children":3395},{"style":759},[3396],{"type":27,"value":1358},{"type":31,"tagName":631,"properties":3398,"children":3399},{"style":643},[3400],{"type":27,"value":3401}," denominator;",{"type":27,"value":28},{"type":31,"tagName":631,"properties":3404,"children":3405},{"class":633},[3406],{"type":31,"tagName":631,"properties":3407,"children":3408},{"style":643},[3409],{"type":27,"value":1015},{"type":27,"value":28},{"type":31,"tagName":631,"properties":3412,"children":3413},{"class":633},[],{"type":27,"value":28},{"type":31,"tagName":631,"properties":3416,"children":3417},{"class":633},[3418,3422,3427,3431,3435,3440,3444,3448],{"type":31,"tagName":631,"properties":3419,"children":3420},{"style":759},[3421],{"type":27,"value":163},{"type":31,"tagName":631,"properties":3423,"children":3424},{"style":643},[3425],{"type":27,"value":3426}," avgVolume ",{"type":31,"tagName":631,"properties":3428,"children":3429},{"style":759},[3430],{"type":27,"value":988},{"type":31,"tagName":631,"properties":3432,"children":3433},{"style":759},[3434],{"type":27,"value":804},{"type":31,"tagName":631,"properties":3436,"children":3437},{"style":637},[3438],{"type":27,"value":3439}," Sma",{"type":31,"tagName":631,"properties":3441,"children":3442},{"style":643},[3443],{"type":27,"value":646},{"type":31,"tagName":631,"properties":3445,"children":3446},{"style":659},[3447],{"type":27,"value":3053},{"type":31,"tagName":631,"properties":3449,"children":3450},{"style":643},[3451],{"type":27,"value":834},{"type":27,"value":28},{"type":31,"tagName":631,"properties":3454,"children":3455},{"class":633},[3456,3460,3465,3469,3473,3477,3481,3485],{"type":31,"tagName":631,"properties":3457,"children":3458},{"style":759},[3459],{"type":27,"value":163},{"type":31,"tagName":631,"properties":3461,"children":3462},{"style":643},[3463],{"type":27,"value":3464}," avgClose ",{"type":31,"tagName":631,"properties":3466,"children":3467},{"style":759},[3468],{"type":27,"value":988},{"type":31,"tagName":631,"properties":3470,"children":3471},{"style":759},[3472],{"type":27,"value":804},{"type":31,"tagName":631,"properties":3474,"children":3475},{"style":637},[3476],{"type":27,"value":3439},{"type":31,"tagName":631,"properties":3478,"children":3479},{"style":643},[3480],{"type":27,"value":646},{"type":31,"tagName":631,"properties":3482,"children":3483},{"style":659},[3484],{"type":27,"value":3053},{"type":31,"tagName":631,"properties":3486,"children":3487},{"style":643},[3488],{"type":27,"value":834},{"type":27,"value":28},{"type":31,"tagName":631,"properties":3491,"children":3492},{"class":633},[3493,3497,3502,3506,3510,3514,3518],{"type":31,"tagName":631,"properties":3494,"children":3495},{"style":759},[3496],{"type":27,"value":163},{"type":31,"tagName":631,"properties":3498,"children":3499},{"style":643},[3500],{"type":27,"value":3501}," lastGood",{"type":31,"tagName":631,"properties":3503,"children":3504},{"style":759},[3505],{"type":27,"value":852},{"type":31,"tagName":631,"properties":3507,"children":3508},{"style":637},[3509],{"type":27,"value":1348},{"type":31,"tagName":631,"properties":3511,"children":3512},{"style":759},[3513],{"type":27,"value":772},{"type":31,"tagName":631,"properties":3515,"children":3516},{"style":659},[3517],{"type":27,"value":3382},{"type":31,"tagName":631,"properties":3519,"children":3520},{"style":643},[3521],{"type":27,"value":782},{"type":27,"value":28},{"type":31,"tagName":631,"properties":3524,"children":3525},{"class":633},[],{"type":27,"value":28},{"type":31,"tagName":631,"properties":3528,"children":3529},{"class":633},[3530,3534,3538,3542,3546,3550],{"type":31,"tagName":631,"properties":3531,"children":3532},{"style":759},[3533],{"type":27,"value":950},{"type":31,"tagName":631,"properties":3535,"children":3536},{"style":637},[3537],{"type":27,"value":955},{"type":31,"tagName":631,"properties":3539,"children":3540},{"style":643},[3541],{"type":27,"value":960},{"type":31,"tagName":631,"properties":3543,"children":3544},{"style":759},[3545],{"type":27,"value":852},{"type":31,"tagName":631,"properties":3547,"children":3548},{"style":659},[3549],{"type":27,"value":969},{"type":31,"tagName":631,"properties":3551,"children":3552},{"style":643},[3553],{"type":27,"value":974},{"type":27,"value":28},{"type":31,"tagName":631,"properties":3556,"children":3557},{"class":633},[3558,3563,3567,3571,3575,3579,3583,3587,3592],{"type":31,"tagName":631,"properties":3559,"children":3560},{"style":643},[3561],{"type":27,"value":3562},"  avgVolume ",{"type":31,"tagName":631,"properties":3564,"children":3565},{"style":759},[3566],{"type":27,"value":988},{"type":31,"tagName":631,"properties":3568,"children":3569},{"style":759},[3570],{"type":27,"value":804},{"type":31,"tagName":631,"properties":3572,"children":3573},{"style":637},[3574],{"type":27,"value":3439},{"type":31,"tagName":631,"properties":3576,"children":3577},{"style":643},[3578],{"type":27,"value":646},{"type":31,"tagName":631,"properties":3580,"children":3581},{"style":637},[3582],{"type":27,"value":1872},{"type":31,"tagName":631,"properties":3584,"children":3585},{"style":643},[3586],{"type":27,"value":646},{"type":31,"tagName":631,"properties":3588,"children":3589},{"style":637},[3590],{"type":27,"value":3591},"p_len",{"type":31,"tagName":631,"properties":3593,"children":3594},{"style":643},[3595],{"type":27,"value":3596},"()));",{"type":27,"value":28},{"type":31,"tagName":631,"properties":3599,"children":3600},{"class":633},[3601,3606,3610,3614,3618,3622,3626,3630,3634],{"type":31,"tagName":631,"properties":3602,"children":3603},{"style":643},[3604],{"type":27,"value":3605},"  avgClose ",{"type":31,"tagName":631,"properties":3607,"children":3608},{"style":759},[3609],{"type":27,"value":988},{"type":31,"tagName":631,"properties":3611,"children":3612},{"style":759},[3613],{"type":27,"value":804},{"type":31,"tagName":631,"properties":3615,"children":3616},{"style":637},[3617],{"type":27,"value":3439},{"type":31,"tagName":631,"properties":3619,"children":3620},{"style":643},[3621],{"type":27,"value":646},{"type":31,"tagName":631,"properties":3623,"children":3624},{"style":637},[3625],{"type":27,"value":1872},{"type":31,"tagName":631,"properties":3627,"children":3628},{"style":643},[3629],{"type":27,"value":646},{"type":31,"tagName":631,"properties":3631,"children":3632},{"style":637},[3633],{"type":27,"value":3591},{"type":31,"tagName":631,"properties":3635,"children":3636},{"style":643},[3637],{"type":27,"value":3596},{"type":27,"value":28},{"type":31,"tagName":631,"properties":3640,"children":3641},{"class":633},[3642],{"type":31,"tagName":631,"properties":3643,"children":3644},{"style":643},[3645],{"type":27,"value":1015},{"type":27,"value":28},{"type":31,"tagName":631,"properties":3648,"children":3649},{"class":633},[],{"type":27,"value":28},{"type":31,"tagName":631,"properties":3652,"children":3653},{"class":633},[3654,3658,3662,3666,3670,3674],{"type":31,"tagName":631,"properties":3655,"children":3656},{"style":759},[3657],{"type":27,"value":950},{"type":31,"tagName":631,"properties":3659,"children":3660},{"style":637},[3661],{"type":27,"value":1032},{"type":31,"tagName":631,"properties":3663,"children":3664},{"style":643},[3665],{"type":27,"value":960},{"type":31,"tagName":631,"properties":3667,"children":3668},{"style":759},[3669],{"type":27,"value":852},{"type":31,"tagName":631,"properties":3671,"children":3672},{"style":659},[3673],{"type":27,"value":969},{"type":31,"tagName":631,"properties":3675,"children":3676},{"style":643},[3677],{"type":27,"value":974},{"type":27,"value":28},{"type":31,"tagName":631,"properties":3680,"children":3681},{"class":633},[3682,3686,3691,3695,3699,3704],{"type":31,"tagName":631,"properties":3683,"children":3684},{"style":759},[3685],{"type":27,"value":1057},{"type":31,"tagName":631,"properties":3687,"children":3688},{"style":659},[3689],{"type":27,"value":3690}," volume",{"type":31,"tagName":631,"properties":3692,"children":3693},{"style":759},[3694],{"type":27,"value":772},{"type":31,"tagName":631,"properties":3696,"children":3697},{"style":643},[3698],{"type":27,"value":1071},{"type":31,"tagName":631,"properties":3700,"children":3701},{"style":637},[3702],{"type":27,"value":3703},"volume",{"type":31,"tagName":631,"properties":3705,"children":3706},{"style":643},[3707],{"type":27,"value":1081},{"type":27,"value":28},{"type":31,"tagName":631,"properties":3710,"children":3711},{"class":633},[3712,3717,3721,3726,3730,3735,3740,3745,3750,3755],{"type":31,"tagName":631,"properties":3713,"children":3714},{"style":637},[3715],{"type":27,"value":3716},"  out_ratio",{"type":31,"tagName":631,"properties":3718,"children":3719},{"style":643},[3720],{"type":27,"value":646},{"type":31,"tagName":631,"properties":3722,"children":3723},{"style":637},[3724],{"type":27,"value":3725},"nz",{"type":31,"tagName":631,"properties":3727,"children":3728},{"style":643},[3729],{"type":27,"value":646},{"type":31,"tagName":631,"properties":3731,"children":3732},{"style":637},[3733],{"type":27,"value":3734},"safeDiv",{"type":31,"tagName":631,"properties":3736,"children":3737},{"style":643},[3738],{"type":27,"value":3739},"(volume, avgVolume.",{"type":31,"tagName":631,"properties":3741,"children":3742},{"style":637},[3743],{"type":27,"value":3744},"update",{"type":31,"tagName":631,"properties":3746,"children":3747},{"style":643},[3748],{"type":27,"value":3749},"(volume)), ",{"type":31,"tagName":631,"properties":3751,"children":3752},{"style":659},[3753],{"type":27,"value":3754},"0.0",{"type":31,"tagName":631,"properties":3756,"children":3757},{"style":643},[3758],{"type":27,"value":3759},"));",{"type":27,"value":28},{"type":31,"tagName":631,"properties":3762,"children":3763},{"class":633},[3764],{"type":31,"tagName":631,"properties":3765,"children":3766},{"style":749},[3767],{"type":27,"value":3768},"  // fixnan: keep the last non-NaN value instead of showing a gap.",{"type":27,"value":28},{"type":31,"tagName":631,"properties":3771,"children":3772},{"class":633},[3773,3777,3782,3786,3791,3795,3800,3804],{"type":31,"tagName":631,"properties":3774,"children":3775},{"style":759},[3776],{"type":27,"value":1057},{"type":31,"tagName":631,"properties":3778,"children":3779},{"style":659},[3780],{"type":27,"value":3781}," smooth",{"type":31,"tagName":631,"properties":3783,"children":3784},{"style":759},[3785],{"type":27,"value":772},{"type":31,"tagName":631,"properties":3787,"children":3788},{"style":643},[3789],{"type":27,"value":3790}," avgClose.",{"type":31,"tagName":631,"properties":3792,"children":3793},{"style":637},[3794],{"type":27,"value":3744},{"type":31,"tagName":631,"properties":3796,"children":3797},{"style":643},[3798],{"type":27,"value":3799},"(bar.",{"type":31,"tagName":631,"properties":3801,"children":3802},{"style":637},[3803],{"type":27,"value":1076},{"type":31,"tagName":631,"properties":3805,"children":3806},{"style":643},[3807],{"type":27,"value":1006},{"type":27,"value":28},{"type":31,"tagName":631,"properties":3810,"children":3811},{"class":633},[3812,3816,3820,3825,3830,3835,3839],{"type":31,"tagName":631,"properties":3813,"children":3814},{"style":759},[3815],{"type":27,"value":1263},{"type":31,"tagName":631,"properties":3817,"children":3818},{"style":643},[3819],{"type":27,"value":1121},{"type":31,"tagName":631,"properties":3821,"children":3822},{"style":759},[3823],{"type":27,"value":3824},"!",{"type":31,"tagName":631,"properties":3826,"children":3827},{"style":637},[3828],{"type":27,"value":3829},"isNaN",{"type":31,"tagName":631,"properties":3831,"children":3832},{"style":643},[3833],{"type":27,"value":3834},"(smooth)) lastGood ",{"type":31,"tagName":631,"properties":3836,"children":3837},{"style":759},[3838],{"type":27,"value":988},{"type":31,"tagName":631,"properties":3840,"children":3841},{"style":643},[3842],{"type":27,"value":3843}," smooth;",{"type":27,"value":28},{"type":31,"tagName":631,"properties":3846,"children":3847},{"class":633},[3848,3853],{"type":31,"tagName":631,"properties":3849,"children":3850},{"style":637},[3851],{"type":27,"value":3852},"  out_smooth",{"type":31,"tagName":631,"properties":3854,"children":3855},{"style":643},[3856],{"type":27,"value":3857},"(lastGood);",{"type":27,"value":28},{"type":31,"tagName":631,"properties":3860,"children":3861},{"class":633},[3862],{"type":31,"tagName":631,"properties":3863,"children":3864},{"style":643},[3865],{"type":27,"value":1015},{"type":27,"value":28},{"type":31,"tagName":109,"properties":3868,"children":3869,"position":3878},{},[3870],{"type":27,"value":3871,"position":3872},"Buffer bounds",{"start":3873,"end":3876},{"line":3874,"column":39,"offset":3875},130,8656,{"line":3874,"column":101,"offset":3877},8669,{"start":3879,"end":3881},{"line":3874,"column":21,"offset":3880},8652,{"line":3874,"column":101,"offset":3877},{"type":27,"value":28},{"type":31,"tagName":32,"properties":3884,"children":3885,"position":4080},{},[3886,3893,3904,3910,3922,3929,3940,3947,3959,3966,3977,3983,3994,4001,4013,4020,4032,4039,4051,4058,4074],{"type":27,"value":3887,"position":3888},"A ring buffer never reads past what it has been given: keep a ",{"start":3889,"end":3891},{"line":42,"column":21,"offset":3890},8671,{"line":42,"column":2217,"offset":3892},8733,{"type":31,"tagName":45,"properties":3894,"children":3895,"position":3901},{},[3896],{"type":27,"value":1539,"position":3897},{"start":3898,"end":3899},{"line":42,"column":2217,"offset":3892},{"line":42,"column":2160,"offset":3900},8740,{"start":3902,"end":3903},{"line":42,"column":2217,"offset":3892},{"line":42,"column":2160,"offset":3900},{"type":27,"value":3905,"position":3906}," beside the ",{"start":3907,"end":3908},{"line":42,"column":2160,"offset":3900},{"line":42,"column":1620,"offset":3909},8752,{"type":31,"tagName":45,"properties":3911,"children":3912,"position":3919},{},[3913],{"type":27,"value":3914,"position":3915},"cursor",{"start":3916,"end":3917},{"line":42,"column":1620,"offset":3909},{"line":42,"column":2872,"offset":3918},8760,{"start":3920,"end":3921},{"line":42,"column":1620,"offset":3909},{"line":42,"column":2872,"offset":3918},{"type":27,"value":3923,"position":3924}," and only scan ",{"start":3925,"end":3926},{"line":42,"column":2872,"offset":3918},{"line":42,"column":3927,"offset":3928},105,8775,{"type":31,"tagName":45,"properties":3930,"children":3931,"position":3937},{},[3932],{"type":27,"value":1539,"position":3933},{"start":3934,"end":3935},{"line":42,"column":3927,"offset":3928},{"line":42,"column":2404,"offset":3936},8782,{"start":3938,"end":3939},{"line":42,"column":3927,"offset":3928},{"line":42,"column":2404,"offset":3936},{"type":27,"value":3941,"position":3942}," entries until the buffer is full. There is no ",{"start":3943,"end":3944},{"line":42,"column":2404,"offset":3936},{"line":42,"column":3945,"offset":3946},159,8829,{"type":31,"tagName":45,"properties":3948,"children":3949,"position":3956},{},[3950],{"type":27,"value":3951,"position":3952},"barIndex",{"start":3953,"end":3954},{"line":42,"column":3945,"offset":3946},{"line":42,"column":1924,"offset":3955},8839,{"start":3957,"end":3958},{"line":42,"column":3945,"offset":3946},{"line":42,"column":1924,"offset":3955},{"type":27,"value":3960,"position":3961}," to compare against and no negative index to worry about; the buffer's own bookkeeping is the bound. A ",{"start":3962,"end":3963},{"line":42,"column":1924,"offset":3955},{"line":42,"column":3964,"offset":3965},272,8942,{"type":31,"tagName":45,"properties":3967,"children":3968,"position":3974},{},[3969],{"type":27,"value":375,"position":3970},{"start":3971,"end":3972},{"line":42,"column":3964,"offset":3965},{"line":42,"column":3013,"offset":3973},8951,{"start":3975,"end":3976},{"line":42,"column":3964,"offset":3965},{"line":42,"column":3013,"offset":3973},{"type":27,"value":385,"position":3978},{"start":3979,"end":3980},{"line":42,"column":3013,"offset":3973},{"line":42,"column":3981,"offset":3982},287,8957,{"type":31,"tagName":45,"properties":3984,"children":3985,"position":3991},{},[3986],{"type":27,"value":395,"position":3987},{"start":3988,"end":3989},{"line":42,"column":3981,"offset":3982},{"line":42,"column":418,"offset":3990},8970,{"start":3992,"end":3993},{"line":42,"column":3981,"offset":3982},{"line":42,"column":418,"offset":3990},{"type":27,"value":3995,"position":3996}," keeps that bookkeeping for you: ",{"start":3997,"end":3998},{"line":42,"column":418,"offset":3990},{"line":42,"column":3999,"offset":4000},333,9003,{"type":31,"tagName":45,"properties":4002,"children":4003,"position":4010},{},[4004],{"type":27,"value":414,"position":4005},{"start":4006,"end":4007},{"line":42,"column":3999,"offset":4000},{"line":42,"column":4008,"offset":4009},341,9011,{"start":4011,"end":4012},{"line":42,"column":3999,"offset":4000},{"line":42,"column":4008,"offset":4009},{"type":27,"value":4014,"position":4015}," reads ",{"start":4016,"end":4017},{"line":42,"column":4008,"offset":4009},{"line":42,"column":4018,"offset":4019},348,9018,{"type":31,"tagName":45,"properties":4021,"children":4022,"position":4029},{},[4023],{"type":27,"value":2017,"position":4024},{"start":4025,"end":4026},{"line":42,"column":4018,"offset":4019},{"line":42,"column":4027,"offset":4028},353,9023,{"start":4030,"end":4031},{"line":42,"column":4018,"offset":4019},{"line":42,"column":4027,"offset":4028},{"type":27,"value":4033,"position":4034}," until it holds ",{"start":4035,"end":4036},{"line":42,"column":4027,"offset":4028},{"line":42,"column":4037,"offset":4038},369,9039,{"type":31,"tagName":45,"properties":4040,"children":4041,"position":4048},{},[4042],{"type":27,"value":4043,"position":4044},"n + 1",{"start":4045,"end":4046},{"line":42,"column":4037,"offset":4038},{"line":42,"column":2121,"offset":4047},9046,{"start":4049,"end":4050},{"line":42,"column":4037,"offset":4038},{"line":42,"column":2121,"offset":4047},{"type":27,"value":4052,"position":4053}," values (",{"start":4054,"end":4055},{"line":42,"column":2121,"offset":4047},{"line":42,"column":4056,"offset":4057},385,9055,{"type":31,"tagName":451,"properties":4059,"children":4060,"position":4069},{"href":453},[4061],{"type":27,"value":456,"position":4062},{"start":4063,"end":4066},{"line":42,"column":4064,"offset":4065},386,9056,{"line":42,"column":4067,"offset":4068},410,9080,{"start":4070,"end":4071},{"line":42,"column":4056,"offset":4057},{"line":42,"column":4072,"offset":4073},469,9139,{"type":27,"value":226,"position":4075},{"start":4076,"end":4077},{"line":42,"column":4072,"offset":4073},{"line":42,"column":4078,"offset":4079},471,9141,{"start":4081,"end":4082},{"line":42,"column":21,"offset":3890},{"line":42,"column":4078,"offset":4079},{"type":27,"value":28},{"type":31,"tagName":109,"properties":4085,"children":4086,"position":4108},{},[4087,4102],{"type":31,"tagName":45,"properties":4088,"children":4089,"position":4099},{},[4090],{"type":27,"value":4091,"position":4092},"missing",{"start":4093,"end":4096},{"line":4094,"column":39,"offset":4095},134,9147,{"line":4094,"column":4097,"offset":4098},14,9156,{"start":4100,"end":4101},{"line":4094,"column":39,"offset":4095},{"line":4094,"column":4097,"offset":4098},{"type":27,"value":4103,"position":4104}," on sparse primaries",{"start":4105,"end":4106},{"line":4094,"column":4097,"offset":4098},{"line":4094,"column":2547,"offset":4107},9176,{"start":4109,"end":4111},{"line":4094,"column":21,"offset":4110},9143,{"line":4094,"column":2547,"offset":4107},{"type":27,"value":28},{"type":31,"tagName":32,"properties":4114,"children":4115,"position":4185},{},[4116,4125,4138,4144,4157,4164,4179],{"type":27,"value":4117,"position":4118},"A feed that only has rows when something happened (liquidations, for one) makes a poor primary input as-is: the grid has holes. Declare ",{"start":4119,"end":4122},{"line":4120,"column":21,"offset":4121},136,9178,{"line":4120,"column":4123,"offset":4124},137,9314,{"type":31,"tagName":45,"properties":4126,"children":4127,"position":4135},{},[4128],{"type":27,"value":4129,"position":4130},"missing: \"zero\"",{"start":4131,"end":4132},{"line":4120,"column":4123,"offset":4124},{"line":4120,"column":4133,"offset":4134},154,9331,{"start":4136,"end":4137},{"line":4120,"column":4123,"offset":4124},{"line":4120,"column":4133,"offset":4134},{"type":27,"value":4139,"position":4140}," (or ",{"start":4141,"end":4142},{"line":4120,"column":4133,"offset":4134},{"line":4120,"column":3945,"offset":4143},9336,{"type":31,"tagName":45,"properties":4145,"children":4146,"position":4154},{},[4147],{"type":27,"value":4148,"position":4149},"\"nan\"",{"start":4150,"end":4151},{"line":4120,"column":3945,"offset":4143},{"line":4120,"column":4152,"offset":4153},166,9343,{"start":4155,"end":4156},{"line":4120,"column":3945,"offset":4143},{"line":4120,"column":4152,"offset":4153},{"type":27,"value":4158,"position":4159},") on it and the grid densifies to one row per bar, with the fill on the quiet bars. On a secondary sparse input the same policies decide what the module sees on bars without an observation; the default carries the last value forward, which is right for a coarse candle and wrong for a volume you would double-count (",{"start":4160,"end":4161},{"line":4120,"column":4152,"offset":4153},{"line":4120,"column":4162,"offset":4163},482,9659,{"type":31,"tagName":451,"properties":4165,"children":4167,"position":4175},{"href":4166},"../core-concepts/data-sources.md",[4168],{"type":27,"value":4169,"position":4170},"Data sources",{"start":4171,"end":4173},{"line":4120,"column":599,"offset":4172},9660,{"line":4120,"column":499,"offset":4174},9672,{"start":4176,"end":4177},{"line":4120,"column":4162,"offset":4163},{"line":4120,"column":2512,"offset":4178},9707,{"type":27,"value":226,"position":4180},{"start":4181,"end":4182},{"line":4120,"column":2512,"offset":4178},{"line":4120,"column":4183,"offset":4184},532,9709,{"start":4186,"end":4187},{"line":4120,"column":21,"offset":4121},{"line":4120,"column":4183,"offset":4184},{"type":27,"value":28},{"type":31,"tagName":90,"properties":4190,"children":4191,"position":4200},{},[4192],{"type":27,"value":4193,"position":4194},"Performance optimization",{"start":4195,"end":4198},{"line":4196,"column":98,"offset":4197},138,9714,{"line":4196,"column":523,"offset":4199},9738,{"start":4201,"end":4203},{"line":4196,"column":21,"offset":4202},9711,{"line":4196,"column":523,"offset":4199},{"type":27,"value":28},{"type":31,"tagName":109,"properties":4206,"children":4207,"position":4216},{},[4208],{"type":27,"value":4209,"position":4210},"Avoid redundant calculations",{"start":4211,"end":4214},{"line":4212,"column":39,"offset":4213},140,9744,{"line":4212,"column":1568,"offset":4215},9772,{"start":4217,"end":4219},{"line":4212,"column":21,"offset":4218},9740,{"line":4212,"column":1568,"offset":4215},{"type":27,"value":28},{"type":31,"tagName":32,"properties":4222,"children":4223,"position":4252},{},[4224,4233,4245],{"type":27,"value":4225,"position":4226},"Compute a value once and keep it in a local for every output that needs it; do not fold the same input into two classes when one class and a copy will do. Loops are fine when they are bounded by a param with a declared ",{"start":4227,"end":4230},{"line":4228,"column":21,"offset":4229},142,9774,{"line":4228,"column":4231,"offset":4232},220,9993,{"type":31,"tagName":45,"properties":4234,"children":4235,"position":4242},{},[4236],{"type":27,"value":356,"position":4237},{"start":4238,"end":4239},{"line":4228,"column":4231,"offset":4232},{"line":4228,"column":4240,"offset":4241},225,9998,{"start":4243,"end":4244},{"line":4228,"column":4231,"offset":4232},{"line":4228,"column":4240,"offset":4241},{"type":27,"value":4246,"position":4247},"; a loop whose bound comes from history length is the thing to avoid.",{"start":4248,"end":4249},{"line":4228,"column":4240,"offset":4241},{"line":4228,"column":4250,"offset":4251},294,10067,{"start":4253,"end":4254},{"line":4228,"column":21,"offset":4229},{"line":4228,"column":4250,"offset":4251},{"type":27,"value":28},{"type":31,"tagName":109,"properties":4257,"children":4258,"position":4266},{},[4259],{"type":27,"value":4260,"position":4261},"Keep the row cheap",{"start":4262,"end":4264},{"line":40,"column":39,"offset":4263},10073,{"line":40,"column":327,"offset":4265},10091,{"start":4267,"end":4269},{"line":40,"column":21,"offset":4268},10069,{"line":40,"column":327,"offset":4265},{"type":27,"value":28},{"type":31,"tagName":32,"properties":4272,"children":4273,"position":4402},{},[4274,4287,4294,4307,4313,4325,4330,4342,4348,4359,4365,4377,4384,4396],{"type":31,"tagName":45,"properties":4275,"children":4276,"position":4284},{},[4277],{"type":27,"value":69,"position":4278},{"start":4279,"end":4282},{"line":4280,"column":21,"offset":4281},146,10093,{"line":4280,"column":562,"offset":4283},10102,{"start":4285,"end":4286},{"line":4280,"column":21,"offset":4281},{"line":4280,"column":562,"offset":4283},{"type":27,"value":4288,"position":4289}," should be arithmetic and writes. Building a string per bar is fine inside the string channel's shared buffer (",{"start":4290,"end":4291},{"line":4280,"column":562,"offset":4283},{"line":4280,"column":4292,"offset":4293},121,10213,{"type":31,"tagName":45,"properties":4295,"children":4296,"position":4304},{},[4297],{"type":27,"value":4298,"position":4299},"sb_clear",{"start":4300,"end":4301},{"line":4280,"column":4292,"offset":4293},{"line":4280,"column":4302,"offset":4303},131,10223,{"start":4305,"end":4306},{"line":4280,"column":4292,"offset":4293},{"line":4280,"column":4302,"offset":4303},{"type":27,"value":4308,"position":4309}," / ",{"start":4310,"end":4311},{"line":4280,"column":4302,"offset":4303},{"line":4280,"column":4094,"offset":4312},10226,{"type":31,"tagName":45,"properties":4314,"children":4315,"position":4322},{},[4316],{"type":27,"value":4317,"position":4318},"sb_text",{"start":4319,"end":4320},{"line":4280,"column":4094,"offset":4312},{"line":4280,"column":53,"offset":4321},10235,{"start":4323,"end":4324},{"line":4280,"column":4094,"offset":4312},{"line":4280,"column":53,"offset":4321},{"type":27,"value":4308,"position":4326},{"start":4327,"end":4328},{"line":4280,"column":53,"offset":4321},{"line":4280,"column":4280,"offset":4329},10238,{"type":31,"tagName":45,"properties":4331,"children":4332,"position":4339},{},[4333],{"type":27,"value":4334,"position":4335},"sb_f64",{"start":4336,"end":4337},{"line":4280,"column":4280,"offset":4329},{"line":4280,"column":4133,"offset":4338},10246,{"start":4340,"end":4341},{"line":4280,"column":4280,"offset":4329},{"line":4280,"column":4133,"offset":4338},{"type":27,"value":4343,"position":4344}," allocate nothing), but text built with ",{"start":4345,"end":4346},{"line":4280,"column":4133,"offset":4338},{"line":4280,"column":1952,"offset":4347},10286,{"type":31,"tagName":45,"properties":4349,"children":4350,"position":4356},{},[4351],{"type":27,"value":1236,"position":4352},{"start":4353,"end":4354},{"line":4280,"column":1952,"offset":4347},{"line":4280,"column":1453,"offset":4355},10289,{"start":4357,"end":4358},{"line":4280,"column":1952,"offset":4347},{"line":4280,"column":1453,"offset":4355},{"type":27,"value":2194,"position":4360},{"start":4361,"end":4362},{"line":4280,"column":1453,"offset":4355},{"line":4280,"column":4363,"offset":4364},201,10293,{"type":31,"tagName":45,"properties":4366,"children":4367,"position":4374},{},[4368],{"type":27,"value":4369,"position":4370},"toString()",{"start":4371,"end":4372},{"line":4280,"column":4363,"offset":4364},{"line":4280,"column":2800,"offset":4373},10305,{"start":4375,"end":4376},{"line":4280,"column":4363,"offset":4364},{"line":4280,"column":2800,"offset":4373},{"type":27,"value":4378,"position":4379}," allocates on every bar, and memory that grows once the bars start stops the run; build every per-bar line with ",{"start":4380,"end":4381},{"line":4280,"column":2800,"offset":4373},{"line":4280,"column":4382,"offset":4383},325,10417,{"type":31,"tagName":45,"properties":4385,"children":4386,"position":4393},{},[4387],{"type":27,"value":4388,"position":4389},"sb_*",{"start":4390,"end":4391},{"line":4280,"column":4382,"offset":4383},{"line":4280,"column":459,"offset":4392},10423,{"start":4394,"end":4395},{"line":4280,"column":4382,"offset":4383},{"line":4280,"column":459,"offset":4392},{"type":27,"value":1459,"position":4397},{"start":4398,"end":4399},{"line":4280,"column":459,"offset":4392},{"line":4280,"column":4400,"offset":4401},332,10424,{"start":4403,"end":4404},{"line":4280,"column":21,"offset":4281},{"line":4280,"column":4400,"offset":4401},{"type":27,"value":28},{"type":31,"tagName":90,"properties":4407,"children":4408,"position":4416},{},[4409],{"type":27,"value":4410,"position":4411},"Canvas cost",{"start":4412,"end":4414},{"line":2602,"column":98,"offset":4413},10429,{"line":2602,"column":246,"offset":4415},10440,{"start":4417,"end":4419},{"line":2602,"column":21,"offset":4418},10426,{"line":2602,"column":246,"offset":4415},{"type":27,"value":28},{"type":31,"tagName":32,"properties":4422,"children":4423,"position":4433},{},[4424],{"type":27,"value":4425,"position":4426},"A price canvas costs what it draws. A TPO costs rows x letters x the periods on screen: the chart folds every row from the candles and paints every letter as a block. The folding counts toward the \"is slowing your chart\" notice like your script's own time, and a live tick refolds only the forming period. On BTC at 15m the chart's 75-dollar rows make about 230 blocks a day; 1.5-dollar rows would make about 9,300.",{"start":4427,"end":4430},{"line":4428,"column":21,"offset":4429},150,10442,{"line":4428,"column":4431,"offset":4432},416,10857,{"start":4434,"end":4435},{"line":4428,"column":21,"offset":4429},{"line":4428,"column":4431,"offset":4432},{"type":27,"value":28},{"type":31,"tagName":109,"properties":4438,"children":4439,"position":4460},{},[4440,4448],{"type":27,"value":4441,"position":4442},"Prefer ",{"start":4443,"end":4446},{"line":4444,"column":39,"offset":4445},152,10863,{"line":4444,"column":1848,"offset":4447},10870,{"type":31,"tagName":45,"properties":4449,"children":4450,"position":4457},{},[4451],{"type":27,"value":4452,"position":4453},"\"auto\"",{"start":4454,"end":4455},{"line":4444,"column":1848,"offset":4447},{"line":4444,"column":2875,"offset":4456},10878,{"start":4458,"end":4459},{"line":4444,"column":1848,"offset":4447},{"line":4444,"column":2875,"offset":4456},{"start":4461,"end":4463},{"line":4444,"column":21,"offset":4462},10859,{"line":4444,"column":2875,"offset":4456},{"type":27,"value":28},{"type":31,"tagName":32,"properties":4466,"children":4467,"position":4552},{},[4468,4475,4487,4493,4504,4510,4522,4528,4546],{"type":27,"value":4469,"position":4470},"Leave ",{"start":4471,"end":4473},{"line":4133,"column":21,"offset":4472},10880,{"line":4133,"column":97,"offset":4474},10886,{"type":31,"tagName":45,"properties":4476,"children":4477,"position":4484},{},[4478],{"type":27,"value":4479,"position":4480},"row_height",{"start":4481,"end":4482},{"line":4133,"column":97,"offset":4474},{"line":4133,"column":512,"offset":4483},10898,{"start":4485,"end":4486},{"line":4133,"column":97,"offset":4474},{"line":4133,"column":512,"offset":4483},{"type":27,"value":4488,"position":4489}," out. ",{"start":4490,"end":4491},{"line":4133,"column":512,"offset":4483},{"line":4133,"column":2728,"offset":4492},10904,{"type":31,"tagName":45,"properties":4494,"children":4495,"position":4501},{},[4496],{"type":27,"value":4452,"position":4497},{"start":4498,"end":4499},{"line":4133,"column":2728,"offset":4492},{"line":4133,"column":1568,"offset":4500},10912,{"start":4502,"end":4503},{"line":4133,"column":2728,"offset":4492},{"line":4133,"column":1568,"offset":4500},{"type":27,"value":4505,"position":4506}," takes the row from what the chart serves for the market (the bucket width of your ",{"start":4507,"end":4508},{"line":4133,"column":1568,"offset":4500},{"line":4133,"column":2993,"offset":4509},10995,{"type":31,"tagName":45,"properties":4511,"children":4512,"position":4519},{},[4513],{"type":27,"value":4514,"position":4515},"cells",{"start":4516,"end":4517},{"line":4133,"column":2993,"offset":4509},{"line":4133,"column":2048,"offset":4518},11002,{"start":4520,"end":4521},{"line":4133,"column":2993,"offset":4509},{"line":4133,"column":2048,"offset":4518},{"type":27,"value":4523,"position":4524},", else the market's TPO or volume profile catalog) times the chart's row table, so your canvas draws the rows the chart's own footprint, TPO or profile would: on BTC at 15m, a TPO gets about 25 to 90 rows a day, each tall enough for its letters (",{"start":4525,"end":4526},{"line":4133,"column":2048,"offset":4518},{"line":4133,"column":4037,"offset":4527},11248,{"type":31,"tagName":451,"properties":4529,"children":4531,"position":4541},{"href":4530},"../presentation/price-canvases.md#row-height",[4532],{"type":27,"value":4533,"position":4534},"Row height",{"start":4535,"end":4538},{"line":4133,"column":4536,"offset":4537},370,11249,{"line":4133,"column":4539,"offset":4540},380,11259,{"start":4542,"end":4543},{"line":4133,"column":4037,"offset":4527},{"line":4133,"column":4544,"offset":4545},427,11306,{"type":27,"value":226,"position":4547},{"start":4548,"end":4549},{"line":4133,"column":4544,"offset":4545},{"line":4133,"column":4550,"offset":4551},429,11308,{"start":4553,"end":4554},{"line":4133,"column":21,"offset":4472},{"line":4133,"column":4550,"offset":4551},{"type":27,"value":28},{"type":31,"tagName":109,"properties":4557,"children":4558,"position":4567},{},[4559],{"type":27,"value":4560,"position":4561},"When to declare a number",{"start":4562,"end":4564},{"line":63,"column":39,"offset":4563},11314,{"line":63,"column":4565,"offset":4566},29,11338,{"start":4568,"end":4570},{"line":63,"column":21,"offset":4569},11310,{"line":63,"column":4565,"offset":4566},{"type":27,"value":28},{"type":31,"tagName":4573,"properties":4574,"children":4575,"position":4693},"ul",{},[4576,4577,4644,4645,4692],{"type":27,"value":28},{"type":31,"tagName":4578,"properties":4579,"children":4580,"position":4640},"li",{},[4581,4597,4603,4614,4620,4633],{"type":31,"tagName":146,"properties":4582,"children":4583,"position":4592},{},[4584],{"type":27,"value":4585,"position":4586},"A market with no catalog, whose tick you know.",{"start":4587,"end":4590},{"line":4588,"column":39,"offset":4589},158,11344,{"line":4588,"column":343,"offset":4591},11390,{"start":4593,"end":4595},{"line":4588,"column":154,"offset":4594},11342,{"line":4588,"column":267,"offset":4596},11392,{"type":27,"value":4598,"position":4599}," ",{"start":4600,"end":4601},{"line":4588,"column":267,"offset":4596},{"line":4588,"column":1492,"offset":4602},11393,{"type":31,"tagName":45,"properties":4604,"children":4605,"position":4611},{},[4606],{"type":27,"value":4452,"position":4607},{"start":4608,"end":4609},{"line":4588,"column":1492,"offset":4602},{"line":4588,"column":177,"offset":4610},11401,{"start":4612,"end":4613},{"line":4588,"column":1492,"offset":4602},{"line":4588,"column":177,"offset":4610},{"type":27,"value":4615,"position":4616}," falls back to a quarter of the median candle range there; a whole number of ticks (",{"start":4617,"end":4618},{"line":4588,"column":177,"offset":4610},{"line":4588,"column":4280,"offset":4619},11485,{"type":31,"tagName":45,"properties":4621,"children":4622,"position":4630},{},[4623],{"type":27,"value":4624,"position":4625},"row_height: 0.25",{"start":4626,"end":4627},{"line":4588,"column":4280,"offset":4619},{"line":4588,"column":4628,"offset":4629},164,11503,{"start":4631,"end":4632},{"line":4588,"column":4280,"offset":4619},{"line":4588,"column":4628,"offset":4629},{"type":27,"value":4634,"position":4635}," on a market that trades in 0.05 steps) keeps every row on a price the market can print.",{"start":4636,"end":4637},{"line":4588,"column":4628,"offset":4629},{"line":4588,"column":4638,"offset":4639},252,11591,{"start":4641,"end":4643},{"line":4588,"column":21,"offset":4642},11340,{"line":4588,"column":4638,"offset":4639},{"type":27,"value":28},{"type":31,"tagName":4578,"properties":4646,"children":4647,"position":4688},{},[4648,4664,4670,4682],{"type":31,"tagName":146,"properties":4649,"children":4650,"position":4658},{},[4651],{"type":27,"value":4652,"position":4653},"A deliberately coarse profile.",{"start":4654,"end":4656},{"line":3945,"column":39,"offset":4655},11596,{"line":3945,"column":2179,"offset":4657},11626,{"start":4659,"end":4661},{"line":3945,"column":154,"offset":4660},11594,{"line":3945,"column":4662,"offset":4663},37,11628,{"type":27,"value":4665,"position":4666}," Fewer, taller rows than auto, such as ",{"start":4667,"end":4668},{"line":3945,"column":4662,"offset":4663},{"line":3945,"column":2344,"offset":4669},11667,{"type":31,"tagName":45,"properties":4671,"children":4672,"position":4679},{},[4673],{"type":27,"value":4674,"position":4675},"row_height: 250",{"start":4676,"end":4677},{"line":3945,"column":2344,"offset":4669},{"line":3945,"column":2965,"offset":4678},11684,{"start":4680,"end":4681},{"line":3945,"column":2344,"offset":4669},{"line":3945,"column":2965,"offset":4678},{"type":27,"value":4683,"position":4684}," for a BTC day profile read at a glance.",{"start":4685,"end":4686},{"line":3945,"column":2965,"offset":4678},{"line":3945,"column":2247,"offset":4687},11724,{"start":4689,"end":4691},{"line":3945,"column":21,"offset":4690},11592,{"line":3945,"column":2247,"offset":4687},{"type":27,"value":28},{"start":4694,"end":4695},{"line":4588,"column":21,"offset":4642},{"line":3945,"column":2247,"offset":4687},{"type":27,"value":28},{"type":31,"tagName":32,"properties":4698,"children":4699,"position":4727},{},[4700,4708,4720],{"type":27,"value":4701,"position":4702},"Size the number from the range: a period's high minus its low, divided by ",{"start":4703,"end":4705},{"line":2286,"column":21,"offset":4704},11726,{"line":2286,"column":4706,"offset":4707},75,11800,{"type":31,"tagName":45,"properties":4709,"children":4710,"position":4717},{},[4711],{"type":27,"value":4479,"position":4712},{"start":4713,"end":4714},{"line":2286,"column":4706,"offset":4707},{"line":2286,"column":4715,"offset":4716},87,11812,{"start":4718,"end":4719},{"line":2286,"column":4706,"offset":4707},{"line":2286,"column":4715,"offset":4716},{"type":27,"value":4721,"position":4722},", is the rows it holds, and under 512 the chart keeps your height.",{"start":4723,"end":4724},{"line":2286,"column":4715,"offset":4716},{"line":2286,"column":4725,"offset":4726},153,11878,{"start":4728,"end":4729},{"line":2286,"column":21,"offset":4704},{"line":2286,"column":4725,"offset":4726},{"type":27,"value":28},{"type":31,"tagName":109,"properties":4732,"children":4733,"position":4741},{},[4734],{"type":27,"value":4735,"position":4736},"The coarsening notice",{"start":4737,"end":4739},{"line":2414,"column":39,"offset":4738},11884,{"line":2414,"column":119,"offset":4740},11905,{"start":4742,"end":4744},{"line":2414,"column":21,"offset":4743},11880,{"line":2414,"column":119,"offset":4740},{"type":27,"value":28},{"type":31,"tagName":32,"properties":4747,"children":4748,"position":4863},{},[4749,4763,4770,4781,4788,4800,4806,4818,4824,4837,4844,4856],{"type":31,"tagName":45,"properties":4750,"children":4751,"position":4760},{},[4752],{"type":27,"value":4753,"position":4754},"tpo 'tpo': row_height 1 coarsened to 8 (512 rows per day is the chart's limit)",{"start":4755,"end":4757},{"line":73,"column":21,"offset":4756},11907,{"line":73,"column":4758,"offset":4759},81,11987,{"start":4761,"end":4762},{"line":73,"column":21,"offset":4756},{"line":73,"column":4758,"offset":4759},{"type":27,"value":4764,"position":4765},", a warning row in the Console and the warning on the legend chip, means a period held more than 512 rows at the height you declared, so the chart doubled it until the period fit (at most 6 times). The TPO still draws, at the coarser height, and the notice repeats on every run. To clear it, declare the height it names or a larger one, or remove ",{"start":4766,"end":4767},{"line":73,"column":4758,"offset":4759},{"line":73,"column":4768,"offset":4769},428,12334,{"type":31,"tagName":45,"properties":4771,"children":4772,"position":4778},{},[4773],{"type":27,"value":4479,"position":4774},{"start":4775,"end":4776},{"line":73,"column":4768,"offset":4769},{"line":73,"column":123,"offset":4777},12346,{"start":4779,"end":4780},{"line":73,"column":4768,"offset":4769},{"line":73,"column":123,"offset":4777},{"type":27,"value":4782,"position":4783}," and let ",{"start":4784,"end":4785},{"line":73,"column":123,"offset":4777},{"line":73,"column":4786,"offset":4787},449,12355,{"type":31,"tagName":45,"properties":4789,"children":4790,"position":4797},{},[4791],{"type":27,"value":4452,"position":4792},{"start":4793,"end":4794},{"line":73,"column":4786,"offset":4787},{"line":73,"column":4795,"offset":4796},457,12363,{"start":4798,"end":4799},{"line":73,"column":4786,"offset":4787},{"line":73,"column":4795,"offset":4796},{"type":27,"value":4801,"position":4802}," pick. On ",{"start":4803,"end":4804},{"line":73,"column":4795,"offset":4796},{"line":73,"column":134,"offset":4805},12373,{"type":31,"tagName":45,"properties":4807,"children":4808,"position":4815},{},[4809],{"type":27,"value":4452,"position":4810},{"start":4811,"end":4812},{"line":73,"column":134,"offset":4805},{"line":73,"column":4813,"offset":4814},475,12381,{"start":4816,"end":4817},{"line":73,"column":134,"offset":4805},{"line":73,"column":4813,"offset":4814},{"type":27,"value":1121,"position":4819},{"start":4820,"end":4821},{"line":73,"column":4813,"offset":4814},{"line":73,"column":4822,"offset":4823},477,12383,{"type":31,"tagName":45,"properties":4825,"children":4826,"position":4834},{},[4827],{"type":27,"value":4828,"position":4829},"row_height auto coarsened from 1.5 to 12",{"start":4830,"end":4831},{"line":73,"column":4822,"offset":4823},{"line":73,"column":4832,"offset":4833},519,12425,{"start":4835,"end":4836},{"line":73,"column":4822,"offset":4823},{"line":73,"column":4832,"offset":4833},{"type":27,"value":4838,"position":4839},") the market's own unit is too fine for how far its price moves in a period: declare a ",{"start":4840,"end":4841},{"line":73,"column":4832,"offset":4833},{"line":73,"column":4842,"offset":4843},606,12512,{"type":31,"tagName":45,"properties":4845,"children":4846,"position":4853},{},[4847],{"type":27,"value":4479,"position":4848},{"start":4849,"end":4850},{"line":73,"column":4842,"offset":4843},{"line":73,"column":4851,"offset":4852},618,12524,{"start":4854,"end":4855},{"line":73,"column":4842,"offset":4843},{"line":73,"column":4851,"offset":4852},{"type":27,"value":4857,"position":4858}," of at least the height the notice names.",{"start":4859,"end":4860},{"line":73,"column":4851,"offset":4852},{"line":73,"column":4861,"offset":4862},659,12565,{"start":4864,"end":4865},{"line":73,"column":21,"offset":4756},{"line":73,"column":4861,"offset":4862},{"type":27,"value":28},{"type":31,"tagName":90,"properties":4868,"children":4869,"position":4878},{},[4870],{"type":27,"value":4871,"position":4872},"Code organization",{"start":4873,"end":4876},{"line":4874,"column":98,"offset":4875},167,12570,{"line":4874,"column":167,"offset":4877},12587,{"start":4879,"end":4881},{"line":4874,"column":21,"offset":4880},12567,{"line":4874,"column":167,"offset":4877},{"type":27,"value":28},{"type":31,"tagName":109,"properties":4884,"children":4885,"position":4893},{},[4886],{"type":27,"value":4887,"position":4888},"Group related code",{"start":4889,"end":4891},{"line":1924,"column":39,"offset":4890},12593,{"line":1924,"column":327,"offset":4892},12611,{"start":4894,"end":4896},{"line":1924,"column":21,"offset":4895},12589,{"line":1924,"column":327,"offset":4892},{"type":27,"value":28},{"type":31,"tagName":32,"properties":4899,"children":4900,"position":4943},{},[4901,4909,4920,4926,4937],{"type":27,"value":4902,"position":4903},"Read top to bottom: declarations, state, helpers, then ",{"start":4904,"end":4907},{"line":4905,"column":21,"offset":4906},171,12613,{"line":4905,"column":1565,"offset":4908},12668,{"type":31,"tagName":45,"properties":4910,"children":4911,"position":4917},{},[4912],{"type":27,"value":49,"position":4913},{"start":4914,"end":4915},{"line":4905,"column":1565,"offset":4908},{"line":4905,"column":541,"offset":4916},12679,{"start":4918,"end":4919},{"line":4905,"column":1565,"offset":4908},{"line":4905,"column":541,"offset":4916},{"type":27,"value":4921,"position":4922}," and ",{"start":4923,"end":4924},{"line":4905,"column":541,"offset":4916},{"line":4905,"column":2176,"offset":4925},12684,{"type":31,"tagName":45,"properties":4927,"children":4928,"position":4934},{},[4929],{"type":27,"value":69,"position":4930},{"start":4931,"end":4932},{"line":4905,"column":2176,"offset":4925},{"line":4905,"column":4758,"offset":4933},12693,{"start":4935,"end":4936},{"line":4905,"column":2176,"offset":4925},{"line":4905,"column":4758,"offset":4933},{"type":27,"value":4938,"position":4939}," in the order the chart calls them. A complete indicator laid out that way:",{"start":4940,"end":4941},{"line":4905,"column":4758,"offset":4933},{"line":4905,"column":63,"offset":4942},12768,{"start":4944,"end":4945},{"line":4905,"column":21,"offset":4906},{"line":4905,"column":63,"offset":4942},{"type":27,"value":28},{"type":14,"children":4948},[4949],{"type":31,"tagName":618,"properties":4950,"children":4952,"data":-1},{"class":620,"style":621,"tabindex":622,"data-sample":4951},"faq-structure",[4953],{"type":31,"tagName":45,"properties":4954,"children":4956},{"class":4955},[628],[4957,4965,4966,5021,5022,5078,5079,5117,5118,5164,5165,5214,5215,5235,5236,5239,5240,5248,5249,5286,5287,5323,5324,5353,5354,5357,5358,5366,5367,5394,5395,5436,5437,5478,5479,5503,5504,5511,5512,5515,5516,5543,5544,5571,5572,5602,5603,5632,5633,5663,5664,5692,5693,5706,5707,5720,5721,5742,5743,5785,5786],{"type":31,"tagName":631,"properties":4958,"children":4959},{"class":633},[4960],{"type":31,"tagName":631,"properties":4961,"children":4962},{"style":749},[4963],{"type":27,"value":4964},"// 1. Declarations: settings and outputs, each with the description the settings dialog and the Console prompt show.",{"type":27,"value":28},{"type":31,"tagName":631,"properties":4967,"children":4968},{"class":633},[4969,4973,4977,4982,4986,4991,4995,5000,5004,5008,5012,5017],{"type":31,"tagName":631,"properties":4970,"children":4971},{"style":637},[4972],{"type":27,"value":640},{"type":31,"tagName":631,"properties":4974,"children":4975},{"style":643},[4976],{"type":27,"value":646},{"type":31,"tagName":631,"properties":4978,"children":4979},{"style":649},[4980],{"type":27,"value":4981},"\"fast\"",{"type":31,"tagName":631,"properties":4983,"children":4984},{"style":643},[4985],{"type":27,"value":206},{"type":31,"tagName":631,"properties":4987,"children":4988},{"style":659},[4989],{"type":27,"value":4990},"9",{"type":31,"tagName":631,"properties":4992,"children":4993},{"style":643},[4994],{"type":27,"value":667},{"type":31,"tagName":631,"properties":4996,"children":4997},{"style":659},[4998],{"type":27,"value":4999},"2",{"type":31,"tagName":631,"properties":5001,"children":5002},{"style":643},[5003],{"type":27,"value":677},{"type":31,"tagName":631,"properties":5005,"children":5006},{"style":659},[5007],{"type":27,"value":662},{"type":31,"tagName":631,"properties":5009,"children":5010},{"style":643},[5011],{"type":27,"value":687},{"type":31,"tagName":631,"properties":5013,"children":5014},{"style":649},[5015],{"type":27,"value":5016},"\"Fast EMA length\"",{"type":31,"tagName":631,"properties":5018,"children":5019},{"style":643},[5020],{"type":27,"value":697},{"type":27,"value":28},{"type":31,"tagName":631,"properties":5023,"children":5024},{"class":633},[5025,5029,5033,5038,5042,5047,5051,5056,5060,5065,5069,5074],{"type":31,"tagName":631,"properties":5026,"children":5027},{"style":637},[5028],{"type":27,"value":640},{"type":31,"tagName":631,"properties":5030,"children":5031},{"style":643},[5032],{"type":27,"value":646},{"type":31,"tagName":631,"properties":5034,"children":5035},{"style":649},[5036],{"type":27,"value":5037},"\"slow\"",{"type":31,"tagName":631,"properties":5039,"children":5040},{"style":643},[5041],{"type":27,"value":206},{"type":31,"tagName":631,"properties":5043,"children":5044},{"style":659},[5045],{"type":27,"value":5046},"21",{"type":31,"tagName":631,"properties":5048,"children":5049},{"style":643},[5050],{"type":27,"value":667},{"type":31,"tagName":631,"properties":5052,"children":5053},{"style":659},[5054],{"type":27,"value":5055},"5",{"type":31,"tagName":631,"properties":5057,"children":5058},{"style":643},[5059],{"type":27,"value":677},{"type":31,"tagName":631,"properties":5061,"children":5062},{"style":659},[5063],{"type":27,"value":5064},"400",{"type":31,"tagName":631,"properties":5066,"children":5067},{"style":643},[5068],{"type":27,"value":687},{"type":31,"tagName":631,"properties":5070,"children":5071},{"style":649},[5072],{"type":27,"value":5073},"\"Slow EMA length\"",{"type":31,"tagName":631,"properties":5075,"children":5076},{"style":643},[5077],{"type":27,"value":697},{"type":27,"value":28},{"type":31,"tagName":631,"properties":5080,"children":5081},{"class":633},[5082,5086,5090,5094,5099,5104,5108,5113],{"type":31,"tagName":631,"properties":5083,"children":5084},{"style":637},[5085],{"type":27,"value":706},{"type":31,"tagName":631,"properties":5087,"children":5088},{"style":643},[5089],{"type":27,"value":646},{"type":31,"tagName":631,"properties":5091,"children":5092},{"style":649},[5093],{"type":27,"value":4981},{"type":31,"tagName":631,"properties":5095,"children":5096},{"style":643},[5097],{"type":27,"value":5098},", line, overlay, { color: ",{"type":31,"tagName":631,"properties":5100,"children":5101},{"style":649},[5102],{"type":27,"value":5103},"\"#38bdf8\"",{"type":31,"tagName":631,"properties":5105,"children":5106},{"style":643},[5107],{"type":27,"value":687},{"type":31,"tagName":631,"properties":5109,"children":5110},{"style":649},[5111],{"type":27,"value":5112},"\"Fast EMA\"",{"type":31,"tagName":631,"properties":5114,"children":5115},{"style":643},[5116],{"type":27,"value":697},{"type":27,"value":28},{"type":31,"tagName":631,"properties":5119,"children":5120},{"class":633},[5121,5125,5129,5133,5137,5142,5147,5151,5155,5160],{"type":31,"tagName":631,"properties":5122,"children":5123},{"style":637},[5124],{"type":27,"value":706},{"type":31,"tagName":631,"properties":5126,"children":5127},{"style":643},[5128],{"type":27,"value":646},{"type":31,"tagName":631,"properties":5130,"children":5131},{"style":649},[5132],{"type":27,"value":5037},{"type":31,"tagName":631,"properties":5134,"children":5135},{"style":643},[5136],{"type":27,"value":5098},{"type":31,"tagName":631,"properties":5138,"children":5139},{"style":649},[5140],{"type":27,"value":5141},"\"#f59e0b\"",{"type":31,"tagName":631,"properties":5143,"children":5144},{"style":643},[5145],{"type":27,"value":5146},", width: ",{"type":31,"tagName":631,"properties":5148,"children":5149},{"style":659},[5150],{"type":27,"value":4999},{"type":31,"tagName":631,"properties":5152,"children":5153},{"style":643},[5154],{"type":27,"value":687},{"type":31,"tagName":631,"properties":5156,"children":5157},{"style":649},[5158],{"type":27,"value":5159},"\"Slow EMA\"",{"type":31,"tagName":631,"properties":5161,"children":5162},{"style":643},[5163],{"type":27,"value":697},{"type":27,"value":28},{"type":31,"tagName":631,"properties":5166,"children":5167},{"class":633},[5168,5172,5176,5181,5186,5191,5196,5201,5205,5210],{"type":31,"tagName":631,"properties":5169,"children":5170},{"style":637},[5171],{"type":27,"value":706},{"type":31,"tagName":631,"properties":5173,"children":5174},{"style":643},[5175],{"type":27,"value":646},{"type":31,"tagName":631,"properties":5177,"children":5178},{"style":649},[5179],{"type":27,"value":5180},"\"entry\"",{"type":31,"tagName":631,"properties":5182,"children":5183},{"style":643},[5184],{"type":27,"value":5185},", shape, overlay, { color: ",{"type":31,"tagName":631,"properties":5187,"children":5188},{"style":649},[5189],{"type":27,"value":5190},"\"#22c55e\"",{"type":31,"tagName":631,"properties":5192,"children":5193},{"style":643},[5194],{"type":27,"value":5195},", shape_where: ",{"type":31,"tagName":631,"properties":5197,"children":5198},{"style":649},[5199],{"type":27,"value":5200},"\"is_entry\"",{"type":31,"tagName":631,"properties":5202,"children":5203},{"style":643},[5204],{"type":27,"value":687},{"type":31,"tagName":631,"properties":5206,"children":5207},{"style":649},[5208],{"type":27,"value":5209},"\"Fast crossed above slow\"",{"type":31,"tagName":631,"properties":5211,"children":5212},{"style":643},[5213],{"type":27,"value":697},{"type":27,"value":28},{"type":31,"tagName":631,"properties":5216,"children":5217},{"class":633},[5218,5222,5226,5230],{"type":31,"tagName":631,"properties":5219,"children":5220},{"style":637},[5221],{"type":27,"value":706},{"type":31,"tagName":631,"properties":5223,"children":5224},{"style":643},[5225],{"type":27,"value":646},{"type":31,"tagName":631,"properties":5227,"children":5228},{"style":649},[5229],{"type":27,"value":5200},{"type":31,"tagName":631,"properties":5231,"children":5232},{"style":643},[5233],{"type":27,"value":5234},", none);",{"type":27,"value":28},{"type":31,"tagName":631,"properties":5237,"children":5238},{"class":633},[],{"type":27,"value":28},{"type":31,"tagName":631,"properties":5241,"children":5242},{"class":633},[5243],{"type":31,"tagName":631,"properties":5244,"children":5245},{"style":749},[5246],{"type":27,"value":5247},"// 2. State: everything that lives between bars, with its starting value.",{"type":27,"value":28},{"type":31,"tagName":631,"properties":5250,"children":5251},{"class":633},[5252,5256,5261,5265,5269,5274,5278,5282],{"type":31,"tagName":631,"properties":5253,"children":5254},{"style":759},[5255],{"type":27,"value":163},{"type":31,"tagName":631,"properties":5257,"children":5258},{"style":643},[5259],{"type":27,"value":5260}," fast ",{"type":31,"tagName":631,"properties":5262,"children":5263},{"style":759},[5264],{"type":27,"value":988},{"type":31,"tagName":631,"properties":5266,"children":5267},{"style":759},[5268],{"type":27,"value":804},{"type":31,"tagName":631,"properties":5270,"children":5271},{"style":637},[5272],{"type":27,"value":5273}," Ema",{"type":31,"tagName":631,"properties":5275,"children":5276},{"style":643},[5277],{"type":27,"value":646},{"type":31,"tagName":631,"properties":5279,"children":5280},{"style":659},[5281],{"type":27,"value":4990},{"type":31,"tagName":631,"properties":5283,"children":5284},{"style":643},[5285],{"type":27,"value":834},{"type":27,"value":28},{"type":31,"tagName":631,"properties":5288,"children":5289},{"class":633},[5290,5294,5299,5303,5307,5311,5315,5319],{"type":31,"tagName":631,"properties":5291,"children":5292},{"style":759},[5293],{"type":27,"value":163},{"type":31,"tagName":631,"properties":5295,"children":5296},{"style":643},[5297],{"type":27,"value":5298}," slow ",{"type":31,"tagName":631,"properties":5300,"children":5301},{"style":759},[5302],{"type":27,"value":988},{"type":31,"tagName":631,"properties":5304,"children":5305},{"style":759},[5306],{"type":27,"value":804},{"type":31,"tagName":631,"properties":5308,"children":5309},{"style":637},[5310],{"type":27,"value":5273},{"type":31,"tagName":631,"properties":5312,"children":5313},{"style":643},[5314],{"type":27,"value":646},{"type":31,"tagName":631,"properties":5316,"children":5317},{"style":659},[5318],{"type":27,"value":5046},{"type":31,"tagName":631,"properties":5320,"children":5321},{"style":643},[5322],{"type":27,"value":834},{"type":27,"value":28},{"type":31,"tagName":631,"properties":5325,"children":5326},{"class":633},[5327,5331,5336,5340,5344,5349],{"type":31,"tagName":631,"properties":5328,"children":5329},{"style":759},[5330],{"type":27,"value":163},{"type":31,"tagName":631,"properties":5332,"children":5333},{"style":643},[5334],{"type":27,"value":5335}," cross ",{"type":31,"tagName":631,"properties":5337,"children":5338},{"style":759},[5339],{"type":27,"value":988},{"type":31,"tagName":631,"properties":5341,"children":5342},{"style":759},[5343],{"type":27,"value":804},{"type":31,"tagName":631,"properties":5345,"children":5346},{"style":637},[5347],{"type":27,"value":5348}," Cross",{"type":31,"tagName":631,"properties":5350,"children":5351},{"style":643},[5352],{"type":27,"value":1081},{"type":27,"value":28},{"type":31,"tagName":631,"properties":5355,"children":5356},{"class":633},[],{"type":27,"value":28},{"type":31,"tagName":631,"properties":5359,"children":5360},{"class":633},[5361],{"type":31,"tagName":631,"properties":5362,"children":5363},{"style":749},[5364],{"type":27,"value":5365},"// 3. Lifecycle: onStart reads settings, onBar folds the bar and writes the row.",{"type":27,"value":28},{"type":31,"tagName":631,"properties":5368,"children":5369},{"class":633},[5370,5374,5378,5382,5386,5390],{"type":31,"tagName":631,"properties":5371,"children":5372},{"style":759},[5373],{"type":27,"value":950},{"type":31,"tagName":631,"properties":5375,"children":5376},{"style":637},[5377],{"type":27,"value":955},{"type":31,"tagName":631,"properties":5379,"children":5380},{"style":643},[5381],{"type":27,"value":960},{"type":31,"tagName":631,"properties":5383,"children":5384},{"style":759},[5385],{"type":27,"value":852},{"type":31,"tagName":631,"properties":5387,"children":5388},{"style":659},[5389],{"type":27,"value":969},{"type":31,"tagName":631,"properties":5391,"children":5392},{"style":643},[5393],{"type":27,"value":974},{"type":27,"value":28},{"type":31,"tagName":631,"properties":5396,"children":5397},{"class":633},[5398,5403,5407,5411,5415,5419,5423,5427,5432],{"type":31,"tagName":631,"properties":5399,"children":5400},{"style":643},[5401],{"type":27,"value":5402},"  fast ",{"type":31,"tagName":631,"properties":5404,"children":5405},{"style":759},[5406],{"type":27,"value":988},{"type":31,"tagName":631,"properties":5408,"children":5409},{"style":759},[5410],{"type":27,"value":804},{"type":31,"tagName":631,"properties":5412,"children":5413},{"style":637},[5414],{"type":27,"value":5273},{"type":31,"tagName":631,"properties":5416,"children":5417},{"style":643},[5418],{"type":27,"value":646},{"type":31,"tagName":631,"properties":5420,"children":5421},{"style":637},[5422],{"type":27,"value":1872},{"type":31,"tagName":631,"properties":5424,"children":5425},{"style":643},[5426],{"type":27,"value":646},{"type":31,"tagName":631,"properties":5428,"children":5429},{"style":637},[5430],{"type":27,"value":5431},"p_fast",{"type":31,"tagName":631,"properties":5433,"children":5434},{"style":643},[5435],{"type":27,"value":3596},{"type":27,"value":28},{"type":31,"tagName":631,"properties":5438,"children":5439},{"class":633},[5440,5445,5449,5453,5457,5461,5465,5469,5474],{"type":31,"tagName":631,"properties":5441,"children":5442},{"style":643},[5443],{"type":27,"value":5444},"  slow ",{"type":31,"tagName":631,"properties":5446,"children":5447},{"style":759},[5448],{"type":27,"value":988},{"type":31,"tagName":631,"properties":5450,"children":5451},{"style":759},[5452],{"type":27,"value":804},{"type":31,"tagName":631,"properties":5454,"children":5455},{"style":637},[5456],{"type":27,"value":5273},{"type":31,"tagName":631,"properties":5458,"children":5459},{"style":643},[5460],{"type":27,"value":646},{"type":31,"tagName":631,"properties":5462,"children":5463},{"style":637},[5464],{"type":27,"value":1872},{"type":31,"tagName":631,"properties":5466,"children":5467},{"style":643},[5468],{"type":27,"value":646},{"type":31,"tagName":631,"properties":5470,"children":5471},{"style":637},[5472],{"type":27,"value":5473},"p_slow",{"type":31,"tagName":631,"properties":5475,"children":5476},{"style":643},[5477],{"type":27,"value":3596},{"type":27,"value":28},{"type":31,"tagName":631,"properties":5480,"children":5481},{"class":633},[5482,5487,5491,5495,5499],{"type":31,"tagName":631,"properties":5483,"children":5484},{"style":643},[5485],{"type":27,"value":5486},"  cross ",{"type":31,"tagName":631,"properties":5488,"children":5489},{"style":759},[5490],{"type":27,"value":988},{"type":31,"tagName":631,"properties":5492,"children":5493},{"style":759},[5494],{"type":27,"value":804},{"type":31,"tagName":631,"properties":5496,"children":5497},{"style":637},[5498],{"type":27,"value":5348},{"type":31,"tagName":631,"properties":5500,"children":5501},{"style":643},[5502],{"type":27,"value":1081},{"type":27,"value":28},{"type":31,"tagName":631,"properties":5505,"children":5506},{"class":633},[5507],{"type":31,"tagName":631,"properties":5508,"children":5509},{"style":643},[5510],{"type":27,"value":1015},{"type":27,"value":28},{"type":31,"tagName":631,"properties":5513,"children":5514},{"class":633},[],{"type":27,"value":28},{"type":31,"tagName":631,"properties":5517,"children":5518},{"class":633},[5519,5523,5527,5531,5535,5539],{"type":31,"tagName":631,"properties":5520,"children":5521},{"style":759},[5522],{"type":27,"value":950},{"type":31,"tagName":631,"properties":5524,"children":5525},{"style":637},[5526],{"type":27,"value":1032},{"type":31,"tagName":631,"properties":5528,"children":5529},{"style":643},[5530],{"type":27,"value":960},{"type":31,"tagName":631,"properties":5532,"children":5533},{"style":759},[5534],{"type":27,"value":852},{"type":31,"tagName":631,"properties":5536,"children":5537},{"style":659},[5538],{"type":27,"value":969},{"type":31,"tagName":631,"properties":5540,"children":5541},{"style":643},[5542],{"type":27,"value":974},{"type":27,"value":28},{"type":31,"tagName":631,"properties":5545,"children":5546},{"class":633},[5547,5551,5555,5559,5563,5567],{"type":31,"tagName":631,"properties":5548,"children":5549},{"style":759},[5550],{"type":27,"value":1057},{"type":31,"tagName":631,"properties":5552,"children":5553},{"style":659},[5554],{"type":27,"value":1062},{"type":31,"tagName":631,"properties":5556,"children":5557},{"style":759},[5558],{"type":27,"value":772},{"type":31,"tagName":631,"properties":5560,"children":5561},{"style":643},[5562],{"type":27,"value":1071},{"type":31,"tagName":631,"properties":5564,"children":5565},{"style":637},[5566],{"type":27,"value":1076},{"type":31,"tagName":631,"properties":5568,"children":5569},{"style":643},[5570],{"type":27,"value":1081},{"type":27,"value":28},{"type":31,"tagName":631,"properties":5573,"children":5574},{"class":633},[5575,5579,5584,5588,5593,5597],{"type":31,"tagName":631,"properties":5576,"children":5577},{"style":759},[5578],{"type":27,"value":1057},{"type":31,"tagName":631,"properties":5580,"children":5581},{"style":659},[5582],{"type":27,"value":5583}," fastValue",{"type":31,"tagName":631,"properties":5585,"children":5586},{"style":759},[5587],{"type":27,"value":772},{"type":31,"tagName":631,"properties":5589,"children":5590},{"style":643},[5591],{"type":27,"value":5592}," fast.",{"type":31,"tagName":631,"properties":5594,"children":5595},{"style":637},[5596],{"type":27,"value":3744},{"type":31,"tagName":631,"properties":5598,"children":5599},{"style":643},[5600],{"type":27,"value":5601},"(close);",{"type":27,"value":28},{"type":31,"tagName":631,"properties":5604,"children":5605},{"class":633},[5606,5610,5615,5619,5624,5628],{"type":31,"tagName":631,"properties":5607,"children":5608},{"style":759},[5609],{"type":27,"value":1057},{"type":31,"tagName":631,"properties":5611,"children":5612},{"style":659},[5613],{"type":27,"value":5614}," slowValue",{"type":31,"tagName":631,"properties":5616,"children":5617},{"style":759},[5618],{"type":27,"value":772},{"type":31,"tagName":631,"properties":5620,"children":5621},{"style":643},[5622],{"type":27,"value":5623}," slow.",{"type":31,"tagName":631,"properties":5625,"children":5626},{"style":637},[5627],{"type":27,"value":3744},{"type":31,"tagName":631,"properties":5629,"children":5630},{"style":643},[5631],{"type":27,"value":5601},{"type":27,"value":28},{"type":31,"tagName":631,"properties":5634,"children":5635},{"class":633},[5636,5640,5645,5649,5654,5658],{"type":31,"tagName":631,"properties":5637,"children":5638},{"style":759},[5639],{"type":27,"value":1057},{"type":31,"tagName":631,"properties":5641,"children":5642},{"style":659},[5643],{"type":27,"value":5644}," crossed",{"type":31,"tagName":631,"properties":5646,"children":5647},{"style":759},[5648],{"type":27,"value":772},{"type":31,"tagName":631,"properties":5650,"children":5651},{"style":643},[5652],{"type":27,"value":5653}," cross.",{"type":31,"tagName":631,"properties":5655,"children":5656},{"style":637},[5657],{"type":27,"value":3744},{"type":31,"tagName":631,"properties":5659,"children":5660},{"style":643},[5661],{"type":27,"value":5662},"(fastValue, slowValue);",{"type":27,"value":28},{"type":31,"tagName":631,"properties":5665,"children":5666},{"class":633},[5667,5671,5675,5679,5684,5688],{"type":31,"tagName":631,"properties":5668,"children":5669},{"style":759},[5670],{"type":27,"value":1263},{"type":31,"tagName":631,"properties":5672,"children":5673},{"style":643},[5674],{"type":27,"value":1121},{"type":31,"tagName":631,"properties":5676,"children":5677},{"style":637},[5678],{"type":27,"value":3829},{"type":31,"tagName":631,"properties":5680,"children":5681},{"style":643},[5682],{"type":27,"value":5683},"(slowValue)) ",{"type":31,"tagName":631,"properties":5685,"children":5686},{"style":759},[5687],{"type":27,"value":1315},{"type":31,"tagName":631,"properties":5689,"children":5690},{"style":643},[5691],{"type":27,"value":782},{"type":27,"value":28},{"type":31,"tagName":631,"properties":5694,"children":5695},{"class":633},[5696,5701],{"type":31,"tagName":631,"properties":5697,"children":5698},{"style":637},[5699],{"type":27,"value":5700},"  out_fast",{"type":31,"tagName":631,"properties":5702,"children":5703},{"style":643},[5704],{"type":27,"value":5705},"(fastValue);",{"type":27,"value":28},{"type":31,"tagName":631,"properties":5708,"children":5709},{"class":633},[5710,5715],{"type":31,"tagName":631,"properties":5711,"children":5712},{"style":637},[5713],{"type":27,"value":5714},"  out_slow",{"type":31,"tagName":631,"properties":5716,"children":5717},{"style":643},[5718],{"type":27,"value":5719},"(slowValue);",{"type":27,"value":28},{"type":31,"tagName":631,"properties":5722,"children":5723},{"class":633},[5724,5729,5733,5738],{"type":31,"tagName":631,"properties":5725,"children":5726},{"style":637},[5727],{"type":27,"value":5728},"  out_entry",{"type":31,"tagName":631,"properties":5730,"children":5731},{"style":643},[5732],{"type":27,"value":3799},{"type":31,"tagName":631,"properties":5734,"children":5735},{"style":637},[5736],{"type":27,"value":5737},"low",{"type":31,"tagName":631,"properties":5739,"children":5740},{"style":643},[5741],{"type":27,"value":1006},{"type":27,"value":28},{"type":31,"tagName":631,"properties":5744,"children":5745},{"class":633},[5746,5751,5756,5760,5764,5768,5773,5777,5781],{"type":31,"tagName":631,"properties":5747,"children":5748},{"style":637},[5749],{"type":27,"value":5750},"  out_is_entry",{"type":31,"tagName":631,"properties":5752,"children":5753},{"style":643},[5754],{"type":27,"value":5755},"(crossed ",{"type":31,"tagName":631,"properties":5757,"children":5758},{"style":759},[5759],{"type":27,"value":3367},{"type":31,"tagName":631,"properties":5761,"children":5762},{"style":659},[5763],{"type":27,"value":1191},{"type":31,"tagName":631,"properties":5765,"children":5766},{"style":759},[5767],{"type":27,"value":3377},{"type":31,"tagName":631,"properties":5769,"children":5770},{"style":659},[5771],{"type":27,"value":5772}," 1.0",{"type":31,"tagName":631,"properties":5774,"children":5775},{"style":759},[5776],{"type":27,"value":3387},{"type":31,"tagName":631,"properties":5778,"children":5779},{"style":659},[5780],{"type":27,"value":3372},{"type":31,"tagName":631,"properties":5782,"children":5783},{"style":643},[5784],{"type":27,"value":834},{"type":27,"value":28},{"type":31,"tagName":631,"properties":5787,"children":5788},{"class":633},[5789],{"type":31,"tagName":631,"properties":5790,"children":5791},{"style":643},[5792],{"type":27,"value":1015},{"type":27,"value":28},{"type":31,"tagName":109,"properties":5795,"children":5796,"position":5805},{},[5797],{"type":27,"value":5798,"position":5799},"Comment the why",{"start":5800,"end":5803},{"line":5801,"column":39,"offset":5802},207,14070,{"line":5801,"column":2875,"offset":5804},14085,{"start":5806,"end":5808},{"line":5801,"column":21,"offset":5807},14066,{"line":5801,"column":2875,"offset":5804},{"type":27,"value":28},{"type":31,"tagName":32,"properties":5811,"children":5812,"position":5856},{},[5813,5821,5832,5838,5849],{"type":27,"value":5814,"position":5815},"The declarations already say what the indicator reads and writes, and the accessors keep the code readable, so comments earn their place explaining a decision: why a bucket folds in only on the next bucket's first bar, why a session that was already running stays ",{"start":5816,"end":5818},{"line":2066,"column":21,"offset":5817},14087,{"line":2066,"column":5819,"offset":5820},265,14351,{"type":31,"tagName":45,"properties":5822,"children":5823,"position":5829},{},[5824],{"type":27,"value":2017,"position":5825},{"start":5826,"end":5827},{"line":2066,"column":5819,"offset":5820},{"line":2066,"column":2305,"offset":5828},14356,{"start":5830,"end":5831},{"line":2066,"column":5819,"offset":5820},{"line":2066,"column":2305,"offset":5828},{"type":27,"value":5833,"position":5834},", why a pinned input reads ",{"start":5835,"end":5836},{"line":2066,"column":2305,"offset":5828},{"line":2066,"column":1495,"offset":5837},14383,{"type":31,"tagName":45,"properties":5839,"children":5840,"position":5846},{},[5841],{"type":27,"value":2017,"position":5842},{"start":5843,"end":5844},{"line":2066,"column":1495,"offset":5837},{"line":2066,"column":1504,"offset":5845},14388,{"start":5847,"end":5848},{"line":2066,"column":1495,"offset":5837},{"line":2066,"column":1504,"offset":5845},{"type":27,"value":5850,"position":5851}," on a stock chart. The cookbook recipes are written that way.",{"start":5852,"end":5853},{"line":2066,"column":1504,"offset":5845},{"line":2066,"column":5854,"offset":5855},363,14449,{"start":5857,"end":5858},{"line":2066,"column":21,"offset":5817},{"line":2066,"column":5854,"offset":5855},{"quirksMode":5860},false,{"start":5862,"end":5863},{"line":21,"column":21,"offset":22},{"line":2432,"column":21,"offset":5864},14450,1791265225521]