[{"data":1,"prerenderedAt":1042},["ShallowReactive",2],{"indicators:functions/alerts":3},{"slug":4,"filePath":5,"frontmatter":6,"rawMarkdown":11,"tree":12},"functions/alerts","functions/alerts.md",{"title":7,"description":8,"order":9,"section":10},"Alerts","An alert on an Indicator is a watch condition on one of its outputs: nothing in the file declares it, and every output, drawn or not, is a metric an alert can…",45,"functions","---\ntitle: \"Alerts\"\ndescription: \"An alert on an Indicator is a watch condition on one of its outputs: nothing in the file declares it, and every output, drawn or not, is a metric an alert can…\"\norder: 45\nsection: \"functions\"\n---\n\n\u003C!-- source: docs/indicators/functions/alerts.md; generated by packages/cli/scripts/gen-indicator-docs.ts, do not edit -->\n\n# Alerts\n\nAn alert on an Indicator is a watch condition on one of its outputs:\nnothing in the file declares it, and every output, drawn or not, is a\nmetric an alert can watch once the package is installed on your machine (a\ndraft from `om indicator install`, or a published package from\n`om install`). kScript (legacy) declared alerts in the script with\n`alert()` and `alertcondition()` and ran them on the platform's hosted\nengine; an Indicator's alert is a watch, evaluated by your daemon and\ndelivered to the channels you set up.\n\n## A condition on a metric id\n\n```bash\nom watch create \"SMA crossed above 100k\" --condition '{\"metric\":\"wrun/@you/my-sma/sma\",\"params\":{\"period\":20},\"selector\":{\"symbol\":\"BTCUSDT\",\"exchange\":\"BINANCE_FUTURES\",\"interval\":\"HOUR\"},\"op\":\"crosses_above\",\"value\":100000}'\nom watch create \"Golden cross\" --condition '{\"left\":{\"metric\":\"wrun/@you/ma-cross/fast\",\"params\":{\"fast\":9,\"slow\":21},\"selector\":{\"symbol\":\"BTCUSDT\",\"exchange\":\"BINANCE_FUTURES\",\"interval\":\"HOUR\"}},\"op\":\"crosses_above\",\"right\":{\"metric\":\"wrun/@you/ma-cross/slow\",\"params\":{\"fast\":9,\"slow\":21},\"selector\":{\"symbol\":\"BTCUSDT\",\"exchange\":\"BINANCE_FUTURES\",\"interval\":\"HOUR\"}}}'\n```\n\n- The metric id is `wrun/@scope/name/\u003Coutput>`, and the package's params\n  travel as a `params` object (the `:k=v` suffix is the read commands'\n  spelling).\n- The operator is a level (`gt`, `lt`, ...) against a value, or an edge\n  (`crosses_above`, `crosses_below`) read on the interval the selector\n  names; an edge always needs `selector.interval`.\n- A comparison puts an output on either side, edges included: a golden\n  cross between one package's own `fast` and `slow` outputs, price crossing\n  a package's band. Both sides name the same explicit interval, and a\n  package under an edge must read its primary input on that interval: a\n  package whose first input pins a coarser interval is refused at save time\n  with `wrun_edge_primary_interval_mismatch`, so an alert can never arm and\n  stay silent forever.\n- A bindable package (an odds input declared `binding: \"required\"`) takes\n  its market per use, as `sourceBindings` beside `params` on the operand.\n- The watch pins the exact package version and module hash it was armed\n  on. A newer install does not move it;\n  `om indicator upgrade @you/my-sma --version 0.2.0` does.\n\n```bash\nom indicator upgrade @you/my-sma --version 0.2.0\n```\n\n## How it evaluates\n\nYour daemon evaluates the watch on its heartbeat: closed bars once per bar,\nso an edge is read at the close, and a source that reads the closed bar\ntakes the same cut on a package operand as on a built-in metric. After\ndowntime the runner re-evaluates the unseen closed bars (up to 7 days) with\nthe cooldown, once and edge gates applied at each bar's close; a package's\nhistory is not replayed for that catch-up, and the gap digest names the\nIndicator legs it could not verify.\n\nThe fast lane (`latency_class: \"fast\"`, a wake on every push-stream tick)\nrefuses a condition on an Indicator metric by name (`fast_lane_ineligible`):\na package computes over a window of bars, which a single tick does not\nsupply, so Indicator alerts ride the heartbeat lane.\n\nCelled packages are a supported alert consumer: a `volume_profile` or `book`\ninput reads live at every evaluation. A `tape` input needs the running\ndaemon's buffer (a one-shot read refuses `wrun_tape_unavailable`), and\nscreens and backtests refuse celled packages by name\n(`wrun_celled_metric_unsupported`). Removing a package warns when alerts\nstill reference its metrics.\n\nDelivery is the watch's own setting: the channels you paired (`om setup\ntelegram`, Discord, Slack), the chat card, `--once` to fire a single time\nand pause. The watch docs carry the rest (the send screen, cooldowns,\ncombining conditions).\n\n## From the chart\n\nAn alert armed from the chart on a **published** Indicator runs on the\nplatform's hosted engine, beside the chart's kScript alerts, where the site\nhas Indicator alerts switched on (the chart says \"Indicator alerts are not\nenabled yet\" while they are off). Today that lane reads the chart's own\ncandles only: a package that needs another source, a pinned market or\ninterval, or a celled class is refused there, and an alert on a draft is\nrefused with \"Publish the Indicator before adding an alert\". The watch on\nyour machine is the supported path for everything else.\n\nNearest form in the kScript docs: the `alert()` row of the construct table\non [From kScript](../migrations/from-kscript.md); the hosts and what each\nreads are the table on\n[Execution model](../core-concepts/execution-model.md).\n",{"type":13,"children":14,"data":1035,"position":1037},"root",[15,25,28,29,127,128,147,148,228,229,608,609,649,650,666,667,680,681,736,737,849,850,901,902,918,919,957,958],{"type":16,"value":17,"position":18},"comment"," source: docs/indicators/functions/alerts.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},123,122,{"type":26,"value":27},"text","\n",{"type":26,"value":27},{"type":30,"tagName":31,"properties":32,"children":33,"position":124},"element","p",{},[34,44,58,65,78,85,97,104,117],{"type":26,"value":35,"position":36},"An alert on an Indicator is a watch condition on one of its outputs:\nnothing in the file declares it, and every output, drawn or not, is a\nmetric an alert can watch once the package is installed on your machine (a\ndraft from ",{"start":37,"end":40},{"line":38,"column":20,"offset":39},5,134,{"line":41,"column":42,"offset":43},8,12,359,{"type":30,"tagName":45,"properties":46,"children":47,"position":55},"code",{},[48],{"type":26,"value":49,"position":50},"om indicator install",{"start":51,"end":52},{"line":41,"column":42,"offset":43},{"line":41,"column":53,"offset":54},34,381,{"start":56,"end":57},{"line":41,"column":42,"offset":43},{"line":41,"column":53,"offset":54},{"type":26,"value":59,"position":60},", or a published package from\n",{"start":61,"end":62},{"line":41,"column":53,"offset":54},{"line":63,"column":20,"offset":64},9,411,{"type":30,"tagName":45,"properties":66,"children":67,"position":75},{},[68],{"type":26,"value":69,"position":70},"om install",{"start":71,"end":72},{"line":63,"column":20,"offset":64},{"line":63,"column":73,"offset":74},13,423,{"start":76,"end":77},{"line":63,"column":20,"offset":64},{"line":63,"column":73,"offset":74},{"type":26,"value":79,"position":80},"). kScript (legacy) declared alerts in the script with\n",{"start":81,"end":82},{"line":63,"column":73,"offset":74},{"line":83,"column":20,"offset":84},10,478,{"type":30,"tagName":45,"properties":86,"children":87,"position":94},{},[88],{"type":26,"value":89,"position":90},"alert()",{"start":91,"end":92},{"line":83,"column":20,"offset":84},{"line":83,"column":83,"offset":93},487,{"start":95,"end":96},{"line":83,"column":20,"offset":84},{"line":83,"column":83,"offset":93},{"type":26,"value":98,"position":99}," and ",{"start":100,"end":101},{"line":83,"column":83,"offset":93},{"line":83,"column":102,"offset":103},15,492,{"type":30,"tagName":45,"properties":105,"children":106,"position":114},{},[107],{"type":26,"value":108,"position":109},"alertcondition()",{"start":110,"end":111},{"line":83,"column":102,"offset":103},{"line":83,"column":112,"offset":113},33,510,{"start":115,"end":116},{"line":83,"column":102,"offset":103},{"line":83,"column":112,"offset":113},{"type":26,"value":118,"position":119}," and ran them on the platform's hosted\nengine; an Indicator's alert is a watch, evaluated by your daemon and\ndelivered to the channels you set up.",{"start":120,"end":121},{"line":83,"column":112,"offset":113},{"line":42,"column":122,"offset":123},38,656,{"start":125,"end":126},{"line":38,"column":20,"offset":39},{"line":42,"column":122,"offset":123},{"type":26,"value":27},{"type":30,"tagName":129,"properties":130,"children":132,"position":143},"h2",{"id":131},"a-condition-on-a-metric-id",[133],{"type":26,"value":134,"position":135},"A condition on a metric id",{"start":136,"end":140},{"line":137,"column":138,"offset":139},14,4,661,{"line":137,"column":141,"offset":142},30,687,{"start":144,"end":146},{"line":137,"column":20,"offset":145},658,{"line":137,"column":141,"offset":142},{"type":26,"value":27},{"type":13,"children":149},[150],{"type":30,"tagName":151,"properties":152,"children":156,"data":-1},"pre",{"class":153,"style":154,"tabindex":155},"shiki shiki-themes github-dark github-light","--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff","0",[157],{"type":30,"tagName":45,"properties":158,"children":159},{},[160,198,199],{"type":30,"tagName":161,"properties":162,"children":164},"span",{"class":163},"line",[165,171,177,182,187,193],{"type":30,"tagName":161,"properties":166,"children":168},{"style":167},"--shiki-dark:#B392F0;--shiki-light:#6F42C1",[169],{"type":26,"value":170},"om",{"type":30,"tagName":161,"properties":172,"children":174},{"style":173},"--shiki-dark:#9ECBFF;--shiki-light:#032F62",[175],{"type":26,"value":176}," watch",{"type":30,"tagName":161,"properties":178,"children":179},{"style":173},[180],{"type":26,"value":181}," create",{"type":30,"tagName":161,"properties":183,"children":184},{"style":173},[185],{"type":26,"value":186}," \"SMA crossed above 100k\"",{"type":30,"tagName":161,"properties":188,"children":190},{"style":189},"--shiki-dark:#79B8FF;--shiki-light:#005CC5",[191],{"type":26,"value":192}," --condition",{"type":30,"tagName":161,"properties":194,"children":195},{"style":173},[196],{"type":26,"value":197}," '{\"metric\":\"wrun/@you/my-sma/sma\",\"params\":{\"period\":20},\"selector\":{\"symbol\":\"BTCUSDT\",\"exchange\":\"BINANCE_FUTURES\",\"interval\":\"HOUR\"},\"op\":\"crosses_above\",\"value\":100000}'",{"type":26,"value":27},{"type":30,"tagName":161,"properties":200,"children":201},{"class":163},[202,206,210,214,219,223],{"type":30,"tagName":161,"properties":203,"children":204},{"style":167},[205],{"type":26,"value":170},{"type":30,"tagName":161,"properties":207,"children":208},{"style":173},[209],{"type":26,"value":176},{"type":30,"tagName":161,"properties":211,"children":212},{"style":173},[213],{"type":26,"value":181},{"type":30,"tagName":161,"properties":215,"children":216},{"style":173},[217],{"type":26,"value":218}," \"Golden cross\"",{"type":30,"tagName":161,"properties":220,"children":221},{"style":189},[222],{"type":26,"value":192},{"type":30,"tagName":161,"properties":224,"children":225},{"style":173},[226],{"type":26,"value":227}," '{\"left\":{\"metric\":\"wrun/@you/ma-cross/fast\",\"params\":{\"fast\":9,\"slow\":21},\"selector\":{\"symbol\":\"BTCUSDT\",\"exchange\":\"BINANCE_FUTURES\",\"interval\":\"HOUR\"}},\"op\":\"crosses_above\",\"right\":{\"metric\":\"wrun/@you/ma-cross/slow\",\"params\":{\"fast\":9,\"slow\":21},\"selector\":{\"symbol\":\"BTCUSDT\",\"exchange\":\"BINANCE_FUTURES\",\"interval\":\"HOUR\"}}}'",{"type":26,"value":27},{"type":30,"tagName":230,"properties":231,"children":232,"position":605},"ul",{},[233,234,311,312,424,425,497,498,568,569,604],{"type":26,"value":27},{"type":30,"tagName":235,"properties":236,"children":237,"position":307},"li",{},[238,248,261,268,281,288,301],{"type":26,"value":239,"position":240},"The metric id is ",{"start":241,"end":245},{"line":242,"column":243,"offset":244},21,3,1306,{"line":242,"column":246,"offset":247},20,1323,{"type":30,"tagName":45,"properties":249,"children":250,"position":258},{},[251],{"type":26,"value":252,"position":253},"wrun/@scope/name/\u003Coutput>",{"start":254,"end":255},{"line":242,"column":246,"offset":247},{"line":242,"column":256,"offset":257},47,1350,{"start":259,"end":260},{"line":242,"column":246,"offset":247},{"line":242,"column":256,"offset":257},{"type":26,"value":262,"position":263},", and the package's params\ntravel as a ",{"start":264,"end":265},{"line":242,"column":256,"offset":257},{"line":266,"column":102,"offset":267},22,1391,{"type":30,"tagName":45,"properties":269,"children":270,"position":278},{},[271],{"type":26,"value":272,"position":273},"params",{"start":274,"end":275},{"line":266,"column":102,"offset":267},{"line":266,"column":276,"offset":277},23,1399,{"start":279,"end":280},{"line":266,"column":102,"offset":267},{"line":266,"column":276,"offset":277},{"type":26,"value":282,"position":283}," object (the ",{"start":284,"end":285},{"line":266,"column":276,"offset":277},{"line":266,"column":286,"offset":287},36,1412,{"type":30,"tagName":45,"properties":289,"children":290,"position":298},{},[291],{"type":26,"value":292,"position":293},":k=v",{"start":294,"end":295},{"line":266,"column":286,"offset":287},{"line":266,"column":296,"offset":297},42,1418,{"start":299,"end":300},{"line":266,"column":286,"offset":287},{"line":266,"column":296,"offset":297},{"type":26,"value":302,"position":303}," suffix is the read commands'\nspelling).",{"start":304,"end":305},{"line":266,"column":296,"offset":297},{"line":276,"column":73,"offset":306},1460,{"start":308,"end":310},{"line":242,"column":20,"offset":309},1304,{"line":276,"column":73,"offset":306},{"type":26,"value":27},{"type":30,"tagName":235,"properties":313,"children":314,"position":420},{},[315,324,337,343,355,362,375,380,392,400,413],{"type":26,"value":316,"position":317},"The operator is a level (",{"start":318,"end":321},{"line":319,"column":243,"offset":320},24,1463,{"line":319,"column":322,"offset":323},28,1488,{"type":30,"tagName":45,"properties":325,"children":326,"position":334},{},[327],{"type":26,"value":328,"position":329},"gt",{"start":330,"end":331},{"line":319,"column":322,"offset":323},{"line":319,"column":332,"offset":333},32,1492,{"start":335,"end":336},{"line":319,"column":322,"offset":323},{"line":319,"column":332,"offset":333},{"type":26,"value":338,"position":339},", ",{"start":340,"end":341},{"line":319,"column":332,"offset":333},{"line":319,"column":53,"offset":342},1494,{"type":30,"tagName":45,"properties":344,"children":345,"position":352},{},[346],{"type":26,"value":347,"position":348},"lt",{"start":349,"end":350},{"line":319,"column":53,"offset":342},{"line":319,"column":122,"offset":351},1498,{"start":353,"end":354},{"line":319,"column":53,"offset":342},{"line":319,"column":122,"offset":351},{"type":26,"value":356,"position":357},", ...) against a value, or an edge\n(",{"start":358,"end":359},{"line":319,"column":122,"offset":351},{"line":360,"column":138,"offset":361},25,1536,{"type":30,"tagName":45,"properties":363,"children":364,"position":372},{},[365],{"type":26,"value":366,"position":367},"crosses_above",{"start":368,"end":369},{"line":360,"column":138,"offset":361},{"line":360,"column":370,"offset":371},19,1551,{"start":373,"end":374},{"line":360,"column":138,"offset":361},{"line":360,"column":370,"offset":371},{"type":26,"value":338,"position":376},{"start":377,"end":378},{"line":360,"column":370,"offset":371},{"line":360,"column":242,"offset":379},1553,{"type":30,"tagName":45,"properties":381,"children":382,"position":389},{},[383],{"type":26,"value":384,"position":385},"crosses_below",{"start":386,"end":387},{"line":360,"column":242,"offset":379},{"line":360,"column":286,"offset":388},1568,{"start":390,"end":391},{"line":360,"column":242,"offset":379},{"line":360,"column":286,"offset":388},{"type":26,"value":393,"position":394},") read on the interval the selector\nnames; an edge always needs ",{"start":395,"end":396},{"line":360,"column":286,"offset":388},{"line":397,"column":398,"offset":399},26,31,1634,{"type":30,"tagName":45,"properties":401,"children":402,"position":410},{},[403],{"type":26,"value":404,"position":405},"selector.interval",{"start":406,"end":407},{"line":397,"column":398,"offset":399},{"line":397,"column":408,"offset":409},50,1653,{"start":411,"end":412},{"line":397,"column":398,"offset":399},{"line":397,"column":408,"offset":409},{"type":26,"value":414,"position":415},".",{"start":416,"end":417},{"line":397,"column":408,"offset":409},{"line":397,"column":418,"offset":419},51,1654,{"start":421,"end":423},{"line":319,"column":20,"offset":422},1461,{"line":397,"column":418,"offset":419},{"type":26,"value":27},{"type":30,"tagName":235,"properties":426,"children":427,"position":493},{},[428,437,450,456,469,475,487],{"type":26,"value":429,"position":430},"A comparison puts an output on either side, edges included: a golden\ncross between one package's own ",{"start":431,"end":434},{"line":432,"column":243,"offset":433},27,1657,{"line":322,"column":435,"offset":436},35,1760,{"type":30,"tagName":45,"properties":438,"children":439,"position":447},{},[440],{"type":26,"value":441,"position":442},"fast",{"start":443,"end":444},{"line":322,"column":435,"offset":436},{"line":322,"column":445,"offset":446},41,1766,{"start":448,"end":449},{"line":322,"column":435,"offset":436},{"line":322,"column":445,"offset":446},{"type":26,"value":98,"position":451},{"start":452,"end":453},{"line":322,"column":445,"offset":446},{"line":322,"column":454,"offset":455},46,1771,{"type":30,"tagName":45,"properties":457,"children":458,"position":466},{},[459],{"type":26,"value":460,"position":461},"slow",{"start":462,"end":463},{"line":322,"column":454,"offset":455},{"line":322,"column":464,"offset":465},52,1777,{"start":467,"end":468},{"line":322,"column":454,"offset":455},{"line":322,"column":464,"offset":465},{"type":26,"value":470,"position":471}," outputs, price crossing\na package's band. Both sides name the same explicit interval, and a\npackage under an edge must read its primary input on that interval: a\npackage whose first input pins a coarser interval is refused at save time\nwith ",{"start":472,"end":473},{"line":322,"column":464,"offset":465},{"line":332,"column":41,"offset":474},2027,{"type":30,"tagName":45,"properties":476,"children":477,"position":484},{},[478],{"type":26,"value":479,"position":480},"wrun_edge_primary_interval_mismatch",{"start":481,"end":482},{"line":332,"column":41,"offset":474},{"line":332,"column":9,"offset":483},2064,{"start":485,"end":486},{"line":332,"column":41,"offset":474},{"line":332,"column":9,"offset":483},{"type":26,"value":488,"position":489},", so an alert can never arm and\nstay silent forever.",{"start":490,"end":491},{"line":332,"column":9,"offset":483},{"line":112,"column":276,"offset":492},2118,{"start":494,"end":496},{"line":432,"column":20,"offset":495},1655,{"line":112,"column":276,"offset":492},{"type":26,"value":27},{"type":30,"tagName":235,"properties":499,"children":500,"position":564},{},[501,508,521,527,539,545,557],{"type":26,"value":502,"position":503},"A bindable package (an odds input declared ",{"start":504,"end":506},{"line":53,"column":243,"offset":505},2121,{"line":53,"column":454,"offset":507},2164,{"type":30,"tagName":45,"properties":509,"children":510,"position":518},{},[511],{"type":26,"value":512,"position":513},"binding: \"required\"",{"start":514,"end":515},{"line":53,"column":454,"offset":507},{"line":53,"column":516,"offset":517},67,2185,{"start":519,"end":520},{"line":53,"column":454,"offset":507},{"line":53,"column":516,"offset":517},{"type":26,"value":522,"position":523},") takes\nits market per use, as ",{"start":524,"end":525},{"line":53,"column":516,"offset":517},{"line":435,"column":397,"offset":526},2218,{"type":30,"tagName":45,"properties":528,"children":529,"position":536},{},[530],{"type":26,"value":531,"position":532},"sourceBindings",{"start":533,"end":534},{"line":435,"column":397,"offset":526},{"line":435,"column":296,"offset":535},2234,{"start":537,"end":538},{"line":435,"column":397,"offset":526},{"line":435,"column":296,"offset":535},{"type":26,"value":540,"position":541}," beside ",{"start":542,"end":543},{"line":435,"column":296,"offset":535},{"line":435,"column":408,"offset":544},2242,{"type":30,"tagName":45,"properties":546,"children":547,"position":554},{},[548],{"type":26,"value":272,"position":549},{"start":550,"end":551},{"line":435,"column":408,"offset":544},{"line":435,"column":552,"offset":553},58,2250,{"start":555,"end":556},{"line":435,"column":408,"offset":544},{"line":435,"column":552,"offset":553},{"type":26,"value":558,"position":559}," on the operand.",{"start":560,"end":561},{"line":435,"column":552,"offset":553},{"line":435,"column":562,"offset":563},74,2266,{"start":565,"end":567},{"line":53,"column":20,"offset":566},2119,{"line":435,"column":562,"offset":563},{"type":26,"value":27},{"type":30,"tagName":235,"properties":570,"children":571,"position":600},{},[572,579,593],{"type":26,"value":573,"position":574},"The watch pins the exact package version and module hash it was armed\non. A newer install does not move it;\n",{"start":575,"end":577},{"line":286,"column":243,"offset":576},2269,{"line":122,"column":20,"offset":578},2379,{"type":30,"tagName":45,"properties":580,"children":581,"position":590},{},[582],{"type":26,"value":583,"position":584},"om indicator upgrade @you/my-sma --version 0.2.0",{"start":585,"end":587},{"line":122,"column":243,"offset":586},2381,{"line":122,"column":588,"offset":589},53,2431,{"start":591,"end":592},{"line":122,"column":243,"offset":586},{"line":122,"column":588,"offset":589},{"type":26,"value":594,"position":595}," does.",{"start":596,"end":597},{"line":122,"column":588,"offset":589},{"line":122,"column":598,"offset":599},59,2437,{"start":601,"end":603},{"line":286,"column":20,"offset":602},2267,{"line":122,"column":598,"offset":599},{"type":26,"value":27},{"start":606,"end":607},{"line":242,"column":20,"offset":309},{"line":122,"column":598,"offset":599},{"type":26,"value":27},{"type":13,"children":610},[611],{"type":30,"tagName":151,"properties":612,"children":613,"data":-1},{"class":153,"style":154,"tabindex":155},[614],{"type":30,"tagName":45,"properties":615,"children":616},{},[617],{"type":30,"tagName":161,"properties":618,"children":619},{"class":163},[620,624,629,634,639,644],{"type":30,"tagName":161,"properties":621,"children":622},{"style":167},[623],{"type":26,"value":170},{"type":30,"tagName":161,"properties":625,"children":626},{"style":173},[627],{"type":26,"value":628}," indicator",{"type":30,"tagName":161,"properties":630,"children":631},{"style":173},[632],{"type":26,"value":633}," upgrade",{"type":30,"tagName":161,"properties":635,"children":636},{"style":173},[637],{"type":26,"value":638}," @you/my-sma",{"type":30,"tagName":161,"properties":640,"children":641},{"style":189},[642],{"type":26,"value":643}," --version",{"type":30,"tagName":161,"properties":645,"children":646},{"style":189},[647],{"type":26,"value":648}," 0.2.0",{"type":26,"value":27},{"type":30,"tagName":129,"properties":651,"children":653,"position":662},{"id":652},"how-it-evaluates",[654],{"type":26,"value":655,"position":656},"How it evaluates",{"start":657,"end":660},{"line":658,"column":138,"offset":659},44,2504,{"line":658,"column":246,"offset":661},2520,{"start":663,"end":665},{"line":658,"column":20,"offset":664},2501,{"line":658,"column":246,"offset":661},{"type":26,"value":27},{"type":30,"tagName":31,"properties":668,"children":669,"position":677},{},[670],{"type":26,"value":671,"position":672},"Your daemon evaluates the watch on its heartbeat: closed bars once per bar,\nso an edge is read at the close, and a source that reads the closed bar\ntakes the same cut on a package operand as on a built-in metric. After\ndowntime the runner re-evaluates the unseen closed bars (up to 7 days) with\nthe cooldown, once and edge gates applied at each bar's close; a package's\nhistory is not replayed for that catch-up, and the gap digest names the\nIndicator legs it could not verify.",{"start":673,"end":675},{"line":454,"column":20,"offset":674},2522,{"line":464,"column":286,"offset":676},2999,{"start":678,"end":679},{"line":454,"column":20,"offset":674},{"line":464,"column":286,"offset":676},{"type":26,"value":27},{"type":30,"tagName":31,"properties":682,"children":683,"position":733},{},[684,693,706,713,726],{"type":26,"value":685,"position":686},"The fast lane (",{"start":687,"end":690},{"line":688,"column":20,"offset":689},54,3001,{"line":688,"column":691,"offset":692},16,3016,{"type":30,"tagName":45,"properties":694,"children":695,"position":703},{},[696],{"type":26,"value":697,"position":698},"latency_class: \"fast\"",{"start":699,"end":700},{"line":688,"column":691,"offset":692},{"line":688,"column":701,"offset":702},39,3039,{"start":704,"end":705},{"line":688,"column":691,"offset":692},{"line":688,"column":701,"offset":702},{"type":26,"value":707,"position":708},", a wake on every push-stream tick)\nrefuses a condition on an Indicator metric by name (",{"start":709,"end":710},{"line":688,"column":701,"offset":702},{"line":711,"column":588,"offset":712},55,3127,{"type":30,"tagName":45,"properties":714,"children":715,"position":723},{},[716],{"type":26,"value":717,"position":718},"fast_lane_ineligible",{"start":719,"end":720},{"line":711,"column":588,"offset":712},{"line":711,"column":721,"offset":722},75,3149,{"start":724,"end":725},{"line":711,"column":588,"offset":712},{"line":711,"column":721,"offset":722},{"type":26,"value":727,"position":728},"):\na package computes over a window of bars, which a single tick does not\nsupply, so Indicator alerts ride the heartbeat lane.",{"start":729,"end":730},{"line":711,"column":721,"offset":722},{"line":731,"column":588,"offset":732},57,3275,{"start":734,"end":735},{"line":688,"column":20,"offset":689},{"line":731,"column":588,"offset":732},{"type":26,"value":27},{"type":30,"tagName":31,"properties":738,"children":739,"position":846},{},[740,747,759,766,779,786,798,805,818,826,838],{"type":26,"value":741,"position":742},"Celled packages are a supported alert consumer: a ",{"start":743,"end":745},{"line":598,"column":20,"offset":744},3277,{"line":598,"column":418,"offset":746},3327,{"type":30,"tagName":45,"properties":748,"children":749,"position":756},{},[750],{"type":26,"value":751,"position":752},"volume_profile",{"start":753,"end":754},{"line":598,"column":418,"offset":746},{"line":598,"column":516,"offset":755},3343,{"start":757,"end":758},{"line":598,"column":418,"offset":746},{"line":598,"column":516,"offset":755},{"type":26,"value":760,"position":761}," or ",{"start":762,"end":763},{"line":598,"column":516,"offset":755},{"line":598,"column":764,"offset":765},71,3347,{"type":30,"tagName":45,"properties":767,"children":768,"position":776},{},[769],{"type":26,"value":770,"position":771},"book",{"start":772,"end":773},{"line":598,"column":764,"offset":765},{"line":598,"column":774,"offset":775},77,3353,{"start":777,"end":778},{"line":598,"column":764,"offset":765},{"line":598,"column":774,"offset":775},{"type":26,"value":780,"position":781},"\ninput reads live at every evaluation. A ",{"start":782,"end":783},{"line":598,"column":774,"offset":775},{"line":784,"column":445,"offset":785},60,3394,{"type":30,"tagName":45,"properties":787,"children":788,"position":795},{},[789],{"type":26,"value":790,"position":791},"tape",{"start":792,"end":793},{"line":784,"column":445,"offset":785},{"line":784,"column":256,"offset":794},3400,{"start":796,"end":797},{"line":784,"column":445,"offset":785},{"line":784,"column":256,"offset":794},{"type":26,"value":799,"position":800}," input needs the running\ndaemon's buffer (a one-shot read refuses ",{"start":801,"end":802},{"line":784,"column":256,"offset":794},{"line":803,"column":296,"offset":804},61,3466,{"type":30,"tagName":45,"properties":806,"children":807,"position":815},{},[808],{"type":26,"value":809,"position":810},"wrun_tape_unavailable",{"start":811,"end":812},{"line":803,"column":296,"offset":804},{"line":803,"column":813,"offset":814},65,3489,{"start":816,"end":817},{"line":803,"column":296,"offset":804},{"line":803,"column":813,"offset":814},{"type":26,"value":819,"position":820},"), and\nscreens and backtests refuse celled packages by name\n(",{"start":821,"end":822},{"line":803,"column":813,"offset":814},{"line":823,"column":824,"offset":825},63,2,3550,{"type":30,"tagName":45,"properties":827,"children":828,"position":835},{},[829],{"type":26,"value":830,"position":831},"wrun_celled_metric_unsupported",{"start":832,"end":833},{"line":823,"column":824,"offset":825},{"line":823,"column":53,"offset":834},3582,{"start":836,"end":837},{"line":823,"column":824,"offset":825},{"line":823,"column":53,"offset":834},{"type":26,"value":839,"position":840},"). Removing a package warns when alerts\nstill reference its metrics.",{"start":841,"end":842},{"line":823,"column":53,"offset":834},{"line":843,"column":844,"offset":845},64,29,3650,{"start":847,"end":848},{"line":598,"column":20,"offset":744},{"line":843,"column":844,"offset":845},{"type":26,"value":27},{"type":30,"tagName":31,"properties":851,"children":852,"position":898},{},[853,861,873,879,891],{"type":26,"value":854,"position":855},"Delivery is the watch's own setting: the channels you paired (",{"start":856,"end":859},{"line":857,"column":20,"offset":858},66,3652,{"line":857,"column":823,"offset":860},3714,{"type":30,"tagName":45,"properties":862,"children":863,"position":870},{},[864],{"type":26,"value":865,"position":866},"om setup telegram",{"start":867,"end":868},{"line":857,"column":823,"offset":860},{"line":516,"column":83,"offset":869},3733,{"start":871,"end":872},{"line":857,"column":823,"offset":860},{"line":516,"column":83,"offset":869},{"type":26,"value":874,"position":875},", Discord, Slack), the chat card, ",{"start":876,"end":877},{"line":516,"column":83,"offset":869},{"line":516,"column":658,"offset":878},3767,{"type":30,"tagName":45,"properties":880,"children":881,"position":888},{},[882],{"type":26,"value":883,"position":884},"--once",{"start":885,"end":886},{"line":516,"column":658,"offset":878},{"line":516,"column":464,"offset":887},3775,{"start":889,"end":890},{"line":516,"column":658,"offset":878},{"line":516,"column":464,"offset":887},{"type":26,"value":892,"position":893}," to fire a single time\nand pause. The watch docs carry the rest (the send screen, cooldowns,\ncombining conditions).",{"start":894,"end":895},{"line":516,"column":464,"offset":887},{"line":896,"column":276,"offset":897},69,3890,{"start":899,"end":900},{"line":857,"column":20,"offset":858},{"line":896,"column":276,"offset":897},{"type":26,"value":27},{"type":30,"tagName":129,"properties":903,"children":905,"position":914},{"id":904},"from-the-chart",[906],{"type":26,"value":907,"position":908},"From the chart",{"start":909,"end":911},{"line":764,"column":138,"offset":910},3895,{"line":764,"column":912,"offset":913},18,3909,{"start":915,"end":917},{"line":764,"column":20,"offset":916},3892,{"line":764,"column":912,"offset":913},{"type":26,"value":27},{"type":30,"tagName":31,"properties":920,"children":921,"position":954},{},[922,930,946],{"type":26,"value":923,"position":924},"An alert armed from the chart on a ",{"start":925,"end":928},{"line":926,"column":20,"offset":927},73,3911,{"line":926,"column":286,"offset":929},3946,{"type":30,"tagName":931,"properties":932,"children":933,"position":941},"strong",{},[934],{"type":26,"value":935,"position":936},"published",{"start":937,"end":939},{"line":926,"column":122,"offset":938},3948,{"line":926,"column":256,"offset":940},3957,{"start":942,"end":943},{"line":926,"column":286,"offset":929},{"line":926,"column":944,"offset":945},49,3959,{"type":26,"value":947,"position":948}," Indicator runs on the\nplatform's hosted engine, beside the chart's kScript alerts, where the site\nhas Indicator alerts switched on (the chart says \"Indicator alerts are not\nenabled yet\" while they are off). Today that lane reads the chart's own\ncandles only: a package that needs another source, a pinned market or\ninterval, or a celled class is refused there, and an alert on a draft is\nrefused with \"Publish the Indicator before adding an alert\". The watch on\nyour machine is the supported path for everything else.",{"start":949,"end":950},{"line":926,"column":944,"offset":945},{"line":951,"column":952,"offset":953},80,56,4477,{"start":955,"end":956},{"line":926,"column":20,"offset":927},{"line":951,"column":952,"offset":953},{"type":26,"value":27},{"type":30,"tagName":31,"properties":959,"children":960,"position":1032},{},[961,969,981,988,1005,1012,1027],{"type":26,"value":962,"position":963},"Nearest form in the kScript docs: the ",{"start":964,"end":967},{"line":965,"column":20,"offset":966},82,4479,{"line":965,"column":701,"offset":968},4517,{"type":30,"tagName":45,"properties":970,"children":971,"position":978},{},[972],{"type":26,"value":89,"position":973},{"start":974,"end":975},{"line":965,"column":701,"offset":968},{"line":965,"column":976,"offset":977},48,4526,{"start":979,"end":980},{"line":965,"column":701,"offset":968},{"line":965,"column":976,"offset":977},{"type":26,"value":982,"position":983}," row of the construct table\non ",{"start":984,"end":985},{"line":965,"column":976,"offset":977},{"line":986,"column":138,"offset":987},83,4557,{"type":30,"tagName":989,"properties":990,"children":992,"position":1001},"a",{"href":991},"../migrations/from-kscript.md",[993],{"type":26,"value":994,"position":995},"From kScript",{"start":996,"end":998},{"line":986,"column":38,"offset":997},4558,{"line":986,"column":999,"offset":1000},17,4570,{"start":1002,"end":1003},{"line":986,"column":138,"offset":987},{"line":986,"column":944,"offset":1004},4602,{"type":26,"value":1006,"position":1007},"; the hosts and what each\nreads are the table on\n",{"start":1008,"end":1009},{"line":986,"column":944,"offset":1004},{"line":1010,"column":20,"offset":1011},85,4651,{"type":30,"tagName":989,"properties":1013,"children":1015,"position":1023},{"href":1014},"../core-concepts/execution-model.md",[1016],{"type":26,"value":1017,"position":1018},"Execution model",{"start":1019,"end":1021},{"line":1010,"column":824,"offset":1020},4652,{"line":1010,"column":999,"offset":1022},4667,{"start":1024,"end":1025},{"line":1010,"column":20,"offset":1011},{"line":1010,"column":711,"offset":1026},4705,{"type":26,"value":414,"position":1028},{"start":1029,"end":1030},{"line":1010,"column":711,"offset":1026},{"line":1010,"column":952,"offset":1031},4706,{"start":1033,"end":1034},{"line":965,"column":20,"offset":966},{"line":1010,"column":952,"offset":1031},{"quirksMode":1036},false,{"start":1038,"end":1039},{"line":20,"column":20,"offset":21},{"line":1040,"column":20,"offset":1041},86,4707,1790157157568]