[{"data":1,"prerenderedAt":1324},["ShallowReactive",2],{"indicators:faq/limitations":3},{"slug":4,"filePath":5,"frontmatter":6,"rawMarkdown":11,"tree":12},"faq/limitations","faq/limitations.md",{"title":7,"description":8,"order":9,"section":10},"Limitations","What an Indicator does not do yet, and where to find the numbers. An Indicator is a sandboxed, declared computation over market data; a few things a kScript…",73,"faq","---\ntitle: \"Limitations\"\ndescription: \"What an Indicator does not do yet, and where to find the numbers. An Indicator is a sandboxed, declared computation over market data; a few things a kScript…\"\norder: 73\nsection: \"faq\"\n---\n\n\u003C!-- source: docs/indicators/faq/limitations.md; generated by packages/cli/scripts/gen-indicator-docs.ts, do not edit -->\n\n# Limitations\n\nWhat an Indicator does not do yet, and where to find the numbers. An Indicator is a sandboxed, declared computation over market data; a few things a kScript (legacy) does are deliberately out of scope today, and knowing them up front saves you from designing around a feature that is not there.\n\n## Not supported today\n\n**Numbers only in outputs.** Every output is a 64-bit float and `NaN` is the one \"nothing here\" value. Text reaches the chart only through string slots and renderers under the second runtime contract; a color, a symbol string, or a free-text setting has no param form (every param is a number). Decisions are numbers too: `1` or `0` in a data-only output, turned into a look by the sheet.\n\n**No handles to drawn shapes.** Boxes and segments are declared once and evaluated on every bar; there is no object to move, extend, or delete later, and no growing collection of them (16 boxes and 16 segments per sheet). A shape that should end is a `when` gate that turns `0`, and the bars it was alive on stay drawn. A kScript that mutates drawings stays on the kScript engine ([Drawing objects](../functions/drawing-objects.md)).\n\n**Tape is live only.** The daemon's `tape` buffer requires `min_size` and serves individual prints. Historical tape and pre-bucketed order-size bands remain unavailable: `history` must be `\"0\"`, and `trade_volume_by_size` still refuses by name. Side-split aggregate volume remains the scalar `trades` source ([Data sources](../core-concepts/data-sources.md#live-tape)).\n\n**The chart ignores pins.** In the browser every input reads the chart's own market and interval; `symbol`, `exchange`, and `interval` pins are honored on your machine only. A cross-venue or higher-timeframe package is a package for your machine, and a higher timeframe on the chart is a bucket fold inside the module ([Multi-timeframe](../core-concepts/multi-timeframe.md)).\n\n**`range()` is not drawn on the chart.** A declared range validates and installs, and scalar surfaces ignore it as designed, but the chart does not render it yet; shade a band with a box on every bar instead. `fills` exists only in hand-written sheets.\n\n**No alerts from the chart yet.** Alerts armed from the chart on a published Indicator are behind a flag today. The supported path is a watch on the metric id from your machine: `om watch create` with a level or an edge condition on `wrun/@scope/name/\u003Coutput>` ([Alerts](../functions/alerts.md)).\n\n**Screens and backtests refuse celled packages.** A package with a `volume_profile` or `book` input runs on the chart, in watches, and under `om metric get` / `om metric series`, but `om metric screen` and `om backtest` refuse it by name: their replay and fan-out paths carry no cell blocks yet.\n\n**No history array.** `state()` sees one bar. There is no `close[1]`; the previous value is a variable you kept, and a window is a ring buffer you fill. This is also why an Indicator cannot look ahead by accident ([Execution model](../core-concepts/execution-model.md)).\n\n**No persistence across runs.** Module state lives for one evaluation and is restored by `reset()` for the forming bar. Nothing survives a reload or carries from one run to the next; anything you need next time is recomputed from the loaded history.\n\n**No cross-Indicator communication on the chart.** Two overlays on the same chart do not share state. On your machine a hand-written sheet can compose an installed package's output as an input (a metric source); the chart does not compose.\n\n**No execution from the file.** The module has no filesystem, no network, and no order capability. A watch on the metric can carry an execute action; that authorization lives on the watch and never in the Indicator.\n\n## Named refusals\n\nEach gap that a surface can hit at runtime is a typed refusal, so the message names the way out:\n\n```text\nwrun_cells_unavailable          a celled input reads a class this data plane does not serve\nwrun_celled_metric_unsupported  a backtest or screen was asked to evaluate a celled package\nwrun_cell_block_too_large       a bar's block exceeds the input's max_cells (never truncated)\nwrun_preview_displacement_unsupported  chart preview of an output with displacement_bars\nwrun_source_set_generated       a sheet edit on a code-first workspace (edit the declaration)\nwrun_render_result_too_large    the expanded render selection passed 2 MiB in one run\n```\n\n[Common errors](common-errors.md) lists each one with its cause and fix.\n\n## Sandbox limits\n\nEvery Indicator runs under fixed ceilings so one module cannot exhaust the chart or the daemon: 16 boxes and 16 segments per sheet, 32 renderers, 64 drawings, 64 polyline points, 64 string slots of at most 4096 bytes each, 64 KiB of strings per row and 8 MiB per run, bar offsets within -500..500, a 4 MiB default memory ceiling, and the `max_cells` contract on every celled input. The full table, with the exact refusal for each, is in the [Limits reference](../reference/limits.md).\n\n## Build and runtime errors\n\nFor the messages you hit while writing an Indicator (a coordinate passed as a string instead of a handle, a param option that does not exist, a missing cast, a sheet field out of range, the four-export contract), see [Common errors](common-errors.md). Each one is listed by its exact text with a cause and a fix.\n",{"type":13,"children":14,"data":1317,"position":1319},"root",[15,25,28,29,46,47,66,67,161,162,256,257,429,430,544,545,609,610,703,704,853,854,946,947,995,996,1026,1027,1054,1055,1072,1073,1088,1089,1155,1156,1186,1187,1203,1204,1262,1263,1278,1279],{"type":16,"value":17,"position":18},"comment"," source: docs/indicators/faq/limitations.md; generated by packages/cli/scripts/gen-indicator-docs.ts, do not edit ",{"start":19,"end":22},{"line":20,"column":20,"offset":21},1,0,{"line":20,"column":23,"offset":24},122,121,{"type":26,"value":27},"text","\n",{"type":26,"value":27},{"type":30,"tagName":31,"properties":32,"children":33,"position":43},"element","p",{},[34],{"type":26,"value":35,"position":36},"What an Indicator does not do yet, and where to find the numbers. An Indicator is a sandboxed, declared computation over market data; a few things a kScript (legacy) does are deliberately out of scope today, and knowing them up front saves you from designing around a feature that is not there.",{"start":37,"end":40},{"line":38,"column":20,"offset":39},5,138,{"line":38,"column":41,"offset":42},295,432,{"start":44,"end":45},{"line":38,"column":20,"offset":39},{"line":38,"column":41,"offset":42},{"type":26,"value":27},{"type":30,"tagName":48,"properties":49,"children":51,"position":62},"h2",{"id":50},"not-supported-today",[52],{"type":26,"value":53,"position":54},"Not supported today",{"start":55,"end":59},{"line":56,"column":57,"offset":58},7,4,437,{"line":56,"column":60,"offset":61},23,456,{"start":63,"end":65},{"line":56,"column":20,"offset":64},434,{"line":56,"column":60,"offset":61},{"type":26,"value":27},{"type":30,"tagName":31,"properties":68,"children":69,"position":158},{},[70,90,97,111,118,131,138,151],{"type":30,"tagName":71,"properties":72,"children":73,"position":84},"strong",{},[74],{"type":26,"value":75,"position":76},"Numbers only in outputs.",{"start":77,"end":81},{"line":78,"column":79,"offset":80},9,3,460,{"line":78,"column":82,"offset":83},27,484,{"start":85,"end":87},{"line":78,"column":20,"offset":86},458,{"line":78,"column":88,"offset":89},29,486,{"type":26,"value":91,"position":92}," Every output is a 64-bit float and ",{"start":93,"end":94},{"line":78,"column":88,"offset":89},{"line":78,"column":95,"offset":96},65,522,{"type":30,"tagName":98,"properties":99,"children":100,"position":108},"code",{},[101],{"type":26,"value":102,"position":103},"NaN",{"start":104,"end":105},{"line":78,"column":95,"offset":96},{"line":78,"column":106,"offset":107},70,527,{"start":109,"end":110},{"line":78,"column":95,"offset":96},{"line":78,"column":106,"offset":107},{"type":26,"value":112,"position":113}," is the one \"nothing here\" value. Text reaches the chart only through string slots and renderers under the second runtime contract; a color, a symbol string, or a free-text setting has no param form (every param is a number). Decisions are numbers too: ",{"start":114,"end":115},{"line":78,"column":106,"offset":107},{"line":78,"column":116,"offset":117},323,780,{"type":30,"tagName":98,"properties":119,"children":120,"position":128},{},[121],{"type":26,"value":122,"position":123},"1",{"start":124,"end":125},{"line":78,"column":116,"offset":117},{"line":78,"column":126,"offset":127},326,783,{"start":129,"end":130},{"line":78,"column":116,"offset":117},{"line":78,"column":126,"offset":127},{"type":26,"value":132,"position":133}," or ",{"start":134,"end":135},{"line":78,"column":126,"offset":127},{"line":78,"column":136,"offset":137},330,787,{"type":30,"tagName":98,"properties":139,"children":140,"position":148},{},[141],{"type":26,"value":142,"position":143},"0",{"start":144,"end":145},{"line":78,"column":136,"offset":137},{"line":78,"column":146,"offset":147},333,790,{"start":149,"end":150},{"line":78,"column":136,"offset":137},{"line":78,"column":146,"offset":147},{"type":26,"value":152,"position":153}," in a data-only output, turned into a look by the sheet.",{"start":154,"end":155},{"line":78,"column":146,"offset":147},{"line":78,"column":156,"offset":157},389,846,{"start":159,"end":160},{"line":78,"column":20,"offset":86},{"line":78,"column":156,"offset":157},{"type":26,"value":27},{"type":30,"tagName":31,"properties":163,"children":164,"position":253},{},[165,183,190,203,210,222,229,247],{"type":30,"tagName":71,"properties":166,"children":167,"position":177},{},[168],{"type":26,"value":169,"position":170},"No handles to drawn shapes.",{"start":171,"end":174},{"line":172,"column":79,"offset":173},11,850,{"line":172,"column":175,"offset":176},30,877,{"start":178,"end":180},{"line":172,"column":20,"offset":179},848,{"line":172,"column":181,"offset":182},32,879,{"type":26,"value":184,"position":185}," Boxes and segments are declared once and evaluated on every bar; there is no object to move, extend, or delete later, and no growing collection of them (16 boxes and 16 segments per sheet). A shape that should end is a ",{"start":186,"end":187},{"line":172,"column":181,"offset":182},{"line":172,"column":188,"offset":189},252,1099,{"type":30,"tagName":98,"properties":191,"children":192,"position":200},{},[193],{"type":26,"value":194,"position":195},"when",{"start":196,"end":197},{"line":172,"column":188,"offset":189},{"line":172,"column":198,"offset":199},258,1105,{"start":201,"end":202},{"line":172,"column":188,"offset":189},{"line":172,"column":198,"offset":199},{"type":26,"value":204,"position":205}," gate that turns ",{"start":206,"end":207},{"line":172,"column":198,"offset":199},{"line":172,"column":208,"offset":209},275,1122,{"type":30,"tagName":98,"properties":211,"children":212,"position":219},{},[213],{"type":26,"value":142,"position":214},{"start":215,"end":216},{"line":172,"column":208,"offset":209},{"line":172,"column":217,"offset":218},278,1125,{"start":220,"end":221},{"line":172,"column":208,"offset":209},{"line":172,"column":217,"offset":218},{"type":26,"value":223,"position":224},", and the bars it was alive on stay drawn. A kScript that mutates drawings stays on the kScript engine (",{"start":225,"end":226},{"line":172,"column":217,"offset":218},{"line":172,"column":227,"offset":228},382,1229,{"type":30,"tagName":230,"properties":231,"children":233,"position":243},"a",{"href":232},"../functions/drawing-objects.md",[234],{"type":26,"value":235,"position":236},"Drawing objects",{"start":237,"end":240},{"line":172,"column":238,"offset":239},383,1230,{"line":172,"column":241,"offset":242},398,1245,{"start":244,"end":245},{"line":172,"column":227,"offset":228},{"line":172,"column":42,"offset":246},1279,{"type":26,"value":248,"position":249},").",{"start":250,"end":251},{"line":172,"column":42,"offset":246},{"line":172,"column":64,"offset":252},1281,{"start":254,"end":255},{"line":172,"column":20,"offset":179},{"line":172,"column":64,"offset":252},{"type":26,"value":27},{"type":30,"tagName":31,"properties":258,"children":259,"position":426},{},[260,277,284,297,304,316,323,336,343,356,363,376,383,396,403,420],{"type":30,"tagName":71,"properties":261,"children":262,"position":272},{},[263],{"type":26,"value":264,"position":265},"Tape is live only.",{"start":266,"end":269},{"line":267,"column":79,"offset":268},13,1285,{"line":267,"column":270,"offset":271},21,1303,{"start":273,"end":275},{"line":267,"column":20,"offset":274},1283,{"line":267,"column":60,"offset":276},1305,{"type":26,"value":278,"position":279}," The daemon's ",{"start":280,"end":281},{"line":267,"column":60,"offset":276},{"line":267,"column":282,"offset":283},37,1319,{"type":30,"tagName":98,"properties":285,"children":286,"position":294},{},[287],{"type":26,"value":288,"position":289},"tape",{"start":290,"end":291},{"line":267,"column":282,"offset":283},{"line":267,"column":292,"offset":293},43,1325,{"start":295,"end":296},{"line":267,"column":282,"offset":283},{"line":267,"column":292,"offset":293},{"type":26,"value":298,"position":299}," buffer requires ",{"start":300,"end":301},{"line":267,"column":292,"offset":293},{"line":267,"column":302,"offset":303},60,1342,{"type":30,"tagName":98,"properties":305,"children":306,"position":313},{},[307],{"type":26,"value":308,"position":309},"min_size",{"start":310,"end":311},{"line":267,"column":302,"offset":303},{"line":267,"column":106,"offset":312},1352,{"start":314,"end":315},{"line":267,"column":302,"offset":303},{"line":267,"column":106,"offset":312},{"type":26,"value":317,"position":318}," and serves individual prints. Historical tape and pre-bucketed order-size bands remain unavailable: ",{"start":319,"end":320},{"line":267,"column":106,"offset":312},{"line":267,"column":321,"offset":322},171,1453,{"type":30,"tagName":98,"properties":324,"children":325,"position":333},{},[326],{"type":26,"value":327,"position":328},"history",{"start":329,"end":330},{"line":267,"column":321,"offset":322},{"line":267,"column":331,"offset":332},180,1462,{"start":334,"end":335},{"line":267,"column":321,"offset":322},{"line":267,"column":331,"offset":332},{"type":26,"value":337,"position":338}," must be ",{"start":339,"end":340},{"line":267,"column":331,"offset":332},{"line":267,"column":341,"offset":342},189,1471,{"type":30,"tagName":98,"properties":344,"children":345,"position":353},{},[346],{"type":26,"value":347,"position":348},"\"0\"",{"start":349,"end":350},{"line":267,"column":341,"offset":342},{"line":267,"column":351,"offset":352},194,1476,{"start":354,"end":355},{"line":267,"column":341,"offset":342},{"line":267,"column":351,"offset":352},{"type":26,"value":357,"position":358},", and ",{"start":359,"end":360},{"line":267,"column":351,"offset":352},{"line":267,"column":361,"offset":362},200,1482,{"type":30,"tagName":98,"properties":364,"children":365,"position":373},{},[366],{"type":26,"value":367,"position":368},"trade_volume_by_size",{"start":369,"end":370},{"line":267,"column":361,"offset":362},{"line":267,"column":371,"offset":372},222,1504,{"start":374,"end":375},{"line":267,"column":361,"offset":362},{"line":267,"column":371,"offset":372},{"type":26,"value":377,"position":378}," still refuses by name. Side-split aggregate volume remains the scalar ",{"start":379,"end":380},{"line":267,"column":371,"offset":372},{"line":267,"column":381,"offset":382},293,1575,{"type":30,"tagName":98,"properties":384,"children":385,"position":393},{},[386],{"type":26,"value":387,"position":388},"trades",{"start":389,"end":390},{"line":267,"column":381,"offset":382},{"line":267,"column":391,"offset":392},301,1583,{"start":394,"end":395},{"line":267,"column":381,"offset":382},{"line":267,"column":391,"offset":392},{"type":26,"value":397,"position":398}," source (",{"start":399,"end":400},{"line":267,"column":391,"offset":392},{"line":267,"column":401,"offset":402},310,1592,{"type":30,"tagName":230,"properties":404,"children":406,"position":415},{"href":405},"../core-concepts/data-sources.md#live-tape",[407],{"type":26,"value":408,"position":409},"Data sources",{"start":410,"end":413},{"line":267,"column":411,"offset":412},311,1593,{"line":267,"column":116,"offset":414},1605,{"start":416,"end":417},{"line":267,"column":401,"offset":402},{"line":267,"column":418,"offset":419},368,1650,{"type":26,"value":248,"position":421},{"start":422,"end":423},{"line":267,"column":418,"offset":419},{"line":267,"column":424,"offset":425},370,1652,{"start":427,"end":428},{"line":267,"column":20,"offset":274},{"line":267,"column":424,"offset":425},{"type":26,"value":27},{"type":30,"tagName":31,"properties":431,"children":432,"position":541},{},[433,451,458,471,478,491,497,510,517,535],{"type":30,"tagName":71,"properties":434,"children":435,"position":445},{},[436],{"type":26,"value":437,"position":438},"The chart ignores pins.",{"start":439,"end":442},{"line":440,"column":79,"offset":441},15,1656,{"line":440,"column":443,"offset":444},26,1679,{"start":446,"end":448},{"line":440,"column":20,"offset":447},1654,{"line":440,"column":449,"offset":450},28,1681,{"type":26,"value":452,"position":453}," In the browser every input reads the chart's own market and interval; ",{"start":454,"end":455},{"line":440,"column":449,"offset":450},{"line":440,"column":456,"offset":457},99,1752,{"type":30,"tagName":98,"properties":459,"children":460,"position":468},{},[461],{"type":26,"value":462,"position":463},"symbol",{"start":464,"end":465},{"line":440,"column":456,"offset":457},{"line":440,"column":466,"offset":467},107,1760,{"start":469,"end":470},{"line":440,"column":456,"offset":457},{"line":440,"column":466,"offset":467},{"type":26,"value":472,"position":473},", ",{"start":474,"end":475},{"line":440,"column":466,"offset":467},{"line":440,"column":476,"offset":477},109,1762,{"type":30,"tagName":98,"properties":479,"children":480,"position":488},{},[481],{"type":26,"value":482,"position":483},"exchange",{"start":484,"end":485},{"line":440,"column":476,"offset":477},{"line":440,"column":486,"offset":487},119,1772,{"start":489,"end":490},{"line":440,"column":476,"offset":477},{"line":440,"column":486,"offset":487},{"type":26,"value":357,"position":492},{"start":493,"end":494},{"line":440,"column":486,"offset":487},{"line":440,"column":495,"offset":496},125,1778,{"type":30,"tagName":98,"properties":498,"children":499,"position":507},{},[500],{"type":26,"value":501,"position":502},"interval",{"start":503,"end":504},{"line":440,"column":495,"offset":496},{"line":440,"column":505,"offset":506},135,1788,{"start":508,"end":509},{"line":440,"column":495,"offset":496},{"line":440,"column":505,"offset":506},{"type":26,"value":511,"position":512}," pins are honored on your machine only. A cross-venue or higher-timeframe package is a package for your machine, and a higher timeframe on the chart is a bucket fold inside the module (",{"start":513,"end":514},{"line":440,"column":505,"offset":506},{"line":440,"column":515,"offset":516},320,1973,{"type":30,"tagName":230,"properties":518,"children":520,"position":530},{"href":519},"../core-concepts/multi-timeframe.md",[521],{"type":26,"value":522,"position":523},"Multi-timeframe",{"start":524,"end":527},{"line":440,"column":525,"offset":526},321,1974,{"line":440,"column":528,"offset":529},336,1989,{"start":531,"end":532},{"line":440,"column":515,"offset":516},{"line":440,"column":533,"offset":534},374,2027,{"type":26,"value":248,"position":536},{"start":537,"end":538},{"line":440,"column":533,"offset":534},{"line":440,"column":539,"offset":540},376,2029,{"start":542,"end":543},{"line":440,"column":20,"offset":447},{"line":440,"column":539,"offset":540},{"type":26,"value":27},{"type":30,"tagName":31,"properties":546,"children":547,"position":606},{},[548,579,586,599],{"type":30,"tagName":71,"properties":549,"children":550,"position":573},{},[551,566],{"type":30,"tagName":98,"properties":552,"children":553,"position":563},{},[554],{"type":26,"value":555,"position":556},"range()",{"start":557,"end":560},{"line":558,"column":79,"offset":559},17,2033,{"line":558,"column":561,"offset":562},12,2042,{"start":564,"end":565},{"line":558,"column":79,"offset":559},{"line":558,"column":561,"offset":562},{"type":26,"value":567,"position":568}," is not drawn on the chart.",{"start":569,"end":570},{"line":558,"column":561,"offset":562},{"line":558,"column":571,"offset":572},39,2069,{"start":574,"end":576},{"line":558,"column":20,"offset":575},2031,{"line":558,"column":577,"offset":578},41,2071,{"type":26,"value":580,"position":581}," A declared range validates and installs, and scalar surfaces ignore it as designed, but the chart does not render it yet; shade a band with a box on every bar instead. ",{"start":582,"end":583},{"line":558,"column":577,"offset":578},{"line":558,"column":584,"offset":585},210,2240,{"type":30,"tagName":98,"properties":587,"children":588,"position":596},{},[589],{"type":26,"value":590,"position":591},"fills",{"start":592,"end":593},{"line":558,"column":584,"offset":585},{"line":558,"column":594,"offset":595},217,2247,{"start":597,"end":598},{"line":558,"column":584,"offset":585},{"line":558,"column":594,"offset":595},{"type":26,"value":600,"position":601}," exists only in hand-written sheets.",{"start":602,"end":603},{"line":558,"column":594,"offset":595},{"line":558,"column":604,"offset":605},253,2283,{"start":607,"end":608},{"line":558,"column":20,"offset":575},{"line":558,"column":604,"offset":605},{"type":26,"value":27},{"type":30,"tagName":31,"properties":611,"children":612,"position":700},{},[613,630,637,650,657,670,677,694],{"type":30,"tagName":71,"properties":614,"children":615,"position":624},{},[616],{"type":26,"value":617,"position":618},"No alerts from the chart yet.",{"start":619,"end":622},{"line":620,"column":79,"offset":621},19,2287,{"line":620,"column":181,"offset":623},2316,{"start":625,"end":627},{"line":620,"column":20,"offset":626},2285,{"line":620,"column":628,"offset":629},34,2318,{"type":26,"value":631,"position":632}," Alerts armed from the chart on a published Indicator are behind a flag today. The supported path is a watch on the metric id from your machine: ",{"start":633,"end":634},{"line":620,"column":628,"offset":629},{"line":620,"column":635,"offset":636},179,2463,{"type":30,"tagName":98,"properties":638,"children":639,"position":647},{},[640],{"type":26,"value":641,"position":642},"om watch create",{"start":643,"end":644},{"line":620,"column":635,"offset":636},{"line":620,"column":645,"offset":646},196,2480,{"start":648,"end":649},{"line":620,"column":635,"offset":636},{"line":620,"column":645,"offset":646},{"type":26,"value":651,"position":652}," with a level or an edge condition on ",{"start":653,"end":654},{"line":620,"column":645,"offset":646},{"line":620,"column":655,"offset":656},234,2518,{"type":30,"tagName":98,"properties":658,"children":659,"position":667},{},[660],{"type":26,"value":661,"position":662},"wrun/@scope/name/\u003Coutput>",{"start":663,"end":664},{"line":620,"column":655,"offset":656},{"line":620,"column":665,"offset":666},261,2545,{"start":668,"end":669},{"line":620,"column":655,"offset":656},{"line":620,"column":665,"offset":666},{"type":26,"value":671,"position":672}," (",{"start":673,"end":674},{"line":620,"column":665,"offset":666},{"line":620,"column":675,"offset":676},263,2547,{"type":30,"tagName":230,"properties":678,"children":680,"position":690},{"href":679},"../functions/alerts.md",[681],{"type":26,"value":682,"position":683},"Alerts",{"start":684,"end":687},{"line":620,"column":685,"offset":686},264,2548,{"line":620,"column":688,"offset":689},270,2554,{"start":691,"end":692},{"line":620,"column":675,"offset":676},{"line":620,"column":41,"offset":693},2579,{"type":26,"value":248,"position":695},{"start":696,"end":697},{"line":620,"column":41,"offset":693},{"line":620,"column":698,"offset":699},297,2581,{"start":701,"end":702},{"line":620,"column":20,"offset":626},{"line":620,"column":698,"offset":699},{"type":26,"value":27},{"type":30,"tagName":31,"properties":705,"children":706,"position":850},{},[707,724,731,744,750,763,770,783,790,803,810,823,830,843],{"type":30,"tagName":71,"properties":708,"children":709,"position":718},{},[710],{"type":26,"value":711,"position":712},"Screens and backtests refuse celled packages.",{"start":713,"end":715},{"line":270,"column":79,"offset":714},2585,{"line":270,"column":716,"offset":717},48,2630,{"start":719,"end":721},{"line":270,"column":20,"offset":720},2583,{"line":270,"column":722,"offset":723},50,2632,{"type":26,"value":725,"position":726}," A package with a ",{"start":727,"end":728},{"line":270,"column":722,"offset":723},{"line":270,"column":729,"offset":730},68,2650,{"type":30,"tagName":98,"properties":732,"children":733,"position":741},{},[734],{"type":26,"value":735,"position":736},"volume_profile",{"start":737,"end":738},{"line":270,"column":729,"offset":730},{"line":270,"column":739,"offset":740},84,2666,{"start":742,"end":743},{"line":270,"column":729,"offset":730},{"line":270,"column":739,"offset":740},{"type":26,"value":132,"position":745},{"start":746,"end":747},{"line":270,"column":739,"offset":740},{"line":270,"column":748,"offset":749},88,2670,{"type":30,"tagName":98,"properties":751,"children":752,"position":760},{},[753],{"type":26,"value":754,"position":755},"book",{"start":756,"end":757},{"line":270,"column":748,"offset":749},{"line":270,"column":758,"offset":759},94,2676,{"start":761,"end":762},{"line":270,"column":748,"offset":749},{"line":270,"column":758,"offset":759},{"type":26,"value":764,"position":765}," input runs on the chart, in watches, and under ",{"start":766,"end":767},{"line":270,"column":758,"offset":759},{"line":270,"column":768,"offset":769},142,2724,{"type":30,"tagName":98,"properties":771,"children":772,"position":780},{},[773],{"type":26,"value":774,"position":775},"om metric get",{"start":776,"end":777},{"line":270,"column":768,"offset":769},{"line":270,"column":778,"offset":779},157,2739,{"start":781,"end":782},{"line":270,"column":768,"offset":769},{"line":270,"column":778,"offset":779},{"type":26,"value":784,"position":785}," / ",{"start":786,"end":787},{"line":270,"column":778,"offset":779},{"line":270,"column":788,"offset":789},160,2742,{"type":30,"tagName":98,"properties":791,"children":792,"position":800},{},[793],{"type":26,"value":794,"position":795},"om metric series",{"start":796,"end":797},{"line":270,"column":788,"offset":789},{"line":270,"column":798,"offset":799},178,2760,{"start":801,"end":802},{"line":270,"column":788,"offset":789},{"line":270,"column":798,"offset":799},{"type":26,"value":804,"position":805},", but ",{"start":806,"end":807},{"line":270,"column":798,"offset":799},{"line":270,"column":808,"offset":809},184,2766,{"type":30,"tagName":98,"properties":811,"children":812,"position":820},{},[813],{"type":26,"value":814,"position":815},"om metric screen",{"start":816,"end":817},{"line":270,"column":808,"offset":809},{"line":270,"column":818,"offset":819},202,2784,{"start":821,"end":822},{"line":270,"column":808,"offset":809},{"line":270,"column":818,"offset":819},{"type":26,"value":824,"position":825}," and ",{"start":826,"end":827},{"line":270,"column":818,"offset":819},{"line":270,"column":828,"offset":829},207,2789,{"type":30,"tagName":98,"properties":831,"children":832,"position":840},{},[833],{"type":26,"value":834,"position":835},"om backtest",{"start":836,"end":837},{"line":270,"column":828,"offset":829},{"line":270,"column":838,"offset":839},220,2802,{"start":841,"end":842},{"line":270,"column":828,"offset":829},{"line":270,"column":838,"offset":839},{"type":26,"value":844,"position":845}," refuse it by name: their replay and fan-out paths carry no cell blocks yet.",{"start":846,"end":847},{"line":270,"column":838,"offset":839},{"line":270,"column":848,"offset":849},296,2878,{"start":851,"end":852},{"line":270,"column":20,"offset":720},{"line":270,"column":848,"offset":849},{"type":26,"value":27},{"type":30,"tagName":31,"properties":855,"children":856,"position":943},{},[857,874,880,892,899,912,919,937],{"type":30,"tagName":71,"properties":858,"children":859,"position":868},{},[860],{"type":26,"value":861,"position":862},"No history array.",{"start":863,"end":865},{"line":60,"column":79,"offset":864},2882,{"line":60,"column":866,"offset":867},20,2899,{"start":869,"end":871},{"line":60,"column":20,"offset":870},2880,{"line":60,"column":872,"offset":873},22,2901,{"type":26,"value":875,"position":876}," ",{"start":877,"end":878},{"line":60,"column":872,"offset":873},{"line":60,"column":60,"offset":879},2902,{"type":30,"tagName":98,"properties":881,"children":882,"position":889},{},[883],{"type":26,"value":884,"position":885},"state()",{"start":886,"end":887},{"line":60,"column":60,"offset":879},{"line":60,"column":181,"offset":888},2911,{"start":890,"end":891},{"line":60,"column":60,"offset":879},{"line":60,"column":181,"offset":888},{"type":26,"value":893,"position":894}," sees one bar. There is no ",{"start":895,"end":896},{"line":60,"column":181,"offset":888},{"line":60,"column":897,"offset":898},59,2938,{"type":30,"tagName":98,"properties":900,"children":901,"position":909},{},[902],{"type":26,"value":903,"position":904},"close[1]",{"start":905,"end":906},{"line":60,"column":897,"offset":898},{"line":60,"column":907,"offset":908},69,2948,{"start":910,"end":911},{"line":60,"column":897,"offset":898},{"line":60,"column":907,"offset":908},{"type":26,"value":913,"position":914},"; the previous value is a variable you kept, and a window is a ring buffer you fill. This is also why an Indicator cannot look ahead by accident (",{"start":915,"end":916},{"line":60,"column":907,"offset":908},{"line":60,"column":917,"offset":918},215,3094,{"type":30,"tagName":230,"properties":920,"children":922,"position":932},{"href":921},"../core-concepts/execution-model.md",[923],{"type":26,"value":924,"position":925},"Execution model",{"start":926,"end":929},{"line":60,"column":927,"offset":928},216,3095,{"line":60,"column":930,"offset":931},231,3110,{"start":933,"end":934},{"line":60,"column":917,"offset":918},{"line":60,"column":935,"offset":936},269,3148,{"type":26,"value":248,"position":938},{"start":939,"end":940},{"line":60,"column":935,"offset":936},{"line":60,"column":941,"offset":942},271,3150,{"start":944,"end":945},{"line":60,"column":20,"offset":870},{"line":60,"column":941,"offset":942},{"type":26,"value":27},{"type":30,"tagName":31,"properties":948,"children":949,"position":992},{},[950,966,973,985],{"type":30,"tagName":71,"properties":951,"children":952,"position":961},{},[953],{"type":26,"value":954,"position":955},"No persistence across runs.",{"start":956,"end":959},{"line":957,"column":79,"offset":958},25,3154,{"line":957,"column":175,"offset":960},3181,{"start":962,"end":964},{"line":957,"column":20,"offset":963},3152,{"line":957,"column":181,"offset":965},3183,{"type":26,"value":967,"position":968}," Module state lives for one evaluation and is restored by ",{"start":969,"end":970},{"line":957,"column":181,"offset":965},{"line":957,"column":971,"offset":972},90,3241,{"type":30,"tagName":98,"properties":974,"children":975,"position":982},{},[976],{"type":26,"value":977,"position":978},"reset()",{"start":979,"end":980},{"line":957,"column":971,"offset":972},{"line":957,"column":456,"offset":981},3250,{"start":983,"end":984},{"line":957,"column":971,"offset":972},{"line":957,"column":456,"offset":981},{"type":26,"value":986,"position":987}," for the forming bar. Nothing survives a reload or carries from one run to the next; anything you need next time is recomputed from the loaded history.",{"start":988,"end":989},{"line":957,"column":456,"offset":981},{"line":957,"column":990,"offset":991},250,3401,{"start":993,"end":994},{"line":957,"column":20,"offset":963},{"line":957,"column":990,"offset":991},{"type":26,"value":27},{"type":30,"tagName":31,"properties":997,"children":998,"position":1023},{},[999,1016],{"type":30,"tagName":71,"properties":1000,"children":1001,"position":1010},{},[1002],{"type":26,"value":1003,"position":1004},"No cross-Indicator communication on the chart.",{"start":1005,"end":1007},{"line":82,"column":79,"offset":1006},3405,{"line":82,"column":1008,"offset":1009},49,3451,{"start":1011,"end":1013},{"line":82,"column":20,"offset":1012},3403,{"line":82,"column":1014,"offset":1015},51,3453,{"type":26,"value":1017,"position":1018}," Two overlays on the same chart do not share state. On your machine a hand-written sheet can compose an installed package's output as an input (a metric source); the chart does not compose.",{"start":1019,"end":1020},{"line":82,"column":1014,"offset":1015},{"line":82,"column":1021,"offset":1022},240,3642,{"start":1024,"end":1025},{"line":82,"column":20,"offset":1012},{"line":82,"column":1021,"offset":1022},{"type":26,"value":27},{"type":30,"tagName":31,"properties":1028,"children":1029,"position":1051},{},[1030,1045],{"type":30,"tagName":71,"properties":1031,"children":1032,"position":1040},{},[1033],{"type":26,"value":1034,"position":1035},"No execution from the file.",{"start":1036,"end":1038},{"line":88,"column":79,"offset":1037},3646,{"line":88,"column":175,"offset":1039},3673,{"start":1041,"end":1043},{"line":88,"column":20,"offset":1042},3644,{"line":88,"column":181,"offset":1044},3675,{"type":26,"value":1046,"position":1047}," The module has no filesystem, no network, and no order capability. A watch on the metric can carry an execute action; that authorization lives on the watch and never in the Indicator.",{"start":1048,"end":1049},{"line":88,"column":181,"offset":1044},{"line":88,"column":927,"offset":1050},3859,{"start":1052,"end":1053},{"line":88,"column":20,"offset":1042},{"line":88,"column":927,"offset":1050},{"type":26,"value":27},{"type":30,"tagName":48,"properties":1056,"children":1058,"position":1068},{"id":1057},"named-refusals",[1059],{"type":26,"value":1060,"position":1061},"Named refusals",{"start":1062,"end":1065},{"line":1063,"column":57,"offset":1064},31,3864,{"line":1063,"column":1066,"offset":1067},18,3878,{"start":1069,"end":1071},{"line":1063,"column":20,"offset":1070},3861,{"line":1063,"column":1066,"offset":1067},{"type":26,"value":27},{"type":30,"tagName":31,"properties":1074,"children":1075,"position":1085},{},[1076],{"type":26,"value":1077,"position":1078},"Each gap that a surface can hit at runtime is a typed refusal, so the message names the way out:",{"start":1079,"end":1082},{"line":1080,"column":20,"offset":1081},33,3880,{"line":1080,"column":1083,"offset":1084},97,3976,{"start":1086,"end":1087},{"line":1080,"column":20,"offset":1081},{"line":1080,"column":1083,"offset":1084},{"type":26,"value":27},{"type":13,"children":1090},[1091],{"type":30,"tagName":1092,"properties":1093,"children":1096,"data":-1},"pre",{"class":1094,"style":1095,"tabindex":142},"shiki shiki-themes github-dark github-light","--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff",[1097],{"type":30,"tagName":98,"properties":1098,"children":1099},{},[1100,1110,1111,1119,1120,1128,1129,1137,1138,1146,1147],{"type":30,"tagName":1101,"properties":1102,"children":1104},"span",{"class":1103},"line",[1105],{"type":30,"tagName":1101,"properties":1106,"children":1107},{},[1108],{"type":26,"value":1109},"wrun_cells_unavailable          a celled input reads a class this data plane does not serve",{"type":26,"value":27},{"type":30,"tagName":1101,"properties":1112,"children":1113},{"class":1103},[1114],{"type":30,"tagName":1101,"properties":1115,"children":1116},{},[1117],{"type":26,"value":1118},"wrun_celled_metric_unsupported  a backtest or screen was asked to evaluate a celled package",{"type":26,"value":27},{"type":30,"tagName":1101,"properties":1121,"children":1122},{"class":1103},[1123],{"type":30,"tagName":1101,"properties":1124,"children":1125},{},[1126],{"type":26,"value":1127},"wrun_cell_block_too_large       a bar's block exceeds the input's max_cells (never truncated)",{"type":26,"value":27},{"type":30,"tagName":1101,"properties":1130,"children":1131},{"class":1103},[1132],{"type":30,"tagName":1101,"properties":1133,"children":1134},{},[1135],{"type":26,"value":1136},"wrun_preview_displacement_unsupported  chart preview of an output with displacement_bars",{"type":26,"value":27},{"type":30,"tagName":1101,"properties":1139,"children":1140},{"class":1103},[1141],{"type":30,"tagName":1101,"properties":1142,"children":1143},{},[1144],{"type":26,"value":1145},"wrun_source_set_generated       a sheet edit on a code-first workspace (edit the declaration)",{"type":26,"value":27},{"type":30,"tagName":1101,"properties":1148,"children":1149},{"class":1103},[1150],{"type":30,"tagName":1101,"properties":1151,"children":1152},{},[1153],{"type":26,"value":1154},"wrun_render_result_too_large    the expanded render selection passed 2 MiB in one run",{"type":26,"value":27},{"type":30,"tagName":31,"properties":1157,"children":1158,"position":1183},{},[1159,1177],{"type":30,"tagName":230,"properties":1160,"children":1162,"position":1172},{"href":1161},"common-errors.md",[1163],{"type":26,"value":1164,"position":1165},"Common errors",{"start":1166,"end":1170},{"line":1167,"column":1168,"offset":1169},44,2,4539,{"line":1167,"column":440,"offset":1171},4552,{"start":1173,"end":1175},{"line":1167,"column":20,"offset":1174},4538,{"line":1167,"column":628,"offset":1176},4571,{"type":26,"value":1178,"position":1179}," lists each one with its cause and fix.",{"start":1180,"end":1181},{"line":1167,"column":628,"offset":1176},{"line":1167,"column":9,"offset":1182},4610,{"start":1184,"end":1185},{"line":1167,"column":20,"offset":1174},{"line":1167,"column":9,"offset":1182},{"type":26,"value":27},{"type":30,"tagName":48,"properties":1188,"children":1190,"position":1199},{"id":1189},"sandbox-limits",[1191],{"type":26,"value":1192,"position":1193},"Sandbox limits",{"start":1194,"end":1197},{"line":1195,"column":57,"offset":1196},46,4615,{"line":1195,"column":1066,"offset":1198},4629,{"start":1200,"end":1202},{"line":1195,"column":20,"offset":1201},4612,{"line":1195,"column":1066,"offset":1198},{"type":26,"value":27},{"type":30,"tagName":31,"properties":1205,"children":1206,"position":1259},{},[1207,1215,1228,1235,1252],{"type":26,"value":1208,"position":1209},"Every Indicator runs under fixed ceilings so one module cannot exhaust the chart or the daemon: 16 boxes and 16 segments per sheet, 32 renderers, 64 drawings, 64 polyline points, 64 string slots of at most 4096 bytes each, 64 KiB of strings per row and 8 MiB per run, bar offsets within -500..500, a 4 MiB default memory ceiling, and the ",{"start":1210,"end":1212},{"line":716,"column":20,"offset":1211},4631,{"line":716,"column":1213,"offset":1214},339,4969,{"type":30,"tagName":98,"properties":1216,"children":1217,"position":1225},{},[1218],{"type":26,"value":1219,"position":1220},"max_cells",{"start":1221,"end":1222},{"line":716,"column":1213,"offset":1214},{"line":716,"column":1223,"offset":1224},350,4980,{"start":1226,"end":1227},{"line":716,"column":1213,"offset":1214},{"line":716,"column":1223,"offset":1224},{"type":26,"value":1229,"position":1230}," contract on every celled input. The full table, with the exact refusal for each, is in the ",{"start":1231,"end":1232},{"line":716,"column":1223,"offset":1224},{"line":716,"column":1233,"offset":1234},442,5072,{"type":30,"tagName":230,"properties":1236,"children":1238,"position":1248},{"href":1237},"../reference/limits.md",[1239],{"type":26,"value":1240,"position":1241},"Limits reference",{"start":1242,"end":1245},{"line":716,"column":1243,"offset":1244},443,5073,{"line":716,"column":1246,"offset":1247},459,5089,{"start":1249,"end":1250},{"line":716,"column":1233,"offset":1234},{"line":716,"column":83,"offset":1251},5114,{"type":26,"value":1253,"position":1254},".",{"start":1255,"end":1256},{"line":716,"column":83,"offset":1251},{"line":716,"column":1257,"offset":1258},485,5115,{"start":1260,"end":1261},{"line":716,"column":20,"offset":1211},{"line":716,"column":1257,"offset":1258},{"type":26,"value":27},{"type":30,"tagName":48,"properties":1264,"children":1266,"position":1274},{"id":1265},"build-and-runtime-errors",[1267],{"type":26,"value":1268,"position":1269},"Build and runtime errors",{"start":1270,"end":1272},{"line":722,"column":57,"offset":1271},5120,{"line":722,"column":449,"offset":1273},5144,{"start":1275,"end":1277},{"line":722,"column":20,"offset":1276},5117,{"line":722,"column":449,"offset":1273},{"type":26,"value":27},{"type":30,"tagName":31,"properties":1280,"children":1281,"position":1314},{},[1282,1291,1307],{"type":26,"value":1283,"position":1284},"For the messages you hit while writing an Indicator (a coordinate passed as a string instead of a handle, a param option that does not exist, a missing cast, a sheet field out of range, the four-export contract), see ",{"start":1285,"end":1288},{"line":1286,"column":20,"offset":1287},52,5146,{"line":1286,"column":1289,"offset":1290},218,5363,{"type":30,"tagName":230,"properties":1292,"children":1293,"position":1302},{"href":1161},[1294],{"type":26,"value":1164,"position":1295},{"start":1296,"end":1299},{"line":1286,"column":1297,"offset":1298},219,5364,{"line":1286,"column":1300,"offset":1301},232,5377,{"start":1303,"end":1304},{"line":1286,"column":1289,"offset":1290},{"line":1286,"column":1305,"offset":1306},251,5396,{"type":26,"value":1308,"position":1309},". Each one is listed by its exact text with a cause and a fix.",{"start":1310,"end":1311},{"line":1286,"column":1305,"offset":1306},{"line":1286,"column":1312,"offset":1313},313,5458,{"start":1315,"end":1316},{"line":1286,"column":20,"offset":1287},{"line":1286,"column":1312,"offset":1313},{"quirksMode":1318},false,{"start":1320,"end":1321},{"line":20,"column":20,"offset":21},{"line":1322,"column":20,"offset":1323},53,5459,1790157171879]