[{"data":1,"prerenderedAt":2095},["ShallowReactive",2],{"kscript:cookbook/volume-spike":3},{"slug":4,"filePath":5,"frontmatter":6,"rawMarkdown":9,"tree":10},"cookbook/volume-spike","cookbook/volume-spike.md",{"title":7,"description":8},"Volume Spike Detector","Flag bars whose volume blows past its trailing average, scored as a z-score against a rolling mean and standard deviation.","---\ntitle: Volume Spike Detector\ndescription: >-\n  Flag bars whose volume blows past its trailing average, scored as a z-score\n  against a rolling mean and standard deviation.\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-green-50 text-green-600 text-sm font-medium\">\n    Beginner\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    4 min read\n  \u003C/span>\n\u003C/div>\n\nThis recipe spots unusual volume. Instead of a fixed \"alert above 1M\" threshold that means nothing across different symbols, it measures how far the current bar's volume sits above its own recent average, in standard deviations. A reading of 3 means \"three sigma above normal\" whatever the symbol or timeframe. It is the cleanest possible introduction to the kScript loop: load a series, compute a number per bar, draw it.\n\n```javascript title=\"scripts/probes/cookbook/volume_spike.ks\" lines wrap\n//@version=2\ndefine(title=\"Volume Spike Detector\", position=\"offchart\", axis=true)\n\nvar lookback = input(name=\"lookback\", type=\"number\", defaultValue=50, label=\"Lookback\", constraints={min: 10, max: 300, step: 10})\nvar threshold = input(name=\"threshold\", type=\"slider\", defaultValue=2.5, label=\"Z-Score Threshold\", constraints={min: 1, max: 6, step: 0.1})\n\ntimeseries d = ohlcv(symbol=currentSymbol, exchange=currentExchange)\n\n// Z-score of volume against its trailing mean and standard deviation.\ntimeseries vMean = sma(source=d.volume, period=lookback)\ntimeseries vStd = stddev(d.volume, lookback)\ntimeseries z = (isnum(vStd[0]) && vStd[0] > 0) ? (d.volume[0] - vMean[0]) / vStd[0] : 0\n\nplotLine(value=z, colors=[\"#64748b\"], width=1, label=[\"Volume z-score\"], desc=[\"how many standard deviations volume sits above its trailing mean\"])\nhline(value=threshold, color=\"#ef4444\", width=1)\n\n// Flag bars whose volume z-score clears the threshold.\nvar isSpike = isnum(z[0]) && z[0] >= threshold\nif (isSpike) {\n  plotShape(value=z[0], shape=\"circle\", width=6, colors=[\"#ef4444\"], fill=true, label=[\"Spike\"], desc=[\"volume anomaly above the threshold\"])\n}\n```\n\n\n## How it works\n\n**The data.** One `ohlcv` series gives the script the chart's own candles, and from it the `volume` member. That is the only input the detector needs.\n\n**The score.** A z-score answers \"how surprising is this number?\" You need two reference points: where volume usually sits, and how much it normally wobbles. `sma(d.volume, lookback)` is the trailing mean, `stddev(d.volume, lookback)` is the trailing spread. Subtract the mean from the current bar's volume and divide by the spread, and you get the distance from normal measured in standard deviations. Because it is a ratio, it is comparable across any symbol or timeframe. A whale print on BTC and a thin altcoin both light up at the same z-score.\n\n**The na guard.** Until `lookback` bars have loaded, the standard deviation is undefined, and dividing by it would produce garbage. The ternary checks `isnum(vStd[0]) && vStd[0] > 0` first and falls back to `0`, so the warm-up region reads as a flat, quiet line instead of noise.\n\n**The output.** The z-score plots as a line in an off-chart pane. `hline` draws the threshold so you can see at a glance how close any bar is to firing. When a bar clears the line, `plotShape` drops a circle right on it, turning the abstract score into an obvious marker.\n\n## Customize it\n\n- **Sensitivity.** The `threshold` slider is the main knob. Drop it toward `1.5` to catch milder bursts, raise it toward `4` to keep only genuine anomalies. The red `hline` moves with it, so the chart always shows where the bar is.\n- **Memory.** `lookback` sets how much history \"normal\" is measured against. A short window (20) reacts to recent conditions and treats a busy session as the new baseline. A long window (200) compares against a calmer, broader average and flags more.\n- **One-sided vs two-sided.** As written, only high-volume bars fire because the spike condition is `z >= threshold`. To catch unusually *quiet* bars too, add a second marker on `z \u003C= -threshold`.\n- **Turn it into an alert.** Swap the marker for an [`alert()`](/kscript/functions/alerts) call inside the `if (isSpike)` block to get notified the moment volume goes abnormal, instead of watching the pane.\n- **Color and size.** The circle and line colors are plain hex strings. Resize the marker with `width`, or color it by intensity if you want bigger spikes to stand out more.\n\n## Concepts used\n\n- [Series functions](/kscript/functions/series-functions) for `sma` and `stddev` over a trailing window\n- [Typed inputs](/kscript/functions/typed-inputs) for the `number` lookback and the `slider` threshold\n- [na and scalar types](/kscript/core-concepts/na-and-scalar-types) for the `isnum` warm-up guard\n- [Plotting](/kscript/functions/plotting) for `plotLine`, `hline`, and `plotShape`\n",{"type":11,"children":12,"data":2088,"position":2090},"root",[13,100,101,116,117,1056,1057,1075,1076,1148,1149,1220,1221,1310,1311,1379,1380,1396,1397,1795,1796,1812,1813],{"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-green-50","text-green-600","text-sm","font-medium",[49],{"type":23,"value":50,"position":51},"\n    Beginner\n  ",{"start":52,"end":55},{"line":31,"column":53,"offset":54},120,149,{"line":56,"column":32,"offset":57},4,165,{"start":59,"end":60},{"line":31,"column":32,"offset":33},{"line":56,"column":61,"offset":62},10,172,{"type":23,"value":24,"position":64},{"start":65,"end":66},{"line":56,"column":61,"offset":62},{"line":67,"column":32,"offset":68},5,175,{"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    4 min read\n  ",{"start":78,"end":81},{"line":67,"column":79,"offset":80},119,291,{"line":82,"column":32,"offset":83},7,309,{"start":85,"end":86},{"line":67,"column":32,"offset":68},{"line":82,"column":61,"offset":87},316,{"type":23,"value":89,"position":90},"\n",{"start":91,"end":92},{"line":82,"column":61,"offset":87},{"line":93,"column":27,"offset":94},8,317,{"start":96,"end":98},{"line":27,"column":27,"offset":97},0,{"line":93,"column":82,"offset":99},323,{"type":23,"value":89},{"type":14,"tagName":102,"properties":103,"children":104,"position":113},"p",{},[105],{"type":23,"value":106,"position":107},"This recipe spots unusual volume. Instead of a fixed \"alert above 1M\" threshold that means nothing across different symbols, it measures how far the current bar's volume sits above its own recent average, in standard deviations. A reading of 3 means \"three sigma above normal\" whatever the symbol or timeframe. It is the cleanest possible introduction to the kScript loop: load a series, compute a number per bar, draw it.",{"start":108,"end":110},{"line":61,"column":27,"offset":109},325,{"line":61,"column":111,"offset":112},423,747,{"start":114,"end":115},{"line":61,"column":27,"offset":109},{"line":61,"column":111,"offset":112},{"type":23,"value":89},{"type":11,"children":118},[119],{"type":14,"tagName":120,"properties":121,"children":126,"data":-1},"pre",{"class":122,"style":123,"tabindex":124,"title":125},"shiki shiki-themes github-dark github-light","--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff","0","scripts/probes/cookbook/volume_spike.ks",[127],{"type":14,"tagName":128,"properties":129,"children":130},"code",{},[131,141,142,203,204,207,208,329,330,441,442,445,446,486,487,490,491,499,500,540,541,563,564,696,697,700,701,790,791,838,839,842,843,851,852,913,914,927,928,1047,1048],{"type":14,"tagName":35,"properties":132,"children":134},{"class":133},"line",[135],{"type":14,"tagName":35,"properties":136,"children":138},{"style":137},"--shiki-dark:#6A737D;--shiki-light:#6A737D",[139],{"type":23,"value":140},"//@version=2",{"type":23,"value":89},{"type":14,"tagName":35,"properties":143,"children":144},{"class":133},[145,151,157,163,169,174,178,183,188,192,198],{"type":14,"tagName":35,"properties":146,"children":148},{"style":147},"--shiki-dark:#B392F0;--shiki-light:#6F42C1",[149],{"type":23,"value":150},"define",{"type":14,"tagName":35,"properties":152,"children":154},{"style":153},"--shiki-dark:#E1E4E8;--shiki-light:#24292E",[155],{"type":23,"value":156},"(title",{"type":14,"tagName":35,"properties":158,"children":160},{"style":159},"--shiki-dark:#F97583;--shiki-light:#D73A49",[161],{"type":23,"value":162},"=",{"type":14,"tagName":35,"properties":164,"children":166},{"style":165},"--shiki-dark:#9ECBFF;--shiki-light:#032F62",[167],{"type":23,"value":168},"\"Volume Spike Detector\"",{"type":14,"tagName":35,"properties":170,"children":171},{"style":153},[172],{"type":23,"value":173},", position",{"type":14,"tagName":35,"properties":175,"children":176},{"style":159},[177],{"type":23,"value":162},{"type":14,"tagName":35,"properties":179,"children":180},{"style":165},[181],{"type":23,"value":182},"\"offchart\"",{"type":14,"tagName":35,"properties":184,"children":185},{"style":153},[186],{"type":23,"value":187},", axis",{"type":14,"tagName":35,"properties":189,"children":190},{"style":159},[191],{"type":23,"value":162},{"type":14,"tagName":35,"properties":193,"children":195},{"style":194},"--shiki-dark:#79B8FF;--shiki-light:#005CC5",[196],{"type":23,"value":197},"true",{"type":14,"tagName":35,"properties":199,"children":200},{"style":153},[201],{"type":23,"value":202},")",{"type":23,"value":89},{"type":14,"tagName":35,"properties":205,"children":206},{"class":133},[],{"type":23,"value":89},{"type":14,"tagName":35,"properties":209,"children":210},{"class":133},[211,216,221,225,230,235,239,244,249,253,258,263,267,272,277,281,286,291,295,300,305,310,315,320,324],{"type":14,"tagName":35,"properties":212,"children":213},{"style":159},[214],{"type":23,"value":215},"var",{"type":14,"tagName":35,"properties":217,"children":218},{"style":153},[219],{"type":23,"value":220}," lookback ",{"type":14,"tagName":35,"properties":222,"children":223},{"style":159},[224],{"type":23,"value":162},{"type":14,"tagName":35,"properties":226,"children":227},{"style":147},[228],{"type":23,"value":229}," input",{"type":14,"tagName":35,"properties":231,"children":232},{"style":153},[233],{"type":23,"value":234},"(name",{"type":14,"tagName":35,"properties":236,"children":237},{"style":159},[238],{"type":23,"value":162},{"type":14,"tagName":35,"properties":240,"children":241},{"style":165},[242],{"type":23,"value":243},"\"lookback\"",{"type":14,"tagName":35,"properties":245,"children":246},{"style":153},[247],{"type":23,"value":248},", type",{"type":14,"tagName":35,"properties":250,"children":251},{"style":159},[252],{"type":23,"value":162},{"type":14,"tagName":35,"properties":254,"children":255},{"style":165},[256],{"type":23,"value":257},"\"number\"",{"type":14,"tagName":35,"properties":259,"children":260},{"style":153},[261],{"type":23,"value":262},", defaultValue",{"type":14,"tagName":35,"properties":264,"children":265},{"style":159},[266],{"type":23,"value":162},{"type":14,"tagName":35,"properties":268,"children":269},{"style":194},[270],{"type":23,"value":271},"50",{"type":14,"tagName":35,"properties":273,"children":274},{"style":153},[275],{"type":23,"value":276},", label",{"type":14,"tagName":35,"properties":278,"children":279},{"style":159},[280],{"type":23,"value":162},{"type":14,"tagName":35,"properties":282,"children":283},{"style":165},[284],{"type":23,"value":285},"\"Lookback\"",{"type":14,"tagName":35,"properties":287,"children":288},{"style":153},[289],{"type":23,"value":290},", constraints",{"type":14,"tagName":35,"properties":292,"children":293},{"style":159},[294],{"type":23,"value":162},{"type":14,"tagName":35,"properties":296,"children":297},{"style":153},[298],{"type":23,"value":299},"{min: ",{"type":14,"tagName":35,"properties":301,"children":302},{"style":194},[303],{"type":23,"value":304},"10",{"type":14,"tagName":35,"properties":306,"children":307},{"style":153},[308],{"type":23,"value":309},", max: ",{"type":14,"tagName":35,"properties":311,"children":312},{"style":194},[313],{"type":23,"value":314},"300",{"type":14,"tagName":35,"properties":316,"children":317},{"style":153},[318],{"type":23,"value":319},", step: ",{"type":14,"tagName":35,"properties":321,"children":322},{"style":194},[323],{"type":23,"value":304},{"type":14,"tagName":35,"properties":325,"children":326},{"style":153},[327],{"type":23,"value":328},"})",{"type":23,"value":89},{"type":14,"tagName":35,"properties":331,"children":332},{"class":133},[333,337,342,346,350,354,358,363,367,371,376,380,384,389,393,397,402,406,410,414,419,423,428,432,437],{"type":14,"tagName":35,"properties":334,"children":335},{"style":159},[336],{"type":23,"value":215},{"type":14,"tagName":35,"properties":338,"children":339},{"style":153},[340],{"type":23,"value":341}," threshold ",{"type":14,"tagName":35,"properties":343,"children":344},{"style":159},[345],{"type":23,"value":162},{"type":14,"tagName":35,"properties":347,"children":348},{"style":147},[349],{"type":23,"value":229},{"type":14,"tagName":35,"properties":351,"children":352},{"style":153},[353],{"type":23,"value":234},{"type":14,"tagName":35,"properties":355,"children":356},{"style":159},[357],{"type":23,"value":162},{"type":14,"tagName":35,"properties":359,"children":360},{"style":165},[361],{"type":23,"value":362},"\"threshold\"",{"type":14,"tagName":35,"properties":364,"children":365},{"style":153},[366],{"type":23,"value":248},{"type":14,"tagName":35,"properties":368,"children":369},{"style":159},[370],{"type":23,"value":162},{"type":14,"tagName":35,"properties":372,"children":373},{"style":165},[374],{"type":23,"value":375},"\"slider\"",{"type":14,"tagName":35,"properties":377,"children":378},{"style":153},[379],{"type":23,"value":262},{"type":14,"tagName":35,"properties":381,"children":382},{"style":159},[383],{"type":23,"value":162},{"type":14,"tagName":35,"properties":385,"children":386},{"style":194},[387],{"type":23,"value":388},"2.5",{"type":14,"tagName":35,"properties":390,"children":391},{"style":153},[392],{"type":23,"value":276},{"type":14,"tagName":35,"properties":394,"children":395},{"style":159},[396],{"type":23,"value":162},{"type":14,"tagName":35,"properties":398,"children":399},{"style":165},[400],{"type":23,"value":401},"\"Z-Score Threshold\"",{"type":14,"tagName":35,"properties":403,"children":404},{"style":153},[405],{"type":23,"value":290},{"type":14,"tagName":35,"properties":407,"children":408},{"style":159},[409],{"type":23,"value":162},{"type":14,"tagName":35,"properties":411,"children":412},{"style":153},[413],{"type":23,"value":299},{"type":14,"tagName":35,"properties":415,"children":416},{"style":194},[417],{"type":23,"value":418},"1",{"type":14,"tagName":35,"properties":420,"children":421},{"style":153},[422],{"type":23,"value":309},{"type":14,"tagName":35,"properties":424,"children":425},{"style":194},[426],{"type":23,"value":427},"6",{"type":14,"tagName":35,"properties":429,"children":430},{"style":153},[431],{"type":23,"value":319},{"type":14,"tagName":35,"properties":433,"children":434},{"style":194},[435],{"type":23,"value":436},"0.1",{"type":14,"tagName":35,"properties":438,"children":439},{"style":153},[440],{"type":23,"value":328},{"type":23,"value":89},{"type":14,"tagName":35,"properties":443,"children":444},{"class":133},[],{"type":23,"value":89},{"type":14,"tagName":35,"properties":447,"children":448},{"class":133},[449,454,458,463,468,472,477,481],{"type":14,"tagName":35,"properties":450,"children":451},{"style":153},[452],{"type":23,"value":453},"timeseries d ",{"type":14,"tagName":35,"properties":455,"children":456},{"style":159},[457],{"type":23,"value":162},{"type":14,"tagName":35,"properties":459,"children":460},{"style":147},[461],{"type":23,"value":462}," ohlcv",{"type":14,"tagName":35,"properties":464,"children":465},{"style":153},[466],{"type":23,"value":467},"(symbol",{"type":14,"tagName":35,"properties":469,"children":470},{"style":159},[471],{"type":23,"value":162},{"type":14,"tagName":35,"properties":473,"children":474},{"style":153},[475],{"type":23,"value":476},"currentSymbol, exchange",{"type":14,"tagName":35,"properties":478,"children":479},{"style":159},[480],{"type":23,"value":162},{"type":14,"tagName":35,"properties":482,"children":483},{"style":153},[484],{"type":23,"value":485},"currentExchange)",{"type":23,"value":89},{"type":14,"tagName":35,"properties":488,"children":489},{"class":133},[],{"type":23,"value":89},{"type":14,"tagName":35,"properties":492,"children":493},{"class":133},[494],{"type":14,"tagName":35,"properties":495,"children":496},{"style":137},[497],{"type":23,"value":498},"// Z-score of volume against its trailing mean and standard deviation.",{"type":23,"value":89},{"type":14,"tagName":35,"properties":501,"children":502},{"class":133},[503,508,512,517,522,526,531,535],{"type":14,"tagName":35,"properties":504,"children":505},{"style":153},[506],{"type":23,"value":507},"timeseries vMean ",{"type":14,"tagName":35,"properties":509,"children":510},{"style":159},[511],{"type":23,"value":162},{"type":14,"tagName":35,"properties":513,"children":514},{"style":147},[515],{"type":23,"value":516}," sma",{"type":14,"tagName":35,"properties":518,"children":519},{"style":153},[520],{"type":23,"value":521},"(source",{"type":14,"tagName":35,"properties":523,"children":524},{"style":159},[525],{"type":23,"value":162},{"type":14,"tagName":35,"properties":527,"children":528},{"style":153},[529],{"type":23,"value":530},"d.volume, period",{"type":14,"tagName":35,"properties":532,"children":533},{"style":159},[534],{"type":23,"value":162},{"type":14,"tagName":35,"properties":536,"children":537},{"style":153},[538],{"type":23,"value":539},"lookback)",{"type":23,"value":89},{"type":14,"tagName":35,"properties":542,"children":543},{"class":133},[544,549,553,558],{"type":14,"tagName":35,"properties":545,"children":546},{"style":153},[547],{"type":23,"value":548},"timeseries vStd ",{"type":14,"tagName":35,"properties":550,"children":551},{"style":159},[552],{"type":23,"value":162},{"type":14,"tagName":35,"properties":554,"children":555},{"style":147},[556],{"type":23,"value":557}," stddev",{"type":14,"tagName":35,"properties":559,"children":560},{"style":153},[561],{"type":23,"value":562},"(d.volume, lookback)",{"type":23,"value":89},{"type":14,"tagName":35,"properties":565,"children":566},{"class":133},[567,572,576,581,586,591,595,600,605,610,614,619,624,629,634,639,644,648,652,657,662,666,670,675,679,683,687,692],{"type":14,"tagName":35,"properties":568,"children":569},{"style":153},[570],{"type":23,"value":571},"timeseries z ",{"type":14,"tagName":35,"properties":573,"children":574},{"style":159},[575],{"type":23,"value":162},{"type":14,"tagName":35,"properties":577,"children":578},{"style":153},[579],{"type":23,"value":580}," (",{"type":14,"tagName":35,"properties":582,"children":583},{"style":147},[584],{"type":23,"value":585},"isnum",{"type":14,"tagName":35,"properties":587,"children":588},{"style":153},[589],{"type":23,"value":590},"(vStd[",{"type":14,"tagName":35,"properties":592,"children":593},{"style":194},[594],{"type":23,"value":124},{"type":14,"tagName":35,"properties":596,"children":597},{"style":153},[598],{"type":23,"value":599},"]) ",{"type":14,"tagName":35,"properties":601,"children":602},{"style":159},[603],{"type":23,"value":604},"&&",{"type":14,"tagName":35,"properties":606,"children":607},{"style":153},[608],{"type":23,"value":609}," vStd[",{"type":14,"tagName":35,"properties":611,"children":612},{"style":194},[613],{"type":23,"value":124},{"type":14,"tagName":35,"properties":615,"children":616},{"style":153},[617],{"type":23,"value":618},"] ",{"type":14,"tagName":35,"properties":620,"children":621},{"style":159},[622],{"type":23,"value":623},">",{"type":14,"tagName":35,"properties":625,"children":626},{"style":194},[627],{"type":23,"value":628}," 0",{"type":14,"tagName":35,"properties":630,"children":631},{"style":153},[632],{"type":23,"value":633},") ",{"type":14,"tagName":35,"properties":635,"children":636},{"style":159},[637],{"type":23,"value":638},"?",{"type":14,"tagName":35,"properties":640,"children":641},{"style":153},[642],{"type":23,"value":643}," (d.volume[",{"type":14,"tagName":35,"properties":645,"children":646},{"style":194},[647],{"type":23,"value":124},{"type":14,"tagName":35,"properties":649,"children":650},{"style":153},[651],{"type":23,"value":618},{"type":14,"tagName":35,"properties":653,"children":654},{"style":159},[655],{"type":23,"value":656},"-",{"type":14,"tagName":35,"properties":658,"children":659},{"style":153},[660],{"type":23,"value":661}," vMean[",{"type":14,"tagName":35,"properties":663,"children":664},{"style":194},[665],{"type":23,"value":124},{"type":14,"tagName":35,"properties":667,"children":668},{"style":153},[669],{"type":23,"value":599},{"type":14,"tagName":35,"properties":671,"children":672},{"style":159},[673],{"type":23,"value":674},"/",{"type":14,"tagName":35,"properties":676,"children":677},{"style":153},[678],{"type":23,"value":609},{"type":14,"tagName":35,"properties":680,"children":681},{"style":194},[682],{"type":23,"value":124},{"type":14,"tagName":35,"properties":684,"children":685},{"style":153},[686],{"type":23,"value":618},{"type":14,"tagName":35,"properties":688,"children":689},{"style":159},[690],{"type":23,"value":691},":",{"type":14,"tagName":35,"properties":693,"children":694},{"style":194},[695],{"type":23,"value":628},{"type":23,"value":89},{"type":14,"tagName":35,"properties":698,"children":699},{"class":133},[],{"type":23,"value":89},{"type":14,"tagName":35,"properties":702,"children":703},{"class":133},[704,709,714,718,723,727,732,737,742,746,750,754,758,762,767,772,776,780,785],{"type":14,"tagName":35,"properties":705,"children":706},{"style":147},[707],{"type":23,"value":708},"plotLine",{"type":14,"tagName":35,"properties":710,"children":711},{"style":153},[712],{"type":23,"value":713},"(value",{"type":14,"tagName":35,"properties":715,"children":716},{"style":159},[717],{"type":23,"value":162},{"type":14,"tagName":35,"properties":719,"children":720},{"style":153},[721],{"type":23,"value":722},"z, colors",{"type":14,"tagName":35,"properties":724,"children":725},{"style":159},[726],{"type":23,"value":162},{"type":14,"tagName":35,"properties":728,"children":729},{"style":153},[730],{"type":23,"value":731},"[",{"type":14,"tagName":35,"properties":733,"children":734},{"style":165},[735],{"type":23,"value":736},"\"#64748b\"",{"type":14,"tagName":35,"properties":738,"children":739},{"style":153},[740],{"type":23,"value":741},"], width",{"type":14,"tagName":35,"properties":743,"children":744},{"style":159},[745],{"type":23,"value":162},{"type":14,"tagName":35,"properties":747,"children":748},{"style":194},[749],{"type":23,"value":418},{"type":14,"tagName":35,"properties":751,"children":752},{"style":153},[753],{"type":23,"value":276},{"type":14,"tagName":35,"properties":755,"children":756},{"style":159},[757],{"type":23,"value":162},{"type":14,"tagName":35,"properties":759,"children":760},{"style":153},[761],{"type":23,"value":731},{"type":14,"tagName":35,"properties":763,"children":764},{"style":165},[765],{"type":23,"value":766},"\"Volume z-score\"",{"type":14,"tagName":35,"properties":768,"children":769},{"style":153},[770],{"type":23,"value":771},"], desc",{"type":14,"tagName":35,"properties":773,"children":774},{"style":159},[775],{"type":23,"value":162},{"type":14,"tagName":35,"properties":777,"children":778},{"style":153},[779],{"type":23,"value":731},{"type":14,"tagName":35,"properties":781,"children":782},{"style":165},[783],{"type":23,"value":784},"\"how many standard deviations volume sits above its trailing mean\"",{"type":14,"tagName":35,"properties":786,"children":787},{"style":153},[788],{"type":23,"value":789},"])",{"type":23,"value":89},{"type":14,"tagName":35,"properties":792,"children":793},{"class":133},[794,799,803,807,812,816,821,826,830,834],{"type":14,"tagName":35,"properties":795,"children":796},{"style":147},[797],{"type":23,"value":798},"hline",{"type":14,"tagName":35,"properties":800,"children":801},{"style":153},[802],{"type":23,"value":713},{"type":14,"tagName":35,"properties":804,"children":805},{"style":159},[806],{"type":23,"value":162},{"type":14,"tagName":35,"properties":808,"children":809},{"style":153},[810],{"type":23,"value":811},"threshold, color",{"type":14,"tagName":35,"properties":813,"children":814},{"style":159},[815],{"type":23,"value":162},{"type":14,"tagName":35,"properties":817,"children":818},{"style":165},[819],{"type":23,"value":820},"\"#ef4444\"",{"type":14,"tagName":35,"properties":822,"children":823},{"style":153},[824],{"type":23,"value":825},", width",{"type":14,"tagName":35,"properties":827,"children":828},{"style":159},[829],{"type":23,"value":162},{"type":14,"tagName":35,"properties":831,"children":832},{"style":194},[833],{"type":23,"value":418},{"type":14,"tagName":35,"properties":835,"children":836},{"style":153},[837],{"type":23,"value":202},{"type":23,"value":89},{"type":14,"tagName":35,"properties":840,"children":841},{"class":133},[],{"type":23,"value":89},{"type":14,"tagName":35,"properties":844,"children":845},{"class":133},[846],{"type":14,"tagName":35,"properties":847,"children":848},{"style":137},[849],{"type":23,"value":850},"// Flag bars whose volume z-score clears the threshold.",{"type":23,"value":89},{"type":14,"tagName":35,"properties":853,"children":854},{"class":133},[855,859,864,868,873,878,882,886,890,895,899,903,908],{"type":14,"tagName":35,"properties":856,"children":857},{"style":159},[858],{"type":23,"value":215},{"type":14,"tagName":35,"properties":860,"children":861},{"style":153},[862],{"type":23,"value":863}," isSpike ",{"type":14,"tagName":35,"properties":865,"children":866},{"style":159},[867],{"type":23,"value":162},{"type":14,"tagName":35,"properties":869,"children":870},{"style":147},[871],{"type":23,"value":872}," isnum",{"type":14,"tagName":35,"properties":874,"children":875},{"style":153},[876],{"type":23,"value":877},"(z[",{"type":14,"tagName":35,"properties":879,"children":880},{"style":194},[881],{"type":23,"value":124},{"type":14,"tagName":35,"properties":883,"children":884},{"style":153},[885],{"type":23,"value":599},{"type":14,"tagName":35,"properties":887,"children":888},{"style":159},[889],{"type":23,"value":604},{"type":14,"tagName":35,"properties":891,"children":892},{"style":153},[893],{"type":23,"value":894}," z[",{"type":14,"tagName":35,"properties":896,"children":897},{"style":194},[898],{"type":23,"value":124},{"type":14,"tagName":35,"properties":900,"children":901},{"style":153},[902],{"type":23,"value":618},{"type":14,"tagName":35,"properties":904,"children":905},{"style":159},[906],{"type":23,"value":907},">=",{"type":14,"tagName":35,"properties":909,"children":910},{"style":153},[911],{"type":23,"value":912}," threshold",{"type":23,"value":89},{"type":14,"tagName":35,"properties":915,"children":916},{"class":133},[917,922],{"type":14,"tagName":35,"properties":918,"children":919},{"style":159},[920],{"type":23,"value":921},"if",{"type":14,"tagName":35,"properties":923,"children":924},{"style":153},[925],{"type":23,"value":926}," (isSpike) {",{"type":23,"value":89},{"type":14,"tagName":35,"properties":929,"children":930},{"class":133},[931,936,940,944,949,953,958,962,967,971,975,979,984,988,992,996,1001,1005,1009,1013,1017,1021,1026,1030,1034,1038,1043],{"type":14,"tagName":35,"properties":932,"children":933},{"style":147},[934],{"type":23,"value":935},"  plotShape",{"type":14,"tagName":35,"properties":937,"children":938},{"style":153},[939],{"type":23,"value":713},{"type":14,"tagName":35,"properties":941,"children":942},{"style":159},[943],{"type":23,"value":162},{"type":14,"tagName":35,"properties":945,"children":946},{"style":153},[947],{"type":23,"value":948},"z[",{"type":14,"tagName":35,"properties":950,"children":951},{"style":194},[952],{"type":23,"value":124},{"type":14,"tagName":35,"properties":954,"children":955},{"style":153},[956],{"type":23,"value":957},"], shape",{"type":14,"tagName":35,"properties":959,"children":960},{"style":159},[961],{"type":23,"value":162},{"type":14,"tagName":35,"properties":963,"children":964},{"style":165},[965],{"type":23,"value":966},"\"circle\"",{"type":14,"tagName":35,"properties":968,"children":969},{"style":153},[970],{"type":23,"value":825},{"type":14,"tagName":35,"properties":972,"children":973},{"style":159},[974],{"type":23,"value":162},{"type":14,"tagName":35,"properties":976,"children":977},{"style":194},[978],{"type":23,"value":427},{"type":14,"tagName":35,"properties":980,"children":981},{"style":153},[982],{"type":23,"value":983},", colors",{"type":14,"tagName":35,"properties":985,"children":986},{"style":159},[987],{"type":23,"value":162},{"type":14,"tagName":35,"properties":989,"children":990},{"style":153},[991],{"type":23,"value":731},{"type":14,"tagName":35,"properties":993,"children":994},{"style":165},[995],{"type":23,"value":820},{"type":14,"tagName":35,"properties":997,"children":998},{"style":153},[999],{"type":23,"value":1000},"], fill",{"type":14,"tagName":35,"properties":1002,"children":1003},{"style":159},[1004],{"type":23,"value":162},{"type":14,"tagName":35,"properties":1006,"children":1007},{"style":194},[1008],{"type":23,"value":197},{"type":14,"tagName":35,"properties":1010,"children":1011},{"style":153},[1012],{"type":23,"value":276},{"type":14,"tagName":35,"properties":1014,"children":1015},{"style":159},[1016],{"type":23,"value":162},{"type":14,"tagName":35,"properties":1018,"children":1019},{"style":153},[1020],{"type":23,"value":731},{"type":14,"tagName":35,"properties":1022,"children":1023},{"style":165},[1024],{"type":23,"value":1025},"\"Spike\"",{"type":14,"tagName":35,"properties":1027,"children":1028},{"style":153},[1029],{"type":23,"value":771},{"type":14,"tagName":35,"properties":1031,"children":1032},{"style":159},[1033],{"type":23,"value":162},{"type":14,"tagName":35,"properties":1035,"children":1036},{"style":153},[1037],{"type":23,"value":731},{"type":14,"tagName":35,"properties":1039,"children":1040},{"style":165},[1041],{"type":23,"value":1042},"\"volume anomaly above the threshold\"",{"type":14,"tagName":35,"properties":1044,"children":1045},{"style":153},[1046],{"type":23,"value":789},{"type":23,"value":89},{"type":14,"tagName":35,"properties":1049,"children":1050},{"class":133},[1051],{"type":14,"tagName":35,"properties":1052,"children":1053},{"style":153},[1054],{"type":23,"value":1055},"}",{"type":23,"value":89},{"type":14,"tagName":1058,"properties":1059,"children":1061,"position":1071},"h2",{"id":1060},"how-it-works",[1062],{"type":23,"value":1063,"position":1064},"How it works",{"start":1065,"end":1068},{"line":1066,"column":56,"offset":1067},37,1980,{"line":1066,"column":1069,"offset":1070},16,1992,{"start":1072,"end":1074},{"line":1066,"column":27,"offset":1073},1977,{"line":1066,"column":1069,"offset":1070},{"type":23,"value":89},{"type":14,"tagName":102,"properties":1077,"children":1078,"position":1145},{},[1079,1098,1105,1118,1125,1138],{"type":14,"tagName":1080,"properties":1081,"children":1082,"position":1092},"strong",{},[1083],{"type":23,"value":1084,"position":1085},"The data.",{"start":1086,"end":1089},{"line":1087,"column":32,"offset":1088},39,1996,{"line":1087,"column":1090,"offset":1091},12,2005,{"start":1093,"end":1095},{"line":1087,"column":27,"offset":1094},1994,{"line":1087,"column":1096,"offset":1097},14,2007,{"type":23,"value":1099,"position":1100}," One ",{"start":1101,"end":1102},{"line":1087,"column":1096,"offset":1097},{"line":1087,"column":1103,"offset":1104},19,2012,{"type":14,"tagName":128,"properties":1106,"children":1107,"position":1115},{},[1108],{"type":23,"value":1109,"position":1110},"ohlcv",{"start":1111,"end":1112},{"line":1087,"column":1103,"offset":1104},{"line":1087,"column":1113,"offset":1114},26,2019,{"start":1116,"end":1117},{"line":1087,"column":1103,"offset":1104},{"line":1087,"column":1113,"offset":1114},{"type":23,"value":1119,"position":1120}," series gives the script the chart's own candles, and from it the ",{"start":1121,"end":1122},{"line":1087,"column":1113,"offset":1114},{"line":1087,"column":1123,"offset":1124},92,2085,{"type":14,"tagName":128,"properties":1126,"children":1127,"position":1135},{},[1128],{"type":23,"value":1129,"position":1130},"volume",{"start":1131,"end":1132},{"line":1087,"column":1123,"offset":1124},{"line":1087,"column":1133,"offset":1134},100,2093,{"start":1136,"end":1137},{"line":1087,"column":1123,"offset":1124},{"line":1087,"column":1133,"offset":1134},{"type":23,"value":1139,"position":1140}," member. That is the only input the detector needs.",{"start":1141,"end":1142},{"line":1087,"column":1133,"offset":1134},{"line":1087,"column":1143,"offset":1144},151,2144,{"start":1146,"end":1147},{"line":1087,"column":27,"offset":1094},{"line":1087,"column":1143,"offset":1144},{"type":23,"value":89},{"type":14,"tagName":102,"properties":1150,"children":1151,"position":1217},{},[1152,1170,1177,1190,1197,1210],{"type":14,"tagName":1080,"properties":1153,"children":1154,"position":1164},{},[1155],{"type":23,"value":1156,"position":1157},"The score.",{"start":1158,"end":1161},{"line":1159,"column":32,"offset":1160},41,2148,{"line":1159,"column":1162,"offset":1163},13,2158,{"start":1165,"end":1167},{"line":1159,"column":27,"offset":1166},2146,{"line":1159,"column":1168,"offset":1169},15,2160,{"type":23,"value":1171,"position":1172}," A z-score answers \"how surprising is this number?\" You need two reference points: where volume usually sits, and how much it normally wobbles. ",{"start":1173,"end":1174},{"line":1159,"column":1168,"offset":1169},{"line":1159,"column":1175,"offset":1176},159,2304,{"type":14,"tagName":128,"properties":1178,"children":1179,"position":1187},{},[1180],{"type":23,"value":1181,"position":1182},"sma(d.volume, lookback)",{"start":1183,"end":1184},{"line":1159,"column":1175,"offset":1176},{"line":1159,"column":1185,"offset":1186},184,2329,{"start":1188,"end":1189},{"line":1159,"column":1175,"offset":1176},{"line":1159,"column":1185,"offset":1186},{"type":23,"value":1191,"position":1192}," is the trailing mean, ",{"start":1193,"end":1194},{"line":1159,"column":1185,"offset":1186},{"line":1159,"column":1195,"offset":1196},207,2352,{"type":14,"tagName":128,"properties":1198,"children":1199,"position":1207},{},[1200],{"type":23,"value":1201,"position":1202},"stddev(d.volume, lookback)",{"start":1203,"end":1204},{"line":1159,"column":1195,"offset":1196},{"line":1159,"column":1205,"offset":1206},235,2380,{"start":1208,"end":1209},{"line":1159,"column":1195,"offset":1196},{"line":1159,"column":1205,"offset":1206},{"type":23,"value":1211,"position":1212}," is the trailing spread. Subtract the mean from the current bar's volume and divide by the spread, and you get the distance from normal measured in standard deviations. Because it is a ratio, it is comparable across any symbol or timeframe. A whale print on BTC and a thin altcoin both light up at the same z-score.",{"start":1213,"end":1214},{"line":1159,"column":1205,"offset":1206},{"line":1159,"column":1215,"offset":1216},550,2695,{"start":1218,"end":1219},{"line":1159,"column":27,"offset":1166},{"line":1159,"column":1215,"offset":1216},{"type":23,"value":89},{"type":14,"tagName":102,"properties":1222,"children":1223,"position":1307},{},[1224,1241,1248,1261,1268,1281,1288,1300],{"type":14,"tagName":1080,"properties":1225,"children":1226,"position":1235},{},[1227],{"type":23,"value":1228,"position":1229},"The na guard.",{"start":1230,"end":1233},{"line":1231,"column":32,"offset":1232},43,2699,{"line":1231,"column":1069,"offset":1234},2712,{"start":1236,"end":1238},{"line":1231,"column":27,"offset":1237},2697,{"line":1231,"column":1239,"offset":1240},18,2714,{"type":23,"value":1242,"position":1243}," Until ",{"start":1244,"end":1245},{"line":1231,"column":1239,"offset":1240},{"line":1231,"column":1246,"offset":1247},25,2721,{"type":14,"tagName":128,"properties":1249,"children":1250,"position":1258},{},[1251],{"type":23,"value":1252,"position":1253},"lookback",{"start":1254,"end":1255},{"line":1231,"column":1246,"offset":1247},{"line":1231,"column":1256,"offset":1257},35,2731,{"start":1259,"end":1260},{"line":1231,"column":1246,"offset":1247},{"line":1231,"column":1256,"offset":1257},{"type":23,"value":1262,"position":1263}," bars have loaded, the standard deviation is undefined, and dividing by it would produce garbage. The ternary checks ",{"start":1264,"end":1265},{"line":1231,"column":1256,"offset":1257},{"line":1231,"column":1266,"offset":1267},152,2848,{"type":14,"tagName":128,"properties":1269,"children":1270,"position":1278},{},[1271],{"type":23,"value":1272,"position":1273},"isnum(vStd[0]) && vStd[0] > 0",{"start":1274,"end":1275},{"line":1231,"column":1266,"offset":1267},{"line":1231,"column":1276,"offset":1277},183,2879,{"start":1279,"end":1280},{"line":1231,"column":1266,"offset":1267},{"line":1231,"column":1276,"offset":1277},{"type":23,"value":1282,"position":1283}," first and falls back to ",{"start":1284,"end":1285},{"line":1231,"column":1276,"offset":1277},{"line":1231,"column":1286,"offset":1287},208,2904,{"type":14,"tagName":128,"properties":1289,"children":1290,"position":1297},{},[1291],{"type":23,"value":124,"position":1292},{"start":1293,"end":1294},{"line":1231,"column":1286,"offset":1287},{"line":1231,"column":1295,"offset":1296},211,2907,{"start":1298,"end":1299},{"line":1231,"column":1286,"offset":1287},{"line":1231,"column":1295,"offset":1296},{"type":23,"value":1301,"position":1302},", so the warm-up region reads as a flat, quiet line instead of noise.",{"start":1303,"end":1304},{"line":1231,"column":1295,"offset":1296},{"line":1231,"column":1305,"offset":1306},280,2976,{"start":1308,"end":1309},{"line":1231,"column":27,"offset":1237},{"line":1231,"column":1305,"offset":1306},{"type":23,"value":89},{"type":14,"tagName":102,"properties":1312,"children":1313,"position":1376},{},[1314,1330,1337,1349,1356,1369],{"type":14,"tagName":1080,"properties":1315,"children":1316,"position":1325},{},[1317],{"type":23,"value":1318,"position":1319},"The output.",{"start":1320,"end":1323},{"line":1321,"column":32,"offset":1322},45,2980,{"line":1321,"column":1096,"offset":1324},2991,{"start":1326,"end":1328},{"line":1321,"column":27,"offset":1327},2978,{"line":1321,"column":1069,"offset":1329},2993,{"type":23,"value":1331,"position":1332}," The z-score plots as a line in an off-chart pane. ",{"start":1333,"end":1334},{"line":1321,"column":1069,"offset":1329},{"line":1321,"column":1335,"offset":1336},67,3044,{"type":14,"tagName":128,"properties":1338,"children":1339,"position":1346},{},[1340],{"type":23,"value":798,"position":1341},{"start":1342,"end":1343},{"line":1321,"column":1335,"offset":1336},{"line":1321,"column":1344,"offset":1345},74,3051,{"start":1347,"end":1348},{"line":1321,"column":1335,"offset":1336},{"line":1321,"column":1344,"offset":1345},{"type":23,"value":1350,"position":1351}," draws the threshold so you can see at a glance how close any bar is to firing. When a bar clears the line, ",{"start":1352,"end":1353},{"line":1321,"column":1344,"offset":1345},{"line":1321,"column":1354,"offset":1355},182,3159,{"type":14,"tagName":128,"properties":1357,"children":1358,"position":1366},{},[1359],{"type":23,"value":1360,"position":1361},"plotShape",{"start":1362,"end":1363},{"line":1321,"column":1354,"offset":1355},{"line":1321,"column":1364,"offset":1365},193,3170,{"start":1367,"end":1368},{"line":1321,"column":1354,"offset":1355},{"line":1321,"column":1364,"offset":1365},{"type":23,"value":1370,"position":1371}," drops a circle right on it, turning the abstract score into an obvious marker.",{"start":1372,"end":1373},{"line":1321,"column":1364,"offset":1365},{"line":1321,"column":1374,"offset":1375},272,3249,{"start":1377,"end":1378},{"line":1321,"column":27,"offset":1327},{"line":1321,"column":1374,"offset":1375},{"type":23,"value":89},{"type":14,"tagName":1058,"properties":1381,"children":1383,"position":1392},{"id":1382},"customize-it",[1384],{"type":23,"value":1385,"position":1386},"Customize it",{"start":1387,"end":1390},{"line":1388,"column":56,"offset":1389},47,3254,{"line":1388,"column":1069,"offset":1391},3266,{"start":1393,"end":1395},{"line":1388,"column":27,"offset":1394},3251,{"line":1388,"column":1069,"offset":1391},{"type":23,"value":89},{"type":14,"tagName":1398,"properties":1399,"children":1400,"position":1792},"ul",{},[1401,1402,1512,1513,1560,1561,1657,1658,1739,1740,1791],{"type":23,"value":89},{"type":14,"tagName":1403,"properties":1404,"children":1405,"position":1508},"li",{},[1406,1423,1430,1442,1449,1462,1469,1482,1489,1501],{"type":14,"tagName":1080,"properties":1407,"children":1408,"position":1418},{},[1409],{"type":23,"value":1410,"position":1411},"Sensitivity.",{"start":1412,"end":1415},{"line":1413,"column":67,"offset":1414},49,3272,{"line":1413,"column":1416,"offset":1417},17,3284,{"start":1419,"end":1421},{"line":1413,"column":32,"offset":1420},3270,{"line":1413,"column":1103,"offset":1422},3286,{"type":23,"value":1424,"position":1425}," The ",{"start":1426,"end":1427},{"line":1413,"column":1103,"offset":1422},{"line":1413,"column":1428,"offset":1429},24,3291,{"type":14,"tagName":128,"properties":1431,"children":1432,"position":1439},{},[1433],{"type":23,"value":1434,"position":1435},"threshold",{"start":1436,"end":1437},{"line":1413,"column":1428,"offset":1429},{"line":1413,"column":1256,"offset":1438},3302,{"start":1440,"end":1441},{"line":1413,"column":1428,"offset":1429},{"line":1413,"column":1256,"offset":1438},{"type":23,"value":1443,"position":1444}," slider is the main knob. Drop it toward ",{"start":1445,"end":1446},{"line":1413,"column":1256,"offset":1438},{"line":1413,"column":1447,"offset":1448},76,3343,{"type":14,"tagName":128,"properties":1450,"children":1451,"position":1459},{},[1452],{"type":23,"value":1453,"position":1454},"1.5",{"start":1455,"end":1456},{"line":1413,"column":1447,"offset":1448},{"line":1413,"column":1457,"offset":1458},81,3348,{"start":1460,"end":1461},{"line":1413,"column":1447,"offset":1448},{"line":1413,"column":1457,"offset":1458},{"type":23,"value":1463,"position":1464}," to catch milder bursts, raise it toward ",{"start":1465,"end":1466},{"line":1413,"column":1457,"offset":1458},{"line":1413,"column":1467,"offset":1468},122,3389,{"type":14,"tagName":128,"properties":1470,"children":1471,"position":1479},{},[1472],{"type":23,"value":1473,"position":1474},"4",{"start":1475,"end":1476},{"line":1413,"column":1467,"offset":1468},{"line":1413,"column":1477,"offset":1478},125,3392,{"start":1480,"end":1481},{"line":1413,"column":1467,"offset":1468},{"line":1413,"column":1477,"offset":1478},{"type":23,"value":1483,"position":1484}," to keep only genuine anomalies. The red ",{"start":1485,"end":1486},{"line":1413,"column":1477,"offset":1478},{"line":1413,"column":1487,"offset":1488},166,3433,{"type":14,"tagName":128,"properties":1490,"children":1491,"position":1498},{},[1492],{"type":23,"value":798,"position":1493},{"start":1494,"end":1495},{"line":1413,"column":1487,"offset":1488},{"line":1413,"column":1496,"offset":1497},173,3440,{"start":1499,"end":1500},{"line":1413,"column":1487,"offset":1488},{"line":1413,"column":1496,"offset":1497},{"type":23,"value":1502,"position":1503}," moves with it, so the chart always shows where the bar is.",{"start":1504,"end":1505},{"line":1413,"column":1496,"offset":1497},{"line":1413,"column":1506,"offset":1507},232,3499,{"start":1509,"end":1511},{"line":1413,"column":27,"offset":1510},3268,{"line":1413,"column":1506,"offset":1507},{"type":23,"value":89},{"type":14,"tagName":1403,"properties":1514,"children":1515,"position":1556},{},[1516,1532,1538,1549],{"type":14,"tagName":1080,"properties":1517,"children":1518,"position":1527},{},[1519],{"type":23,"value":1520,"position":1521},"Memory.",{"start":1522,"end":1525},{"line":1523,"column":67,"offset":1524},50,3504,{"line":1523,"column":1090,"offset":1526},3511,{"start":1528,"end":1530},{"line":1523,"column":32,"offset":1529},3502,{"line":1523,"column":1096,"offset":1531},3513,{"type":23,"value":1533,"position":1534}," ",{"start":1535,"end":1536},{"line":1523,"column":1096,"offset":1531},{"line":1523,"column":1168,"offset":1537},3514,{"type":14,"tagName":128,"properties":1539,"children":1540,"position":1546},{},[1541],{"type":23,"value":1252,"position":1542},{"start":1543,"end":1544},{"line":1523,"column":1168,"offset":1537},{"line":1523,"column":1246,"offset":1545},3524,{"start":1547,"end":1548},{"line":1523,"column":1168,"offset":1537},{"line":1523,"column":1246,"offset":1545},{"type":23,"value":1550,"position":1551}," sets how much history \"normal\" is measured against. A short window (20) reacts to recent conditions and treats a busy session as the new baseline. A long window (200) compares against a calmer, broader average and flags more.",{"start":1552,"end":1553},{"line":1523,"column":1246,"offset":1545},{"line":1523,"column":1554,"offset":1555},251,3750,{"start":1557,"end":1559},{"line":1523,"column":27,"offset":1558},3500,{"line":1523,"column":1554,"offset":1555},{"type":23,"value":89},{"type":14,"tagName":1403,"properties":1562,"children":1563,"position":1653},{},[1564,1581,1588,1601,1608,1626,1633,1646],{"type":14,"tagName":1080,"properties":1565,"children":1566,"position":1576},{},[1567],{"type":23,"value":1568,"position":1569},"One-sided vs two-sided.",{"start":1570,"end":1573},{"line":1571,"column":67,"offset":1572},51,3755,{"line":1571,"column":1574,"offset":1575},28,3778,{"start":1577,"end":1579},{"line":1571,"column":32,"offset":1578},3753,{"line":1571,"column":28,"offset":1580},3780,{"type":23,"value":1582,"position":1583}," As written, only high-volume bars fire because the spike condition is ",{"start":1584,"end":1585},{"line":1571,"column":28,"offset":1580},{"line":1571,"column":1586,"offset":1587},101,3851,{"type":14,"tagName":128,"properties":1589,"children":1590,"position":1598},{},[1591],{"type":23,"value":1592,"position":1593},"z >= threshold",{"start":1594,"end":1595},{"line":1571,"column":1586,"offset":1587},{"line":1571,"column":1596,"offset":1597},117,3867,{"start":1599,"end":1600},{"line":1571,"column":1586,"offset":1587},{"line":1571,"column":1596,"offset":1597},{"type":23,"value":1602,"position":1603},". To catch unusually ",{"start":1604,"end":1605},{"line":1571,"column":1596,"offset":1597},{"line":1571,"column":1606,"offset":1607},138,3888,{"type":14,"tagName":1609,"properties":1610,"children":1611,"position":1621},"em",{},[1612],{"type":23,"value":1613,"position":1614},"quiet",{"start":1615,"end":1618},{"line":1571,"column":1616,"offset":1617},139,3889,{"line":1571,"column":1619,"offset":1620},144,3894,{"start":1622,"end":1623},{"line":1571,"column":1606,"offset":1607},{"line":1571,"column":1624,"offset":1625},145,3895,{"type":23,"value":1627,"position":1628}," bars too, add a second marker on ",{"start":1629,"end":1630},{"line":1571,"column":1624,"offset":1625},{"line":1571,"column":1631,"offset":1632},179,3929,{"type":14,"tagName":128,"properties":1634,"children":1635,"position":1643},{},[1636],{"type":23,"value":1637,"position":1638},"z \u003C= -threshold",{"start":1639,"end":1640},{"line":1571,"column":1631,"offset":1632},{"line":1571,"column":1641,"offset":1642},196,3946,{"start":1644,"end":1645},{"line":1571,"column":1631,"offset":1632},{"line":1571,"column":1641,"offset":1642},{"type":23,"value":1647,"position":1648},".",{"start":1649,"end":1650},{"line":1571,"column":1641,"offset":1642},{"line":1571,"column":1651,"offset":1652},197,3947,{"start":1654,"end":1656},{"line":1571,"column":27,"offset":1655},3751,{"line":1571,"column":1651,"offset":1652},{"type":23,"value":89},{"type":14,"tagName":1403,"properties":1659,"children":1660,"position":1735},{},[1661,1678,1685,1710,1717,1729],{"type":14,"tagName":1080,"properties":1662,"children":1663,"position":1673},{},[1664],{"type":23,"value":1665,"position":1666},"Turn it into an alert.",{"start":1667,"end":1670},{"line":1668,"column":67,"offset":1669},52,3952,{"line":1668,"column":1671,"offset":1672},27,3974,{"start":1674,"end":1676},{"line":1668,"column":32,"offset":1675},3950,{"line":1668,"column":29,"offset":1677},3976,{"type":23,"value":1679,"position":1680}," Swap the marker for an ",{"start":1681,"end":1682},{"line":1668,"column":29,"offset":1677},{"line":1668,"column":1683,"offset":1684},53,4000,{"type":14,"tagName":1686,"properties":1687,"children":1689,"position":1705},"a",{"href":1688},"/kscript/functions/alerts",[1690],{"type":14,"tagName":128,"properties":1691,"children":1692,"position":1702},{},[1693],{"type":23,"value":1694,"position":1695},"alert()",{"start":1696,"end":1699},{"line":1668,"column":1697,"offset":1698},54,4001,{"line":1668,"column":1700,"offset":1701},63,4010,{"start":1703,"end":1704},{"line":1668,"column":1697,"offset":1698},{"line":1668,"column":1700,"offset":1701},{"start":1706,"end":1707},{"line":1668,"column":1683,"offset":1684},{"line":1668,"column":1708,"offset":1709},91,4038,{"type":23,"value":1711,"position":1712}," call inside the ",{"start":1713,"end":1714},{"line":1668,"column":1708,"offset":1709},{"line":1668,"column":1715,"offset":1716},108,4055,{"type":14,"tagName":128,"properties":1718,"children":1719,"position":1726},{},[1720],{"type":23,"value":1721,"position":1722},"if (isSpike)",{"start":1723,"end":1724},{"line":1668,"column":1715,"offset":1716},{"line":1668,"column":1467,"offset":1725},4069,{"start":1727,"end":1728},{"line":1668,"column":1715,"offset":1716},{"line":1668,"column":1467,"offset":1725},{"type":23,"value":1730,"position":1731}," block to get notified the moment volume goes abnormal, instead of watching the pane.",{"start":1732,"end":1733},{"line":1668,"column":1467,"offset":1725},{"line":1668,"column":1195,"offset":1734},4154,{"start":1736,"end":1738},{"line":1668,"column":27,"offset":1737},3948,{"line":1668,"column":1195,"offset":1734},{"type":23,"value":89},{"type":14,"tagName":1403,"properties":1741,"children":1742,"position":1787},{},[1743,1760,1767,1780],{"type":14,"tagName":1080,"properties":1744,"children":1745,"position":1754},{},[1746],{"type":23,"value":1747,"position":1748},"Color and size.",{"start":1749,"end":1751},{"line":1683,"column":67,"offset":1750},4159,{"line":1683,"column":1752,"offset":1753},20,4174,{"start":1755,"end":1757},{"line":1683,"column":32,"offset":1756},4157,{"line":1683,"column":1758,"offset":1759},22,4176,{"type":23,"value":1761,"position":1762}," The circle and line colors are plain hex strings. Resize the marker with ",{"start":1763,"end":1764},{"line":1683,"column":1758,"offset":1759},{"line":1683,"column":1765,"offset":1766},96,4250,{"type":14,"tagName":128,"properties":1768,"children":1769,"position":1777},{},[1770],{"type":23,"value":1771,"position":1772},"width",{"start":1773,"end":1774},{"line":1683,"column":1765,"offset":1766},{"line":1683,"column":1775,"offset":1776},103,4257,{"start":1778,"end":1779},{"line":1683,"column":1765,"offset":1766},{"line":1683,"column":1775,"offset":1776},{"type":23,"value":1781,"position":1782},", or color it by intensity if you want bigger spikes to stand out more.",{"start":1783,"end":1784},{"line":1683,"column":1775,"offset":1776},{"line":1683,"column":1785,"offset":1786},174,4328,{"start":1788,"end":1790},{"line":1683,"column":27,"offset":1789},4155,{"line":1683,"column":1785,"offset":1786},{"type":23,"value":89},{"start":1793,"end":1794},{"line":1413,"column":27,"offset":1510},{"line":1683,"column":1785,"offset":1786},{"type":23,"value":89},{"type":14,"tagName":1058,"properties":1797,"children":1799,"position":1808},{"id":1798},"concepts-used",[1800],{"type":23,"value":1801,"position":1802},"Concepts used",{"start":1803,"end":1806},{"line":1804,"column":56,"offset":1805},55,4333,{"line":1804,"column":1416,"offset":1807},4346,{"start":1809,"end":1811},{"line":1804,"column":27,"offset":1810},4330,{"line":1804,"column":1416,"offset":1807},{"type":23,"value":89},{"type":14,"tagName":1398,"properties":1814,"children":1815,"position":2085},{},[1816,1817,1887,1888,1955,1956,2005,2006,2084],{"type":23,"value":89},{"type":14,"tagName":1403,"properties":1818,"children":1819,"position":1883},{},[1820,1838,1844,1857,1864,1876],{"type":14,"tagName":1686,"properties":1821,"children":1823,"position":1832},{"href":1822},"/kscript/functions/series-functions",[1824],{"type":23,"value":1825,"position":1826},"Series functions",{"start":1827,"end":1830},{"line":1828,"column":56,"offset":1829},57,4351,{"line":1828,"column":1752,"offset":1831},4367,{"start":1833,"end":1835},{"line":1828,"column":32,"offset":1834},4350,{"line":1828,"column":1836,"offset":1837},58,4405,{"type":23,"value":1839,"position":1840}," for ",{"start":1841,"end":1842},{"line":1828,"column":1836,"offset":1837},{"line":1828,"column":1700,"offset":1843},4410,{"type":14,"tagName":128,"properties":1845,"children":1846,"position":1854},{},[1847],{"type":23,"value":1848,"position":1849},"sma",{"start":1850,"end":1851},{"line":1828,"column":1700,"offset":1843},{"line":1828,"column":1852,"offset":1853},68,4415,{"start":1855,"end":1856},{"line":1828,"column":1700,"offset":1843},{"line":1828,"column":1852,"offset":1853},{"type":23,"value":1858,"position":1859}," and ",{"start":1860,"end":1861},{"line":1828,"column":1852,"offset":1853},{"line":1828,"column":1862,"offset":1863},73,4420,{"type":14,"tagName":128,"properties":1865,"children":1866,"position":1873},{},[1867],{"type":23,"value":1868,"position":1869},"stddev",{"start":1870,"end":1871},{"line":1828,"column":1862,"offset":1863},{"line":1828,"column":1457,"offset":1872},4428,{"start":1874,"end":1875},{"line":1828,"column":1862,"offset":1863},{"line":1828,"column":1457,"offset":1872},{"type":23,"value":1877,"position":1878}," over a trailing window",{"start":1879,"end":1880},{"line":1828,"column":1457,"offset":1872},{"line":1828,"column":1881,"offset":1882},104,4451,{"start":1884,"end":1886},{"line":1828,"column":27,"offset":1885},4348,{"line":1828,"column":1881,"offset":1882},{"type":23,"value":89},{"type":14,"tagName":1403,"properties":1889,"children":1890,"position":1951},{},[1891,1907,1914,1926,1933,1946],{"type":14,"tagName":1686,"properties":1892,"children":1894,"position":1902},{"href":1893},"/kscript/functions/typed-inputs",[1895],{"type":23,"value":1896,"position":1897},"Typed inputs",{"start":1898,"end":1900},{"line":1836,"column":56,"offset":1899},4455,{"line":1836,"column":1069,"offset":1901},4467,{"start":1903,"end":1905},{"line":1836,"column":32,"offset":1904},4454,{"line":1836,"column":1523,"offset":1906},4501,{"type":23,"value":1908,"position":1909}," for the ",{"start":1910,"end":1911},{"line":1836,"column":1523,"offset":1906},{"line":1836,"column":1912,"offset":1913},59,4510,{"type":14,"tagName":128,"properties":1915,"children":1916,"position":1923},{},[1917],{"type":23,"value":1918,"position":1919},"number",{"start":1920,"end":1921},{"line":1836,"column":1912,"offset":1913},{"line":1836,"column":1335,"offset":1922},4518,{"start":1924,"end":1925},{"line":1836,"column":1912,"offset":1913},{"line":1836,"column":1335,"offset":1922},{"type":23,"value":1927,"position":1928}," lookback and the ",{"start":1929,"end":1930},{"line":1836,"column":1335,"offset":1922},{"line":1836,"column":1931,"offset":1932},85,4536,{"type":14,"tagName":128,"properties":1934,"children":1935,"position":1943},{},[1936],{"type":23,"value":1937,"position":1938},"slider",{"start":1939,"end":1940},{"line":1836,"column":1931,"offset":1932},{"line":1836,"column":1941,"offset":1942},93,4544,{"start":1944,"end":1945},{"line":1836,"column":1931,"offset":1932},{"line":1836,"column":1941,"offset":1942},{"type":23,"value":912,"position":1947},{"start":1948,"end":1949},{"line":1836,"column":1941,"offset":1942},{"line":1836,"column":1775,"offset":1950},4554,{"start":1952,"end":1954},{"line":1836,"column":27,"offset":1953},4452,{"line":1836,"column":1775,"offset":1950},{"type":23,"value":89},{"type":14,"tagName":1403,"properties":1957,"children":1958,"position":2001},{},[1959,1976,1982,1994],{"type":14,"tagName":1686,"properties":1960,"children":1962,"position":1971},{"href":1961},"/kscript/core-concepts/na-and-scalar-types",[1963],{"type":23,"value":1964,"position":1965},"na and scalar types",{"start":1966,"end":1968},{"line":1912,"column":56,"offset":1967},4558,{"line":1912,"column":1969,"offset":1970},23,4577,{"start":1972,"end":1974},{"line":1912,"column":32,"offset":1973},4557,{"line":1912,"column":1852,"offset":1975},4622,{"type":23,"value":1908,"position":1977},{"start":1978,"end":1979},{"line":1912,"column":1852,"offset":1975},{"line":1912,"column":1980,"offset":1981},77,4631,{"type":14,"tagName":128,"properties":1983,"children":1984,"position":1991},{},[1985],{"type":23,"value":585,"position":1986},{"start":1987,"end":1988},{"line":1912,"column":1980,"offset":1981},{"line":1912,"column":1989,"offset":1990},84,4638,{"start":1992,"end":1993},{"line":1912,"column":1980,"offset":1981},{"line":1912,"column":1989,"offset":1990},{"type":23,"value":1995,"position":1996}," warm-up guard",{"start":1997,"end":1998},{"line":1912,"column":1989,"offset":1990},{"line":1912,"column":1999,"offset":2000},98,4652,{"start":2002,"end":2004},{"line":1912,"column":27,"offset":2003},4555,{"line":1912,"column":1999,"offset":2000},{"type":23,"value":89},{"type":14,"tagName":1403,"properties":2007,"children":2008,"position":2080},{},[2009,2027,2032,2043,2049,2061,2068],{"type":14,"tagName":1686,"properties":2010,"children":2012,"position":2021},{"href":2011},"/kscript/functions/plotting",[2013],{"type":23,"value":2014,"position":2015},"Plotting",{"start":2016,"end":2019},{"line":2017,"column":56,"offset":2018},60,4656,{"line":2017,"column":1090,"offset":2020},4664,{"start":2022,"end":2024},{"line":2017,"column":32,"offset":2023},4655,{"line":2017,"column":2025,"offset":2026},42,4694,{"type":23,"value":1839,"position":2028},{"start":2029,"end":2030},{"line":2017,"column":2025,"offset":2026},{"line":2017,"column":1388,"offset":2031},4699,{"type":14,"tagName":128,"properties":2033,"children":2034,"position":2040},{},[2035],{"type":23,"value":708,"position":2036},{"start":2037,"end":2038},{"line":2017,"column":1388,"offset":2031},{"line":2017,"column":1828,"offset":2039},4709,{"start":2041,"end":2042},{"line":2017,"column":1388,"offset":2031},{"line":2017,"column":1828,"offset":2039},{"type":23,"value":2044,"position":2045},", ",{"start":2046,"end":2047},{"line":2017,"column":1828,"offset":2039},{"line":2017,"column":1912,"offset":2048},4711,{"type":14,"tagName":128,"properties":2050,"children":2051,"position":2058},{},[2052],{"type":23,"value":798,"position":2053},{"start":2054,"end":2055},{"line":2017,"column":1912,"offset":2048},{"line":2017,"column":2056,"offset":2057},66,4718,{"start":2059,"end":2060},{"line":2017,"column":1912,"offset":2048},{"line":2017,"column":2056,"offset":2057},{"type":23,"value":2062,"position":2063},", and ",{"start":2064,"end":2065},{"line":2017,"column":2056,"offset":2057},{"line":2017,"column":2066,"offset":2067},72,4724,{"type":14,"tagName":128,"properties":2069,"children":2070,"position":2077},{},[2071],{"type":23,"value":1360,"position":2072},{"start":2073,"end":2074},{"line":2017,"column":2066,"offset":2067},{"line":2017,"column":2075,"offset":2076},83,4735,{"start":2078,"end":2079},{"line":2017,"column":2066,"offset":2067},{"line":2017,"column":2075,"offset":2076},{"start":2081,"end":2083},{"line":2017,"column":27,"offset":2082},4653,{"line":2017,"column":2075,"offset":2076},{"type":23,"value":89},{"start":2086,"end":2087},{"line":1828,"column":27,"offset":1885},{"line":2017,"column":2075,"offset":2076},{"quirksMode":2089},false,{"start":2091,"end":2092},{"line":27,"column":27,"offset":97},{"line":2093,"column":27,"offset":2094},61,4736,1782471838089]