[{"data":1,"prerenderedAt":2345},["ShallowReactive",2],{"kscript:core-concepts/user-defined-types":3},{"slug":4,"filePath":5,"frontmatter":6,"rawMarkdown":9,"tree":10},"core-concepts/user-defined-types","core-concepts/user-defined-types.md",{"title":7,"description":8},"User-Defined Types","Define your own typed structs with fields and methods. Construct with named fields, call methods, and mutate state with this. Model trading state in the shape of the problem.","---\ntitle: User-Defined Types\ndescription: Define your own typed structs with fields and methods. Construct with named fields, call methods, and mutate state with this. Model trading state in the shape of the problem.\n---\n\n\u003Cdiv class=\"flex gap-3 mb-6\">\n  \u003Cspan class=\"inline-flex items-center gap-1.5 px-3 py-1 rounded-full bg-purple-50 text-purple-600 text-sm font-medium\">\n    Advanced\n  \u003C/span>\n  \u003Cspan class=\"inline-flex items-center gap-1.5 px-3 py-1 rounded-full bg-gray-100 text-gray-600 text-sm font-medium\">\n    9 min read\n  \u003C/span>\n\u003C/div>\n\n## Introduction\n\nA `type` is a struct you define: a named bundle of fields, optionally with methods that operate on those fields. Instead of tracking a supply zone as three loose parallel arrays (`zoneTops`, `zoneBottoms`, `zoneTouches`), you describe it once as a `Zone` and work with whole zones. State takes the shape of the problem.\n\n```javascript\ntype Zone {\n  top: number\n  bottom: number\n  touches: number\n}\n```\nEach field is declared with a name and a type. Once a type exists, you create instances of it, read and write their fields, and pass them around like any other value.\n\n## Construct with named fields\n\nYou build an instance with `.new(...)`, naming each field you set:\n\n```javascript\nvar z = Zone.new(top=d.high, bottom=d.low, touches=0)\nvar h = z.top - z.bottom\n```\n\nNamed-field construction is order-independent and self-documenting: there is no \"which positional argument was `bottom` again?\" The constructor only accepts fields the type actually declares. Pass a field the type does not have and it is a compile error, not a silent extra property, so a typo is caught before the script ever runs.\n## Add behavior with methods\n\nA type can carry methods. Declare them with `func` **inside** the type block, and they can read and mutate the instance through `this`:\n\n```javascript\ntype Zone {\n  top: number\n  bottom: number\n  touches: number\n\n  func height() {\n    return this.top - this.bottom\n  }\n\n  func registerTouch(price) {\n    if (price >= this.bottom && price \u003C= this.top) {\n      this.touches += 1\n      return true\n    }\n    return false\n  }\n}\n```\n\nNow the data and the logic that maintains it live together. `height()` derives a value from the fields. `registerTouch(price)` is a self-updating operation: ask the zone whether the current price touched it, and it answers while bumping its own `touches` counter. The zone manages its own state.\n```javascript\nvar inZone = z.registerTouch(d.close)   // true/false, && z.touches updates itself\nvar tall   = z.height()\n```\n\n\n\nThis is why user-defined types matter for trading scripts. A \"supply zone that counts its own touches and retires after the third,\" an \"order block that tracks whether price mitigated it,\" a \"trailing-stop level that ratchets\": each becomes one type whose methods enforce its rules, instead of bookkeeping smeared across the whole script. Hold these in a `var` to track one, or in an array (see [Collections](/kscript/core-concepts/collections)) to manage a live set of them across bars.\n## A complete typed struct\n\nThis script declares `Zone` with both methods, constructs it with named fields, calls `height()` and `registerTouch()`, and lets the method mutate `touches` through `this`.\n\n```javascript title=\"scripts/probes/lang-types/struct_methods.ks\" lines wrap\n//@version=2\ndefine(title=\"Verified Struct Methods\", position=\"offchart\", axis=true)\n\ntype Zone {\n  top: number\n  bottom: number\n  touches: number\n\n  func height() {\n    return this.top - this.bottom\n  }\n\n  func registerTouch(price) {\n    if (price >= this.bottom && price \u003C= this.top) {\n      this.touches += 1\n      return true\n    }\n    return false\n  }\n}\n\ntimeseries trade = ohlcv(symbol=currentSymbol, exchange=currentExchange)\n\nvar top = trade.high\nvar bottom = trade.low\nvar closeNow = trade.close\nvar zone = Zone.new(top=top, bottom=bottom, touches=0)\nvar touched = zone.registerTouch(closeNow)\nvar score = zone.height() + zone.touches + (touched ? 1 : 0) + barIndex\n\nplotLine(value=score, colors=[\"#2563eb\"], label=[\"Zone score\"], desc=[\"struct method score\"])\n```\n\n\n**What to expect:** `zone.height()` returns the high-minus-low band width, `registerTouch(closeNow)` reports whether the close fell inside the band and increments `zone.touches` when it did, and `zone.touches` reads the running count back. The whole zone is one value carrying its own data and behavior.\n\n## Rules and gotchas\n\nA few constraints the compiler enforces. Each fails at compile time with a precise line and column, so you find out immediately.\n\n**Constructors reject unknown fields.** `.new(...)` only accepts fields the type declares. Passing one it does not have, such as `Zone.new(top=..., bottom=..., label=...)`, fails with:\n\n```\nUnknown field 'label' for type 'Zone'\n```\n\n**`this` only works inside methods.** It refers to the current instance, so it is meaningless outside a type's own `func`. Using it at the top level fails with:\n\n```\n'this' can only be used inside type methods\n```\n\n**`__type` and `__kscriptType` are reserved field names.** The engine uses them internally to tag instances, so you cannot declare a field with either name. Doing so fails with `reserved field name '__type'` or `reserved field name '__kscriptType'`. Any other field name is yours to use.\n\n{% hint style=\"info\" %}\nTypes are part of the broader v3 type system. For how `na`, scalars, and the built-in series types fit together, see the [Type System](/kscript/core-concepts/type-system) overview.\n{% endhint %}\n",{"type":11,"children":12,"data":2338,"position":2340},"root",[13,100,101,118,119,234,235,304,305,319,320,337,338,373,374,479,480,514,515,531,532,612,613,865,866,940,941,1016,1017,1077,1078,1095,1096,1205,1206,1872,1873,1980,1981,1997,1998,2012,2013,2080,2081,2099,2100,2158,2159,2176,2177,2275,2276],{"type":14,"tagName":15,"properties":16,"children":21,"position":95},"element","div",{"className":17},[18,19,20],"flex","gap-3","mb-6",[22,34,63,69,88],{"type":23,"value":24,"position":25},"text","\n  ",{"start":26,"end":30},{"line":27,"column":28,"offset":29},1,30,29,{"line":31,"column":32,"offset":33},2,3,32,{"type":14,"tagName":35,"properties":36,"children":48,"position":58},"span",{"className":37},[38,39,40,41,42,43,44,45,46,47],"inline-flex","items-center","gap-1.5","px-3","py-1","rounded-full","bg-purple-50","text-purple-600","text-sm","font-medium",[49],{"type":23,"value":50,"position":51},"\n    Advanced\n  ",{"start":52,"end":55},{"line":31,"column":53,"offset":54},122,151,{"line":56,"column":32,"offset":57},4,167,{"start":59,"end":60},{"line":31,"column":32,"offset":33},{"line":56,"column":61,"offset":62},10,174,{"type":23,"value":24,"position":64},{"start":65,"end":66},{"line":56,"column":61,"offset":62},{"line":67,"column":32,"offset":68},5,177,{"type":14,"tagName":35,"properties":70,"children":74,"position":84},{"className":71},[38,39,40,41,42,43,72,73,46,47],"bg-gray-100","text-gray-600",[75],{"type":23,"value":76,"position":77},"\n    9 min read\n  ",{"start":78,"end":81},{"line":67,"column":79,"offset":80},119,293,{"line":82,"column":32,"offset":83},7,311,{"start":85,"end":86},{"line":67,"column":32,"offset":68},{"line":82,"column":61,"offset":87},318,{"type":23,"value":89,"position":90},"\n",{"start":91,"end":92},{"line":82,"column":61,"offset":87},{"line":93,"column":27,"offset":94},8,319,{"start":96,"end":98},{"line":27,"column":27,"offset":97},0,{"line":93,"column":82,"offset":99},325,{"type":23,"value":89},{"type":14,"tagName":102,"properties":103,"children":105,"position":114},"h2",{"id":104},"introduction",[106],{"type":23,"value":107,"position":108},"Introduction",{"start":109,"end":111},{"line":61,"column":56,"offset":110},330,{"line":61,"column":112,"offset":113},16,342,{"start":115,"end":117},{"line":61,"column":27,"offset":116},327,{"line":61,"column":112,"offset":113},{"type":23,"value":89},{"type":14,"tagName":120,"properties":121,"children":122,"position":231},"p",{},[123,131,145,152,165,172,185,191,204,211,224],{"type":23,"value":124,"position":125},"A ",{"start":126,"end":129},{"line":127,"column":27,"offset":128},12,344,{"line":127,"column":32,"offset":130},346,{"type":14,"tagName":132,"properties":133,"children":134,"position":142},"code",{},[135],{"type":23,"value":136,"position":137},"type",{"start":138,"end":139},{"line":127,"column":32,"offset":130},{"line":127,"column":140,"offset":141},9,352,{"start":143,"end":144},{"line":127,"column":32,"offset":130},{"line":127,"column":140,"offset":141},{"type":23,"value":146,"position":147}," is a struct you define: a named bundle of fields, optionally with methods that operate on those fields. Instead of tracking a supply zone as three loose parallel arrays (",{"start":148,"end":149},{"line":127,"column":140,"offset":141},{"line":127,"column":150,"offset":151},180,523,{"type":14,"tagName":132,"properties":153,"children":154,"position":162},{},[155],{"type":23,"value":156,"position":157},"zoneTops",{"start":158,"end":159},{"line":127,"column":150,"offset":151},{"line":127,"column":160,"offset":161},190,533,{"start":163,"end":164},{"line":127,"column":150,"offset":151},{"line":127,"column":160,"offset":161},{"type":23,"value":166,"position":167},", ",{"start":168,"end":169},{"line":127,"column":160,"offset":161},{"line":127,"column":170,"offset":171},192,535,{"type":14,"tagName":132,"properties":173,"children":174,"position":182},{},[175],{"type":23,"value":176,"position":177},"zoneBottoms",{"start":178,"end":179},{"line":127,"column":170,"offset":171},{"line":127,"column":180,"offset":181},205,548,{"start":183,"end":184},{"line":127,"column":170,"offset":171},{"line":127,"column":180,"offset":181},{"type":23,"value":166,"position":186},{"start":187,"end":188},{"line":127,"column":180,"offset":181},{"line":127,"column":189,"offset":190},207,550,{"type":14,"tagName":132,"properties":192,"children":193,"position":201},{},[194],{"type":23,"value":195,"position":196},"zoneTouches",{"start":197,"end":198},{"line":127,"column":189,"offset":190},{"line":127,"column":199,"offset":200},220,563,{"start":202,"end":203},{"line":127,"column":189,"offset":190},{"line":127,"column":199,"offset":200},{"type":23,"value":205,"position":206},"), you describe it once as a ",{"start":207,"end":208},{"line":127,"column":199,"offset":200},{"line":127,"column":209,"offset":210},249,592,{"type":14,"tagName":132,"properties":212,"children":213,"position":221},{},[214],{"type":23,"value":215,"position":216},"Zone",{"start":217,"end":218},{"line":127,"column":209,"offset":210},{"line":127,"column":219,"offset":220},255,598,{"start":222,"end":223},{"line":127,"column":209,"offset":210},{"line":127,"column":219,"offset":220},{"type":23,"value":225,"position":226}," and work with whole zones. State takes the shape of the problem.",{"start":227,"end":228},{"line":127,"column":219,"offset":220},{"line":127,"column":229,"offset":230},320,663,{"start":232,"end":233},{"line":127,"column":27,"offset":128},{"line":127,"column":229,"offset":230},{"type":23,"value":89},{"type":11,"children":236},[237],{"type":14,"tagName":238,"properties":239,"children":243,"data":-1},"pre",{"class":240,"style":241,"tabindex":242},"shiki shiki-themes github-dark github-light","--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff","0",[244],{"type":14,"tagName":132,"properties":245,"children":246},{},[247,268,269,277,278,286,287,295,296],{"type":14,"tagName":35,"properties":248,"children":250},{"class":249},"line",[251,256,262],{"type":14,"tagName":35,"properties":252,"children":254},{"style":253},"--shiki-dark:#F97583;--shiki-light:#D73A49",[255],{"type":23,"value":136},{"type":14,"tagName":35,"properties":257,"children":259},{"style":258},"--shiki-dark:#B392F0;--shiki-light:#6F42C1",[260],{"type":23,"value":261}," Zone",{"type":14,"tagName":35,"properties":263,"children":265},{"style":264},"--shiki-dark:#E1E4E8;--shiki-light:#24292E",[266],{"type":23,"value":267}," {",{"type":23,"value":89},{"type":14,"tagName":35,"properties":270,"children":271},{"class":249},[272],{"type":14,"tagName":35,"properties":273,"children":274},{"style":264},[275],{"type":23,"value":276},"  top: number",{"type":23,"value":89},{"type":14,"tagName":35,"properties":279,"children":280},{"class":249},[281],{"type":14,"tagName":35,"properties":282,"children":283},{"style":264},[284],{"type":23,"value":285},"  bottom: number",{"type":23,"value":89},{"type":14,"tagName":35,"properties":288,"children":289},{"class":249},[290],{"type":14,"tagName":35,"properties":291,"children":292},{"style":264},[293],{"type":23,"value":294},"  touches: number",{"type":23,"value":89},{"type":14,"tagName":35,"properties":297,"children":298},{"class":249},[299],{"type":14,"tagName":35,"properties":300,"children":301},{"style":264},[302],{"type":23,"value":303},"}",{"type":23,"value":89},{"type":14,"tagName":120,"properties":306,"children":307,"position":316},{},[308],{"type":23,"value":309,"position":310},"Each field is declared with a name and a type. Once a type exists, you create instances of it, read and write their fields, and pass them around like any other value.",{"start":311,"end":314},{"line":312,"column":27,"offset":313},21,746,{"line":312,"column":57,"offset":315},912,{"start":317,"end":318},{"line":312,"column":27,"offset":313},{"line":312,"column":57,"offset":315},{"type":23,"value":89},{"type":14,"tagName":102,"properties":321,"children":323,"position":333},{"id":322},"construct-with-named-fields",[324],{"type":23,"value":325,"position":326},"Construct with named fields",{"start":327,"end":330},{"line":328,"column":56,"offset":329},23,917,{"line":328,"column":331,"offset":332},31,944,{"start":334,"end":336},{"line":328,"column":27,"offset":335},914,{"line":328,"column":331,"offset":332},{"type":23,"value":89},{"type":14,"tagName":120,"properties":339,"children":340,"position":370},{},[341,350,363],{"type":23,"value":342,"position":343},"You build an instance with ",{"start":344,"end":347},{"line":345,"column":27,"offset":346},25,946,{"line":345,"column":348,"offset":349},28,973,{"type":14,"tagName":132,"properties":351,"children":352,"position":360},{},[353],{"type":23,"value":354,"position":355},".new(...)",{"start":356,"end":357},{"line":345,"column":348,"offset":349},{"line":345,"column":358,"offset":359},39,984,{"start":361,"end":362},{"line":345,"column":348,"offset":349},{"line":345,"column":358,"offset":359},{"type":23,"value":364,"position":365},", naming each field you set:",{"start":366,"end":367},{"line":345,"column":358,"offset":359},{"line":345,"column":368,"offset":369},67,1012,{"start":371,"end":372},{"line":345,"column":27,"offset":346},{"line":345,"column":368,"offset":369},{"type":23,"value":89},{"type":11,"children":375},[376],{"type":14,"tagName":238,"properties":377,"children":378,"data":-1},{"class":240,"style":241,"tabindex":242},[379],{"type":14,"tagName":132,"properties":380,"children":381},{},[382,447,448],{"type":14,"tagName":35,"properties":383,"children":384},{"class":249},[385,390,395,400,405,410,415,419,424,428,433,437,442],{"type":14,"tagName":35,"properties":386,"children":387},{"style":253},[388],{"type":23,"value":389},"var",{"type":14,"tagName":35,"properties":391,"children":392},{"style":264},[393],{"type":23,"value":394}," z ",{"type":14,"tagName":35,"properties":396,"children":397},{"style":253},[398],{"type":23,"value":399},"=",{"type":14,"tagName":35,"properties":401,"children":402},{"style":264},[403],{"type":23,"value":404}," Zone.",{"type":14,"tagName":35,"properties":406,"children":407},{"style":258},[408],{"type":23,"value":409},"new",{"type":14,"tagName":35,"properties":411,"children":412},{"style":264},[413],{"type":23,"value":414},"(top",{"type":14,"tagName":35,"properties":416,"children":417},{"style":253},[418],{"type":23,"value":399},{"type":14,"tagName":35,"properties":420,"children":421},{"style":264},[422],{"type":23,"value":423},"d.high, bottom",{"type":14,"tagName":35,"properties":425,"children":426},{"style":253},[427],{"type":23,"value":399},{"type":14,"tagName":35,"properties":429,"children":430},{"style":264},[431],{"type":23,"value":432},"d.low, touches",{"type":14,"tagName":35,"properties":434,"children":435},{"style":253},[436],{"type":23,"value":399},{"type":14,"tagName":35,"properties":438,"children":440},{"style":439},"--shiki-dark:#79B8FF;--shiki-light:#005CC5",[441],{"type":23,"value":242},{"type":14,"tagName":35,"properties":443,"children":444},{"style":264},[445],{"type":23,"value":446},")",{"type":23,"value":89},{"type":14,"tagName":35,"properties":449,"children":450},{"class":249},[451,455,460,464,469,474],{"type":14,"tagName":35,"properties":452,"children":453},{"style":253},[454],{"type":23,"value":389},{"type":14,"tagName":35,"properties":456,"children":457},{"style":264},[458],{"type":23,"value":459}," h ",{"type":14,"tagName":35,"properties":461,"children":462},{"style":253},[463],{"type":23,"value":399},{"type":14,"tagName":35,"properties":465,"children":466},{"style":264},[467],{"type":23,"value":468}," z.top ",{"type":14,"tagName":35,"properties":470,"children":471},{"style":253},[472],{"type":23,"value":473},"-",{"type":14,"tagName":35,"properties":475,"children":476},{"style":264},[477],{"type":23,"value":478}," z.bottom",{"type":23,"value":89},{"type":14,"tagName":120,"properties":481,"children":482,"position":511},{},[483,491,504],{"type":23,"value":484,"position":485},"Named-field construction is order-independent and self-documenting: there is no \"which positional argument was ",{"start":486,"end":488},{"line":33,"column":27,"offset":487},1112,{"line":33,"column":489,"offset":490},112,1223,{"type":14,"tagName":132,"properties":492,"children":493,"position":501},{},[494],{"type":23,"value":495,"position":496},"bottom",{"start":497,"end":498},{"line":33,"column":489,"offset":490},{"line":33,"column":499,"offset":500},120,1231,{"start":502,"end":503},{"line":33,"column":489,"offset":490},{"line":33,"column":499,"offset":500},{"type":23,"value":505,"position":506}," again?\" The constructor only accepts fields the type actually declares. Pass a field the type does not have and it is a compile error, not a silent extra property, so a typo is caught before the script ever runs.",{"start":507,"end":508},{"line":33,"column":499,"offset":500},{"line":33,"column":509,"offset":510},333,1444,{"start":512,"end":513},{"line":33,"column":27,"offset":487},{"line":33,"column":509,"offset":510},{"type":23,"value":89},{"type":14,"tagName":102,"properties":516,"children":518,"position":527},{"id":517},"add-behavior-with-methods",[519],{"type":23,"value":520,"position":521},"Add behavior with methods",{"start":522,"end":525},{"line":523,"column":56,"offset":524},33,1448,{"line":523,"column":29,"offset":526},1473,{"start":528,"end":530},{"line":523,"column":27,"offset":529},1445,{"line":523,"column":29,"offset":526},{"type":23,"value":89},{"type":14,"tagName":120,"properties":533,"children":534,"position":609},{},[535,544,557,564,582,589,602],{"type":23,"value":536,"position":537},"A type can carry methods. Declare them with ",{"start":538,"end":541},{"line":539,"column":27,"offset":540},35,1475,{"line":539,"column":542,"offset":543},45,1519,{"type":14,"tagName":132,"properties":545,"children":546,"position":554},{},[547],{"type":23,"value":548,"position":549},"func",{"start":550,"end":551},{"line":539,"column":542,"offset":543},{"line":539,"column":552,"offset":553},51,1525,{"start":555,"end":556},{"line":539,"column":542,"offset":543},{"line":539,"column":552,"offset":553},{"type":23,"value":558,"position":559}," ",{"start":560,"end":561},{"line":539,"column":552,"offset":553},{"line":539,"column":562,"offset":563},52,1526,{"type":14,"tagName":565,"properties":566,"children":567,"position":577},"strong",{},[568],{"type":23,"value":569,"position":570},"inside",{"start":571,"end":574},{"line":539,"column":572,"offset":573},54,1528,{"line":539,"column":575,"offset":576},60,1534,{"start":578,"end":579},{"line":539,"column":562,"offset":563},{"line":539,"column":580,"offset":581},62,1536,{"type":23,"value":583,"position":584}," the type block, and they can read and mutate the instance through ",{"start":585,"end":586},{"line":539,"column":580,"offset":581},{"line":539,"column":587,"offset":588},129,1603,{"type":14,"tagName":132,"properties":590,"children":591,"position":599},{},[592],{"type":23,"value":593,"position":594},"this",{"start":595,"end":596},{"line":539,"column":587,"offset":588},{"line":539,"column":597,"offset":598},135,1609,{"start":600,"end":601},{"line":539,"column":587,"offset":588},{"line":539,"column":597,"offset":598},{"type":23,"value":603,"position":604},":",{"start":605,"end":606},{"line":539,"column":597,"offset":598},{"line":539,"column":607,"offset":608},136,1610,{"start":610,"end":611},{"line":539,"column":27,"offset":540},{"line":539,"column":607,"offset":608},{"type":23,"value":89},{"type":11,"children":614},[615],{"type":14,"tagName":238,"properties":616,"children":617,"data":-1},{"class":240,"style":241,"tabindex":242},[618],{"type":14,"tagName":132,"properties":619,"children":620},{},[621,636,637,644,645,652,653,660,661,664,665,673,674,705,706,714,715,718,719,737,738,789,790,813,814,827,828,836,837,849,850,857,858],{"type":14,"tagName":35,"properties":622,"children":623},{"class":249},[624,628,632],{"type":14,"tagName":35,"properties":625,"children":626},{"style":253},[627],{"type":23,"value":136},{"type":14,"tagName":35,"properties":629,"children":630},{"style":258},[631],{"type":23,"value":261},{"type":14,"tagName":35,"properties":633,"children":634},{"style":264},[635],{"type":23,"value":267},{"type":23,"value":89},{"type":14,"tagName":35,"properties":638,"children":639},{"class":249},[640],{"type":14,"tagName":35,"properties":641,"children":642},{"style":264},[643],{"type":23,"value":276},{"type":23,"value":89},{"type":14,"tagName":35,"properties":646,"children":647},{"class":249},[648],{"type":14,"tagName":35,"properties":649,"children":650},{"style":264},[651],{"type":23,"value":285},{"type":23,"value":89},{"type":14,"tagName":35,"properties":654,"children":655},{"class":249},[656],{"type":14,"tagName":35,"properties":657,"children":658},{"style":264},[659],{"type":23,"value":294},{"type":23,"value":89},{"type":14,"tagName":35,"properties":662,"children":663},{"class":249},[],{"type":23,"value":89},{"type":14,"tagName":35,"properties":666,"children":667},{"class":249},[668],{"type":14,"tagName":35,"properties":669,"children":670},{"style":264},[671],{"type":23,"value":672},"  func height() {",{"type":23,"value":89},{"type":14,"tagName":35,"properties":675,"children":676},{"class":249},[677,682,687,692,696,700],{"type":14,"tagName":35,"properties":678,"children":679},{"style":253},[680],{"type":23,"value":681},"    return",{"type":14,"tagName":35,"properties":683,"children":684},{"style":439},[685],{"type":23,"value":686}," this",{"type":14,"tagName":35,"properties":688,"children":689},{"style":264},[690],{"type":23,"value":691},".top ",{"type":14,"tagName":35,"properties":693,"children":694},{"style":253},[695],{"type":23,"value":473},{"type":14,"tagName":35,"properties":697,"children":698},{"style":439},[699],{"type":23,"value":686},{"type":14,"tagName":35,"properties":701,"children":702},{"style":264},[703],{"type":23,"value":704},".bottom",{"type":23,"value":89},{"type":14,"tagName":35,"properties":707,"children":708},{"class":249},[709],{"type":14,"tagName":35,"properties":710,"children":711},{"style":264},[712],{"type":23,"value":713},"  }",{"type":23,"value":89},{"type":14,"tagName":35,"properties":716,"children":717},{"class":249},[],{"type":23,"value":89},{"type":14,"tagName":35,"properties":720,"children":721},{"class":249},[722,727,732],{"type":14,"tagName":35,"properties":723,"children":724},{"style":264},[725],{"type":23,"value":726},"  func ",{"type":14,"tagName":35,"properties":728,"children":729},{"style":258},[730],{"type":23,"value":731},"registerTouch",{"type":14,"tagName":35,"properties":733,"children":734},{"style":264},[735],{"type":23,"value":736},"(price) {",{"type":23,"value":89},{"type":14,"tagName":35,"properties":739,"children":740},{"class":249},[741,746,751,756,760,765,770,775,780,784],{"type":14,"tagName":35,"properties":742,"children":743},{"style":253},[744],{"type":23,"value":745},"    if",{"type":14,"tagName":35,"properties":747,"children":748},{"style":264},[749],{"type":23,"value":750}," (price ",{"type":14,"tagName":35,"properties":752,"children":753},{"style":253},[754],{"type":23,"value":755},">=",{"type":14,"tagName":35,"properties":757,"children":758},{"style":439},[759],{"type":23,"value":686},{"type":14,"tagName":35,"properties":761,"children":762},{"style":264},[763],{"type":23,"value":764},".bottom ",{"type":14,"tagName":35,"properties":766,"children":767},{"style":253},[768],{"type":23,"value":769},"&&",{"type":14,"tagName":35,"properties":771,"children":772},{"style":264},[773],{"type":23,"value":774}," price ",{"type":14,"tagName":35,"properties":776,"children":777},{"style":253},[778],{"type":23,"value":779},"\u003C=",{"type":14,"tagName":35,"properties":781,"children":782},{"style":439},[783],{"type":23,"value":686},{"type":14,"tagName":35,"properties":785,"children":786},{"style":264},[787],{"type":23,"value":788},".top) {",{"type":23,"value":89},{"type":14,"tagName":35,"properties":791,"children":792},{"class":249},[793,798,803,808],{"type":14,"tagName":35,"properties":794,"children":795},{"style":439},[796],{"type":23,"value":797},"      this",{"type":14,"tagName":35,"properties":799,"children":800},{"style":264},[801],{"type":23,"value":802},".touches ",{"type":14,"tagName":35,"properties":804,"children":805},{"style":253},[806],{"type":23,"value":807},"+=",{"type":14,"tagName":35,"properties":809,"children":810},{"style":439},[811],{"type":23,"value":812}," 1",{"type":23,"value":89},{"type":14,"tagName":35,"properties":815,"children":816},{"class":249},[817,822],{"type":14,"tagName":35,"properties":818,"children":819},{"style":253},[820],{"type":23,"value":821},"      return",{"type":14,"tagName":35,"properties":823,"children":824},{"style":439},[825],{"type":23,"value":826}," true",{"type":23,"value":89},{"type":14,"tagName":35,"properties":829,"children":830},{"class":249},[831],{"type":14,"tagName":35,"properties":832,"children":833},{"style":264},[834],{"type":23,"value":835},"    }",{"type":23,"value":89},{"type":14,"tagName":35,"properties":838,"children":839},{"class":249},[840,844],{"type":14,"tagName":35,"properties":841,"children":842},{"style":253},[843],{"type":23,"value":681},{"type":14,"tagName":35,"properties":845,"children":846},{"style":439},[847],{"type":23,"value":848}," false",{"type":23,"value":89},{"type":14,"tagName":35,"properties":851,"children":852},{"class":249},[853],{"type":14,"tagName":35,"properties":854,"children":855},{"style":264},[856],{"type":23,"value":713},{"type":23,"value":89},{"type":14,"tagName":35,"properties":859,"children":860},{"class":249},[861],{"type":14,"tagName":35,"properties":862,"children":863},{"style":264},[864],{"type":23,"value":303},{"type":23,"value":89},{"type":14,"tagName":120,"properties":867,"children":868,"position":937},{},[869,878,891,898,911,918,930],{"type":23,"value":870,"position":871},"Now the data and the logic that maintains it live together. ",{"start":872,"end":875},{"line":873,"column":27,"offset":874},57,1904,{"line":873,"column":876,"offset":877},61,1964,{"type":14,"tagName":132,"properties":879,"children":880,"position":888},{},[881],{"type":23,"value":882,"position":883},"height()",{"start":884,"end":885},{"line":873,"column":876,"offset":877},{"line":873,"column":886,"offset":887},71,1974,{"start":889,"end":890},{"line":873,"column":876,"offset":877},{"line":873,"column":886,"offset":887},{"type":23,"value":892,"position":893}," derives a value from the fields. ",{"start":894,"end":895},{"line":873,"column":886,"offset":887},{"line":873,"column":896,"offset":897},105,2008,{"type":14,"tagName":132,"properties":899,"children":900,"position":908},{},[901],{"type":23,"value":902,"position":903},"registerTouch(price)",{"start":904,"end":905},{"line":873,"column":896,"offset":897},{"line":873,"column":906,"offset":907},127,2030,{"start":909,"end":910},{"line":873,"column":896,"offset":897},{"line":873,"column":906,"offset":907},{"type":23,"value":912,"position":913}," is a self-updating operation: ask the zone whether the current price touched it, and it answers while bumping its own ",{"start":914,"end":915},{"line":873,"column":906,"offset":907},{"line":873,"column":916,"offset":917},246,2149,{"type":14,"tagName":132,"properties":919,"children":920,"position":927},{},[921],{"type":23,"value":922,"position":923},"touches",{"start":924,"end":925},{"line":873,"column":916,"offset":917},{"line":873,"column":219,"offset":926},2158,{"start":928,"end":929},{"line":873,"column":916,"offset":917},{"line":873,"column":219,"offset":926},{"type":23,"value":931,"position":932}," counter. The zone manages its own state.",{"start":933,"end":934},{"line":873,"column":219,"offset":926},{"line":873,"column":935,"offset":936},296,2199,{"start":938,"end":939},{"line":873,"column":27,"offset":874},{"line":873,"column":935,"offset":936},{"type":23,"value":89},{"type":11,"children":942},[943],{"type":14,"tagName":238,"properties":944,"children":945,"data":-1},{"class":240,"style":241,"tabindex":242},[946],{"type":14,"tagName":132,"properties":947,"children":948},{},[949,985,986],{"type":14,"tagName":35,"properties":950,"children":951},{"class":249},[952,956,961,965,970,974,979],{"type":14,"tagName":35,"properties":953,"children":954},{"style":253},[955],{"type":23,"value":389},{"type":14,"tagName":35,"properties":957,"children":958},{"style":264},[959],{"type":23,"value":960}," inZone ",{"type":14,"tagName":35,"properties":962,"children":963},{"style":253},[964],{"type":23,"value":399},{"type":14,"tagName":35,"properties":966,"children":967},{"style":264},[968],{"type":23,"value":969}," z.",{"type":14,"tagName":35,"properties":971,"children":972},{"style":258},[973],{"type":23,"value":731},{"type":14,"tagName":35,"properties":975,"children":976},{"style":264},[977],{"type":23,"value":978},"(d.close)   ",{"type":14,"tagName":35,"properties":980,"children":982},{"style":981},"--shiki-dark:#6A737D;--shiki-light:#6A737D",[983],{"type":23,"value":984},"// true/false, && z.touches updates itself",{"type":23,"value":89},{"type":14,"tagName":35,"properties":987,"children":988},{"class":249},[989,993,998,1002,1006,1011],{"type":14,"tagName":35,"properties":990,"children":991},{"style":253},[992],{"type":23,"value":389},{"type":14,"tagName":35,"properties":994,"children":995},{"style":264},[996],{"type":23,"value":997}," tall   ",{"type":14,"tagName":35,"properties":999,"children":1000},{"style":253},[1001],{"type":23,"value":399},{"type":14,"tagName":35,"properties":1003,"children":1004},{"style":264},[1005],{"type":23,"value":969},{"type":14,"tagName":35,"properties":1007,"children":1008},{"style":258},[1009],{"type":23,"value":1010},"height",{"type":14,"tagName":35,"properties":1012,"children":1013},{"style":264},[1014],{"type":23,"value":1015},"()",{"type":23,"value":89},{"type":14,"tagName":120,"properties":1018,"children":1019,"position":1074},{},[1020,1029,1041,1048,1067],{"type":23,"value":1021,"position":1022},"This is why user-defined types matter for trading scripts. A \"supply zone that counts its own touches and retires after the third,\" an \"order block that tracks whether price mitigated it,\" a \"trailing-stop level that ratchets\": each becomes one type whose methods enforce its rules, instead of bookkeeping smeared across the whole script. Hold these in a ",{"start":1023,"end":1026},{"line":1024,"column":27,"offset":1025},65,2328,{"line":1024,"column":1027,"offset":1028},356,2683,{"type":14,"tagName":132,"properties":1030,"children":1031,"position":1038},{},[1032],{"type":23,"value":389,"position":1033},{"start":1034,"end":1035},{"line":1024,"column":1027,"offset":1028},{"line":1024,"column":1036,"offset":1037},361,2688,{"start":1039,"end":1040},{"line":1024,"column":1027,"offset":1028},{"line":1024,"column":1036,"offset":1037},{"type":23,"value":1042,"position":1043}," to track one, or in an array (see ",{"start":1044,"end":1045},{"line":1024,"column":1036,"offset":1037},{"line":1024,"column":1046,"offset":1047},396,2723,{"type":14,"tagName":1049,"properties":1050,"children":1052,"position":1062},"a",{"href":1051},"/kscript/core-concepts/collections",[1053],{"type":23,"value":1054,"position":1055},"Collections",{"start":1056,"end":1059},{"line":1024,"column":1057,"offset":1058},397,2724,{"line":1024,"column":1060,"offset":1061},408,2735,{"start":1063,"end":1064},{"line":1024,"column":1046,"offset":1047},{"line":1024,"column":1065,"offset":1066},445,2772,{"type":23,"value":1068,"position":1069},") to manage a live set of them across bars.",{"start":1070,"end":1071},{"line":1024,"column":1065,"offset":1066},{"line":1024,"column":1072,"offset":1073},488,2815,{"start":1075,"end":1076},{"line":1024,"column":27,"offset":1025},{"line":1024,"column":1072,"offset":1073},{"type":23,"value":89},{"type":14,"tagName":102,"properties":1079,"children":1081,"position":1091},{"id":1080},"a-complete-typed-struct",[1082],{"type":23,"value":1083,"position":1084},"A complete typed struct",{"start":1085,"end":1088},{"line":1086,"column":56,"offset":1087},66,2819,{"line":1086,"column":1089,"offset":1090},27,2842,{"start":1092,"end":1094},{"line":1086,"column":27,"offset":1093},2816,{"line":1086,"column":1089,"offset":1090},{"type":23,"value":89},{"type":14,"tagName":120,"properties":1097,"children":1098,"position":1202},{},[1099,1108,1119,1126,1138,1145,1157,1164,1176,1183,1195],{"type":23,"value":1100,"position":1101},"This script declares ",{"start":1102,"end":1105},{"line":1103,"column":27,"offset":1104},68,2844,{"line":1103,"column":1106,"offset":1107},22,2865,{"type":14,"tagName":132,"properties":1109,"children":1110,"position":1116},{},[1111],{"type":23,"value":215,"position":1112},{"start":1113,"end":1114},{"line":1103,"column":1106,"offset":1107},{"line":1103,"column":348,"offset":1115},2871,{"start":1117,"end":1118},{"line":1103,"column":1106,"offset":1107},{"line":1103,"column":348,"offset":1115},{"type":23,"value":1120,"position":1121}," with both methods, constructs it with named fields, calls ",{"start":1122,"end":1123},{"line":1103,"column":348,"offset":1115},{"line":1103,"column":1124,"offset":1125},87,2930,{"type":14,"tagName":132,"properties":1127,"children":1128,"position":1135},{},[1129],{"type":23,"value":882,"position":1130},{"start":1131,"end":1132},{"line":1103,"column":1124,"offset":1125},{"line":1103,"column":1133,"offset":1134},97,2940,{"start":1136,"end":1137},{"line":1103,"column":1124,"offset":1125},{"line":1103,"column":1133,"offset":1134},{"type":23,"value":1139,"position":1140}," and ",{"start":1141,"end":1142},{"line":1103,"column":1133,"offset":1134},{"line":1103,"column":1143,"offset":1144},102,2945,{"type":14,"tagName":132,"properties":1146,"children":1147,"position":1154},{},[1148],{"type":23,"value":1149,"position":1150},"registerTouch()",{"start":1151,"end":1152},{"line":1103,"column":1143,"offset":1144},{"line":1103,"column":79,"offset":1153},2962,{"start":1155,"end":1156},{"line":1103,"column":1143,"offset":1144},{"line":1103,"column":79,"offset":1153},{"type":23,"value":1158,"position":1159},", and lets the method mutate ",{"start":1160,"end":1161},{"line":1103,"column":79,"offset":1153},{"line":1103,"column":1162,"offset":1163},148,2991,{"type":14,"tagName":132,"properties":1165,"children":1166,"position":1173},{},[1167],{"type":23,"value":922,"position":1168},{"start":1169,"end":1170},{"line":1103,"column":1162,"offset":1163},{"line":1103,"column":1171,"offset":1172},157,3000,{"start":1174,"end":1175},{"line":1103,"column":1162,"offset":1163},{"line":1103,"column":1171,"offset":1172},{"type":23,"value":1177,"position":1178}," through ",{"start":1179,"end":1180},{"line":1103,"column":1171,"offset":1172},{"line":1103,"column":1181,"offset":1182},166,3009,{"type":14,"tagName":132,"properties":1184,"children":1185,"position":1192},{},[1186],{"type":23,"value":593,"position":1187},{"start":1188,"end":1189},{"line":1103,"column":1181,"offset":1182},{"line":1103,"column":1190,"offset":1191},172,3015,{"start":1193,"end":1194},{"line":1103,"column":1181,"offset":1182},{"line":1103,"column":1190,"offset":1191},{"type":23,"value":1196,"position":1197},".",{"start":1198,"end":1199},{"line":1103,"column":1190,"offset":1191},{"line":1103,"column":1200,"offset":1201},173,3016,{"start":1203,"end":1204},{"line":1103,"column":27,"offset":1104},{"line":1103,"column":1200,"offset":1201},{"type":23,"value":89},{"type":11,"children":1207},[1208],{"type":14,"tagName":238,"properties":1209,"children":1211,"data":-1},{"class":240,"style":241,"tabindex":242,"title":1210},"scripts/probes/lang-types/struct_methods.ks",[1212],{"type":14,"tagName":132,"properties":1213,"children":1214},{},[1215,1223,1224,1279,1280,1283,1284,1299,1300,1307,1308,1315,1316,1323,1324,1327,1328,1335,1336,1363,1364,1371,1372,1375,1376,1391,1392,1435,1436,1455,1456,1467,1468,1475,1476,1487,1488,1495,1496,1503,1504,1507,1508,1548,1549,1552,1553,1574,1575,1596,1597,1618,1619,1677,1678,1708,1709,1790,1791,1794,1795],{"type":14,"tagName":35,"properties":1216,"children":1217},{"class":249},[1218],{"type":14,"tagName":35,"properties":1219,"children":1220},{"style":981},[1221],{"type":23,"value":1222},"//@version=2",{"type":23,"value":89},{"type":14,"tagName":35,"properties":1225,"children":1226},{"class":249},[1227,1232,1237,1241,1247,1252,1256,1261,1266,1270,1275],{"type":14,"tagName":35,"properties":1228,"children":1229},{"style":258},[1230],{"type":23,"value":1231},"define",{"type":14,"tagName":35,"properties":1233,"children":1234},{"style":264},[1235],{"type":23,"value":1236},"(title",{"type":14,"tagName":35,"properties":1238,"children":1239},{"style":253},[1240],{"type":23,"value":399},{"type":14,"tagName":35,"properties":1242,"children":1244},{"style":1243},"--shiki-dark:#9ECBFF;--shiki-light:#032F62",[1245],{"type":23,"value":1246},"\"Verified Struct Methods\"",{"type":14,"tagName":35,"properties":1248,"children":1249},{"style":264},[1250],{"type":23,"value":1251},", position",{"type":14,"tagName":35,"properties":1253,"children":1254},{"style":253},[1255],{"type":23,"value":399},{"type":14,"tagName":35,"properties":1257,"children":1258},{"style":1243},[1259],{"type":23,"value":1260},"\"offchart\"",{"type":14,"tagName":35,"properties":1262,"children":1263},{"style":264},[1264],{"type":23,"value":1265},", axis",{"type":14,"tagName":35,"properties":1267,"children":1268},{"style":253},[1269],{"type":23,"value":399},{"type":14,"tagName":35,"properties":1271,"children":1272},{"style":439},[1273],{"type":23,"value":1274},"true",{"type":14,"tagName":35,"properties":1276,"children":1277},{"style":264},[1278],{"type":23,"value":446},{"type":23,"value":89},{"type":14,"tagName":35,"properties":1281,"children":1282},{"class":249},[],{"type":23,"value":89},{"type":14,"tagName":35,"properties":1285,"children":1286},{"class":249},[1287,1291,1295],{"type":14,"tagName":35,"properties":1288,"children":1289},{"style":253},[1290],{"type":23,"value":136},{"type":14,"tagName":35,"properties":1292,"children":1293},{"style":258},[1294],{"type":23,"value":261},{"type":14,"tagName":35,"properties":1296,"children":1297},{"style":264},[1298],{"type":23,"value":267},{"type":23,"value":89},{"type":14,"tagName":35,"properties":1301,"children":1302},{"class":249},[1303],{"type":14,"tagName":35,"properties":1304,"children":1305},{"style":264},[1306],{"type":23,"value":276},{"type":23,"value":89},{"type":14,"tagName":35,"properties":1309,"children":1310},{"class":249},[1311],{"type":14,"tagName":35,"properties":1312,"children":1313},{"style":264},[1314],{"type":23,"value":285},{"type":23,"value":89},{"type":14,"tagName":35,"properties":1317,"children":1318},{"class":249},[1319],{"type":14,"tagName":35,"properties":1320,"children":1321},{"style":264},[1322],{"type":23,"value":294},{"type":23,"value":89},{"type":14,"tagName":35,"properties":1325,"children":1326},{"class":249},[],{"type":23,"value":89},{"type":14,"tagName":35,"properties":1329,"children":1330},{"class":249},[1331],{"type":14,"tagName":35,"properties":1332,"children":1333},{"style":264},[1334],{"type":23,"value":672},{"type":23,"value":89},{"type":14,"tagName":35,"properties":1337,"children":1338},{"class":249},[1339,1343,1347,1351,1355,1359],{"type":14,"tagName":35,"properties":1340,"children":1341},{"style":253},[1342],{"type":23,"value":681},{"type":14,"tagName":35,"properties":1344,"children":1345},{"style":439},[1346],{"type":23,"value":686},{"type":14,"tagName":35,"properties":1348,"children":1349},{"style":264},[1350],{"type":23,"value":691},{"type":14,"tagName":35,"properties":1352,"children":1353},{"style":253},[1354],{"type":23,"value":473},{"type":14,"tagName":35,"properties":1356,"children":1357},{"style":439},[1358],{"type":23,"value":686},{"type":14,"tagName":35,"properties":1360,"children":1361},{"style":264},[1362],{"type":23,"value":704},{"type":23,"value":89},{"type":14,"tagName":35,"properties":1365,"children":1366},{"class":249},[1367],{"type":14,"tagName":35,"properties":1368,"children":1369},{"style":264},[1370],{"type":23,"value":713},{"type":23,"value":89},{"type":14,"tagName":35,"properties":1373,"children":1374},{"class":249},[],{"type":23,"value":89},{"type":14,"tagName":35,"properties":1377,"children":1378},{"class":249},[1379,1383,1387],{"type":14,"tagName":35,"properties":1380,"children":1381},{"style":264},[1382],{"type":23,"value":726},{"type":14,"tagName":35,"properties":1384,"children":1385},{"style":258},[1386],{"type":23,"value":731},{"type":14,"tagName":35,"properties":1388,"children":1389},{"style":264},[1390],{"type":23,"value":736},{"type":23,"value":89},{"type":14,"tagName":35,"properties":1393,"children":1394},{"class":249},[1395,1399,1403,1407,1411,1415,1419,1423,1427,1431],{"type":14,"tagName":35,"properties":1396,"children":1397},{"style":253},[1398],{"type":23,"value":745},{"type":14,"tagName":35,"properties":1400,"children":1401},{"style":264},[1402],{"type":23,"value":750},{"type":14,"tagName":35,"properties":1404,"children":1405},{"style":253},[1406],{"type":23,"value":755},{"type":14,"tagName":35,"properties":1408,"children":1409},{"style":439},[1410],{"type":23,"value":686},{"type":14,"tagName":35,"properties":1412,"children":1413},{"style":264},[1414],{"type":23,"value":764},{"type":14,"tagName":35,"properties":1416,"children":1417},{"style":253},[1418],{"type":23,"value":769},{"type":14,"tagName":35,"properties":1420,"children":1421},{"style":264},[1422],{"type":23,"value":774},{"type":14,"tagName":35,"properties":1424,"children":1425},{"style":253},[1426],{"type":23,"value":779},{"type":14,"tagName":35,"properties":1428,"children":1429},{"style":439},[1430],{"type":23,"value":686},{"type":14,"tagName":35,"properties":1432,"children":1433},{"style":264},[1434],{"type":23,"value":788},{"type":23,"value":89},{"type":14,"tagName":35,"properties":1437,"children":1438},{"class":249},[1439,1443,1447,1451],{"type":14,"tagName":35,"properties":1440,"children":1441},{"style":439},[1442],{"type":23,"value":797},{"type":14,"tagName":35,"properties":1444,"children":1445},{"style":264},[1446],{"type":23,"value":802},{"type":14,"tagName":35,"properties":1448,"children":1449},{"style":253},[1450],{"type":23,"value":807},{"type":14,"tagName":35,"properties":1452,"children":1453},{"style":439},[1454],{"type":23,"value":812},{"type":23,"value":89},{"type":14,"tagName":35,"properties":1457,"children":1458},{"class":249},[1459,1463],{"type":14,"tagName":35,"properties":1460,"children":1461},{"style":253},[1462],{"type":23,"value":821},{"type":14,"tagName":35,"properties":1464,"children":1465},{"style":439},[1466],{"type":23,"value":826},{"type":23,"value":89},{"type":14,"tagName":35,"properties":1469,"children":1470},{"class":249},[1471],{"type":14,"tagName":35,"properties":1472,"children":1473},{"style":264},[1474],{"type":23,"value":835},{"type":23,"value":89},{"type":14,"tagName":35,"properties":1477,"children":1478},{"class":249},[1479,1483],{"type":14,"tagName":35,"properties":1480,"children":1481},{"style":253},[1482],{"type":23,"value":681},{"type":14,"tagName":35,"properties":1484,"children":1485},{"style":439},[1486],{"type":23,"value":848},{"type":23,"value":89},{"type":14,"tagName":35,"properties":1489,"children":1490},{"class":249},[1491],{"type":14,"tagName":35,"properties":1492,"children":1493},{"style":264},[1494],{"type":23,"value":713},{"type":23,"value":89},{"type":14,"tagName":35,"properties":1497,"children":1498},{"class":249},[1499],{"type":14,"tagName":35,"properties":1500,"children":1501},{"style":264},[1502],{"type":23,"value":303},{"type":23,"value":89},{"type":14,"tagName":35,"properties":1505,"children":1506},{"class":249},[],{"type":23,"value":89},{"type":14,"tagName":35,"properties":1509,"children":1510},{"class":249},[1511,1516,1520,1525,1530,1534,1539,1543],{"type":14,"tagName":35,"properties":1512,"children":1513},{"style":264},[1514],{"type":23,"value":1515},"timeseries trade ",{"type":14,"tagName":35,"properties":1517,"children":1518},{"style":253},[1519],{"type":23,"value":399},{"type":14,"tagName":35,"properties":1521,"children":1522},{"style":258},[1523],{"type":23,"value":1524}," ohlcv",{"type":14,"tagName":35,"properties":1526,"children":1527},{"style":264},[1528],{"type":23,"value":1529},"(symbol",{"type":14,"tagName":35,"properties":1531,"children":1532},{"style":253},[1533],{"type":23,"value":399},{"type":14,"tagName":35,"properties":1535,"children":1536},{"style":264},[1537],{"type":23,"value":1538},"currentSymbol, exchange",{"type":14,"tagName":35,"properties":1540,"children":1541},{"style":253},[1542],{"type":23,"value":399},{"type":14,"tagName":35,"properties":1544,"children":1545},{"style":264},[1546],{"type":23,"value":1547},"currentExchange)",{"type":23,"value":89},{"type":14,"tagName":35,"properties":1550,"children":1551},{"class":249},[],{"type":23,"value":89},{"type":14,"tagName":35,"properties":1554,"children":1555},{"class":249},[1556,1560,1565,1569],{"type":14,"tagName":35,"properties":1557,"children":1558},{"style":253},[1559],{"type":23,"value":389},{"type":14,"tagName":35,"properties":1561,"children":1562},{"style":264},[1563],{"type":23,"value":1564}," top ",{"type":14,"tagName":35,"properties":1566,"children":1567},{"style":253},[1568],{"type":23,"value":399},{"type":14,"tagName":35,"properties":1570,"children":1571},{"style":264},[1572],{"type":23,"value":1573}," trade.high",{"type":23,"value":89},{"type":14,"tagName":35,"properties":1576,"children":1577},{"class":249},[1578,1582,1587,1591],{"type":14,"tagName":35,"properties":1579,"children":1580},{"style":253},[1581],{"type":23,"value":389},{"type":14,"tagName":35,"properties":1583,"children":1584},{"style":264},[1585],{"type":23,"value":1586}," bottom ",{"type":14,"tagName":35,"properties":1588,"children":1589},{"style":253},[1590],{"type":23,"value":399},{"type":14,"tagName":35,"properties":1592,"children":1593},{"style":264},[1594],{"type":23,"value":1595}," trade.low",{"type":23,"value":89},{"type":14,"tagName":35,"properties":1598,"children":1599},{"class":249},[1600,1604,1609,1613],{"type":14,"tagName":35,"properties":1601,"children":1602},{"style":253},[1603],{"type":23,"value":389},{"type":14,"tagName":35,"properties":1605,"children":1606},{"style":264},[1607],{"type":23,"value":1608}," closeNow ",{"type":14,"tagName":35,"properties":1610,"children":1611},{"style":253},[1612],{"type":23,"value":399},{"type":14,"tagName":35,"properties":1614,"children":1615},{"style":264},[1616],{"type":23,"value":1617}," trade.close",{"type":23,"value":89},{"type":14,"tagName":35,"properties":1620,"children":1621},{"class":249},[1622,1626,1631,1635,1639,1643,1647,1651,1656,1660,1665,1669,1673],{"type":14,"tagName":35,"properties":1623,"children":1624},{"style":253},[1625],{"type":23,"value":389},{"type":14,"tagName":35,"properties":1627,"children":1628},{"style":264},[1629],{"type":23,"value":1630}," zone ",{"type":14,"tagName":35,"properties":1632,"children":1633},{"style":253},[1634],{"type":23,"value":399},{"type":14,"tagName":35,"properties":1636,"children":1637},{"style":264},[1638],{"type":23,"value":404},{"type":14,"tagName":35,"properties":1640,"children":1641},{"style":258},[1642],{"type":23,"value":409},{"type":14,"tagName":35,"properties":1644,"children":1645},{"style":264},[1646],{"type":23,"value":414},{"type":14,"tagName":35,"properties":1648,"children":1649},{"style":253},[1650],{"type":23,"value":399},{"type":14,"tagName":35,"properties":1652,"children":1653},{"style":264},[1654],{"type":23,"value":1655},"top, bottom",{"type":14,"tagName":35,"properties":1657,"children":1658},{"style":253},[1659],{"type":23,"value":399},{"type":14,"tagName":35,"properties":1661,"children":1662},{"style":264},[1663],{"type":23,"value":1664},"bottom, touches",{"type":14,"tagName":35,"properties":1666,"children":1667},{"style":253},[1668],{"type":23,"value":399},{"type":14,"tagName":35,"properties":1670,"children":1671},{"style":439},[1672],{"type":23,"value":242},{"type":14,"tagName":35,"properties":1674,"children":1675},{"style":264},[1676],{"type":23,"value":446},{"type":23,"value":89},{"type":14,"tagName":35,"properties":1679,"children":1680},{"class":249},[1681,1685,1690,1694,1699,1703],{"type":14,"tagName":35,"properties":1682,"children":1683},{"style":253},[1684],{"type":23,"value":389},{"type":14,"tagName":35,"properties":1686,"children":1687},{"style":264},[1688],{"type":23,"value":1689}," touched ",{"type":14,"tagName":35,"properties":1691,"children":1692},{"style":253},[1693],{"type":23,"value":399},{"type":14,"tagName":35,"properties":1695,"children":1696},{"style":264},[1697],{"type":23,"value":1698}," zone.",{"type":14,"tagName":35,"properties":1700,"children":1701},{"style":258},[1702],{"type":23,"value":731},{"type":14,"tagName":35,"properties":1704,"children":1705},{"style":264},[1706],{"type":23,"value":1707},"(closeNow)",{"type":23,"value":89},{"type":14,"tagName":35,"properties":1710,"children":1711},{"class":249},[1712,1716,1721,1725,1729,1733,1738,1743,1748,1752,1757,1762,1766,1771,1776,1781,1785],{"type":14,"tagName":35,"properties":1713,"children":1714},{"style":253},[1715],{"type":23,"value":389},{"type":14,"tagName":35,"properties":1717,"children":1718},{"style":264},[1719],{"type":23,"value":1720}," score ",{"type":14,"tagName":35,"properties":1722,"children":1723},{"style":253},[1724],{"type":23,"value":399},{"type":14,"tagName":35,"properties":1726,"children":1727},{"style":264},[1728],{"type":23,"value":1698},{"type":14,"tagName":35,"properties":1730,"children":1731},{"style":258},[1732],{"type":23,"value":1010},{"type":14,"tagName":35,"properties":1734,"children":1735},{"style":264},[1736],{"type":23,"value":1737},"() ",{"type":14,"tagName":35,"properties":1739,"children":1740},{"style":253},[1741],{"type":23,"value":1742},"+",{"type":14,"tagName":35,"properties":1744,"children":1745},{"style":264},[1746],{"type":23,"value":1747}," zone.touches ",{"type":14,"tagName":35,"properties":1749,"children":1750},{"style":253},[1751],{"type":23,"value":1742},{"type":14,"tagName":35,"properties":1753,"children":1754},{"style":264},[1755],{"type":23,"value":1756}," (touched ",{"type":14,"tagName":35,"properties":1758,"children":1759},{"style":253},[1760],{"type":23,"value":1761},"?",{"type":14,"tagName":35,"properties":1763,"children":1764},{"style":439},[1765],{"type":23,"value":812},{"type":14,"tagName":35,"properties":1767,"children":1768},{"style":253},[1769],{"type":23,"value":1770}," :",{"type":14,"tagName":35,"properties":1772,"children":1773},{"style":439},[1774],{"type":23,"value":1775}," 0",{"type":14,"tagName":35,"properties":1777,"children":1778},{"style":264},[1779],{"type":23,"value":1780},") ",{"type":14,"tagName":35,"properties":1782,"children":1783},{"style":253},[1784],{"type":23,"value":1742},{"type":14,"tagName":35,"properties":1786,"children":1787},{"style":264},[1788],{"type":23,"value":1789}," barIndex",{"type":23,"value":89},{"type":14,"tagName":35,"properties":1792,"children":1793},{"class":249},[],{"type":23,"value":89},{"type":14,"tagName":35,"properties":1796,"children":1797},{"class":249},[1798,1803,1808,1812,1817,1821,1826,1831,1836,1840,1844,1849,1854,1858,1862,1867],{"type":14,"tagName":35,"properties":1799,"children":1800},{"style":258},[1801],{"type":23,"value":1802},"plotLine",{"type":14,"tagName":35,"properties":1804,"children":1805},{"style":264},[1806],{"type":23,"value":1807},"(value",{"type":14,"tagName":35,"properties":1809,"children":1810},{"style":253},[1811],{"type":23,"value":399},{"type":14,"tagName":35,"properties":1813,"children":1814},{"style":264},[1815],{"type":23,"value":1816},"score, colors",{"type":14,"tagName":35,"properties":1818,"children":1819},{"style":253},[1820],{"type":23,"value":399},{"type":14,"tagName":35,"properties":1822,"children":1823},{"style":264},[1824],{"type":23,"value":1825},"[",{"type":14,"tagName":35,"properties":1827,"children":1828},{"style":1243},[1829],{"type":23,"value":1830},"\"#2563eb\"",{"type":14,"tagName":35,"properties":1832,"children":1833},{"style":264},[1834],{"type":23,"value":1835},"], label",{"type":14,"tagName":35,"properties":1837,"children":1838},{"style":253},[1839],{"type":23,"value":399},{"type":14,"tagName":35,"properties":1841,"children":1842},{"style":264},[1843],{"type":23,"value":1825},{"type":14,"tagName":35,"properties":1845,"children":1846},{"style":1243},[1847],{"type":23,"value":1848},"\"Zone score\"",{"type":14,"tagName":35,"properties":1850,"children":1851},{"style":264},[1852],{"type":23,"value":1853},"], desc",{"type":14,"tagName":35,"properties":1855,"children":1856},{"style":253},[1857],{"type":23,"value":399},{"type":14,"tagName":35,"properties":1859,"children":1860},{"style":264},[1861],{"type":23,"value":1825},{"type":14,"tagName":35,"properties":1863,"children":1864},{"style":1243},[1865],{"type":23,"value":1866},"\"struct method score\"",{"type":14,"tagName":35,"properties":1868,"children":1869},{"style":264},[1870],{"type":23,"value":1871},"])",{"type":23,"value":89},{"type":14,"tagName":120,"properties":1874,"children":1875,"position":1977},{},[1876,1893,1898,1911,1918,1931,1938,1951,1958,1970],{"type":14,"tagName":565,"properties":1877,"children":1878,"position":1887},{},[1879],{"type":23,"value":1880,"position":1881},"What to expect:",{"start":1882,"end":1884},{"line":896,"column":32,"offset":1883},3873,{"line":896,"column":1885,"offset":1886},18,3888,{"start":1888,"end":1890},{"line":896,"column":27,"offset":1889},3871,{"line":896,"column":1891,"offset":1892},20,3890,{"type":23,"value":558,"position":1894},{"start":1895,"end":1896},{"line":896,"column":1891,"offset":1892},{"line":896,"column":312,"offset":1897},3891,{"type":14,"tagName":132,"properties":1899,"children":1900,"position":1908},{},[1901],{"type":23,"value":1902,"position":1903},"zone.height()",{"start":1904,"end":1905},{"line":896,"column":312,"offset":1897},{"line":896,"column":1906,"offset":1907},36,3906,{"start":1909,"end":1910},{"line":896,"column":312,"offset":1897},{"line":896,"column":1906,"offset":1907},{"type":23,"value":1912,"position":1913}," returns the high-minus-low band width, ",{"start":1914,"end":1915},{"line":896,"column":1906,"offset":1907},{"line":896,"column":1916,"offset":1917},76,3946,{"type":14,"tagName":132,"properties":1919,"children":1920,"position":1928},{},[1921],{"type":23,"value":1922,"position":1923},"registerTouch(closeNow)",{"start":1924,"end":1925},{"line":896,"column":1916,"offset":1917},{"line":896,"column":1926,"offset":1927},101,3971,{"start":1929,"end":1930},{"line":896,"column":1916,"offset":1917},{"line":896,"column":1926,"offset":1927},{"type":23,"value":1932,"position":1933}," reports whether the close fell inside the band and increments ",{"start":1934,"end":1935},{"line":896,"column":1926,"offset":1927},{"line":896,"column":1936,"offset":1937},164,4034,{"type":14,"tagName":132,"properties":1939,"children":1940,"position":1948},{},[1941],{"type":23,"value":1942,"position":1943},"zone.touches",{"start":1944,"end":1945},{"line":896,"column":1936,"offset":1937},{"line":896,"column":1946,"offset":1947},178,4048,{"start":1949,"end":1950},{"line":896,"column":1936,"offset":1937},{"line":896,"column":1946,"offset":1947},{"type":23,"value":1952,"position":1953}," when it did, and ",{"start":1954,"end":1955},{"line":896,"column":1946,"offset":1947},{"line":896,"column":1956,"offset":1957},196,4066,{"type":14,"tagName":132,"properties":1959,"children":1960,"position":1967},{},[1961],{"type":23,"value":1942,"position":1962},{"start":1963,"end":1964},{"line":896,"column":1956,"offset":1957},{"line":896,"column":1965,"offset":1966},210,4080,{"start":1968,"end":1969},{"line":896,"column":1956,"offset":1957},{"line":896,"column":1965,"offset":1966},{"type":23,"value":1971,"position":1972}," reads the running count back. The whole zone is one value carrying its own data and behavior.",{"start":1973,"end":1974},{"line":896,"column":1965,"offset":1966},{"line":896,"column":1975,"offset":1976},304,4174,{"start":1978,"end":1979},{"line":896,"column":27,"offset":1889},{"line":896,"column":1975,"offset":1976},{"type":23,"value":89},{"type":14,"tagName":102,"properties":1982,"children":1984,"position":1993},{"id":1983},"rules-and-gotchas",[1985],{"type":23,"value":1986,"position":1987},"Rules and gotchas",{"start":1988,"end":1991},{"line":1989,"column":56,"offset":1990},107,4179,{"line":1989,"column":312,"offset":1992},4196,{"start":1994,"end":1996},{"line":1989,"column":27,"offset":1995},4176,{"line":1989,"column":312,"offset":1992},{"type":23,"value":89},{"type":14,"tagName":120,"properties":1999,"children":2000,"position":2009},{},[2001],{"type":23,"value":2002,"position":2003},"A few constraints the compiler enforces. Each fails at compile time with a precise line and column, so you find out immediately.",{"start":2004,"end":2007},{"line":2005,"column":27,"offset":2006},109,4198,{"line":2005,"column":587,"offset":2008},4326,{"start":2010,"end":2011},{"line":2005,"column":27,"offset":2006},{"line":2005,"column":587,"offset":2008},{"type":23,"value":89},{"type":14,"tagName":120,"properties":2014,"children":2015,"position":2077},{},[2016,2034,2040,2051,2058,2070],{"type":14,"tagName":565,"properties":2017,"children":2018,"position":2028},{},[2019],{"type":23,"value":2020,"position":2021},"Constructors reject unknown fields.",{"start":2022,"end":2025},{"line":2023,"column":32,"offset":2024},111,4330,{"line":2023,"column":2026,"offset":2027},38,4365,{"start":2029,"end":2031},{"line":2023,"column":27,"offset":2030},4328,{"line":2023,"column":2032,"offset":2033},40,4367,{"type":23,"value":558,"position":2035},{"start":2036,"end":2037},{"line":2023,"column":2032,"offset":2033},{"line":2023,"column":2038,"offset":2039},41,4368,{"type":14,"tagName":132,"properties":2041,"children":2042,"position":2048},{},[2043],{"type":23,"value":354,"position":2044},{"start":2045,"end":2046},{"line":2023,"column":2038,"offset":2039},{"line":2023,"column":562,"offset":2047},4379,{"start":2049,"end":2050},{"line":2023,"column":2038,"offset":2039},{"line":2023,"column":562,"offset":2047},{"type":23,"value":2052,"position":2053}," only accepts fields the type declares. Passing one it does not have, such as ",{"start":2054,"end":2055},{"line":2023,"column":562,"offset":2047},{"line":2023,"column":2056,"offset":2057},130,4457,{"type":14,"tagName":132,"properties":2059,"children":2060,"position":2067},{},[2061],{"type":23,"value":2062,"position":2063},"Zone.new(top=..., bottom=..., label=...)",{"start":2064,"end":2065},{"line":2023,"column":2056,"offset":2057},{"line":2023,"column":1190,"offset":2066},4499,{"start":2068,"end":2069},{"line":2023,"column":2056,"offset":2057},{"line":2023,"column":1190,"offset":2066},{"type":23,"value":2071,"position":2072},", fails with:",{"start":2073,"end":2074},{"line":2023,"column":1190,"offset":2066},{"line":2023,"column":2075,"offset":2076},185,4512,{"start":2078,"end":2079},{"line":2023,"column":27,"offset":2030},{"line":2023,"column":2075,"offset":2076},{"type":23,"value":89},{"type":14,"tagName":238,"properties":2082,"children":2083,"position":2096},{},[2084],{"type":14,"tagName":132,"properties":2085,"children":2086,"position":2089},{},[2087],{"type":23,"value":2088},"Unknown field 'label' for type 'Zone'\n",{"start":2090,"end":2093},{"line":2091,"column":27,"offset":2092},113,4514,{"line":2094,"column":56,"offset":2095},115,4559,{"start":2097,"end":2098},{"line":2091,"column":27,"offset":2092},{"line":2094,"column":56,"offset":2095},{"type":23,"value":89},{"type":14,"tagName":120,"properties":2101,"children":2102,"position":2155},{},[2103,2130,2137,2148],{"type":14,"tagName":565,"properties":2104,"children":2105,"position":2125},{},[2106,2119],{"type":14,"tagName":132,"properties":2107,"children":2108,"position":2116},{},[2109],{"type":23,"value":593,"position":2110},{"start":2111,"end":2114},{"line":2112,"column":32,"offset":2113},117,4563,{"line":2112,"column":140,"offset":2115},4569,{"start":2117,"end":2118},{"line":2112,"column":32,"offset":2113},{"line":2112,"column":140,"offset":2115},{"type":23,"value":2120,"position":2121}," only works inside methods.",{"start":2122,"end":2123},{"line":2112,"column":140,"offset":2115},{"line":2112,"column":1906,"offset":2124},4596,{"start":2126,"end":2128},{"line":2112,"column":27,"offset":2127},4561,{"line":2112,"column":2026,"offset":2129},4598,{"type":23,"value":2131,"position":2132}," It refers to the current instance, so it is meaningless outside a type's own ",{"start":2133,"end":2134},{"line":2112,"column":2026,"offset":2129},{"line":2112,"column":2135,"offset":2136},116,4676,{"type":14,"tagName":132,"properties":2138,"children":2139,"position":2145},{},[2140],{"type":23,"value":548,"position":2141},{"start":2142,"end":2143},{"line":2112,"column":2135,"offset":2136},{"line":2112,"column":53,"offset":2144},4682,{"start":2146,"end":2147},{"line":2112,"column":2135,"offset":2136},{"line":2112,"column":53,"offset":2144},{"type":23,"value":2149,"position":2150},". Using it at the top level fails with:",{"start":2151,"end":2152},{"line":2112,"column":53,"offset":2144},{"line":2112,"column":2153,"offset":2154},161,4721,{"start":2156,"end":2157},{"line":2112,"column":27,"offset":2127},{"line":2112,"column":2153,"offset":2154},{"type":23,"value":89},{"type":14,"tagName":238,"properties":2160,"children":2161,"position":2173},{},[2162],{"type":14,"tagName":132,"properties":2163,"children":2164,"position":2167},{},[2165],{"type":23,"value":2166},"'this' can only be used inside type methods\n",{"start":2168,"end":2170},{"line":79,"column":27,"offset":2169},4723,{"line":2171,"column":56,"offset":2172},121,4774,{"start":2174,"end":2175},{"line":79,"column":27,"offset":2169},{"line":2171,"column":56,"offset":2172},{"type":23,"value":89},{"type":14,"tagName":120,"properties":2178,"children":2179,"position":2272},{},[2180,2227,2233,2246,2253,2265],{"type":14,"tagName":565,"properties":2181,"children":2182,"position":2221},{},[2183,2198,2203,2215],{"type":14,"tagName":132,"properties":2184,"children":2185,"position":2195},{},[2186],{"type":23,"value":2187,"position":2188},"__type",{"start":2189,"end":2192},{"line":2190,"column":32,"offset":2191},123,4778,{"line":2190,"column":2193,"offset":2194},11,4786,{"start":2196,"end":2197},{"line":2190,"column":32,"offset":2191},{"line":2190,"column":2193,"offset":2194},{"type":23,"value":1139,"position":2199},{"start":2200,"end":2201},{"line":2190,"column":2193,"offset":2194},{"line":2190,"column":112,"offset":2202},4791,{"type":14,"tagName":132,"properties":2204,"children":2205,"position":2212},{},[2206],{"type":23,"value":2207,"position":2208},"__kscriptType",{"start":2209,"end":2210},{"line":2190,"column":112,"offset":2202},{"line":2190,"column":331,"offset":2211},4806,{"start":2213,"end":2214},{"line":2190,"column":112,"offset":2202},{"line":2190,"column":331,"offset":2211},{"type":23,"value":2216,"position":2217}," are reserved field names.",{"start":2218,"end":2219},{"line":2190,"column":331,"offset":2211},{"line":2190,"column":873,"offset":2220},4832,{"start":2222,"end":2224},{"line":2190,"column":27,"offset":2223},4776,{"line":2190,"column":2225,"offset":2226},59,4834,{"type":23,"value":2228,"position":2229}," The engine uses them internally to tag instances, so you cannot declare a field with either name. Doing so fails with ",{"start":2230,"end":2231},{"line":2190,"column":2225,"offset":2226},{"line":2190,"column":1946,"offset":2232},4953,{"type":14,"tagName":132,"properties":2234,"children":2235,"position":2243},{},[2236],{"type":23,"value":2237,"position":2238},"reserved field name '__type'",{"start":2239,"end":2240},{"line":2190,"column":1946,"offset":2232},{"line":2190,"column":2241,"offset":2242},208,4983,{"start":2244,"end":2245},{"line":2190,"column":1946,"offset":2232},{"line":2190,"column":2241,"offset":2242},{"type":23,"value":2247,"position":2248}," or ",{"start":2249,"end":2250},{"line":2190,"column":2241,"offset":2242},{"line":2190,"column":2251,"offset":2252},212,4987,{"type":14,"tagName":132,"properties":2254,"children":2255,"position":2262},{},[2256],{"type":23,"value":2257,"position":2258},"reserved field name '__kscriptType'",{"start":2259,"end":2260},{"line":2190,"column":2251,"offset":2252},{"line":2190,"column":209,"offset":2261},5024,{"start":2263,"end":2264},{"line":2190,"column":2251,"offset":2252},{"line":2190,"column":209,"offset":2261},{"type":23,"value":2266,"position":2267},". Any other field name is yours to use.",{"start":2268,"end":2269},{"line":2190,"column":209,"offset":2261},{"line":2190,"column":2270,"offset":2271},288,5063,{"start":2273,"end":2274},{"line":2190,"column":27,"offset":2223},{"line":2190,"column":2270,"offset":2271},{"type":23,"value":89},{"type":14,"tagName":2277,"properties":2278,"children":2280},"hint",{"type":2279},"info",[2281],{"type":14,"tagName":120,"properties":2282,"children":2283,"position":2335},{},[2284,2293,2305,2311,2328],{"type":23,"value":2285,"position":2286},"Types are part of the broader v3 type system. For how ",{"start":2287,"end":2290},{"line":2288,"column":27,"offset":2289},128,5091,{"line":2288,"column":2291,"offset":2292},55,5145,{"type":14,"tagName":132,"properties":2294,"children":2295,"position":2302},{},[2296],{"type":23,"value":2297,"position":2298},"na",{"start":2299,"end":2300},{"line":2288,"column":2291,"offset":2292},{"line":2288,"column":2225,"offset":2301},5149,{"start":2303,"end":2304},{"line":2288,"column":2291,"offset":2292},{"line":2288,"column":2225,"offset":2301},{"type":23,"value":2306,"position":2307},", scalars, and the built-in series types fit together, see the ",{"start":2308,"end":2309},{"line":2288,"column":2225,"offset":2301},{"line":2288,"column":53,"offset":2310},5212,{"type":14,"tagName":1049,"properties":2312,"children":2314,"position":2323},{"href":2313},"/kscript/core-concepts/type-system",[2315],{"type":23,"value":2316,"position":2317},"Type System",{"start":2318,"end":2320},{"line":2288,"column":2190,"offset":2319},5213,{"line":2288,"column":2321,"offset":2322},134,5224,{"start":2324,"end":2325},{"line":2288,"column":53,"offset":2310},{"line":2288,"column":2326,"offset":2327},171,5261,{"type":23,"value":2329,"position":2330}," overview.",{"start":2331,"end":2332},{"line":2288,"column":2326,"offset":2327},{"line":2288,"column":2333,"offset":2334},181,5271,{"start":2336,"end":2337},{"line":2288,"column":27,"offset":2289},{"line":2288,"column":2333,"offset":2334},{"quirksMode":2339},false,{"start":2341,"end":2342},{"line":27,"column":27,"offset":97},{"line":2343,"column":27,"offset":2344},132,5288,1782471842216]