@alphacharts/indicators 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +106 -2
  3. package/dist/all-_xzUPrL7.js +21 -0
  4. package/dist/all-_xzUPrL7.js.map +1 -0
  5. package/dist/all.js +10 -0
  6. package/dist/all.js.map +1 -0
  7. package/dist/define-XUgQMhSl.js +687 -0
  8. package/dist/define-XUgQMhSl.js.map +1 -0
  9. package/dist/index.js +744 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/registry-DdYYyZN_.js +53 -0
  12. package/dist/registry-DdYYyZN_.js.map +1 -0
  13. package/dist/runner-B53M0IsJ.js +237 -0
  14. package/dist/runner-B53M0IsJ.js.map +1 -0
  15. package/dist/studies.js +1 -0
  16. package/dist/tv-volume-BYSbfrVk.js +3454 -0
  17. package/dist/tv-volume-BYSbfrVk.js.map +1 -0
  18. package/dist/types/all.d.ts +3 -0
  19. package/dist/types/chart/marker-floor.d.ts +9 -0
  20. package/dist/types/chart/studies.d.ts +192 -0
  21. package/dist/types/define.d.ts +46 -0
  22. package/dist/types/engine/feed.d.ts +88 -0
  23. package/dist/types/engine/graph.d.ts +136 -0
  24. package/dist/types/engine/kernels.d.ts +9 -0
  25. package/dist/types/engine/study.d.ts +40 -0
  26. package/dist/types/index.d.ts +15 -0
  27. package/dist/types/registry.d.ts +7 -0
  28. package/dist/types/runner.d.ts +91 -0
  29. package/dist/types/studies/all.d.ts +2 -0
  30. package/dist/types/studies/cycle.d.ts +7 -0
  31. package/dist/types/studies/index.d.ts +13 -0
  32. package/dist/types/studies/ma.d.ts +26 -0
  33. package/dist/types/studies/math.d.ts +28 -0
  34. package/dist/types/studies/momentum.d.ts +30 -0
  35. package/dist/types/studies/overlap.d.ts +14 -0
  36. package/dist/types/studies/patterns.d.ts +62 -0
  37. package/dist/types/studies/price.d.ts +6 -0
  38. package/dist/types/studies/sar.d.ts +2 -0
  39. package/dist/types/studies/statistic.d.ts +9 -0
  40. package/dist/types/studies/tv-osc.d.ts +18 -0
  41. package/dist/types/studies/tv-trend.d.ts +20 -0
  42. package/dist/types/studies/tv-volume.d.ts +15 -0
  43. package/dist/types/studies/volatility.d.ts +3 -0
  44. package/dist/types/studies/volume.d.ts +3 -0
  45. package/dist/types/types.d.ts +169 -0
  46. package/dist/types/wasm.d.ts +2 -0
  47. package/dist/types/worker.d.ts +1 -0
  48. package/dist/worker.js +8 -0
  49. package/dist/worker.js.map +1 -0
  50. package/package.json +72 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tv-volume-BYSbfrVk.js","names":["kama","t3","dema","tema","trima","ma","len","maDema","maTema","maTrima","maKama","maT3","genericMa","len","roc","ma","emaG","len","NaN_","NaN_","SOURCE_NAMES","fillBetween","hline","markers","select","defineStudy","int","band","float","source","bool","hist","COLORS","line","__defProp","__exportAll","target","name","all","no_symbols","MA_TYPES","kama$1","d","g","x","a","b","sd","p","lagP","fsc","fast","ssc","slow","self","s","i","xi","x0","sc","prevK","prev","t3$1","e","stages","k","a2","a3","c1","c2","c3","c4","e3","e4","e5","e6","dema$1","e1","e2","tema$1","trima$1","emaGated","cnt","xv","c","gv","gate","v","alpha","j","emaFirst","ma$1","type","maGated","overlap_exports","bbands","bbpb","bbw","dema","ema","kama","ma","midpoint","midprice","sma","t3","tema","trima","wma","len$3","def","mid","w","hi","lo","momentum_exports","adx","adxr","apo","aroon","aroonosc","bop","cci","cmo","dx","macd","macdext","macdfix","mfi","minusDi","minusDm","mom","plusDi","plusDm","ppo","roc$1","rocp","rocr","rocr100","rsi","stoch","stochf","stochrsi","trix","ultosc","willr","len$2","min","ch","au","ad","u","up","dn","rocLike","id","hz","base","f","cur","ref","maInput","key","twoMas","gated","line_","sig","macdColumns","macdPlots","maGatedAlpha","rawStoch","hh","ll","r","stochPlots","raw","tp","m","n","mean","dev","pos","neg","sp","sn","y","bp","tr","b1","b2","b3","t1","t2","r1","r2","r3","hb","lb","l","h","wilderSum","t","dm","plus","high","low","minus","sm","st","di","pdi","mdi","diPlots","diStudy","color","pick","volume_exports","adosc","obv","adLine","mf","pc","volatility_exports","atr","natr","trange","price_exports","avgprice","medprice","typprice","wclprice","price","statistic_exports","beta","correl","linearreg","linearregAngle","linearregIntercept","linearregSlope","stddev","tsf","variance","len$1","RAD","reg","SOURCES2","sx","sy","sxx","syy","sxy","rx","ry","math_exports","acos","add","asin","atan","ceil","cos","cosh","div","exp","floor","ln","log10","max","maxindex","minindex","minmax","minmaxindex","mult","sin","sinh","sqrt","sub","sum","tan","tanh","unary","binary","win","idx","bars","cycle_exports","htDcPeriod","htDcPhase","htPhasor","htSine","htTrendMode","htTrendline","mama","A","B","ATAN1","RAD2DEG","DEG2RAD","TWO_PI","hil","adj","lag","hilbertCore","S","warm","det","q1","ji","jq","q2","i2","re","im","per","smv","dv","qv","jiv","jqv","q2v","i2v","rev","imv","pv","sv","from","to","prevPeriod","pq2","pi2","nq2","ni2","nre","nim","first","dcPhase","sper","dc","real","imag","ang","ph","trendline","itr","it","FIRST_SHORT","FIRST_LONG","tl","sine","lead","days","trend","tv","ld","dy","ps","pl","dphi","trl","fama","phase","fv","i1","sar_exports","sar","sarext","startsShort","diffP","diffM","parabolic","isLong","sarS","ep","afL","afS","lg","ss","ee","fl","fs","long","al","as_","prevLow","prevHigh","o","newLow","newHigh","out","acc","start","maxL","maxS","patterns_exports","cdl2Crows","cdl3BlackCrows","cdl3Inside","cdl3LineStrike","cdl3Outside","cdl3StarsInSouth","cdl3WhiteSoldiers","cdlAbandonedBaby","cdlAdvanceBlock","cdlBeltHold","cdlBreakaway","cdlClosingMarubozu","cdlConcealBabySwall","cdlCounterAttack","cdlDarkCloudCover","cdlDoji","cdlDojiStar","cdlDragonflyDoji","cdlEngulfing","cdlEveningDojiStar","cdlEveningStar","cdlGapSideSideWhite","cdlGravestoneDoji","cdlHammer","cdlHangingMan","cdlHarami","cdlHaramiCross","cdlHighWave","cdlHikkake","cdlHikkakeMod","cdlHomingPigeon","cdlIdentical3Crows","cdlInNeck","cdlInvertedHammer","cdlKicking","cdlKickingByLength","cdlLadderBottom","cdlLongLeggedDoji","cdlLongLine","cdlMarubozu","cdlMatHold","cdlMatchingLow","cdlMorningDojiStar","cdlMorningStar","cdlOnNeck","cdlPiercing","cdlRickshawMan","cdlRiseFall3Methods","cdlSeparatingLines","cdlShootingStar","cdlShortLine","cdlSpinningTop","cdlStalledPattern","cdlStickSandwich","cdlTakuri","cdlTasukiGap","cdlThrusting","cdlTriStar","cdlUnique3River","cdlUpsideGap2Crows","cdlXSideGap3Methods","RB","HL","SH","BL","BS","BD","SL","SVL","SS","SVS","NEAR","FAR","EQ","O","H","Lw","C","bind","op","cl","col","rb","us","ls","range","avg","total","fma","ca","ah","cb","bh","bl","tot","P","nd","end","mkStudy","cdl","pen","ts","slots","lookback","T","penetration","fn","mx","mn","pmx","pmn","hikkake","L","mod","cdC","resC","shC","slC","cdv","rs","sh","sl","cd","res","sHi","sLo","kicking","KICK_SLOTS","tv_trend_exports","alligator","alma","chandeKrollStop","donchian","envelopes","fractals","hma","ichimoku","keltner","linregChannel","lsma","maCross","maRibbon","mcginley","median","priceChannel","smma","supertrend","vwma","zigzag","NaN_$2","len","rgba","hex","linregFit","sumX","slope","icpt","ic","bb","maOf","half","root","norm","ev","RIBBON_COLORS","RIBBON_COLS","last","channel","upper","lower","firstHigh","firstLow","ib","c0","med","DISPLACEMENT","conv","ub","dr","main","close","at","pu","dir","FRACTAL_N","FRACTAL_TIES","fractal","beyond","isHigh","ok","depth","exP","exI","pvI","hP","hI","lP","lI","back","live","liveBack","eP","eI","pI","hp","lp","li","ob","tv_osc_exports","accelerator","awesome","bullBearPower","choppiness","connorsRsi","coppock","dpo","fisher","kst","massIndex","rankCorr","rviVigor","rviVolatility","schaffTc","smiErgodic","stochTv","tsi","vortex","NaN_$1","roc","rsiOf","doubleEma","swma","trFirstBar","risingFalling","stochOf","h1","l1","value","fish","val","q","parts","num","den","vmp","vmm","str","udRsi","rank","rv","atrSum","ratio","rvi","upIn","dnIn","erg","less","eq","z","aoOf","ao","down","ac","stc","tv_volume_exports","adr","anchoredVwap","barsPerYear","chaikinMf","elderForce","eom","histVol","klinger","netVolume","pivotPoints","pvt","volume","volumeOsc","vwap","NaN_","DAY_MS","civil","era","doe","yoe","doy","mp","periodKey","off","offsetMin","day","period","cum","fresh","term","vwapOutputs","vw","cv","cpv","cpv2","OFFSET","open","vol","hl2","h3","kvo","src","LEVEL_KEYS","levels","R","kind","PIVOT_COLORS","cO","cH","cL","cC","pO","pH","pL","pC"],"sources":["../src/studies/ma.ts","../src/studies/overlap.ts","../src/studies/momentum.ts","../src/studies/volume.ts","../src/studies/volatility.ts","../src/studies/price.ts","../src/studies/statistic.ts","../src/studies/math.ts","../src/studies/cycle.ts","../src/studies/sar.ts","../src/studies/patterns.ts","../src/studies/tv-trend.ts","../src/studies/tv-osc.ts","../src/studies/tv-volume.ts"],"sourcesContent":["// Moving-average building blocks shared by the studies of this package: the\n// TA-Lib MA types as graph nodes, and EMA variants with TA-Lib's exact seeding.\n\nimport type { Col, Graph, Node } from \"../engine/graph.js\";\n\nexport const MA_TYPES = [\"sma\", \"ema\", \"wma\", \"rma\", \"dema\", \"tema\", \"trima\", \"kama\", \"t3\"] as const;\nexport type MaType = (typeof MA_TYPES)[number];\n\n/** Kaufman's adaptive MA: efficiency ratio over p bars, fast/slow smoothing limits. TA-Lib seeds with the bar before the first output. */\nexport function kama(g: Graph, x: Col, p: number, fast = 2, slow = 30): Node {\n const d = g.map2(x, g.lag(x, 1), (a, b) => Math.abs(a - b));\n const sd = g.sum(d, p);\n const lagP = g.lag(x, p);\n const fsc = 2 / (fast + 1), ssc = 2 / (slow + 1);\n const self: Node = g.calc((i) => {\n const s = sd.v[i]!, xi = x.v[i]!, x0 = lagP.v[i]!;\n if (s !== s || xi !== xi || x0 !== x0) return Number.NaN;\n const er = s <= 0 ? 0 : Math.abs(xi - x0) / s;\n const sc = (er * (fsc - ssc) + ssc) ** 2;\n const prevK = i > 0 ? self.v[i - 1]! : Number.NaN;\n const prev = prevK === prevK ? prevK : x.v[i - 1]!;\n return prev + sc * (xi - prev);\n });\n return self;\n}\n\n/** Tillson T3: six EMAs, volume factor `a`. */\nexport function t3(g: Graph, x: Col, p: number, a = 0.7): Node {\n let e: Node = g.ema(x, p);\n const stages: Node[] = [e];\n for (let k = 1; k < 6; k++) stages.push((e = g.ema(e, p)));\n const a2 = a * a, a3 = a2 * a;\n const c1 = -a3, c2 = 3 * a2 + 3 * a3, c3 = -6 * a2 - 3 * a - 3 * a3, c4 = 1 + 3 * a + a3 + 3 * a2;\n const [, , e3, e4, e5, e6] = stages as [Node, Node, Node, Node, Node, Node];\n return g.calc((i) => c1 * e6.v[i]! + c2 * e5.v[i]! + c3 * e4.v[i]! + c4 * e3.v[i]!);\n}\n\nexport function dema(g: Graph, x: Col, p: number): Node {\n const e1 = g.ema(x, p), e2 = g.ema(e1, p);\n return g.calc((i) => 2 * e1.v[i]! - e2.v[i]!);\n}\n\nexport function tema(g: Graph, x: Col, p: number): Node {\n const e1 = g.ema(x, p), e2 = g.ema(e1, p), e3 = g.ema(e2, p);\n return g.calc((i) => 3 * e1.v[i]! - 3 * e2.v[i]! + e3.v[i]!);\n}\n\n/** Triangular MA: an SMA of an SMA with the periods TA-Lib splits p into. */\nexport function trima(g: Graph, x: Col, p: number): Node {\n const odd = p % 2 === 1;\n return odd ? g.sma(g.sma(x, (p + 1) / 2), (p + 1) / 2) : g.sma(g.sma(x, p / 2), p / 2 + 1);\n}\n\n/**\n * EMA that starts at the first bar `gate` is valid, seeded with the simple\n * mean of the p values ending there (TA-Lib seeds MACD's fast EMA at the slow\n * EMA's first bar this way).\n */\nexport function emaGated(g: Graph, x: Col, p: number, alpha: number, gate: Col): Node {\n const cnt = g.validRun(x);\n return g.node((s, a, b) => {\n const xv = x.v, c = cnt.v, gv = gate.v, v = s.v;\n for (let i = a; i < b; i++) {\n const prev = i > 0 ? v[i - 1]! : Number.NaN;\n if (prev === prev && xv[i]! === xv[i]!) v[i] = prev + alpha * (xv[i]! - prev);\n else if (gv[i]! === gv[i]! && c[i]! >= p) {\n let t = 0;\n for (let j = i - p + 1; j <= i; j++) t += xv[j]!;\n v[i] = t / p;\n } else v[i] = Number.NaN;\n }\n });\n}\n\n/** EMA seeded with the first value instead of a mean (TA-Lib ADOSC). */\nexport function emaFirst(g: Graph, x: Col, alpha: number): Node {\n const self: Node = g.calc((i) => {\n const xi = x.v[i]!;\n if (xi !== xi) return Number.NaN;\n const prev = i > 0 ? self.v[i - 1]! : Number.NaN;\n return prev === prev ? prev + alpha * (xi - prev) : xi;\n });\n return self;\n}\n\n/** One moving average of the given type. */\nexport function ma(g: Graph, type: MaType, x: Col, p: number): Node {\n switch (type) {\n case \"sma\": return g.sma(x, p);\n case \"ema\": return g.ema(x, p);\n case \"wma\": return g.wma(x, p);\n case \"rma\": return g.rma(x, p);\n case \"dema\": return dema(g, x, p);\n case \"tema\": return tema(g, x, p);\n case \"trima\": return trima(g, x, p);\n case \"kama\": return kama(g, x, p);\n case \"t3\": return t3(g, x, p);\n }\n}\n\n/**\n * `ma`, except that an EMA starts where `gate` first has a value (TA-Lib's APO,\n * PPO and MACD compute the fast average from the slow average's first bar).\n */\nexport function maGated(g: Graph, type: MaType, x: Col, p: number, gate: Col): Node {\n return type === \"ema\" ? emaGated(g, x, p, 2 / (p + 1), gate) : ma(g, type, x, p);\n}\n","// Overlap studies: moving averages and bands drawn over price. TA-Lib group\n// \"Overlap Studies\" plus the TradingView moving averages built on the same nodes.\n\nimport { band, COLORS, defineStudy, float, hline, int, line, select, source } from \"../define.js\";\nimport { dema as maDema, kama as maKama, ma as genericMa, MA_TYPES, t3 as maT3, tema as maTema, trima as maTrima, type MaType } from \"./ma.js\";\n\nconst len = (def: number) => int(\"length\", def, 1, 5000);\n\nexport const sma = defineStudy({\n id: \"sma\", name: \"Simple Moving Average\", family: \"overlap\", needs: \"value\", pane: \"overlay\",\n inputs: [len(9), source()], columns: [\"sma\"], plots: [line(\"sma\", COLORS.blue)],\n label: (p) => `${p.length}`,\n build: (g, p) => [g.sma(g.src(p.source), p.length)],\n reference: \"TA-Lib SMA\",\n});\n\nexport const ema = defineStudy({\n id: \"ema\", name: \"Exponential Moving Average\", family: \"overlap\", needs: \"value\", pane: \"overlay\",\n inputs: [len(9), source()], columns: [\"ema\"], plots: [line(\"ema\", COLORS.orange)],\n label: (p) => `${p.length}`,\n build: (g, p) => [g.ema(g.src(p.source), p.length)],\n reference: \"TA-Lib EMA\",\n});\n\nexport const wma = defineStudy({\n id: \"wma\", name: \"Weighted Moving Average\", family: \"overlap\", needs: \"value\", pane: \"overlay\",\n inputs: [len(9), source()], columns: [\"wma\"], plots: [line(\"wma\", COLORS.green)],\n label: (p) => `${p.length}`,\n build: (g, p) => [g.wma(g.src(p.source), p.length)],\n reference: \"TA-Lib WMA\",\n});\n\nexport const dema = defineStudy({\n id: \"dema\", name: \"Double Exponential Moving Average\", family: \"overlap\", needs: \"value\", pane: \"overlay\",\n inputs: [len(9), source()], columns: [\"dema\"], plots: [line(\"dema\", COLORS.teal)],\n label: (p) => `${p.length}`,\n build: (g, p) => [maDema(g, g.src(p.source), p.length)],\n reference: \"TA-Lib DEMA\",\n});\n\nexport const tema = defineStudy({\n id: \"tema\", name: \"Triple Exponential Moving Average\", family: \"overlap\", needs: \"value\", pane: \"overlay\",\n inputs: [len(9), source()], columns: [\"tema\"], plots: [line(\"tema\", COLORS.pink)],\n label: (p) => `${p.length}`,\n build: (g, p) => [maTema(g, g.src(p.source), p.length)],\n reference: \"TA-Lib TEMA\",\n});\n\nexport const trima = defineStudy({\n id: \"trima\", name: \"Triangular Moving Average\", family: \"overlap\", needs: \"value\", pane: \"overlay\",\n inputs: [len(30), source()], columns: [\"trima\"], plots: [line(\"trima\", COLORS.cyan)],\n label: (p) => `${p.length}`,\n build: (g, p) => [maTrima(g, g.src(p.source), p.length)],\n reference: \"TA-Lib TRIMA\",\n});\n\nexport const kama = defineStudy({\n id: \"kama\", name: \"Kaufman Adaptive Moving Average\", family: \"overlap\", needs: \"value\", pane: \"overlay\",\n inputs: [len(10), int(\"fast\", 2, 1, 1000), int(\"slow\", 30, 2, 5000), source()], columns: [\"kama\"], plots: [line(\"kama\", COLORS.lime)],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n if (p.fast >= p.slow) throw new RangeError(`kama: fast (${p.fast}) must be below slow (${p.slow})`);\n return [maKama(g, g.src(p.source), p.length, p.fast, p.slow)];\n },\n reference: \"TA-Lib KAMA (fast/slow limits 2 and 30)\",\n});\n\nexport const t3 = defineStudy({\n id: \"t3\", name: \"Tillson T3\", family: \"overlap\", needs: \"value\", pane: \"overlay\",\n inputs: [len(5), float(\"vfactor\", 0.7, 0, 1, 0.1), source()], columns: [\"t3\"], plots: [line(\"t3\", COLORS.brown)],\n label: (p) => `${p.length}, ${p.vfactor}`,\n build: (g, p) => [maT3(g, g.src(p.source), p.length, p.vfactor)],\n reference: \"TA-Lib T3\",\n});\n\nexport const ma = defineStudy({\n id: \"ma\", name: \"Moving Average\", family: \"overlap\", needs: \"value\", pane: \"overlay\",\n inputs: [len(30), source(), select(\"type\", \"sma\", MA_TYPES)], columns: [\"ma\"], plots: [line(\"ma\", COLORS.blue)],\n label: (p) => `${p.type.toUpperCase()} ${p.length}`,\n build: (g, p) => [genericMa(g, p.type as MaType, g.src(p.source), p.length)],\n reference: \"TA-Lib MA (types SMA, EMA, WMA, DEMA, TEMA, TRIMA, KAMA, T3; RMA is Wilder's)\",\n});\n\nexport const bbands = defineStudy({\n id: \"bbands\", name: \"Bollinger Bands\", family: \"overlap\", needs: \"value\", pane: \"overlay\",\n inputs: [len(20), source(), float(\"multUp\", 2, 0, 100, 0.1), float(\"multDn\", 2, 0, 100, 0.1), select(\"maType\", \"sma\", MA_TYPES)],\n columns: [\"upper\", \"middle\", \"lower\"],\n plots: [band(\"band\", \"upper\", \"lower\", COLORS.blue, \"rgba(41,98,255,0.10)\", \"Bands\"), line(\"middle\", COLORS.orange)],\n label: (p) => `${p.length}, ${p.multUp}`,\n build: (g, p) => {\n const x = g.src(p.source);\n const mid = genericMa(g, p.maType as MaType, x, p.length);\n const sd = g.stdev(x, p.length);\n return [g.calc((i) => mid.v[i]! + p.multUp * sd.v[i]!), mid, g.calc((i) => mid.v[i]! - p.multDn * sd.v[i]!)];\n },\n reference: \"TA-Lib BBANDS (population standard deviation)\",\n});\n\nexport const bbpb = defineStudy({\n id: \"bbpb\", name: \"Bollinger Bands %B\", family: \"overlap\", needs: \"value\", pane: \"new\",\n inputs: [len(20), source(), float(\"mult\", 2, 0, 100, 0.1)], columns: [\"pb\"],\n plots: [line(\"pb\", COLORS.teal, { title: \"%B\" }), hline(\"upper\", 1), hline(\"lower\", 0), hline(\"middle\", 0.5, COLORS.gray, \"dotted\")],\n label: (p) => `${p.length}, ${p.mult}`,\n build: (g, p) => {\n const x = g.src(p.source);\n const mid = g.sma(x, p.length), sd = g.stdev(x, p.length);\n return [g.calc((i) => {\n const w = 2 * p.mult * sd.v[i]!;\n return w === 0 ? Number.NaN : (x.v[i]! - (mid.v[i]! - p.mult * sd.v[i]!)) / w;\n })];\n },\n reference: \"TradingView Bollinger Bands %B = (source - lower) / (upper - lower)\",\n});\n\nexport const bbw = defineStudy({\n id: \"bbw\", name: \"Bollinger Bands Width\", family: \"overlap\", needs: \"value\", pane: \"new\",\n inputs: [len(20), source(), float(\"mult\", 2, 0, 100, 0.1)], columns: [\"bbw\"],\n plots: [line(\"bbw\", COLORS.blue, { title: \"BBW\" })],\n label: (p) => `${p.length}, ${p.mult}`,\n build: (g, p) => {\n const x = g.src(p.source);\n const mid = g.sma(x, p.length), sd = g.stdev(x, p.length);\n return [g.calc((i) => (2 * p.mult * sd.v[i]!) / mid.v[i]!)];\n },\n reference: \"Pine ta.bbw = ((basis + dev) - (basis - dev)) / basis\",\n});\n\nexport const midpoint = defineStudy({\n id: \"midpoint\", name: \"MidPoint over period\", family: \"overlap\", needs: \"value\", pane: \"overlay\",\n inputs: [len(14), source()], columns: [\"midpoint\"], plots: [line(\"midpoint\", COLORS.purple)],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const x = g.src(p.source);\n const hi = g.highest(x, p.length), lo = g.lowest(x, p.length);\n return [g.calc((i) => (hi.v[i]! + lo.v[i]!) / 2)];\n },\n reference: \"TA-Lib MIDPOINT\",\n});\n\nexport const midprice = defineStudy({\n id: \"midprice\", name: \"Midpoint Price over period\", family: \"overlap\", needs: \"ohlc\", pane: \"overlay\",\n inputs: [len(14)], columns: [\"midprice\"], plots: [line(\"midprice\", COLORS.purple)],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const hi = g.highest(g.high, p.length), lo = g.lowest(g.low, p.length);\n return [g.calc((i) => (hi.v[i]! + lo.v[i]!) / 2)];\n },\n reference: \"TA-Lib MIDPRICE\",\n});\n","// Momentum studies and oscillators: TA-Lib group \"Momentum Indicators\" with the\n// TradingView oscillators that are the same computation. Where TradingView and\n// TA-Lib differ in method the input says so and TradingView's is the default.\n\nimport type { Col, Graph, Node } from \"../engine/graph.js\";\nimport { band, COLORS, defineStudy, float, hist, hline, int, line, select, source } from \"../define.js\";\nimport { ma, maGated, MA_TYPES, type MaType } from \"./ma.js\";\n\nconst len = (def: number, min = 1) => int(\"length\", def, min, 5000);\n\n// ---- RSI, CMO ---------------------------------------------------------------\n\nexport const rsi = defineStudy({\n id: \"rsi\", name: \"Relative Strength Index\", family: \"momentum\", needs: \"value\", pane: \"new\",\n inputs: [len(14), source()], columns: [\"rsi\"],\n plots: [line(\"rsi\", COLORS.purple), hline(\"upper\", 70), hline(\"lower\", 30), hline(\"middle\", 50, COLORS.gray, \"dotted\")],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const ch = g.change(g.src(p.source), 1);\n const au = g.rma(g.map(ch, (d) => (d > 0 ? d : d === d ? 0 : Number.NaN)), p.length);\n const ad = g.rma(g.map(ch, (d) => (d < 0 ? -d : d === d ? 0 : Number.NaN)), p.length);\n return [g.map2(au, ad, (u, d) => (u + d === 0 ? 100 : (100 * u) / (u + d)))];\n },\n reference: \"TA-Lib RSI arithmetic (Wilder smoothing, seeded with the mean of the first `length` changes). A flat opening (average gain and loss both 0, RS = 0/0) is 100, the convention of charting packages; TA-Lib reports 0 there\",\n});\n\nexport const cmo = defineStudy({\n id: \"cmo\", name: \"Chande Momentum Oscillator\", family: \"momentum\", needs: \"value\", pane: \"new\",\n inputs: [len(9), source(), select(\"method\", \"sum\", [\"sum\", \"wilder\"])], columns: [\"cmo\"],\n plots: [line(\"cmo\", COLORS.blue), hline(\"upper\", 50), hline(\"lower\", -50), hline(\"zero\", 0, COLORS.gray, \"dotted\")],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const ch = g.change(g.src(p.source), 1);\n const up = g.map(ch, (d) => (d > 0 ? d : d === d ? 0 : Number.NaN));\n const dn = g.map(ch, (d) => (d < 0 ? -d : d === d ? 0 : Number.NaN));\n const [u, d] = p.method === \"wilder\" ? [g.rma(up, p.length), g.rma(dn, p.length)] : [g.sum(up, p.length), g.sum(dn, p.length)];\n return [g.map2(u, d, (a, b) => (a + b === 0 ? 0 : (100 * (a - b)) / (a + b)))];\n },\n reference: \"method sum = TradingView ta.cmo (window sums); method wilder = TA-Lib CMO\",\n});\n\n// ---- rate of change family ----------------------------------------------------\n\nexport const mom = defineStudy({\n id: \"mom\", name: \"Momentum\", family: \"momentum\", needs: \"value\", pane: \"new\",\n inputs: [len(10), source()], columns: [\"mom\"], plots: [line(\"mom\", COLORS.blue), hline(\"zero\", 0, COLORS.gray, \"dotted\")],\n label: (p) => `${p.length}`,\n build: (g, p) => [g.change(g.src(p.source), p.length)],\n reference: \"TA-Lib MOM\",\n});\n\nconst rocLike = (id: string, name: string, f: (x: number, b: number) => number, ref: string, hz?: number) =>\n defineStudy({\n id, name, family: \"momentum\", needs: \"value\", pane: \"new\",\n inputs: [len(id === \"roc\" ? 9 : 10), source()], columns: [id],\n plots: [line(id, COLORS.orange), ...(hz === undefined ? [] : [hline(\"base\", hz, COLORS.gray, \"dotted\")])],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const x = g.src(p.source), b = g.lag(x, p.length);\n return [g.map2(x, b, (cur, base) => (base === 0 ? Number.NaN : f(cur, base)))];\n },\n reference: ref,\n });\n\nexport const roc = rocLike(\"roc\", \"Rate of Change\", (x, b) => ((x - b) / b) * 100, \"TA-Lib ROC = (x / x[n] - 1) * 100\", 0);\nexport const rocp = rocLike(\"rocp\", \"Rate of Change Percentage\", (x, b) => (x - b) / b, \"TA-Lib ROCP = (x - x[n]) / x[n]\", 0);\nexport const rocr = rocLike(\"rocr\", \"Rate of Change Ratio\", (x, b) => x / b, \"TA-Lib ROCR = x / x[n]\", 1);\nexport const rocr100 = rocLike(\"rocr100\", \"Rate of Change Ratio 100 scale\", (x, b) => (x / b) * 100, \"TA-Lib ROCR100 = x / x[n] * 100\", 100);\n\nexport const trix = defineStudy({\n id: \"trix\", name: \"TRIX\", family: \"momentum\", needs: \"value\", pane: \"new\",\n inputs: [len(18), source()], columns: [\"trix\"], plots: [line(\"trix\", COLORS.red), hline(\"zero\", 0, COLORS.gray, \"dotted\")],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const e3 = g.ema(g.ema(g.ema(g.src(p.source), p.length), p.length), p.length);\n return [g.map2(e3, g.lag(e3, 1), (a, b) => (b === 0 ? Number.NaN : (a / b - 1) * 100))];\n },\n reference: \"TA-Lib TRIX = 1-bar ROC (percent) of a triple-smoothed EMA\",\n});\n\n// ---- price oscillators and MACD ---------------------------------------------\n\nconst maInput = (def: string, key = \"maType\") => select(key, def, MA_TYPES);\n\nfunction twoMas(g: Graph, x: Col, fast: number, slow: number, type: MaType, gated = false): [Node, Node] {\n const s = ma(g, type, x, slow);\n return [gated ? maGated(g, type, x, fast, s) : ma(g, type, x, fast), s];\n}\n\nexport const apo = defineStudy({\n id: \"apo\", name: \"Absolute Price Oscillator\", family: \"momentum\", needs: \"value\", pane: \"new\",\n inputs: [int(\"fast\", 12, 1, 5000), int(\"slow\", 26, 2, 5000), source(), maInput(\"ema\")], columns: [\"apo\"],\n plots: [line(\"apo\", COLORS.blue), hline(\"zero\", 0, COLORS.gray, \"dotted\")],\n label: (p) => `${p.fast}, ${p.slow}`,\n build: (g, p) => {\n if (p.fast >= p.slow) throw new RangeError(`apo: fast (${p.fast}) must be below slow (${p.slow})`);\n const [f, s] = twoMas(g, g.src(p.source), p.fast, p.slow, p.maType);\n return [g.sub(f, s)];\n },\n reference: \"TA-Lib APO (fast average starts at the slow average's first bar)\",\n});\n\nexport const ppo = defineStudy({\n id: \"ppo\", name: \"Percentage Price Oscillator\", family: \"momentum\", needs: \"value\", pane: \"new\",\n inputs: [int(\"fast\", 12, 1, 5000), int(\"slow\", 26, 2, 5000), int(\"signal\", 9, 1, 5000), source(), maInput(\"ema\")], columns: [\"ppo\", \"signal\", \"histogram\"],\n plots: [hist(\"histogram\", COLORS.green, COLORS.red), line(\"ppo\", COLORS.blue), line(\"signal\", COLORS.orange)],\n label: (p) => `${p.fast}, ${p.slow}, ${p.signal}`,\n build: (g, p) => {\n if (p.fast >= p.slow) throw new RangeError(`ppo: fast (${p.fast}) must be below slow (${p.slow})`);\n const [f, s] = twoMas(g, g.src(p.source), p.fast, p.slow, p.maType);\n const line_ = g.map2(f, s, (a, b) => (b === 0 ? Number.NaN : ((a - b) / b) * 100));\n const sig = g.ema(line_, p.signal);\n return [line_, sig, g.sub(line_, sig)];\n },\n reference: \"TA-Lib PPO (line only; the signal EMA and histogram follow TradingView's Price Oscillator)\",\n});\n\nconst macdColumns = [\"macd\", \"signal\", \"histogram\"];\nconst macdPlots = [hist(\"histogram\", COLORS.green, COLORS.red), line(\"macd\", COLORS.blue), line(\"signal\", COLORS.orange)];\n\nexport const macd = defineStudy({\n id: \"macd\", name: \"MACD\", family: \"momentum\", needs: \"value\", pane: \"new\",\n inputs: [int(\"fast\", 12, 1, 5000), int(\"slow\", 26, 2, 5000), int(\"signal\", 9, 1, 5000), source()], columns: macdColumns, plots: macdPlots,\n label: (p) => `${p.fast}, ${p.slow}, ${p.signal}`,\n build: (g, p) => {\n if (p.fast >= p.slow) throw new RangeError(`macd: fast (${p.fast}) must be below slow (${p.slow})`);\n const x = g.src(p.source);\n const [f, s] = twoMas(g, x, p.fast, p.slow, \"ema\", true);\n const line_ = g.sub(f, s), sig = g.ema(line_, p.signal);\n return [line_, sig, g.sub(line_, sig)];\n },\n reference: \"TA-Lib MACD (the fast EMA is seeded at the slow EMA's first bar; TradingView seeds it at bar 0, the difference decays below 1e-9 within ~150 bars)\",\n});\n\nexport const macdfix = defineStudy({\n id: \"macdfix\", name: \"MACD Fix 12/26\", family: \"momentum\", needs: \"value\", pane: \"new\",\n inputs: [int(\"signal\", 9, 1, 5000), source()], columns: macdColumns, plots: macdPlots,\n label: (p) => `${p.signal}`,\n build: (g, p) => {\n const x = g.src(p.source);\n const s = g.smooth(x, 26, 0.075);\n const f = maGatedAlpha(g, x, 12, 0.15, s);\n const line_ = g.sub(f, s), sig = g.ema(line_, p.signal);\n return [line_, sig, g.sub(line_, sig)];\n },\n reference: \"TA-Lib MACDFIX: fixed 12/26 with smoothing constants 0.15 and 0.075\",\n});\n\nfunction maGatedAlpha(g: Graph, x: Col, p: number, alpha: number, gate: Col): Node {\n return emaG(g, x, p, alpha, gate);\n}\nimport { emaGated as emaG } from \"./ma.js\";\n\nexport const macdext = defineStudy({\n id: \"macdext\", name: \"MACD with controllable MA type\", family: \"momentum\", needs: \"value\", pane: \"new\",\n inputs: [int(\"fast\", 12, 1, 5000), int(\"slow\", 26, 2, 5000), int(\"signal\", 9, 1, 5000), source(),\n maInput(\"ema\", \"fastType\"), maInput(\"ema\", \"slowType\"), maInput(\"ema\", \"signalType\")],\n columns: macdColumns, plots: macdPlots,\n label: (p) => `${p.fast}, ${p.slow}, ${p.signal}`,\n build: (g, p) => {\n if (p.fast >= p.slow) throw new RangeError(`macdext: fast (${p.fast}) must be below slow (${p.slow})`);\n const x = g.src(p.source);\n const s = ma(g, p.slowType, x, p.slow);\n const f = maGated(g, p.fastType, x, p.fast, s);\n const line_ = g.sub(f, s), sig = ma(g, p.signalType, line_, p.signal);\n return [line_, sig, g.sub(line_, sig)];\n },\n reference: \"TA-Lib MACDEXT\",\n});\n\n// ---- stochastic -------------------------------------------------------------\n\n/** 100 * (close - LL) / (HH - LL); a flat range gives 0 as TA-Lib defines it. */\nfunction rawStoch(g: Graph, x: Col, hi: Col, lo: Col, p: number): Node {\n const hh = g.highest(hi, p), ll = g.lowest(lo, p);\n return g.calc((i) => {\n const r = hh.v[i]! - ll.v[i]!;\n return r !== r ? Number.NaN : r === 0 ? 0 : (100 * (x.v[i]! - ll.v[i]!)) / r;\n });\n}\n\nconst stochPlots = [line(\"k\", COLORS.blue, { title: \"%K\" }), line(\"d\", COLORS.orange, { title: \"%D\" }), hline(\"upper\", 80), hline(\"lower\", 20)];\n\nexport const stoch = defineStudy({\n id: \"stoch\", name: \"Stochastic\", family: \"momentum\", needs: \"ohlc\", pane: \"new\",\n inputs: [int(\"kLength\", 14, 1, 5000), int(\"kSmooth\", 1, 1, 5000), int(\"dLength\", 3, 1, 5000), maInput(\"sma\", \"kType\"), maInput(\"sma\", \"dType\")],\n columns: [\"k\", \"d\"], plots: stochPlots,\n label: (p) => `${p.kLength}, ${p.kSmooth}, ${p.dLength}`,\n build: (g, p) => {\n const k = ma(g, p.kType, rawStoch(g, g.close, g.high, g.low, p.kLength), p.kSmooth);\n return [k, ma(g, p.dType, k, p.dLength)];\n },\n reference: \"TA-Lib STOCH (slow %K = MA of fast %K); defaults are TradingView's 14, 1, 3\",\n});\n\nexport const stochf = defineStudy({\n id: \"stochf\", name: \"Stochastic Fast\", family: \"momentum\", needs: \"ohlc\", pane: \"new\",\n inputs: [int(\"kLength\", 5, 1, 5000), int(\"dLength\", 3, 1, 5000), maInput(\"sma\", \"dType\")],\n columns: [\"k\", \"d\"], plots: stochPlots,\n label: (p) => `${p.kLength}, ${p.dLength}`,\n build: (g, p) => {\n const k = rawStoch(g, g.close, g.high, g.low, p.kLength);\n return [k, ma(g, p.dType, k, p.dLength)];\n },\n reference: \"TA-Lib STOCHF\",\n});\n\nexport const stochrsi = defineStudy({\n id: \"stochrsi\", name: \"Stochastic RSI\", family: \"momentum\", needs: \"value\", pane: \"new\",\n inputs: [int(\"rsiLength\", 14, 1, 5000), int(\"stochLength\", 14, 1, 5000), int(\"kSmooth\", 3, 1, 5000), int(\"dSmooth\", 3, 1, 5000), source()],\n columns: [\"raw\", \"k\", \"d\"],\n plots: [line(\"k\", COLORS.blue, { title: \"%K\" }), line(\"d\", COLORS.orange, { title: \"%D\" }), hline(\"upper\", 80), hline(\"lower\", 20)],\n label: (p) => `${p.rsiLength}, ${p.stochLength}, ${p.kSmooth}, ${p.dSmooth}`,\n build: (g, p) => {\n const ch = g.change(g.src(p.source), 1);\n const au = g.rma(g.map(ch, (d) => (d > 0 ? d : d === d ? 0 : Number.NaN)), p.rsiLength);\n const ad = g.rma(g.map(ch, (d) => (d < 0 ? -d : d === d ? 0 : Number.NaN)), p.rsiLength);\n const r = g.map2(au, ad, (u, d) => (u + d === 0 ? 100 : (100 * u) / (u + d)));\n const raw = rawStoch(g, r, r, r, p.stochLength);\n const k = g.sma(raw, p.kSmooth);\n return [raw, k, g.sma(k, p.dSmooth)];\n },\n reference: \"TA-Lib STOCHRSI: `raw` = fastk, `k` = fastd with period kSmooth; `d` is TradingView's second smoothing. The RSI inside is this package's (a flat opening is 100, see rsi)\",\n});\n\nexport const willr = defineStudy({\n id: \"willr\", name: \"Williams %R\", family: \"momentum\", needs: \"ohlc\", pane: \"new\",\n inputs: [len(14)], columns: [\"willr\"],\n plots: [line(\"willr\", COLORS.purple, { title: \"%R\" }), hline(\"upper\", -20), hline(\"lower\", -80)],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const hh = g.highest(g.high, p.length), ll = g.lowest(g.low, p.length);\n return [g.calc((i) => {\n const r = hh.v[i]! - ll.v[i]!;\n return r !== r || r === 0 ? Number.NaN : (-100 * (hh.v[i]! - g.close.v[i]!)) / r;\n })];\n },\n reference: \"TA-Lib WILLR (a flat range is absent here; TA-Lib reports 0)\",\n});\n\n// ---- CCI, BOP, MFI, ultimate -------------------------------------------------\n\nexport const cci = defineStudy({\n id: \"cci\", name: \"Commodity Channel Index\", family: \"momentum\", needs: \"ohlc\", pane: \"new\",\n inputs: [len(20)], columns: [\"cci\"],\n plots: [line(\"cci\", COLORS.blue), hline(\"upper\", 100), hline(\"lower\", -100)],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const tp = g.src(\"hlc3\"), m = g.sma(tp, p.length), n = p.length;\n return [g.calc((i) => {\n const mean = m.v[i]!;\n if (mean !== mean) return Number.NaN;\n let dev = 0;\n for (let j = i - n + 1; j <= i; j++) dev += Math.abs(tp.v[j]! - mean);\n dev /= n;\n return dev === 0 ? Number.NaN : (tp.v[i]! - mean) / (0.015 * dev);\n })];\n },\n reference: \"TA-Lib CCI (typical price, mean deviation; zero deviation is absent here, TA-Lib reports 0)\",\n});\n\nexport const bop = defineStudy({\n id: \"bop\", name: \"Balance Of Power\", family: \"momentum\", needs: \"ohlc\", pane: \"new\",\n inputs: [], columns: [\"bop\"], plots: [line(\"bop\", COLORS.teal), hline(\"zero\", 0, COLORS.gray, \"dotted\")],\n build: (g) => [g.calc((i) => {\n const r = g.high.v[i]! - g.low.v[i]!;\n return r > 0 ? (g.close.v[i]! - g.open.v[i]!) / r : 0;\n })],\n reference: \"TA-Lib BOP = (close - open) / (high - low), 0 on a flat bar\",\n});\n\nexport const mfi = defineStudy({\n id: \"mfi\", name: \"Money Flow Index\", family: \"momentum\", needs: \"ohlcv\", pane: \"new\",\n inputs: [len(14)], columns: [\"mfi\"],\n plots: [line(\"mfi\", COLORS.purple), hline(\"upper\", 80), hline(\"lower\", 20)],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const tp = g.src(\"hlc3\");\n const pos = g.calc((i) => (i === 0 ? Number.NaN : tp.v[i]! > tp.v[i - 1]! ? tp.v[i]! * g.volume.v[i]! : 0));\n const neg = g.calc((i) => (i === 0 ? Number.NaN : tp.v[i]! < tp.v[i - 1]! ? tp.v[i]! * g.volume.v[i]! : 0));\n const sp = g.sum(pos, p.length), sn = g.sum(neg, p.length);\n return [g.map2(sp, sn, (a, b) => (a + b === 0 ? 0 : (100 * a) / (a + b)))];\n },\n reference: \"TA-Lib MFI\",\n});\n\nexport const ultosc = defineStudy({\n id: \"ultosc\", name: \"Ultimate Oscillator\", family: \"momentum\", needs: \"ohlc\", pane: \"new\",\n inputs: [int(\"fast\", 7, 1, 5000), int(\"middle\", 14, 1, 5000), int(\"slow\", 28, 1, 5000)], columns: [\"ultosc\"],\n plots: [line(\"ultosc\", COLORS.blue), hline(\"upper\", 70), hline(\"lower\", 30)],\n label: (p) => `${p.fast}, ${p.middle}, ${p.slow}`,\n build: (g, p) => {\n const [a, b, c] = [p.fast, p.middle, p.slow].sort((x: number, y: number) => x - y) as [number, number, number];\n const bp = g.calc((i) => (i === 0 ? Number.NaN : g.close.v[i]! - Math.min(g.low.v[i]!, g.close.v[i - 1]!)));\n const tr = g.calc((i) => (i === 0 ? Number.NaN : Math.max(g.high.v[i]!, g.close.v[i - 1]!) - Math.min(g.low.v[i]!, g.close.v[i - 1]!)));\n const [b1, b2, b3] = [g.sum(bp, a), g.sum(bp, b), g.sum(bp, c)];\n const [t1, t2, t3] = [g.sum(tr, a), g.sum(tr, b), g.sum(tr, c)];\n return [g.calc((i) => {\n const r1 = b1.v[i]! / t1.v[i]!, r2 = b2.v[i]! / t2.v[i]!, r3 = b3.v[i]! / t3.v[i]!;\n return (100 * (4 * r1 + 2 * r2 + r3)) / 7;\n })];\n },\n reference: \"TA-Lib ULTOSC (periods sorted ascending, weights 4:2:1)\",\n});\n\n// ---- Aroon ------------------------------------------------------------------\n\nexport const aroon = defineStudy({\n id: \"aroon\", name: \"Aroon\", family: \"momentum\", needs: \"ohlc\", pane: \"new\",\n inputs: [len(14)], columns: [\"up\", \"down\"],\n plots: [line(\"up\", COLORS.green, { title: \"Aroon Up\" }), line(\"down\", COLORS.red, { title: \"Aroon Down\" })],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const hb = g.highestBars(g.high, p.length + 1), lb = g.lowestBars(g.low, p.length + 1);\n return [g.map(hb, (k) => (100 * (p.length - k)) / p.length), g.map(lb, (k) => (100 * (p.length - k)) / p.length)];\n },\n reference: \"TA-Lib AROON (window of length + 1 bars)\",\n});\n\nexport const aroonosc = defineStudy({\n id: \"aroonosc\", name: \"Aroon Oscillator\", family: \"momentum\", needs: \"ohlc\", pane: \"new\",\n inputs: [len(14)], columns: [\"aroonosc\"], plots: [line(\"aroonosc\", COLORS.blue), hline(\"zero\", 0, COLORS.gray, \"dotted\")],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const hb = g.highestBars(g.high, p.length + 1), lb = g.lowestBars(g.low, p.length + 1);\n return [g.map2(hb, lb, (h, l) => (100 * (l - h)) / p.length)];\n },\n reference: \"TA-Lib AROONOSC = Aroon Up - Aroon Down\",\n});\n\n// ---- directional movement ---------------------------------------------------\n\n/** Wilder's running sum: seeded with the sum of the first p-1 values, then S - S/p + x (TA-Lib's DM/TR smoothing). */\nfunction wilderSum(g: Graph, x: Col, p: number): Node {\n const cnt = g.validRun(x);\n return g.node((s, a, b) => {\n const xv = x.v, c = cnt.v, v = s.v;\n for (let i = a; i < b; i++) {\n const k = c[i]!;\n if (k === 0) { v[i] = Number.NaN; continue; }\n const prev = i > 0 ? v[i - 1]! : Number.NaN;\n if (prev === prev) v[i] = prev - prev / p + xv[i]!;\n else if (k === p - 1) {\n let t = 0;\n for (let j = i - k + 1; j <= i; j++) t += xv[j]!;\n v[i] = t;\n } else v[i] = Number.NaN;\n }\n });\n}\n\nfunction dm(g: Graph, p: number) {\n if (p < 2) throw new RangeError(`directional movement needs length >= 2, got ${p}`);\n const { high, low } = g;\n const plus = g.calc((i) => {\n if (i === 0) return Number.NaN;\n const up = high.v[i]! - high.v[i - 1]!, dn = low.v[i - 1]! - low.v[i]!;\n return up > 0 && up > dn ? up : 0;\n });\n const minus = g.calc((i) => {\n if (i === 0) return Number.NaN;\n const up = high.v[i]! - high.v[i - 1]!, dn = low.v[i - 1]! - low.v[i]!;\n return dn > 0 && dn > up ? dn : 0;\n });\n const sp = wilderSum(g, plus, p), sm = wilderSum(g, minus, p), st = wilderSum(g, g.tr(), p);\n const gate = g.lag(st, 1);\n const di = (s: Node) => g.calc((i) => (gate.v[i]! === gate.v[i]! && st.v[i]! > 0 ? (100 * s.v[i]!) / st.v[i]! : Number.NaN));\n const pdi = di(sp), mdi = di(sm);\n const dx = g.map2(pdi, mdi, (a, b) => (a + b === 0 ? Number.NaN : (100 * Math.abs(a - b)) / (a + b)));\n return { sp, sm, pdi, mdi, dx };\n}\n\nconst diPlots = [line(\"adx\", COLORS.red, { title: \"ADX\" }), line(\"plusDi\", COLORS.blue, { title: \"+DI\" }), line(\"minusDi\", COLORS.orange, { title: \"-DI\" })];\n\nexport const adx = defineStudy({\n id: \"adx\", name: \"Average Directional Index\", family: \"momentum\", needs: \"ohlc\", pane: \"new\",\n inputs: [len(14, 2)], columns: [\"adx\", \"plusDi\", \"minusDi\"], plots: diPlots,\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const d = dm(g, p.length);\n return [g.rma(d.dx, p.length), d.pdi, d.mdi];\n },\n reference: \"TA-Lib ADX / PLUS_DI / MINUS_DI (Wilder smoothing seeded as TA-Lib does)\",\n});\n\nexport const adxr = defineStudy({\n id: \"adxr\", name: \"Average Directional Movement Index Rating\", family: \"momentum\", needs: \"ohlc\", pane: \"new\",\n inputs: [len(14, 2)], columns: [\"adxr\"], plots: [line(\"adxr\", COLORS.red)],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const a = g.rma(dm(g, p.length).dx, p.length);\n return [g.map2(a, g.lag(a, p.length - 1), (x, y) => (x + y) / 2)];\n },\n reference: \"TA-Lib ADXR = (ADX + ADX[length - 1]) / 2\",\n});\n\nexport const dx = defineStudy({\n id: \"dx\", name: \"Directional Movement Index\", family: \"momentum\", needs: \"ohlc\", pane: \"new\",\n inputs: [len(14, 2)], columns: [\"dx\"], plots: [line(\"dx\", COLORS.purple)],\n label: (p) => `${p.length}`,\n build: (g, p) => [dm(g, p.length).dx],\n reference: \"TA-Lib DX\",\n});\n\nconst diStudy = (id: string, name: string, pick: (d: ReturnType<typeof dm>) => Node, color: string) =>\n defineStudy({\n id, name, family: \"momentum\", needs: \"ohlc\", pane: \"new\", inputs: [len(14, 2)], columns: [id.replace(\"-\", \"\")], plots: [line(id.replace(\"-\", \"\"), color)],\n label: (p) => `${p.length}`,\n build: (g, p) => [pick(dm(g, p.length))],\n reference: `TA-Lib ${id.replace(\"-\", \"_\").toUpperCase()}`,\n });\n\nexport const plusDi = diStudy(\"plus-di\", \"Plus Directional Indicator\", (d) => d.pdi, COLORS.blue);\nexport const minusDi = diStudy(\"minus-di\", \"Minus Directional Indicator\", (d) => d.mdi, COLORS.orange);\nexport const plusDm = diStudy(\"plus-dm\", \"Plus Directional Movement\", (d) => d.sp, COLORS.blue);\nexport const minusDm = diStudy(\"minus-dm\", \"Minus Directional Movement\", (d) => d.sm, COLORS.orange);\n\nvoid band;\nvoid float;\n","// Volume studies from TA-Lib's \"Volume Indicators\" group.\n\nimport type { Graph, Node } from \"../engine/graph.js\";\nimport { COLORS, defineStudy, hline, int, line } from \"../define.js\";\nimport { emaFirst } from \"./ma.js\";\n\n/** Accumulation/distribution line: running sum of money-flow multiplier x volume. */\nfunction adLine(g: Graph): Node {\n const self: Node = g.calc((i) => {\n const r = g.high.v[i]! - g.low.v[i]!;\n const mf = r === 0 ? 0 : (((g.close.v[i]! - g.low.v[i]!) - (g.high.v[i]! - g.close.v[i]!)) / r) * g.volume.v[i]!;\n return (i > 0 ? self.v[i - 1]! : 0) + mf;\n });\n return self;\n}\n\nexport const ad = defineStudy({\n id: \"ad\", name: \"Accumulation/Distribution\", family: \"volume\", needs: \"ohlcv\", pane: \"new\",\n inputs: [], columns: [\"ad\"], plots: [line(\"ad\", COLORS.blue)],\n build: (g) => [adLine(g)],\n reference: \"TA-Lib AD (a flat bar adds 0)\",\n});\n\nexport const adosc = defineStudy({\n id: \"adosc\", name: \"Chaikin Oscillator\", family: \"volume\", needs: \"ohlcv\", pane: \"new\",\n inputs: [int(\"fast\", 3, 1, 5000), int(\"slow\", 10, 2, 5000)], columns: [\"adosc\"],\n plots: [line(\"adosc\", COLORS.purple), hline(\"zero\", 0, COLORS.gray, \"dotted\")],\n label: (p) => `${p.fast}, ${p.slow}`,\n build: (g, p) => {\n if (p.fast >= p.slow) throw new RangeError(`adosc: fast (${p.fast}) must be below slow (${p.slow})`);\n const a = adLine(g);\n const f = emaFirst(g, a, 2 / (p.fast + 1)), s = emaFirst(g, a, 2 / (p.slow + 1));\n return [g.calc((i) => (i >= p.slow - 1 ? f.v[i]! - s.v[i]! : Number.NaN))];\n },\n reference: \"TA-Lib ADOSC: both EMAs are seeded with the first A/D value (TradingView seeds with an SMA; the difference vanishes within ~60 bars)\",\n});\n\nexport const obv = defineStudy({\n id: \"obv\", name: \"On Balance Volume\", family: \"volume\", needs: \"ohlcv\", pane: \"new\",\n inputs: [], columns: [\"obv\"], plots: [line(\"obv\", COLORS.teal)],\n build: (g) => {\n const self: Node = g.calc((i) => {\n if (i === 0) return g.volume.v[0]!;\n const c = g.close.v[i]!, pc = g.close.v[i - 1]!;\n return self.v[i - 1]! + (c > pc ? g.volume.v[i]! : c < pc ? -g.volume.v[i]! : 0);\n });\n return [self];\n },\n reference: \"TA-Lib OBV (first value is the first bar's volume)\",\n});\n","// Volatility studies: TA-Lib's true range, and Wilder's average true range (not TA-Lib's).\n\nimport { COLORS, defineStudy, int, line } from \"../define.js\";\n\nexport const trange = defineStudy({\n id: \"trange\", name: \"True Range\", family: \"volatility\", needs: \"ohlc\", pane: \"new\",\n inputs: [], columns: [\"trange\"], plots: [line(\"trange\", COLORS.orange)],\n build: (g) => [g.tr()],\n reference: \"TA-Lib TRANGE\",\n});\n\nexport const atr = defineStudy({\n id: \"atr\", name: \"Average True Range\", family: \"volatility\", needs: \"ohlc\", pane: \"new\",\n inputs: [int(\"length\", 14, 1, 5000)], columns: [\"atr\"], plots: [line(\"atr\", COLORS.red)],\n label: (p) => `${p.length}`,\n build: (g, p) => [g.atr(p.length)],\n reference: \"Wilder's ATR (not TA-Lib's): true range of bar 0 is high - low, seeded with the mean of true ranges 0..length-1 (first value at bar length-1), then Wilder smoothing. TA-Lib skips the first true range and starts one bar later\",\n});\n\nexport const natr = defineStudy({\n id: \"natr\", name: \"Normalized Average True Range\", family: \"volatility\", needs: \"ohlc\", pane: \"new\",\n inputs: [int(\"length\", 14, 1, 5000)], columns: [\"natr\"], plots: [line(\"natr\", COLORS.red)],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const a = g.atr(p.length);\n return [g.calc((i) => (100 * a.v[i]!) / g.close.v[i]!)];\n },\n reference: \"NATR = 100 * ATR / close, on Wilder's ATR (not TA-Lib's, see atr)\",\n});\n","// Price transforms (TA-Lib \"Price Transform\"): one price from the bar's four.\n\nimport type { Col, Graph, Node } from \"../engine/graph.js\";\nimport { COLORS, defineStudy, line } from \"../define.js\";\n\nconst price = (id: string, name: string, color: string, f: (g: Graph) => Node, ref: string) =>\n defineStudy({ id, name, family: \"price\", needs: \"ohlc\", pane: \"overlay\", inputs: [], columns: [id], plots: [line(id, color)], build: (g) => [f(g)], reference: ref });\n\nexport const avgprice = price(\"avgprice\", \"Average Price\", COLORS.blue, (g) => g.src(\"ohlc4\"), \"TA-Lib AVGPRICE = (O + H + L + C) / 4\");\nexport const medprice = price(\"medprice\", \"Median Price\", COLORS.orange, (g) => g.src(\"hl2\"), \"TA-Lib MEDPRICE = (H + L) / 2\");\nexport const typprice = price(\"typprice\", \"Typical Price\", COLORS.green, (g) => g.src(\"hlc3\"), \"TA-Lib TYPPRICE = (H + L + C) / 3\");\nexport const wclprice = price(\"wclprice\", \"Weighted Close Price\", COLORS.purple, (g) => g.src(\"hlcc4\"), \"TA-Lib WCLPRICE = (H + L + 2C) / 4\");\n\nexport type { Col };\n","// Statistic functions (TA-Lib \"Statistic Functions\"): regression, deviation,\n// variance, correlation and beta over a rolling window.\n\nimport type { Col, Graph, Node } from \"../engine/graph.js\";\nimport { COLORS, defineStudy, float, int, line, select, source } from \"../define.js\";\nimport { SOURCE_NAMES } from \"../engine/graph.js\";\n\nconst len = (def: number, min = 2) => int(\"length\", def, min, 5000);\nconst RAD = 180 / Math.PI;\n\nconst reg = (id: string, name: string, color: string, pick: (r: ReturnType<Graph[\"linreg\"]>, g: Graph) => Node, ref: string, pane: \"overlay\" | \"new\") =>\n defineStudy({\n id, name, family: \"statistic\", needs: \"value\", pane, inputs: [len(14), source()], columns: [id], plots: [line(id, color)],\n label: (p) => `${p.length}`,\n build: (g, p) => [pick(g.linreg(g.src(p.source), p.length), g)],\n reference: ref,\n });\n\nexport const linearreg = reg(\"linearreg\", \"Linear Regression\", COLORS.blue, (r) => r.value, \"TA-Lib LINEARREG\", \"overlay\");\nexport const linearregSlope = reg(\"linearreg-slope\", \"Linear Regression Slope\", COLORS.orange, (r) => r.slope, \"TA-Lib LINEARREG_SLOPE\", \"new\");\nexport const linearregIntercept = reg(\"linearreg-intercept\", \"Linear Regression Intercept\", COLORS.teal, (r) => r.intercept, \"TA-Lib LINEARREG_INTERCEPT\", \"overlay\");\nexport const linearregAngle = reg(\"linearreg-angle\", \"Linear Regression Angle\", COLORS.purple, (r, g) => g.map(r.slope, (m) => Math.atan(m) * RAD), \"TA-Lib LINEARREG_ANGLE (degrees)\", \"new\");\nexport const tsf = reg(\"tsf\", \"Time Series Forecast\", COLORS.pink, (r, g) => g.map2(r.value, r.slope, (v, m) => v + m), \"TA-Lib TSF = regression value one bar ahead\", \"overlay\");\n\nexport const stddev = defineStudy({\n id: \"stddev\", name: \"Standard Deviation\", family: \"statistic\", needs: \"value\", pane: \"new\",\n inputs: [len(5, 1), float(\"nbdev\", 1, 0, 100, 0.1), source()], columns: [\"stddev\"], plots: [line(\"stddev\", COLORS.blue)],\n label: (p) => `${p.length}`,\n build: (g, p) => [g.map(g.stdev(g.src(p.source), p.length), (v) => v * p.nbdev)],\n reference: \"TA-Lib STDDEV (population)\",\n});\n\nexport const variance = defineStudy({\n id: \"var\", name: \"Variance\", family: \"statistic\", needs: \"value\", pane: \"new\",\n inputs: [len(5, 1), source()], columns: [\"var\"], plots: [line(\"var\", COLORS.blue)],\n label: (p) => `${p.length}`,\n build: (g, p) => [g.variance(g.src(p.source), p.length)],\n reference: \"TA-Lib VAR (population)\",\n});\n\nconst SOURCES2 = [...SOURCE_NAMES, \"volume\"] as const;\nfunction pick(g: Graph, name: string): Col {\n return name === \"volume\" ? g.volume : g.src(name as (typeof SOURCE_NAMES)[number]);\n}\n\nexport const correl = defineStudy({\n id: \"correl\", name: \"Correlation Coefficient\", family: \"statistic\", needs: \"ohlcv\", pane: \"new\",\n inputs: [len(30), source(\"close\"), select(\"source2\", \"volume\", SOURCES2)], columns: [\"correl\"], plots: [line(\"correl\", COLORS.teal)],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const x = g.src(p.source), y = pick(g, p.source2), n = p.length;\n return [g.calc((i) => {\n if (i < n - 1) return Number.NaN;\n let sx = 0, sy = 0, sxx = 0, syy = 0, sxy = 0;\n for (let j = i - n + 1; j <= i; j++) {\n const a = x.v[j]!, b = y.v[j]!;\n sx += a; sy += b; sxx += a * a; syy += b * b; sxy += a * b;\n }\n const d = (n * sxx - sx * sx) * (n * syy - sy * sy);\n return d > 0 ? (n * sxy - sx * sy) / Math.sqrt(d) : 0;\n })];\n },\n reference: \"TA-Lib CORREL (Pearson; a constant window gives 0 as TA-Lib does)\",\n});\n\nexport const beta = defineStudy({\n id: \"beta\", name: \"Beta\", family: \"statistic\", needs: \"ohlcv\", pane: \"new\",\n inputs: [len(5, 1), source(\"close\"), select(\"source2\", \"volume\", SOURCES2)], columns: [\"beta\"], plots: [line(\"beta\", COLORS.orange)],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const x = g.src(p.source), y = pick(g, p.source2), n = p.length;\n const rx = g.map2(x, g.lag(x, 1), (a, b) => (b === 0 ? 0 : (a - b) / b));\n const ry = g.map2(y, g.lag(y, 1), (a, b) => (b === 0 ? 0 : (a - b) / b));\n return [g.calc((i) => {\n if (i < n) return Number.NaN;\n let sx = 0, sy = 0, sxx = 0, sxy = 0;\n for (let j = i - n + 1; j <= i; j++) {\n const a = rx.v[j]!, b = ry.v[j]!;\n sx += a; sy += b; sxx += a * a; sxy += a * b;\n }\n const d = n * sxx - sx * sx;\n return d === 0 ? 0 : (n * sxy - sx * sy) / d;\n })];\n },\n reference: \"TA-Lib BETA: slope of source2's one-bar returns on source's over `length` returns\",\n});\n","// Math transforms and operators (TA-Lib \"Math Transform\" / \"Math Operators\").\n// Domain errors (acos of 2, ln of a negative) are absent bars, not zeros.\n\nimport type { Col, Graph, Node } from \"../engine/graph.js\";\nimport { COLORS, defineStudy, int, line, select, source } from \"../define.js\";\nimport { SOURCE_NAMES } from \"../engine/graph.js\";\n\nconst unary = (id: string, name: string, f: (x: number) => number, ref = `TA-Lib ${id.toUpperCase()}`) =>\n defineStudy({\n id, name, family: \"math\", needs: \"value\", pane: \"new\", inputs: [source()], columns: [id], plots: [line(id, COLORS.blue)],\n build: (g, p) => [g.map(g.src(p.source), (x) => { const r = f(x); return Number.isFinite(r) ? r : Number.NaN; })],\n reference: ref,\n });\n\nexport const acos = unary(\"acos\", \"Arc Cosine\", Math.acos);\nexport const asin = unary(\"asin\", \"Arc Sine\", Math.asin);\nexport const atan = unary(\"atan\", \"Arc Tangent\", Math.atan);\nexport const ceil = unary(\"ceil\", \"Ceiling\", Math.ceil);\nexport const cos = unary(\"cos\", \"Cosine\", Math.cos);\nexport const cosh = unary(\"cosh\", \"Hyperbolic Cosine\", Math.cosh);\nexport const exp = unary(\"exp\", \"Exponential\", Math.exp);\nexport const floor = unary(\"floor\", \"Floor\", Math.floor);\nexport const ln = unary(\"ln\", \"Natural Log\", Math.log);\nexport const log10 = unary(\"log10\", \"Log10\", Math.log10);\nexport const sin = unary(\"sin\", \"Sine\", Math.sin);\nexport const sinh = unary(\"sinh\", \"Hyperbolic Sine\", Math.sinh);\nexport const sqrt = unary(\"sqrt\", \"Square Root\", Math.sqrt);\nexport const tan = unary(\"tan\", \"Tangent\", Math.tan);\nexport const tanh = unary(\"tanh\", \"Hyperbolic Tangent\", Math.tanh);\n\nconst binary = (id: string, name: string, f: (a: number, b: number) => number) =>\n defineStudy({\n id, name, family: \"math\", needs: \"ohlc\", pane: \"new\",\n inputs: [source(\"high\"), source(\"low\", \"source2\")], columns: [id], plots: [line(id, COLORS.orange)],\n build: (g, p) => [g.map2(g.src(p.source), g.src(p.source2), f)],\n reference: `TA-Lib ${id.toUpperCase()}`,\n });\n\nexport const add = binary(\"add\", \"Vector Arithmetic Add\", (a, b) => a + b);\nexport const sub = binary(\"sub\", \"Vector Arithmetic Subtraction\", (a, b) => a - b);\nexport const mult = binary(\"mult\", \"Vector Arithmetic Mult\", (a, b) => a * b);\nexport const div = binary(\"div\", \"Vector Arithmetic Div\", (a, b) => (b === 0 ? Number.NaN : a / b));\n\nconst win = (def = 30) => int(\"length\", def, 1, 5000);\n\nexport const max = defineStudy({\n id: \"max\", name: \"Highest value over a period\", family: \"math\", needs: \"value\", pane: \"overlay\",\n inputs: [win(), source()], columns: [\"max\"], plots: [line(\"max\", COLORS.green)],\n label: (p) => `${p.length}`,\n build: (g, p) => [g.highest(g.src(p.source), p.length)],\n reference: \"TA-Lib MAX\",\n});\nexport const min = defineStudy({\n id: \"min\", name: \"Lowest value over a period\", family: \"math\", needs: \"value\", pane: \"overlay\",\n inputs: [win(), source()], columns: [\"min\"], plots: [line(\"min\", COLORS.red)],\n label: (p) => `${p.length}`,\n build: (g, p) => [g.lowest(g.src(p.source), p.length)],\n reference: \"TA-Lib MIN\",\n});\nexport const sum = defineStudy({\n id: \"sum\", name: \"Summation\", family: \"math\", needs: \"value\", pane: \"new\",\n inputs: [win(), source()], columns: [\"sum\"], plots: [line(\"sum\", COLORS.blue)],\n label: (p) => `${p.length}`,\n build: (g, p) => [g.sum(g.src(p.source), p.length)],\n reference: \"TA-Lib SUM\",\n});\n\n/** Absolute bar index of the extreme (TA-Lib reports the index into the input). Its ties: the oldest maximum, the newest minimum. */\nconst idx = (g: Graph, bars: Node): Node => g.calc((i) => i - bars.v[i]!);\n\nexport const maxindex = defineStudy({\n id: \"maxindex\", name: \"Index of highest value over a period\", family: \"math\", needs: \"value\", pane: \"new\",\n inputs: [win(), source()], columns: [\"maxindex\"], plots: [line(\"maxindex\", COLORS.green)],\n label: (p) => `${p.length}`,\n build: (g, p) => [idx(g, g.highestBars(g.src(p.source), p.length, true))],\n reference: \"TA-Lib MAXINDEX\",\n});\nexport const minindex = defineStudy({\n id: \"minindex\", name: \"Index of lowest value over a period\", family: \"math\", needs: \"value\", pane: \"new\",\n inputs: [win(), source()], columns: [\"minindex\"], plots: [line(\"minindex\", COLORS.red)],\n label: (p) => `${p.length}`,\n build: (g, p) => [idx(g, g.lowestBars(g.src(p.source), p.length))],\n reference: \"TA-Lib MININDEX\",\n});\nexport const minmax = defineStudy({\n id: \"minmax\", name: \"Lowest and highest values over a period\", family: \"math\", needs: \"value\", pane: \"overlay\",\n inputs: [win(), source()], columns: [\"min\", \"max\"],\n plots: [line(\"min\", COLORS.red), line(\"max\", COLORS.green)],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const x = g.src(p.source);\n return [g.lowest(x, p.length), g.highest(x, p.length)];\n },\n reference: \"TA-Lib MINMAX\",\n});\nexport const minmaxindex = defineStudy({\n id: \"minmaxindex\", name: \"Indexes of lowest and highest values over a period\", family: \"math\", needs: \"value\", pane: \"new\",\n inputs: [win(), source()], columns: [\"minidx\", \"maxidx\"],\n plots: [line(\"minidx\", COLORS.red), line(\"maxidx\", COLORS.green)],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const x = g.src(p.source);\n return [idx(g, g.lowestBars(x, p.length)), idx(g, g.highestBars(x, p.length, true))];\n },\n reference: \"TA-Lib MINMAXINDEX\",\n});\n\nvoid select;\nexport type { Col };\nvoid SOURCE_NAMES;\n","// Cycle studies: TA-Lib's Hilbert-transform family (Ehlers) and MAMA/FAMA.\n//\n// TA-Lib keeps the Hilbert filters in odd/even circular buffers; here every\n// intermediate series (smoothed price, detrender, Q1, jI, jQ, I2, Q2, Re, Im,\n// period, smoothed period, ...) is a column indexed by bar. A same-parity\n// Hilbert step is the 4-tap filter a*x[i] + b*x[i-2] - b*x[i-4] - a*x[i-6]\n// scaled by 0.075*period[i-1] + 0.54, and \"I1\" is the detrender three bars back.\n//\n// TA-Lib's recursive state starts at zero at its own first processed bar\n// S = 3 + warm (warm = 9 for HT_DCPERIOD/PHASOR/MAMA, 34 for the studies that\n// also run the dominant-cycle phase). Bars before S read as 0 inside the\n// filters (that is TA-Lib's zeroed state); the outputs are absent before TA-Lib's\n// first output (index 32 or 63).\n\nimport { COLORS, defineStudy, float, hist, line, source } from \"../define.js\";\nimport type { Col, Graph, Node } from \"../engine/graph.js\";\n\nconst A = 0.0962;\nconst B = 0.5769;\nconst ATAN1 = Math.atan(1);\nconst RAD2DEG = 45 / ATAN1;\nconst DEG2RAD = 1 / RAD2DEG;\nconst TWO_PI = ATAN1 * 8;\n\ninterface Core {\n /** First bar TA-Lib processes. */\n S: number;\n sm: Col;\n det: Col;\n q1: Col;\n /** Smoothed dominant cycle period. */\n sper: Node;\n}\n\n/** Same-parity Hilbert step of `v` (value `lag` bars old is the newest tap). */\nfunction hil(v: Float64Array, i: number, lag: number, adj: number): number {\n return adj * (A * v[i - lag]! + B * v[i - lag - 2]! - B * v[i - lag - 4]! - A * v[i - lag - 6]!);\n}\n\nfunction hilbertCore(g: Graph, x: Col, warm: number): Core {\n const S = 3 + warm;\n const sm = g.col(), det = g.col(), q1 = g.col(), ji = g.col(), jq = g.col();\n const q2 = g.col(), i2 = g.col(), re = g.col(), im = g.col(), per = g.col();\n const sper = g.node((self, from, to) => {\n const xv = x.v, smv = sm.v, dv = det.v, qv = q1.v, jiv = ji.v, jqv = jq.v;\n const q2v = q2.v, i2v = i2.v, rev = re.v, imv = im.v, pv = per.v, sv = self.v;\n for (let i = from; i < to; i++) {\n if (i < S) {\n smv[i] = dv[i] = qv[i] = jiv[i] = jqv[i] = q2v[i] = i2v[i] = rev[i] = imv[i] = pv[i] = sv[i] = 0;\n continue;\n }\n const prevPeriod = pv[i - 1]!;\n const adj = 0.075 * prevPeriod + 0.54;\n smv[i] = (4 * xv[i]! + 3 * xv[i - 1]! + 2 * xv[i - 2]! + xv[i - 3]!) / 10;\n dv[i] = hil(smv, i, 0, adj);\n qv[i] = hil(dv, i, 0, adj);\n jiv[i] = hil(dv, i, 3, adj);\n jqv[i] = hil(qv, i, 0, adj);\n const pq2 = q2v[i - 1]!, pi2 = i2v[i - 1]!;\n const nq2 = 0.2 * (qv[i]! + jiv[i]!) + 0.8 * pq2;\n const ni2 = 0.2 * (dv[i - 3]! - jqv[i]!) + 0.8 * pi2;\n q2v[i] = nq2;\n i2v[i] = ni2;\n const nre = 0.8 * rev[i - 1]! + 0.2 * (ni2 * pi2 + nq2 * pq2);\n const nim = 0.8 * imv[i - 1]! + 0.2 * (ni2 * pq2 - nq2 * pi2);\n rev[i] = nre;\n imv[i] = nim;\n let p = prevPeriod;\n if (nim !== 0 && nre !== 0) p = 360 / (Math.atan(nim / nre) * RAD2DEG);\n if (p > 1.5 * prevPeriod) p = 1.5 * prevPeriod;\n if (p < 0.67 * prevPeriod) p = 0.67 * prevPeriod;\n if (p < 6) p = 6;\n else if (p > 50) p = 50;\n p = 0.2 * p + 0.8 * prevPeriod;\n pv[i] = p;\n sv[i] = 0.33 * p + 0.67 * sv[i - 1]!;\n }\n });\n return { S, sm, det, q1, sper };\n}\n\n/** `v` from bar `first` on, absent before (TA-Lib's lookback). */\nfunction from(g: Graph, v: Col, first: number): Node {\n return g.calc((i) => (i >= first ? v.v[i]! : Number.NaN));\n}\n\n/** Dominant cycle phase in degrees (TA-Lib HT_DCPHASE), carried bar to bar. */\nfunction dcPhase(g: Graph, c: Core): Node {\n const { S, sm, sper } = c;\n return g.node((self, a, b) => {\n const smv = sm.v, sp = sper.v, v = self.v;\n for (let i = a; i < b; i++) {\n if (i < S) { v[i] = 0; continue; }\n const dc = Math.floor(sp[i]! + 0.5);\n let real = 0, imag = 0;\n for (let k = 0; k < dc; k++) {\n const ang = (k * TWO_PI) / dc;\n const s = i - k >= 0 ? smv[i - k]! : 0;\n real += Math.sin(ang) * s;\n imag += Math.cos(ang) * s;\n }\n let ph = v[i - 1]!;\n if (Math.abs(imag) > 0) ph = Math.atan(real / imag) * RAD2DEG;\n else if (real < 0) ph -= 90;\n else if (real > 0) ph += 90;\n ph += 90;\n ph += 360 / sp[i]!;\n if (imag < 0) ph += 180;\n if (ph > 315) ph -= 360;\n v[i] = ph;\n }\n });\n}\n\n/** Instantaneous trendline and its running 4-3-2-1 smoothing of the cycle-period average. */\nfunction trendline(g: Graph, x: Col, c: Core): Node {\n const { S, sper } = c;\n const itr = g.col();\n return g.node((self, a, b) => {\n const xv = x.v, sp = sper.v, it = itr.v, v = self.v;\n for (let i = a; i < b; i++) {\n if (i < S) { it[i] = 0; v[i] = 0; continue; }\n const dc = Math.floor(sp[i]! + 0.5);\n let t = 0;\n for (let j = 0; j < dc && i - j >= 0; j++) t += xv[i - j]!;\n if (dc > 0) t /= dc;\n it[i] = t;\n v[i] = (4 * t + 3 * it[i - 1]! + 2 * it[i - 2]! + it[i - 3]!) / 10;\n }\n });\n}\n\nconst FIRST_SHORT = 32;\nconst FIRST_LONG = 63;\n\nexport const htDcPeriod = defineStudy({\n id: \"ht-dcperiod\", name: \"Hilbert Transform - Dominant Cycle Period\", family: \"cycle\", needs: \"value\", pane: \"new\",\n inputs: [source()], columns: [\"period\"], plots: [line(\"period\", COLORS.blue)],\n build: (g, p) => [from(g, hilbertCore(g, g.src(p.source), 9).sper, FIRST_SHORT)],\n reference: \"TA-Lib HT_DCPERIOD\",\n});\n\nexport const htDcPhase = defineStudy({\n id: \"ht-dcphase\", name: \"Hilbert Transform - Dominant Cycle Phase\", family: \"cycle\", needs: \"value\", pane: \"new\",\n inputs: [source()], columns: [\"phase\"], plots: [line(\"phase\", COLORS.orange)],\n build: (g, p) => [from(g, dcPhase(g, hilbertCore(g, g.src(p.source), 34)), FIRST_LONG)],\n reference: \"TA-Lib HT_DCPHASE\",\n});\n\nexport const htPhasor = defineStudy({\n id: \"ht-phasor\", name: \"Hilbert Transform - Phasor Components\", family: \"cycle\", needs: \"value\", pane: \"new\",\n inputs: [source()], columns: [\"inphase\", \"quadrature\"],\n plots: [line(\"inphase\", COLORS.blue), line(\"quadrature\", COLORS.orange)],\n build: (g, p) => {\n const c = hilbertCore(g, g.src(p.source), 9);\n const inphase = g.calc((i) => (i >= FIRST_SHORT ? c.det.v[i - 3]! : Number.NaN));\n return [inphase, from(g, c.q1, FIRST_SHORT)];\n },\n reference: \"TA-Lib HT_PHASOR\",\n});\n\nexport const htSine = defineStudy({\n id: \"ht-sine\", name: \"Hilbert Transform - SineWave\", family: \"cycle\", needs: \"value\", pane: \"new\",\n inputs: [source()], columns: [\"sine\", \"leadsine\"],\n plots: [line(\"sine\", COLORS.blue), line(\"leadsine\", COLORS.orange)],\n build: (g, p) => {\n const ph = dcPhase(g, hilbertCore(g, g.src(p.source), 34));\n return [\n g.calc((i) => (i >= FIRST_LONG ? Math.sin(ph.v[i]! * DEG2RAD) : Number.NaN)),\n g.calc((i) => (i >= FIRST_LONG ? Math.sin((ph.v[i]! + 45) * DEG2RAD) : Number.NaN)),\n ];\n },\n reference: \"TA-Lib HT_SINE\",\n});\n\nexport const htTrendline = defineStudy({\n id: \"ht-trendline\", name: \"Hilbert Transform - Instantaneous Trendline\", family: \"cycle\", needs: \"value\", pane: \"overlay\",\n inputs: [source()], columns: [\"trendline\"], plots: [line(\"trendline\", COLORS.blue)],\n build: (g, p) => {\n const x = g.src(p.source);\n return [from(g, trendline(g, x, hilbertCore(g, x, 34)), FIRST_LONG)];\n },\n reference: \"TA-Lib HT_TRENDLINE\",\n});\n\nexport const htTrendMode = defineStudy({\n id: \"ht-trendmode\", name: \"Hilbert Transform - Trend vs Cycle Mode\", family: \"cycle\", needs: \"value\", pane: \"new\",\n inputs: [source()], columns: [\"trendmode\"], plots: [hist(\"trendmode\", COLORS.green)],\n build: (g, p) => {\n const x = g.src(p.source);\n const c = hilbertCore(g, x, 34);\n const ph = dcPhase(g, c);\n const tl = trendline(g, x, c);\n const sine = g.col(), lead = g.col(), days = g.col();\n const trend = g.node((self, a, b) => {\n const smv = c.sm.v, sp = c.sper.v, pv = ph.v, tv = tl.v, sn = sine.v, ld = lead.v, dy = days.v, v = self.v;\n for (let i = a; i < b; i++) {\n if (i < c.S) { sn[i] = ld[i] = dy[i] = v[i] = 0; continue; }\n const s = Math.sin(pv[i]! * DEG2RAD), l = Math.sin((pv[i]! + 45) * DEG2RAD);\n sn[i] = s;\n ld[i] = l;\n const ps = sn[i - 1]!, pl = ld[i - 1]!;\n let t = 1, d = dy[i - 1]!;\n if ((s > l && ps <= pl) || (s < l && ps >= pl)) { d = 0; t = 0; }\n d += 1;\n dy[i] = d;\n if (d < 0.5 * sp[i]!) t = 0;\n const dphi = pv[i]! - pv[i - 1]!;\n if (sp[i] !== 0 && dphi > (0.67 * 360) / sp[i]! && dphi < (1.5 * 360) / sp[i]!) t = 0;\n const trl = tv[i]!;\n if (trl !== 0 && Math.abs((smv[i]! - trl) / trl) >= 0.015) t = 1;\n v[i] = t;\n }\n });\n // TA-Lib returns the integer 0 (not absent) during warm-up; the fixtures compare that.\n return [g.calc((i) => (i >= FIRST_LONG ? trend.v[i]! : 0))];\n },\n reference: \"TA-Lib HT_TRENDMODE (0 = cycle mode, 1 = trend mode; 0 during warm-up as in TA-Lib)\",\n});\n\nexport const mama = defineStudy({\n id: \"mama\", name: \"MESA Adaptive Moving Average\", family: \"overlap\", needs: \"value\", pane: \"overlay\",\n inputs: [float(\"fastlimit\", 0.5, 0.01, 0.99, 0.01), float(\"slowlimit\", 0.05, 0.01, 0.99, 0.01), source()],\n columns: [\"mama\", \"fama\"],\n plots: [line(\"mama\", COLORS.blue), line(\"fama\", COLORS.orange)],\n label: (p) => `${p.fastlimit}, ${p.slowlimit}`,\n build: (g, p) => {\n const fast: number = p.fastlimit, slow: number = p.slowlimit;\n const x = g.src(p.source);\n const c = hilbertCore(g, x, 9);\n const fama = g.col(), phase = g.col();\n const mm = g.node((self, a, b) => {\n const xv = x.v, dv = c.det.v, qv = c.q1.v, fv = fama.v, pv = phase.v, v = self.v;\n for (let i = a; i < b; i++) {\n if (i < c.S) { v[i] = fv[i] = pv[i] = 0; continue; }\n const i1 = dv[i - 3]!;\n const ph = i1 !== 0 ? Math.atan(qv[i]! / i1) * RAD2DEG : 0;\n pv[i] = ph;\n let d = pv[i - 1]! - ph;\n if (d < 1) d = 1;\n let alpha = fast;\n if (d > 1) {\n alpha = fast / d;\n if (alpha < slow) alpha = slow;\n }\n const m = (1 - alpha) * v[i - 1]! + alpha * xv[i]!;\n v[i] = m;\n const h = alpha * 0.5;\n fv[i] = (1 - h) * fv[i - 1]! + h * m;\n }\n });\n return [from(g, mm, FIRST_SHORT), from(g, fama, FIRST_SHORT)];\n },\n reference: \"TA-Lib MAMA\",\n});\n","// Parabolic SAR (TA-Lib SAR and SAREXT). A state machine whose trend flag,\n// extreme point, acceleration factors and next SAR live in columns; the first\n// output is bar 1 (TA-Lib's lookback).\n\nimport { COLORS, defineStudy, float, markers } from \"../define.js\";\nimport type { Col, Graph, Node } from \"../engine/graph.js\";\n\n/** Initial trend as TA-Lib decides it: short when the first bar's -DM(1) is positive. */\nfunction startsShort(g: Graph): boolean {\n const h = g.high.v, l = g.low.v;\n const diffP = h[1]! - h[0]!, diffM = l[0]! - l[1]!;\n return diffM > 0 && diffP < diffM;\n}\n\ninterface SarOpts {\n /** startvalue: 0 = decide from the first two bars, > 0 long from that SAR, < 0 short from |value|. */\n startValue: number;\n offsetOnReverse: number;\n initLong: number; accLong: number; maxLong: number;\n initShort: number; accShort: number; maxShort: number;\n /** Signed output (negative when short) as SAREXT. */\n signed: boolean;\n}\n\nfunction parabolic(g: Graph, o: SarOpts): Node {\n const isLong = g.col(), sarS = g.col(), ep = g.col(), afL = g.col(), afS = g.col();\n return g.node((self, a, b) => {\n const hi = g.high.v, lo = g.low.v, lg = isLong.v, ss = sarS.v, ee = ep.v, fl = afL.v, fs = afS.v, v = self.v;\n for (let i = a; i < b; i++) {\n if (i < 1) { v[i] = Number.NaN; continue; }\n let long: boolean, sar: number, e: number, al: number, as_: number, prevLow: number, prevHigh: number;\n if (i === 1) {\n if (o.startValue === 0) long = !startsShort(g);\n else long = o.startValue > 0;\n if (o.startValue === 0) {\n if (long) { e = hi[1]!; sar = lo[0]!; } else { e = lo[1]!; sar = hi[0]!; }\n } else if (o.startValue > 0) { e = hi[1]!; sar = o.startValue; } else { e = lo[1]!; sar = Math.abs(o.startValue); }\n al = o.initLong;\n as_ = o.initShort;\n // TA-Lib seeds \"previous\" with the first processed bar itself\n prevLow = lo[1]!;\n prevHigh = hi[1]!;\n } else {\n long = lg[i - 1]! === 1; sar = ss[i - 1]!; e = ee[i - 1]!; al = fl[i - 1]!; as_ = fs[i - 1]!;\n prevLow = lo[i - 1]!;\n prevHigh = hi[i - 1]!;\n }\n const newLow = lo[i]!, newHigh = hi[i]!;\n let out: number;\n if (long) {\n if (newLow <= sar) {\n long = false;\n sar = e;\n if (sar < prevHigh) sar = prevHigh;\n if (sar < newHigh) sar = newHigh;\n if (o.offsetOnReverse !== 0) sar += sar * o.offsetOnReverse;\n out = o.signed ? -sar : sar;\n as_ = o.initShort;\n e = newLow;\n sar = sar + as_ * (e - sar);\n if (sar < prevHigh) sar = prevHigh;\n if (sar < newHigh) sar = newHigh;\n } else {\n out = sar;\n if (newHigh > e) {\n e = newHigh;\n al += o.accLong;\n if (al > o.maxLong) al = o.maxLong;\n }\n sar = sar + al * (e - sar);\n if (sar > prevLow) sar = prevLow;\n if (sar > newLow) sar = newLow;\n }\n } else if (newHigh >= sar) {\n long = true;\n sar = e;\n if (sar > prevLow) sar = prevLow;\n if (sar > newLow) sar = newLow;\n if (o.offsetOnReverse !== 0) sar -= sar * o.offsetOnReverse;\n out = sar;\n al = o.initLong;\n e = newHigh;\n sar = sar + al * (e - sar);\n if (sar > prevLow) sar = prevLow;\n if (sar > newLow) sar = newLow;\n } else {\n out = o.signed ? -sar : sar;\n if (newLow < e) {\n e = newLow;\n as_ += o.accShort;\n if (as_ > o.maxShort) as_ = o.maxShort;\n }\n sar = sar + as_ * (e - sar);\n if (sar < prevHigh) sar = prevHigh;\n if (sar < newHigh) sar = newHigh;\n }\n lg[i] = long ? 1 : 0; ss[i] = sar; ee[i] = e; fl[i] = al; fs[i] = as_;\n v[i] = out;\n }\n });\n}\n\nconst acc = (key: string, def: number) => float(key, def, 0, 100, 0.01);\n\nexport const sar = defineStudy({\n id: \"sar\", name: \"Parabolic SAR\", family: \"overlap\", needs: \"ohlc\", pane: \"overlay\",\n inputs: [acc(\"start\", 0.02), acc(\"increment\", 0.02), acc(\"maximum\", 0.2)],\n columns: [\"sar\"],\n plots: [markers(\"sar\", \"circle\", \"value\", COLORS.blue)],\n label: (p) => `${p.start}, ${p.increment}, ${p.maximum}`,\n build: (g, p) => {\n const max: number = p.maximum;\n const start = Math.min(p.start as number, max);\n return [parabolic(g, { startValue: 0, offsetOnReverse: 0, initLong: start, accLong: p.increment, maxLong: max, initShort: start, accShort: p.increment, maxShort: max, signed: false })];\n },\n reference: \"TA-Lib SAR (start = increment = acceleration)\",\n});\n\nexport const sarext = defineStudy({\n id: \"sarext\", name: \"Parabolic SAR - Extended\", family: \"overlap\", needs: \"ohlc\", pane: \"overlay\",\n inputs: [\n float(\"startvalue\", 0, -1e9, 1e9, 0.1),\n acc(\"offsetonreverse\", 0),\n acc(\"accelerationinitlong\", 0.02), acc(\"accelerationlong\", 0.02), acc(\"accelerationmaxlong\", 0.2),\n acc(\"accelerationinitshort\", 0.02), acc(\"accelerationshort\", 0.02), acc(\"accelerationmaxshort\", 0.2),\n ],\n columns: [\"sarext\", \"level\"],\n plots: [markers(\"level\", \"circle\", \"value\", COLORS.blue, { title: \"SAR\" })],\n label: () => \"sarext is negative when short\",\n build: (g, p) => {\n const maxL: number = p.accelerationmaxlong, maxS: number = p.accelerationmaxshort;\n const sx: Node = parabolic(g, {\n startValue: p.startvalue, offsetOnReverse: p.offsetonreverse,\n initLong: Math.min(p.accelerationinitlong as number, maxL), accLong: Math.min(p.accelerationlong as number, maxL), maxLong: maxL,\n initShort: Math.min(p.accelerationinitshort as number, maxS), accShort: Math.min(p.accelerationshort as number, maxS), maxShort: maxS,\n signed: true,\n });\n // the unsigned price level, for drawing on the price pane\n const level: Col = g.map(sx, Math.abs);\n return [sx, level];\n },\n reference: \"TA-Lib SAREXT (signed: negative when short)\",\n});\n","// Candlestick patterns: the 61 TA-Lib CDL* functions, reproduced bar for bar.\n//\n// TA-Lib judges a candle against \"settings\": a range type (real body, high-low or both shadows), an\n// averaging period and a factor. A candle at offset k from the bar being judged is compared with\n// factor * (sum of that range over the `period` bars before it) / period. The sum is kept the way TA-Lib\n// keeps it (seeded once at the pattern's first bar, then moved a bar at a time) so float rounding agrees,\n// which matters on the exact-tie comparisons prices rounded to cents produce. A setting with period 0\n// (ShadowLong, ShadowVeryLong) compares with the candle's own range instead.\n//\n// Output: +100 bullish, -100 bearish (+-80 where TA-Lib weakens a signal), 0 no pattern, NaN inside the lookback.\n\nimport { COLORS, defineStudy, float, markers } from \"../define.js\";\nimport type { Graph, Node } from \"../engine/graph.js\";\nimport type { InputDef, Params, StudyDef } from \"../types.js\";\n\nconst RB = 0, HL = 1, SH = 2;\ninterface Setting { readonly rt: number; readonly p: number; readonly f: number }\nconst BL: Setting = { rt: RB, p: 10, f: 1 }; // body long\nconst BS: Setting = { rt: RB, p: 10, f: 1 }; // body short\nconst BD: Setting = { rt: HL, p: 10, f: 0.1 }; // body doji\nconst SL: Setting = { rt: RB, p: 0, f: 1 }; // shadow long\nconst SVL: Setting = { rt: RB, p: 0, f: 2 }; // shadow very long\nconst SS: Setting = { rt: SH, p: 10, f: 1 }; // shadow short\nconst SVS: Setting = { rt: HL, p: 10, f: 0.1 }; // shadow very short\nconst NEAR: Setting = { rt: HL, p: 5, f: 0.2 };\nconst FAR: Setting = { rt: HL, p: 5, f: 0.6 };\nconst EQ: Setting = { rt: HL, p: 5, f: 0.05 };\n\n/** A running total to read at each bar: the setting's range summed over the window that ends k+1 bars back, seeded at bar `from`. */\ntype Slot = readonly [Setting, number];\n\n// The bars being evaluated. Bound at the start of every node run (the graph replaces its buffers when it grows).\nlet O: Float64Array, H: Float64Array, Lw: Float64Array, C: Float64Array;\nfunction bind(g: Graph): void {\n O = g.open.v; H = g.high.v; Lw = g.low.v; C = g.close.v;\n}\nconst op = (i: number): number => O[i]!;\nconst hi = (i: number): number => H[i]!;\nconst lo = (i: number): number => Lw[i]!;\nconst cl = (i: number): number => C[i]!;\nconst col = (i: number): number => (C[i]! >= O[i]! ? 1 : -1);\nconst rb = (i: number): number => Math.abs(C[i]! - O[i]!);\nconst us = (i: number): number => H[i]! - (C[i]! >= O[i]! ? C[i]! : O[i]!);\nconst ls = (i: number): number => (C[i]! >= O[i]! ? O[i]! : C[i]!) - Lw[i]!;\n\nfunction range(s: Setting, i: number): number {\n return s.rt === RB ? rb(i) : s.rt === HL ? H[i]! - Lw[i]! : us(i) + ls(i);\n}\n\n/** TA_CANDLEAVERAGE: the setting's threshold for candle `i`, given the running total of its window. */\nfunction avg(s: Setting, total: number, i: number): number {\n return (s.f * (s.p !== 0 ? total / s.p : range(s, i))) / (s.rt === SH ? 2 : 1);\n}\n\n/** a * b + c rounded once (TA-Lib calls C fma in a few penetration tests; JS has none). */\nfunction fma(a: number, b: number, c: number): number {\n const p = a * b;\n const ca = 134217729 * a, ah = ca - (ca - a), al = a - ah;\n const cb = 134217729 * b, bh = cb - (cb - b), bl = b - bh;\n const e = ah * bh - p + ah * bl + al * bh + al * bl;\n const s = p + c, v = s - p;\n return s + (p - (s - v) + (c - v) + e);\n}\n\nfunction tot(g: Graph, s: Setting, k: number, from: number): Node {\n if (s.p === 0) throw new RangeError(\"a setting without an averaging period has no running total\");\n const P = s.p;\n return g.node((nd, a, b) => {\n bind(g);\n const v = nd.v;\n for (let i = a; i < b; i++) {\n if (i < from) { v[i] = Number.NaN; continue; }\n const end = i - k; // the window is [end - P, end - 1]\n if (i === from) {\n let t = 0;\n for (let j = end - P; j < end; j++) t += range(s, j);\n v[i] = t;\n } else v[i] = v[i - 1]! + (range(s, end - 1) - range(s, end - 1 - P));\n }\n });\n}\n\nfunction mkStudy(id: string, name: string, inputs: readonly InputDef[], build: (g: Graph, p: Params) => Node[]): StudyDef {\n return defineStudy({\n id: `cdl-${id.toLowerCase()}`, name, family: \"pattern\", needs: \"ohlc\", pane: \"overlay\", inputs, columns: [\"signal\"],\n plots: [markers(\"signal\", \"arrowUp\", \"sign\", COLORS.blue, { text: true })], build, reference: `TA-Lib CDL${id}`,\n });\n}\n\ntype Eval = (i: number, T: Float64Array, pen: number) => number;\n\n/** A stateless pattern: `fn` judges bar i from the bars before it and the running totals of its slots (in order). */\nfunction cdl(id: string, name: string, lookback: number, slots: readonly Slot[], fn: Eval, pen?: { pen: number }): StudyDef {\n const inputs = pen ? [float(\"penetration\", pen.pen, 0, 10, 0.05)] : [];\n return mkStudy(id, name, inputs, (g, p) => {\n const ts = slots.map(([s, k]) => tot(g, s, k, lookback));\n const T = new Float64Array(ts.length); // scratch, rewritten for every bar before it is read\n const penetration = pen ? (p.penetration as number) : 0;\n return [g.node((nd, a, b) => {\n bind(g);\n const v = nd.v;\n for (let i = a; i < b; i++) {\n if (i < lookback) { v[i] = Number.NaN; continue; }\n for (let s = 0; s < ts.length; s++) T[s] = ts[s]!.v[i]!;\n v[i] = fn(i, T, penetration);\n }\n })];\n });\n}\n\n// ---- 1. two to four candle reversal and continuation patterns -----------------------------------\n\nexport const cdl2Crows = cdl(\"2CROWS\", \"Two Crows\", 12, [[BL, 2]], (i, T) =>\n col(i - 2) === 1 && rb(i - 2) > avg(BL, T[0]!, i - 2) &&\n col(i - 1) === -1 && Math.min(op(i - 1), cl(i - 1)) > Math.max(op(i - 2), cl(i - 2)) &&\n col(i) === -1 && op(i) < op(i - 1) && op(i) > cl(i - 1) && cl(i) > op(i - 2) && cl(i) < cl(i - 2)\n ? -100 : 0);\n\nexport const cdl3BlackCrows = cdl(\"3BLACKCROWS\", \"Three Black Crows\", 13, [[SVS, 2], [SVS, 1], [SVS, 0]], (i, T) =>\n col(i - 3) === 1 && col(i - 2) === -1 && col(i - 1) === -1 && col(i) === -1 &&\n op(i - 1) < op(i - 2) && op(i - 1) > cl(i - 2) && op(i) < op(i - 1) && op(i) > cl(i - 1) &&\n hi(i - 3) > cl(i - 2) && cl(i - 2) > cl(i - 1) && cl(i - 1) > cl(i) &&\n ls(i - 2) < avg(SVS, T[0]!, i - 2) && ls(i - 1) < avg(SVS, T[1]!, i - 1) && ls(i) < avg(SVS, T[2]!, i)\n ? -100 : 0);\n\nexport const cdl3Inside = cdl(\"3INSIDE\", \"Three Inside Up/Down\", 12, [[BL, 2], [BS, 1]], (i, T) =>\n Math.max(cl(i - 1), op(i - 1)) < Math.max(cl(i - 2), op(i - 2)) && Math.min(cl(i - 1), op(i - 1)) > Math.min(cl(i - 2), op(i - 2)) &&\n ((col(i - 2) === 1 && col(i) === -1 && cl(i) < op(i - 2)) || (col(i - 2) === -1 && col(i) === 1 && cl(i) > op(i - 2))) &&\n rb(i - 2) > avg(BL, T[0]!, i - 2) && rb(i - 1) <= avg(BS, T[1]!, i - 1)\n ? -col(i - 2) * 100 : 0);\n\nexport const cdl3LineStrike = cdl(\"3LINESTRIKE\", \"Three-Line Strike\", 8, [[NEAR, 3], [NEAR, 2]], (i, T) =>\n col(i - 3) === col(i - 2) && col(i - 2) === col(i - 1) && col(i) === -col(i - 1) &&\n op(i - 2) >= Math.min(op(i - 3), cl(i - 3)) - avg(NEAR, T[0]!, i - 3) && op(i - 2) <= Math.max(op(i - 3), cl(i - 3)) + avg(NEAR, T[0]!, i - 3) &&\n op(i - 1) >= Math.min(op(i - 2), cl(i - 2)) - avg(NEAR, T[1]!, i - 2) && op(i - 1) <= Math.max(op(i - 2), cl(i - 2)) + avg(NEAR, T[1]!, i - 2) &&\n ((col(i - 1) === 1 && cl(i - 1) > cl(i - 2) && cl(i - 2) > cl(i - 3) && op(i) > cl(i - 1) && cl(i) < op(i - 3)) ||\n (col(i - 1) === -1 && cl(i - 1) < cl(i - 2) && cl(i - 2) < cl(i - 3) && op(i) < cl(i - 1) && cl(i) > op(i - 3)))\n ? col(i - 1) * 100 : 0);\n\nexport const cdl3Outside = cdl(\"3OUTSIDE\", \"Three Outside Up/Down\", 3, [], (i) =>\n (col(i - 1) === 1 && col(i - 2) === -1 && cl(i - 1) > op(i - 2) && op(i - 1) < cl(i - 2) && cl(i) > cl(i - 1)) ||\n (col(i - 1) === -1 && col(i - 2) === 1 && op(i - 1) > cl(i - 2) && cl(i - 1) < op(i - 2) && cl(i) < cl(i - 1))\n ? col(i - 1) * 100 : 0);\n\nexport const cdl3StarsInSouth = cdl(\"3STARSINSOUTH\", \"Three Stars In The South\", 12, [[BL, 2], [SVS, 1], [SVS, 0], [BS, 0]], (i, T) =>\n col(i - 2) === -1 && col(i - 1) === -1 && col(i) === -1 &&\n rb(i - 2) > avg(BL, T[0]!, i - 2) && ls(i - 2) > avg(SL, 0, i - 2) &&\n rb(i - 1) < rb(i - 2) && op(i - 1) > cl(i - 2) && op(i - 1) <= hi(i - 2) && lo(i - 1) < cl(i - 2) && lo(i - 1) >= lo(i - 2) &&\n ls(i - 1) > avg(SVS, T[1]!, i - 1) &&\n rb(i) < avg(BS, T[3]!, i) && ls(i) < avg(SVS, T[2]!, i) && us(i) < avg(SVS, T[2]!, i) &&\n lo(i) > lo(i - 1) && hi(i) < hi(i - 1)\n ? 100 : 0);\n\nexport const cdl3WhiteSoldiers = cdl(\"3WHITESOLDIERS\", \"Three Advancing White Soldiers\", 12,\n [[SVS, 2], [SVS, 1], [SVS, 0], [NEAR, 2], [NEAR, 1], [FAR, 2], [FAR, 1], [BS, 0]], (i, T) =>\n col(i - 2) === 1 && us(i - 2) < avg(SVS, T[0]!, i - 2) &&\n col(i - 1) === 1 && us(i - 1) < avg(SVS, T[1]!, i - 1) &&\n col(i) === 1 && us(i) < avg(SVS, T[2]!, i) &&\n cl(i) > cl(i - 1) && cl(i - 1) > cl(i - 2) && op(i - 1) > op(i - 2) && op(i - 1) <= cl(i - 2) + avg(NEAR, T[3]!, i - 2) &&\n op(i) > op(i - 1) && op(i) <= cl(i - 1) + avg(NEAR, T[4]!, i - 1) &&\n rb(i - 1) > rb(i - 2) - avg(FAR, T[5]!, i - 2) && rb(i) > rb(i - 1) - avg(FAR, T[6]!, i - 1) &&\n rb(i) > avg(BS, T[7]!, i)\n ? 100 : 0);\n\nexport const cdlAbandonedBaby = cdl(\"ABANDONEDBABY\", \"Abandoned Baby\", 12, [[BL, 2], [BD, 1], [BS, 0]], (i, T, pen) =>\n rb(i - 2) > avg(BL, T[0]!, i - 2) && rb(i - 1) <= avg(BD, T[1]!, i - 1) && rb(i) > avg(BS, T[2]!, i) &&\n ((col(i - 2) === 1 && col(i) === -1 && cl(i) < cl(i - 2) - rb(i - 2) * pen && lo(i - 1) > hi(i - 2) && hi(i) < lo(i - 1)) ||\n (col(i - 2) === -1 && col(i) === 1 && cl(i) > fma(rb(i - 2), pen, cl(i - 2)) && hi(i - 1) < lo(i - 2) && lo(i) > hi(i - 1)))\n ? col(i) * 100 : 0, { pen: 0.3 });\n\nexport const cdlAdvanceBlock = cdl(\"ADVANCEBLOCK\", \"Advance Block\", 12,\n [[SS, 2], [SS, 1], [SS, 0], [NEAR, 2], [NEAR, 1], [FAR, 2], [FAR, 1], [BL, 2]], (i, T) =>\n col(i - 2) === 1 && col(i - 1) === 1 && col(i) === 1 &&\n cl(i) > cl(i - 1) && cl(i - 1) > cl(i - 2) && op(i - 1) > op(i - 2) && op(i - 1) <= cl(i - 2) + avg(NEAR, T[3]!, i - 2) &&\n op(i) > op(i - 1) && op(i) <= cl(i - 1) + avg(NEAR, T[4]!, i - 1) &&\n rb(i - 2) > avg(BL, T[7]!, i - 2) && us(i - 2) < avg(SS, T[0]!, i - 2) &&\n ((rb(i - 1) < rb(i - 2) - avg(FAR, T[5]!, i - 2) && rb(i) < rb(i - 1) + avg(NEAR, T[4]!, i - 1)) ||\n rb(i) < rb(i - 1) - avg(FAR, T[6]!, i - 1) ||\n (rb(i) < rb(i - 1) && rb(i - 1) < rb(i - 2) && (us(i) > avg(SS, T[2]!, i) || us(i - 1) > avg(SS, T[1]!, i - 1))) ||\n (rb(i) < rb(i - 1) && us(i) > avg(SL, 0, i)))\n ? -100 : 0);\n\nexport const cdlBeltHold = cdl(\"BELTHOLD\", \"Belt-hold\", 10, [[BL, 0], [SVS, 0]], (i, T) =>\n rb(i) > avg(BL, T[0]!, i) &&\n ((col(i) === 1 && ls(i) < avg(SVS, T[1]!, i)) || (col(i) === -1 && us(i) < avg(SVS, T[1]!, i)))\n ? col(i) * 100 : 0);\n\nexport const cdlBreakaway = cdl(\"BREAKAWAY\", \"Breakaway\", 14, [[BL, 4]], (i, T) =>\n col(i - 4) === col(i - 3) && col(i - 3) === col(i - 1) && col(i - 1) === -col(i) &&\n rb(i - 4) > avg(BL, T[0]!, i - 4) &&\n ((col(i - 4) === -1 && Math.max(op(i - 3), cl(i - 3)) < Math.min(op(i - 4), cl(i - 4)) &&\n hi(i - 2) < hi(i - 3) && lo(i - 2) < lo(i - 3) && hi(i - 1) < hi(i - 2) && lo(i - 1) < lo(i - 2) &&\n cl(i) > op(i - 3) && cl(i) < cl(i - 4)) ||\n (col(i - 4) === 1 && Math.min(op(i - 3), cl(i - 3)) > Math.max(op(i - 4), cl(i - 4)) &&\n hi(i - 2) > hi(i - 3) && lo(i - 2) > lo(i - 3) && hi(i - 1) > hi(i - 2) && lo(i - 1) > lo(i - 2) &&\n cl(i) < op(i - 3) && cl(i) > cl(i - 4)))\n ? col(i) * 100 : 0);\n\nexport const cdlClosingMarubozu = cdl(\"CLOSINGMARUBOZU\", \"Closing Marubozu\", 10, [[BL, 0], [SVS, 0]], (i, T) =>\n rb(i) > avg(BL, T[0]!, i) &&\n ((col(i) === 1 && us(i) < avg(SVS, T[1]!, i)) || (col(i) === -1 && ls(i) < avg(SVS, T[1]!, i)))\n ? col(i) * 100 : 0);\n\nexport const cdlConcealBabySwall = cdl(\"CONCEALBABYSWALL\", \"Concealing Baby Swallow\", 13, [[SVS, 3], [SVS, 2], [SVS, 1]], (i, T) =>\n col(i - 3) === -1 && col(i - 2) === -1 && col(i - 1) === -1 && col(i) === -1 &&\n ls(i - 3) < avg(SVS, T[0]!, i - 3) && us(i - 3) < avg(SVS, T[0]!, i - 3) &&\n ls(i - 2) < avg(SVS, T[1]!, i - 2) && us(i - 2) < avg(SVS, T[1]!, i - 2) &&\n Math.max(op(i - 1), cl(i - 1)) < Math.min(op(i - 2), cl(i - 2)) &&\n us(i - 1) > avg(SVS, T[2]!, i - 1) && hi(i - 1) > cl(i - 2) &&\n hi(i) > hi(i - 1) && lo(i) < lo(i - 1)\n ? 100 : 0);\n\nexport const cdlCounterAttack = cdl(\"COUNTERATTACK\", \"Counterattack\", 11, [[EQ, 1], [BL, 1], [BL, 0]], (i, T) =>\n col(i - 1) === -col(i) &&\n rb(i - 1) > avg(BL, T[1]!, i - 1) && rb(i) > avg(BL, T[2]!, i) &&\n cl(i) <= cl(i - 1) + avg(EQ, T[0]!, i - 1) && cl(i) >= cl(i - 1) - avg(EQ, T[0]!, i - 1)\n ? col(i) * 100 : 0);\n\nexport const cdlDarkCloudCover = cdl(\"DARKCLOUDCOVER\", \"Dark Cloud Cover\", 11, [[BL, 1]], (i, T, pen) =>\n col(i - 1) === 1 && rb(i - 1) > avg(BL, T[0]!, i - 1) &&\n col(i) === -1 && op(i) > hi(i - 1) && cl(i) > op(i - 1) && cl(i) < cl(i - 1) - rb(i - 1) * pen\n ? -100 : 0, { pen: 0.5 });\n\nexport const cdlDoji = cdl(\"DOJI\", \"Doji\", 10, [[BD, 0]], (i, T) => rb(i) <= avg(BD, T[0]!, i) ? 100 : 0);\n\nexport const cdlDojiStar = cdl(\"DOJISTAR\", \"Doji Star\", 11, [[BL, 1], [BD, 0]], (i, T) =>\n rb(i - 1) > avg(BL, T[0]!, i - 1) && rb(i) <= avg(BD, T[1]!, i) &&\n ((col(i - 1) === 1 && Math.min(op(i), cl(i)) > Math.max(op(i - 1), cl(i - 1))) ||\n (col(i - 1) === -1 && Math.max(op(i), cl(i)) < Math.min(op(i - 1), cl(i - 1))))\n ? -col(i - 1) * 100 : 0);\n\nexport const cdlDragonflyDoji = cdl(\"DRAGONFLYDOJI\", \"Dragonfly Doji\", 10, [[BD, 0], [SVS, 0]], (i, T) =>\n rb(i) <= avg(BD, T[0]!, i) && us(i) < avg(SVS, T[1]!, i) && ls(i) > avg(SVS, T[1]!, i)\n ? 100 : 0);\n\nexport const cdlEngulfing = cdl(\"ENGULFING\", \"Engulfing Pattern\", 2, [], (i) =>\n (col(i) === 1 && col(i - 1) === -1 && ((cl(i) >= op(i - 1) && op(i) < cl(i - 1)) || (cl(i) > op(i - 1) && op(i) <= cl(i - 1)))) ||\n (col(i) === -1 && col(i - 1) === 1 && ((op(i) >= cl(i - 1) && cl(i) < op(i - 1)) || (op(i) > cl(i - 1) && cl(i) <= op(i - 1))))\n ? (op(i) !== cl(i - 1) && cl(i) !== op(i - 1) ? col(i) * 100 : col(i) * 80) : 0);\n\nexport const cdlEveningDojiStar = cdl(\"EVENINGDOJISTAR\", \"Evening Doji Star\", 12, [[BL, 2], [BD, 1], [BS, 0]], (i, T, pen) =>\n col(i - 2) === 1 && col(i) === -1 && Math.min(op(i - 1), cl(i - 1)) > Math.max(op(i - 2), cl(i - 2)) &&\n cl(i) < cl(i - 2) - rb(i - 2) * pen &&\n rb(i - 2) > avg(BL, T[0]!, i - 2) && rb(i - 1) <= avg(BD, T[1]!, i - 1) && rb(i) > avg(BS, T[2]!, i)\n ? -100 : 0, { pen: 0.3 });\n\nexport const cdlEveningStar = cdl(\"EVENINGSTAR\", \"Evening Star\", 12, [[BL, 2], [BS, 1], [BS, 0]], (i, T, pen) =>\n col(i - 2) === 1 && col(i) === -1 && Math.min(op(i - 1), cl(i - 1)) > Math.max(op(i - 2), cl(i - 2)) &&\n cl(i) < cl(i - 2) - rb(i - 2) * pen &&\n rb(i - 2) > avg(BL, T[0]!, i - 2) && rb(i - 1) <= avg(BS, T[1]!, i - 1) && rb(i) > avg(BS, T[2]!, i)\n ? -100 : 0, { pen: 0.3 });\n\nexport const cdlGapSideSideWhite = cdl(\"GAPSIDESIDEWHITE\", \"Up/Down-gap side-by-side white lines\", 7, [[NEAR, 1], [EQ, 1]], (i, T) => {\n const up = Math.min(op(i - 1), cl(i - 1)) > Math.max(op(i - 2), cl(i - 2));\n return ((up && Math.min(op(i), cl(i)) > Math.max(op(i - 2), cl(i - 2))) ||\n (Math.max(op(i - 1), cl(i - 1)) < Math.min(op(i - 2), cl(i - 2)) && Math.max(op(i), cl(i)) < Math.min(op(i - 2), cl(i - 2)))) &&\n col(i - 1) === 1 && col(i) === 1 &&\n rb(i) >= rb(i - 1) - avg(NEAR, T[0]!, i - 1) && rb(i) <= rb(i - 1) + avg(NEAR, T[0]!, i - 1) &&\n op(i) >= op(i - 1) - avg(EQ, T[1]!, i - 1) && op(i) <= op(i - 1) + avg(EQ, T[1]!, i - 1)\n ? (up ? 100 : -100) : 0;\n});\n\nexport const cdlGravestoneDoji = cdl(\"GRAVESTONEDOJI\", \"Gravestone Doji\", 10, [[BD, 0], [SVS, 0]], (i, T) =>\n rb(i) <= avg(BD, T[0]!, i) && ls(i) < avg(SVS, T[1]!, i) && us(i) > avg(SVS, T[1]!, i)\n ? 100 : 0);\n\nexport const cdlHammer = cdl(\"HAMMER\", \"Hammer\", 11, [[BS, 0], [SVS, 0], [NEAR, 1]], (i, T) =>\n rb(i) < avg(BS, T[0]!, i) && ls(i) > avg(SL, 0, i) && us(i) < avg(SVS, T[1]!, i) &&\n Math.min(cl(i), op(i)) <= lo(i - 1) + avg(NEAR, T[2]!, i - 1)\n ? 100 : 0);\n\nexport const cdlHangingMan = cdl(\"HANGINGMAN\", \"Hanging Man\", 11, [[BS, 0], [SVS, 0], [NEAR, 1]], (i, T) =>\n rb(i) < avg(BS, T[0]!, i) && ls(i) > avg(SL, 0, i) && us(i) < avg(SVS, T[1]!, i) &&\n Math.min(cl(i), op(i)) >= hi(i - 1) - avg(NEAR, T[2]!, i - 1)\n ? -100 : 0);\n\nexport const cdlHarami = cdl(\"HARAMI\", \"Harami Pattern\", 11, [[BL, 1], [BS, 0]], (i, T) => {\n if (!(rb(i - 1) > avg(BL, T[0]!, i - 1) && rb(i) <= avg(BS, T[1]!, i))) return 0;\n const mx = Math.max(cl(i), op(i)), mn = Math.min(cl(i), op(i)), pmx = Math.max(cl(i - 1), op(i - 1)), pmn = Math.min(cl(i - 1), op(i - 1));\n return mx < pmx && mn > pmn ? -col(i - 1) * 100 : mx <= pmx && mn >= pmn ? -col(i - 1) * 80 : 0;\n});\n\nexport const cdlHaramiCross = cdl(\"HARAMICROSS\", \"Harami Cross Pattern\", 11, [[BL, 1], [BD, 0]], (i, T) => {\n if (!(rb(i - 1) > avg(BL, T[0]!, i - 1) && rb(i) <= avg(BD, T[1]!, i))) return 0;\n const mx = Math.max(cl(i), op(i)), mn = Math.min(cl(i), op(i)), pmx = Math.max(cl(i - 1), op(i - 1)), pmn = Math.min(cl(i - 1), op(i - 1));\n return mx < pmx && mn > pmn ? -col(i - 1) * 100 : mx <= pmx && mn >= pmn ? -col(i - 1) * 80 : 0;\n});\n\nexport const cdlHighWave = cdl(\"HIGHWAVE\", \"High-Wave Candle\", 10, [[BS, 0]], (i, T) =>\n rb(i) < avg(BS, T[0]!, i) && us(i) > avg(SVL, 0, i) && ls(i) > avg(SVL, 0, i)\n ? col(i) * 100 : 0);\n\n// Hikkake: a state machine over the bars after an inside bar. The state (days left to confirm, result,\n// saved high/low) lives in columns written from the previous bar's; TA-Lib starts it 3 bars before the first output.\nfunction hikkake(id: string, name: string, mod: boolean) {\n const L = mod ? 10 : 5;\n const start = L - 3;\n return mkStudy(id, name, [], (g) => {\n const T = mod ? tot(g, NEAR, 2, start) : null;\n const cdC = g.col(), resC = g.col(), shC = g.col(), slC = g.col();\n const sig = g.node((nd, a, b) => {\n bind(g);\n const v = nd.v, cdv = cdC.v, rs = resC.v, sh = shC.v, sl = slC.v;\n for (let i = a; i < b; i++) {\n if (i < start) { v[i] = NaN; continue; }\n let cd = i > start ? cdv[i - 1]! : 0, res = i > start ? rs[i - 1]! : 0, sHi = i > start ? sh[i - 1]! : 0, sLo = i > start ? sl[i - 1]! : 0;\n let out = 0;\n const base = mod\n ? hi(i - 2) < hi(i - 3) && lo(i - 2) > lo(i - 3) && hi(i - 1) < hi(i - 2) && lo(i - 1) > lo(i - 2) &&\n ((hi(i) < hi(i - 1) && lo(i) < lo(i - 1) && cl(i - 2) <= lo(i - 2) + avg(NEAR, T!.v[i]!, i - 2)) ||\n (hi(i) > hi(i - 1) && lo(i) > lo(i - 1) && cl(i - 2) >= hi(i - 2) - avg(NEAR, T!.v[i]!, i - 2)))\n : hi(i - 1) < hi(i - 2) && lo(i - 1) > lo(i - 2) &&\n ((hi(i) < hi(i - 1) && lo(i) < lo(i - 1)) || (hi(i) > hi(i - 1) && lo(i) > lo(i - 1)));\n if (base) {\n res = 100 * (hi(i) < hi(i - 1) ? 1 : -1); sHi = hi(i - 1); sLo = lo(i - 1); cd = 4; out = res;\n } else if (cd > 0 && ((res > 0 && cl(i) > sHi) || (res < 0 && cl(i) < sLo))) {\n out = res + 100 * (res > 0 ? 1 : -1); cd = 0;\n }\n if (cd > 0) cd -= 1;\n cdv[i] = cd; rs[i] = res; sh[i] = sHi; sl[i] = sLo;\n v[i] = i >= L ? out : NaN;\n }\n });\n return [sig];\n });\n}\n\nexport const cdlHikkake = hikkake(\"HIKKAKE\", \"Hikkake Pattern\", false);\nexport const cdlHikkakeMod = hikkake(\"HIKKAKEMOD\", \"Modified Hikkake Pattern\", true);\n\nexport const cdlHomingPigeon = cdl(\"HOMINGPIGEON\", \"Homing Pigeon\", 11, [[BL, 1], [BS, 0]], (i, T) =>\n col(i - 1) === -1 && col(i) === -1 && rb(i - 1) > avg(BL, T[0]!, i - 1) && rb(i) <= avg(BS, T[1]!, i) &&\n op(i) < op(i - 1) && cl(i) > cl(i - 1)\n ? 100 : 0);\n\nexport const cdlIdentical3Crows = cdl(\"IDENTICAL3CROWS\", \"Identical Three Crows\", 12,\n [[SVS, 2], [SVS, 1], [SVS, 0], [EQ, 2], [EQ, 1]], (i, T) =>\n col(i - 2) === -1 && ls(i - 2) < avg(SVS, T[0]!, i - 2) &&\n col(i - 1) === -1 && ls(i - 1) < avg(SVS, T[1]!, i - 1) &&\n col(i) === -1 && ls(i) < avg(SVS, T[2]!, i) &&\n cl(i - 2) > cl(i - 1) && cl(i - 1) > cl(i) &&\n op(i - 1) <= cl(i - 2) + avg(EQ, T[3]!, i - 2) && op(i - 1) >= cl(i - 2) - avg(EQ, T[3]!, i - 2) &&\n op(i) <= cl(i - 1) + avg(EQ, T[4]!, i - 1) && op(i) >= cl(i - 1) - avg(EQ, T[4]!, i - 1)\n ? -100 : 0);\n\nexport const cdlInNeck = cdl(\"INNECK\", \"In-Neck Pattern\", 11, [[EQ, 1], [BL, 1]], (i, T) =>\n col(i - 1) === -1 && rb(i - 1) > avg(BL, T[1]!, i - 1) &&\n col(i) === 1 && op(i) < lo(i - 1) && cl(i) <= cl(i - 1) + avg(EQ, T[0]!, i - 1) && cl(i) >= cl(i - 1)\n ? -100 : 0);\n\nexport const cdlInvertedHammer = cdl(\"INVERTEDHAMMER\", \"Inverted Hammer\", 11, [[BS, 0], [SVS, 0]], (i, T) =>\n Math.max(op(i), cl(i)) < Math.min(op(i - 1), cl(i - 1)) && rb(i) < avg(BS, T[0]!, i) &&\n us(i) > avg(SL, 0, i) && ls(i) < avg(SVS, T[1]!, i)\n ? 100 : 0);\n\nfunction kicking(i: number, T: Float64Array): boolean {\n return col(i - 1) === -col(i) && rb(i - 1) > avg(BL, T[2]!, i - 1) &&\n us(i - 1) < avg(SVS, T[0]!, i - 1) && ls(i - 1) < avg(SVS, T[0]!, i - 1) &&\n rb(i) > avg(BL, T[3]!, i) && us(i) < avg(SVS, T[1]!, i) && ls(i) < avg(SVS, T[1]!, i) &&\n ((col(i - 1) === -1 && lo(i) > hi(i - 1)) || (col(i - 1) === 1 && hi(i) < lo(i - 1)));\n}\nconst KICK_SLOTS: Slot[] = [[SVS, 1], [SVS, 0], [BL, 1], [BL, 0]];\n\nexport const cdlKicking = cdl(\"KICKING\", \"Kicking\", 11, KICK_SLOTS, (i, T) => (kicking(i, T) ? col(i) * 100 : 0));\n\nexport const cdlKickingByLength = cdl(\"KICKINGBYLENGTH\", \"Kicking - bull/bear determined by the longer marubozu\", 11, KICK_SLOTS, (i, T) =>\n kicking(i, T) ? (col(rb(i) > rb(i - 1) ? i : i - 1)) * 100 : 0);\n\nexport const cdlLadderBottom = cdl(\"LADDERBOTTOM\", \"Ladder Bottom\", 14, [[SVS, 1]], (i, T) =>\n col(i - 4) === -1 && col(i - 3) === -1 && col(i - 2) === -1 &&\n op(i - 4) > op(i - 3) && op(i - 3) > op(i - 2) && cl(i - 4) > cl(i - 3) && cl(i - 3) > cl(i - 2) &&\n col(i - 1) === -1 && us(i - 1) > avg(SVS, T[0]!, i - 1) &&\n col(i) === 1 && op(i) > op(i - 1) && cl(i) > hi(i - 1)\n ? 100 : 0);\n\nexport const cdlLongLeggedDoji = cdl(\"LONGLEGGEDDOJI\", \"Long Legged Doji\", 10, [[BD, 0]], (i, T) =>\n rb(i) <= avg(BD, T[0]!, i) && (ls(i) > avg(SL, 0, i) || us(i) > avg(SL, 0, i))\n ? 100 : 0);\n\nexport const cdlLongLine = cdl(\"LONGLINE\", \"Long Line Candle\", 10, [[BL, 0], [SS, 0]], (i, T) =>\n rb(i) > avg(BL, T[0]!, i) && us(i) < avg(SS, T[1]!, i) && ls(i) < avg(SS, T[1]!, i)\n ? col(i) * 100 : 0);\n\nexport const cdlMarubozu = cdl(\"MARUBOZU\", \"Marubozu\", 10, [[BL, 0], [SVS, 0]], (i, T) =>\n rb(i) > avg(BL, T[0]!, i) && us(i) < avg(SVS, T[1]!, i) && ls(i) < avg(SVS, T[1]!, i)\n ? col(i) * 100 : 0);\n\nexport const cdlMatchingLow = cdl(\"MATCHINGLOW\", \"Matching Low\", 6, [[EQ, 1]], (i, T) =>\n col(i - 1) === -1 && col(i) === -1 &&\n cl(i) <= cl(i - 1) + avg(EQ, T[0]!, i - 1) && cl(i) >= cl(i - 1) - avg(EQ, T[0]!, i - 1)\n ? 100 : 0);\n\nexport const cdlMatHold = cdl(\"MATHOLD\", \"Mat Hold\", 14, [[BL, 4], [BS, 3], [BS, 2], [BS, 1]], (i, T, pen) =>\n col(i - 4) === 1 && col(i - 3) === -1 && col(i) === 1 &&\n Math.min(op(i - 3), cl(i - 3)) > Math.max(op(i - 4), cl(i - 4)) &&\n Math.min(op(i - 2), cl(i - 2)) < cl(i - 4) && Math.min(op(i - 1), cl(i - 1)) < cl(i - 4) &&\n Math.min(op(i - 2), cl(i - 2)) > cl(i - 4) - rb(i - 4) * pen && Math.min(op(i - 1), cl(i - 1)) > cl(i - 4) - rb(i - 4) * pen &&\n Math.max(cl(i - 2), op(i - 2)) < op(i - 3) && Math.max(cl(i - 1), op(i - 1)) < Math.max(cl(i - 2), op(i - 2)) &&\n op(i) > cl(i - 1) && cl(i) > Math.max(Math.max(hi(i - 3), hi(i - 2)), hi(i - 1)) &&\n rb(i - 4) > avg(BL, T[0]!, i - 4) &&\n rb(i - 3) < avg(BS, T[1]!, i - 3) && rb(i - 2) < avg(BS, T[2]!, i - 2) && rb(i - 1) < avg(BS, T[3]!, i - 1)\n ? 100 : 0, { pen: 0.5 });\n\nexport const cdlMorningDojiStar = cdl(\"MORNINGDOJISTAR\", \"Morning Doji Star\", 12, [[BL, 2], [BD, 1], [BS, 0]], (i, T, pen) =>\n col(i - 2) === -1 && col(i) === 1 && Math.max(op(i - 1), cl(i - 1)) < Math.min(op(i - 2), cl(i - 2)) &&\n cl(i) > fma(rb(i - 2), pen, cl(i - 2)) &&\n rb(i - 2) > avg(BL, T[0]!, i - 2) && rb(i - 1) <= avg(BD, T[1]!, i - 1) && rb(i) > avg(BS, T[2]!, i)\n ? 100 : 0, { pen: 0.3 });\n\nexport const cdlMorningStar = cdl(\"MORNINGSTAR\", \"Morning Star\", 12, [[BL, 2], [BS, 1], [BS, 0]], (i, T, pen) =>\n col(i - 2) === -1 && col(i) === 1 && Math.max(op(i - 1), cl(i - 1)) < Math.min(op(i - 2), cl(i - 2)) &&\n cl(i) > fma(rb(i - 2), pen, cl(i - 2)) &&\n rb(i - 2) > avg(BL, T[0]!, i - 2) && rb(i - 1) <= avg(BS, T[1]!, i - 1) && rb(i) > avg(BS, T[2]!, i)\n ? 100 : 0, { pen: 0.3 });\n\nexport const cdlOnNeck = cdl(\"ONNECK\", \"On-Neck Pattern\", 11, [[EQ, 1], [BL, 1]], (i, T) =>\n col(i - 1) === -1 && rb(i - 1) > avg(BL, T[1]!, i - 1) &&\n col(i) === 1 && op(i) < lo(i - 1) && cl(i) <= lo(i - 1) + avg(EQ, T[0]!, i - 1) && cl(i) >= lo(i - 1) - avg(EQ, T[0]!, i - 1)\n ? -100 : 0);\n\nexport const cdlPiercing = cdl(\"PIERCING\", \"Piercing Pattern\", 11, [[BL, 1], [BL, 0]], (i, T) =>\n col(i - 1) === -1 && rb(i - 1) > avg(BL, T[0]!, i - 1) &&\n col(i) === 1 && rb(i) > avg(BL, T[1]!, i) &&\n op(i) < lo(i - 1) && cl(i) < op(i - 1) && cl(i) > fma(rb(i - 1), 0.5, cl(i - 1))\n ? 100 : 0);\n\nexport const cdlRickshawMan = cdl(\"RICKSHAWMAN\", \"Rickshaw Man\", 10, [[BD, 0], [NEAR, 0]], (i, T) =>\n rb(i) <= avg(BD, T[0]!, i) && ls(i) > avg(SL, 0, i) && us(i) > avg(SL, 0, i) &&\n Math.min(op(i), cl(i)) <= lo(i) + (hi(i) - lo(i)) / 2 + avg(NEAR, T[1]!, i) &&\n Math.max(op(i), cl(i)) >= lo(i) + (hi(i) - lo(i)) / 2 - avg(NEAR, T[1]!, i)\n ? 100 : 0);\n\nexport const cdlRiseFall3Methods = cdl(\"RISEFALL3METHODS\", \"Rising/Falling Three Methods\", 14,\n [[BL, 4], [BS, 3], [BS, 2], [BS, 1], [BL, 0]], (i, T) => {\n const s = col(i - 4);\n return col(i - 4) === -col(i - 3) && col(i - 3) === col(i - 2) && col(i - 2) === col(i - 1) && col(i - 1) === -col(i) &&\n Math.min(op(i - 3), cl(i - 3)) < hi(i - 4) && Math.max(op(i - 3), cl(i - 3)) > lo(i - 4) &&\n Math.min(op(i - 2), cl(i - 2)) < hi(i - 4) && Math.max(op(i - 2), cl(i - 2)) > lo(i - 4) &&\n Math.min(op(i - 1), cl(i - 1)) < hi(i - 4) && Math.max(op(i - 1), cl(i - 1)) > lo(i - 4) &&\n cl(i - 2) * s < cl(i - 3) * s && cl(i - 1) * s < cl(i - 2) * s &&\n op(i) * s > cl(i - 1) * s && cl(i) * s > cl(i - 4) * s &&\n rb(i - 4) > avg(BL, T[0]!, i - 4) &&\n rb(i - 3) < avg(BS, T[1]!, i - 3) && rb(i - 2) < avg(BS, T[2]!, i - 2) && rb(i - 1) < avg(BS, T[3]!, i - 1) &&\n rb(i) > avg(BL, T[4]!, i)\n ? 100 * s : 0;\n});\n\nexport const cdlSeparatingLines = cdl(\"SEPARATINGLINES\", \"Separating Lines\", 11, [[SVS, 0], [BL, 0], [EQ, 1]], (i, T) =>\n col(i - 1) === -col(i) &&\n op(i) <= op(i - 1) + avg(EQ, T[2]!, i - 1) && op(i) >= op(i - 1) - avg(EQ, T[2]!, i - 1) &&\n rb(i) > avg(BL, T[1]!, i) &&\n ((col(i) === 1 && ls(i) < avg(SVS, T[0]!, i)) || (col(i) === -1 && us(i) < avg(SVS, T[0]!, i)))\n ? col(i) * 100 : 0);\n\nexport const cdlShootingStar = cdl(\"SHOOTINGSTAR\", \"Shooting Star\", 11, [[BS, 0], [SVS, 0]], (i, T) =>\n Math.min(op(i), cl(i)) > Math.max(op(i - 1), cl(i - 1)) && rb(i) < avg(BS, T[0]!, i) &&\n us(i) > avg(SL, 0, i) && ls(i) < avg(SVS, T[1]!, i)\n ? -100 : 0);\n\nexport const cdlShortLine = cdl(\"SHORTLINE\", \"Short Line Candle\", 10, [[BS, 0], [SS, 0]], (i, T) =>\n rb(i) < avg(BS, T[0]!, i) && us(i) < avg(SS, T[1]!, i) && ls(i) < avg(SS, T[1]!, i)\n ? col(i) * 100 : 0);\n\nexport const cdlSpinningTop = cdl(\"SPINNINGTOP\", \"Spinning Top\", 10, [[BS, 0]], (i, T) =>\n us(i) > rb(i) && ls(i) > rb(i) && rb(i) < avg(BS, T[0]!, i)\n ? col(i) * 100 : 0);\n\nexport const cdlStalledPattern = cdl(\"STALLEDPATTERN\", \"Stalled Pattern\", 12,\n [[BL, 2], [BL, 1], [BS, 0], [SVS, 1], [NEAR, 2], [NEAR, 1]], (i, T) =>\n col(i - 2) === 1 && col(i - 1) === 1 && col(i) === 1 && cl(i) > cl(i - 1) && cl(i - 1) > cl(i - 2) &&\n rb(i - 2) > avg(BL, T[0]!, i - 2) && rb(i - 1) > avg(BL, T[1]!, i - 1) &&\n us(i - 1) < avg(SVS, T[3]!, i - 1) &&\n op(i - 1) > op(i - 2) && op(i - 1) <= cl(i - 2) + avg(NEAR, T[4]!, i - 2) &&\n rb(i) < avg(BS, T[2]!, i) && op(i) >= cl(i - 1) - rb(i) - avg(NEAR, T[5]!, i - 1)\n ? -100 : 0);\n\nexport const cdlStickSandwich = cdl(\"STICKSANDWICH\", \"Stick Sandwich\", 7, [[EQ, 2]], (i, T) =>\n col(i - 2) === -1 && col(i - 1) === 1 && col(i) === -1 && lo(i - 1) > cl(i - 2) &&\n cl(i) <= cl(i - 2) + avg(EQ, T[0]!, i - 2) && cl(i) >= cl(i - 2) - avg(EQ, T[0]!, i - 2)\n ? 100 : 0);\n\nexport const cdlTakuri = cdl(\"TAKURI\", \"Takuri (Dragonfly Doji with very long lower shadow)\", 10, [[BD, 0], [SVS, 0]], (i, T) =>\n rb(i) <= avg(BD, T[0]!, i) && us(i) < avg(SVS, T[1]!, i) && ls(i) > avg(SVL, 0, i)\n ? 100 : 0);\n\nexport const cdlTasukiGap = cdl(\"TASUKIGAP\", \"Tasuki Gap\", 7, [[NEAR, 1]], (i, T) =>\n (Math.min(op(i - 1), cl(i - 1)) > Math.max(op(i - 2), cl(i - 2)) && col(i - 1) === 1 && col(i) === -1 &&\n op(i) < cl(i - 1) && op(i) > op(i - 1) && cl(i) < op(i - 1) && cl(i) > Math.max(cl(i - 2), op(i - 2)) &&\n Math.abs(rb(i - 1) - rb(i)) < avg(NEAR, T[0]!, i - 1)) ||\n (Math.max(op(i - 1), cl(i - 1)) < Math.min(op(i - 2), cl(i - 2)) && col(i - 1) === -1 && col(i) === 1 &&\n op(i) < op(i - 1) && op(i) > cl(i - 1) && cl(i) > op(i - 1) && cl(i) < Math.min(cl(i - 2), op(i - 2)) &&\n Math.abs(rb(i - 1) - rb(i)) < avg(NEAR, T[0]!, i - 1))\n ? col(i - 1) * 100 : 0);\n\nexport const cdlThrusting = cdl(\"THRUSTING\", \"Thrusting Pattern\", 11, [[EQ, 1], [BL, 1]], (i, T) =>\n col(i - 1) === -1 && rb(i - 1) > avg(BL, T[1]!, i - 1) &&\n col(i) === 1 && op(i) < lo(i - 1) && cl(i) > cl(i - 1) + avg(EQ, T[0]!, i - 1) && cl(i) <= fma(rb(i - 1), 0.5, cl(i - 1))\n ? -100 : 0);\n\nexport const cdlTriStar = cdl(\"TRISTAR\", \"Tristar Pattern\", 12, [[BD, 2]], (i, T) => {\n if (!(rb(i - 2) <= avg(BD, T[0]!, i - 2) && rb(i - 1) <= avg(BD, T[0]!, i - 2) && rb(i) <= avg(BD, T[0]!, i - 2))) return 0;\n let out = 0;\n if (Math.min(op(i - 1), cl(i - 1)) > Math.max(op(i - 2), cl(i - 2)) && Math.max(op(i), cl(i)) < Math.max(op(i - 1), cl(i - 1))) out = -100;\n if (Math.max(op(i - 1), cl(i - 1)) < Math.min(op(i - 2), cl(i - 2)) && Math.min(op(i), cl(i)) > Math.min(op(i - 1), cl(i - 1))) out = 100;\n return out;\n});\n\nexport const cdlUnique3River = cdl(\"UNIQUE3RIVER\", \"Unique 3 River\", 12, [[BL, 2], [BS, 0]], (i, T) =>\n col(i - 2) === -1 && col(i - 1) === -1 && col(i) === 1 &&\n cl(i - 1) > cl(i - 2) && op(i - 1) <= op(i - 2) && lo(i - 1) < lo(i - 2) && op(i) > lo(i - 1) &&\n rb(i - 2) > avg(BL, T[0]!, i - 2) && rb(i) < avg(BS, T[1]!, i)\n ? 100 : 0);\n\nexport const cdlUpsideGap2Crows = cdl(\"UPSIDEGAP2CROWS\", \"Upside Gap Two Crows\", 12, [[BL, 2], [BS, 1]], (i, T) =>\n col(i - 2) === 1 && rb(i - 2) > avg(BL, T[0]!, i - 2) &&\n col(i - 1) === -1 && rb(i - 1) <= avg(BS, T[1]!, i - 1) &&\n Math.min(op(i - 1), cl(i - 1)) > Math.max(op(i - 2), cl(i - 2)) &&\n col(i) === -1 && op(i) > op(i - 1) && cl(i) < cl(i - 1) && cl(i) > cl(i - 2)\n ? -100 : 0);\n\nexport const cdlXSideGap3Methods = cdl(\"XSIDEGAP3METHODS\", \"Upside/Downside Gap Three Methods\", 2, [], (i) =>\n col(i - 2) === col(i - 1) && col(i - 1) === -col(i) &&\n op(i) < Math.max(cl(i - 1), op(i - 1)) && op(i) > Math.min(cl(i - 1), op(i - 1)) &&\n cl(i) < Math.max(cl(i - 2), op(i - 2)) && cl(i) > Math.min(cl(i - 2), op(i - 2)) &&\n ((col(i - 2) === 1 && Math.min(op(i - 1), cl(i - 1)) > Math.max(op(i - 2), cl(i - 2))) ||\n (col(i - 2) === -1 && Math.max(op(i - 1), cl(i - 1)) < Math.min(op(i - 2), cl(i - 2))))\n ? col(i - 2) * 100 : 0);\n","// TradingView trend studies: moving averages, bands and channels, Ichimoku,\n// Supertrend, Alligator, Fractals and ZigZag. The specification of each study is\n// TradingView's built-in definition with its default parameters (Pine v5 `ta.*`\n// semantics); each `reference` names the definition implemented.\n//\n// Two conventions that differ from TA-Lib and matter for exact values:\n// - ATR is Wilder's (Pine's `ta.atr` is `ta.rma(ta.tr(true), n)`): the first\n// bar's true range is high - low, so it is seeded one bar earlier than TA-Lib's ATR. `g.atr`.\n// - `offset` on a plot is a pure display shift; every column holds the\n// undisplaced value of the bar it was computed on.\n//\n// ZigZag (algorithm written here; TradingView's ZigZag is a drawing tool with no\n// closed-form definition): see the header above `zigzag`.\n\nimport { COLORS, band, bool, defineStudy, fillBetween, float, int, line, markers, select, source } from \"../define.js\";\nimport type { Col, Graph, Node } from \"../engine/graph.js\";\nimport type { PlotDef } from \"../types.js\";\n\nconst NaN_ = Number.NaN;\nconst len = (def: number, min = 1) => int(\"length\", def, min, 5000);\nconst rgba = (hex: string, a: number) => {\n const n = parseInt(hex.slice(1), 16);\n return `rgba(${n >> 16},${(n >> 8) & 255},${n & 255},${a})`;\n};\n\n/**\n * Least-squares line over the last p bars against x = 0..p-1 (oldest..newest): `value` at the newest bar, `slope`\n * per bar, `intercept` at the oldest. Local because Graph.linreg (x increasing with the divisor of TA-Lib's reversed\n * x) returns a negated slope and a wrong intercept/value for any series that is not flat.\n */\nfunction linregFit(g: Graph, x: Col, p: number): { value: Node; slope: Col; intercept: Col } {\n if (!Number.isInteger(p) || p < 2) throw new RangeError(`linreg: period must be an integer >= 2, got ${p}`);\n const cnt = g.validRun(x);\n const sumX = (p * (p - 1)) / 2, sumXSqr = (p * (p - 1) * (2 * p - 1)) / 6;\n const div = p * sumXSqr - sumX * sumX;\n const slope = g.col(), icpt = g.col();\n const value = g.node((s, a, b) => {\n const xv = x.v, c = cnt.v, sl = slope.v, ic = icpt.v, v = s.v;\n for (let i = a; i < b; i++) {\n if (c[i]! < p) { sl[i] = NaN_; ic[i] = NaN_; v[i] = NaN_; continue; }\n let sy = 0, sxy = 0;\n for (let j = 0; j < p; j++) { const y = xv[i - p + 1 + j]!; sy += y; sxy += j * y; }\n const m = (p * sxy - sumX * sy) / div, bb = (sy - m * sumX) / p;\n sl[i] = m; ic[i] = bb; v[i] = bb + m * (p - 1);\n }\n });\n return { value, slope, intercept: icpt };\n}\n\nconst maOf = (g: Graph, type: string, x: Col, n: number): Node => (type === \"ema\" ? g.ema(x, n) : g.sma(x, n));\n\n// ---- moving averages -----------------------------------------------------------\n\nexport const smma = defineStudy({\n id: \"smma\", name: \"Smoothed Moving Average\", family: \"tv\", needs: \"value\", pane: \"overlay\",\n inputs: [len(7), source()], columns: [\"smma\"], plots: [line(\"smma\", COLORS.teal)],\n label: (p) => `${p.length}`,\n // Pine's smma: first value = sma(src, n), then (smma[1] * (n - 1) + src) / n, which is Wilder's RMA.\n build: (g, p) => [g.rma(g.src(p.source), p.length)],\n reference: \"TradingView Smoothed Moving Average: smma := na(smma[1]) ? ta.sma(src, n) : (smma[1] * (n - 1) + src) / n\",\n});\n\nexport const vwma = defineStudy({\n id: \"vwma\", name: \"Volume Weighted Moving Average\", family: \"tv\", needs: \"ohlcv\", pane: \"overlay\",\n inputs: [len(20), source()], columns: [\"vwma\"], plots: [line(\"vwma\", COLORS.purple)],\n label: (p) => `${p.length}`,\n build: (g, p) => [g.div(g.sum(g.mul(g.src(p.source), g.volume), p.length), g.sum(g.volume, p.length))],\n reference: \"Pine ta.vwma(src, n) = ta.sma(src * volume, n) / ta.sma(volume, n)\",\n});\n\nexport const hma = defineStudy({\n id: \"hma\", name: \"Hull Moving Average\", family: \"tv\", needs: \"value\", pane: \"overlay\",\n inputs: [len(9, 2), source()], columns: [\"hma\"], plots: [line(\"hma\", COLORS.pink)],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const x = g.src(p.source);\n const half = Math.floor(p.length / 2), root = Math.round(Math.sqrt(p.length));\n const raw = g.map2(g.wma(x, half), g.wma(x, p.length), (a, b) => 2 * a - b);\n return [g.wma(raw, root)];\n },\n reference: \"Pine ta.hma(src, n) = ta.wma(2 * ta.wma(src, n / 2) - ta.wma(src, n), round(sqrt(n))), with n / 2 truncated to an int\",\n});\n\nexport const alma = defineStudy({\n id: \"alma\", name: \"Arnaud Legoux Moving Average\", family: \"tv\", needs: \"value\", pane: \"overlay\",\n inputs: [len(9), float(\"offset\", 0.85, 0, 1, 0.05), float(\"sigma\", 6, 0.1, 100, 0.5), source()],\n columns: [\"alma\"], plots: [line(\"alma\", COLORS.blue)],\n label: (p) => `${p.length}, ${p.offset}, ${p.sigma}`,\n build: (g, p) => {\n const n: number = p.length;\n const m = Math.floor(p.offset * (n - 1)), s = n / p.sigma;\n const w = new Float64Array(n);\n let norm = 0;\n for (let k = 0; k < n; k++) { w[k] = Math.exp(-((k - m) ** 2) / (2 * s * s)); norm += w[k]!; }\n const x = g.src(p.source), cnt = g.validRun(x);\n return [g.node((nd, a, b) => {\n const xv = x.v, c = cnt.v, v = nd.v;\n for (let i = a; i < b; i++) {\n if (c[i]! < n) { v[i] = NaN_; continue; }\n // weight k belongs to the bar n-1-k bars back from the newest: k = n-1 is the newest bar\n let t = 0;\n for (let k = 0; k < n; k++) t += xv[i - n + 1 + k]! * w[k]!;\n v[i] = t / norm;\n }\n })];\n },\n reference: \"Pine ta.alma(src, n, offset, sigma): m = floor(offset * (n - 1)), s = n / sigma, w_k = exp(-(k - m)^2 / (2 s^2)), sum(src[n-1-k] * w_k) / sum(w_k)\",\n});\n\nexport const lsma = defineStudy({\n id: \"lsma\", name: \"Least Squares Moving Average\", family: \"tv\", needs: \"value\", pane: \"overlay\",\n inputs: [len(25, 2), int(\"offset\", 0, -5000, 5000), source()], columns: [\"lsma\"], plots: [line(\"lsma\", COLORS.orange)],\n label: (p) => `${p.length}, ${p.offset}`,\n build: (g, p) => {\n const r = linregFit(g, g.src(p.source), p.length);\n // Pine ta.linreg(src, n, offset) = intercept + slope * (n - 1 - offset)\n return [g.map2(r.value, r.slope, (v, s) => v - p.offset * s)];\n },\n reference: \"TradingView Least Squares Moving Average = Pine ta.linreg(src, n, offset); offset 0 equals TA-Lib LINEARREG\",\n});\n\nexport const mcginley = defineStudy({\n id: \"mcginley\", name: \"McGinley Dynamic\", family: \"tv\", needs: \"value\", pane: \"overlay\",\n inputs: [len(14), source()], columns: [\"mcginley\"], plots: [line(\"mcginley\", COLORS.green)],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const n: number = p.length;\n const x = g.src(p.source), e = g.ema(x, n);\n return [g.node((nd, a, b) => {\n const xv = x.v, ev = e.v, v = nd.v;\n for (let i = a; i < b; i++) {\n const prev = i > 0 ? v[i - 1]! : NaN_;\n v[i] = prev !== prev ? ev[i]! : prev + (xv[i]! - prev) / (n * Math.pow(xv[i]! / prev, 4));\n }\n })];\n },\n reference: \"TradingView McGinley Dynamic: mg := na(mg[1]) ? ta.ema(src, n) : mg[1] + (src - mg[1]) / (n * (src / mg[1])^4)\",\n});\n\nconst RIBBON_COLORS = [COLORS.blue, COLORS.teal, COLORS.green, COLORS.lime, COLORS.yellow, COLORS.orange, COLORS.red, COLORS.pink];\nconst RIBBON_COLS = RIBBON_COLORS.map((_, k) => `ma${k + 1}`);\n\nexport const maRibbon = defineStudy({\n id: \"ma-ribbon\", name: \"Moving Average Ribbon\", family: \"tv\", needs: \"value\", pane: \"overlay\",\n inputs: [int(\"first\", 20, 1, 5000, \"first\"), int(\"step\", 5, 1, 1000, \"step\"), source()],\n columns: RIBBON_COLS,\n plots: RIBBON_COLS.map((c, k) => line(c, RIBBON_COLORS[k]!, { title: `MA ${k + 1}`, width: 1 })),\n label: (p) => `${p.first}, ${p.step}`,\n build: (g, p) => {\n const last: number = p.first + 7 * p.step;\n if (last > 5000) throw new RangeError(`ma-ribbon: the 8th period ${last} exceeds 5000`);\n const x = g.src(p.source);\n return RIBBON_COLS.map((_, k) => g.sma(x, p.first + k * p.step));\n },\n reference: \"Moving Average Ribbon: eight simple moving averages of periods first, first + step, ... first + 7 * step (default 20..55 step 5)\",\n});\n\nexport const maCross = defineStudy({\n id: \"ma-cross\", name: \"Moving Average Cross\", family: \"tv\", needs: \"value\", pane: \"overlay\",\n inputs: [select(\"type\", \"sma\", [\"sma\", \"ema\"]), int(\"fast\", 9, 1, 5000), int(\"slow\", 21, 1, 5000), source()],\n columns: [\"fast\", \"slow\", \"crossUp\", \"crossDown\"],\n plots: [\n line(\"fast\", COLORS.blue, { title: \"Fast MA\" }),\n line(\"slow\", COLORS.orange, { title: \"Slow MA\" }),\n markers(\"crossUp\", \"circle\", \"value\", COLORS.green, { title: \"Cross up\" }),\n markers(\"crossDown\", \"circle\", \"value\", COLORS.red, { title: \"Cross down\" }),\n ],\n label: (p) => `${p.type}, ${p.fast}, ${p.slow}`,\n build: (g, p) => {\n const x = g.src(p.source), f = maOf(g, p.type, x, p.fast), s = maOf(g, p.type, x, p.slow);\n // marker value = the fast average on the bar where ta.crossover / ta.crossunder is true\n const up = g.calc((i) => (i > 0 && f.v[i]! > s.v[i]! && f.v[i - 1]! <= s.v[i - 1]! ? f.v[i]! : NaN_));\n const dn = g.calc((i) => (i > 0 && f.v[i]! < s.v[i]! && f.v[i - 1]! >= s.v[i - 1]! ? f.v[i]! : NaN_));\n return [f, s, up, dn];\n },\n reference: \"TradingView Moving Average Cross: two moving averages, circles where ta.crossover / ta.crossunder(fast, slow) is true\",\n});\n\n// ---- bands and channels ---------------------------------------------------------\n\nexport const envelopes = defineStudy({\n id: \"envelopes\", name: \"Moving Average Envelopes\", family: \"tv\", needs: \"value\", pane: \"overlay\",\n inputs: [len(20), float(\"percent\", 10, 0, 100, 0.5), select(\"basis\", \"sma\", [\"sma\", \"ema\"]), source()],\n columns: [\"basis\", \"upper\", \"lower\"],\n plots: [line(\"basis\", COLORS.orange, { title: \"Basis\" }), band(\"band\", \"upper\", \"lower\", COLORS.blue, rgba(COLORS.blue, 0.08), \"Envelope\")],\n label: (p) => `${p.length}, ${p.percent}, ${p.basis}`,\n build: (g, p) => {\n const m = maOf(g, p.basis, g.src(p.source), p.length);\n const k: number = p.percent / 100;\n return [m, g.map(m, (v) => v * (1 + k)), g.map(m, (v) => v * (1 - k))];\n },\n reference: \"TradingView Envelope: basis = sma|ema(src, n), upper = basis * (1 + percent / 100), lower = basis * (1 - percent / 100)\",\n});\n\nexport const keltner = defineStudy({\n id: \"keltner\", name: \"Keltner Channels\", family: \"tv\", needs: \"ohlc\", pane: \"overlay\",\n inputs: [len(20), float(\"mult\", 2, 0, 100, 0.25), int(\"atrLength\", 10, 1, 5000), bool(\"useEma\", true), source()],\n columns: [\"basis\", \"upper\", \"lower\"],\n plots: [line(\"basis\", COLORS.blue, { title: \"Basis\" }), band(\"band\", \"upper\", \"lower\", COLORS.blue, rgba(COLORS.blue, 0.08), \"Channel\")],\n label: (p) => `${p.length}, ${p.mult}, ${p.atrLength}`,\n build: (g, p) => {\n const x = g.src(p.source);\n const m = p.useEma ? g.ema(x, p.length) : g.sma(x, p.length);\n const r = g.map(g.atr(p.atrLength), (v) => v * p.mult);\n return [m, g.add(m, r), g.sub(m, r)];\n },\n reference: \"TradingView Keltner Channels (ATR band style): basis = ema|sma(src, n), bands = basis +- mult * ta.atr(atrLength)\",\n});\n\nfunction channel(g: Graph, n: number): { upper: Node; lower: Node; mid: Node } {\n const upper = g.highest(g.high, n), lower = g.lowest(g.low, n);\n return { upper, lower, mid: g.map2(upper, lower, (a, b) => (a + b) / 2) };\n}\n\nexport const donchian = defineStudy({\n id: \"donchian\", name: \"Donchian Channels\", family: \"tv\", needs: \"ohlc\", pane: \"overlay\",\n inputs: [len(20)], columns: [\"upper\", \"lower\", \"basis\"],\n plots: [band(\"band\", \"upper\", \"lower\", COLORS.blue, rgba(COLORS.blue, 0.08), \"Channel\"), line(\"basis\", COLORS.orange, { title: \"Basis\" })],\n label: (p) => `${p.length}`,\n build: (g, p) => { const c = channel(g, p.length); return [c.upper, c.lower, c.mid]; },\n reference: \"TradingView Donchian Channels: upper = ta.highest(high, n), lower = ta.lowest(low, n), basis = (upper + lower) / 2; equals TA-Lib MAX(high), MIN(low), MIDPRICE\",\n});\n\nexport const priceChannel = defineStudy({\n id: \"price-channel\", name: \"Price Channel\", family: \"tv\", needs: \"ohlc\", pane: \"overlay\",\n inputs: [len(20)], columns: [\"upper\", \"lower\", \"center\"],\n plots: [line(\"upper\", COLORS.green, { title: \"Highest high\" }), line(\"lower\", COLORS.red, { title: \"Lowest low\" }), line(\"center\", COLORS.gray, { title: \"Center\", style: \"dashed\" })],\n label: (p) => `${p.length}`,\n build: (g, p) => { const c = channel(g, p.length); return [c.upper, c.lower, c.mid]; },\n reference: \"Price Channel: highest high and lowest low of the last n bars with their midline; equals TA-Lib MAX(high), MIN(low), MIDPRICE\",\n});\n\nexport const chandeKrollStop = defineStudy({\n id: \"chande-kroll-stop\", name: \"Chande Kroll Stop\", family: \"tv\", needs: \"ohlc\", pane: \"overlay\",\n inputs: [int(\"p\", 10, 1, 5000), float(\"x\", 1, 0, 100, 0.25), int(\"q\", 9, 1, 5000)],\n columns: [\"stopShort\", \"stopLong\"],\n plots: [line(\"stopShort\", COLORS.red, { title: \"Stop short\" }), line(\"stopLong\", COLORS.green, { title: \"Stop long\" })],\n label: (p) => `${p.p}, ${p.x}, ${p.q}`,\n build: (g, p) => {\n const a = g.map(g.atr(p.p), (v) => v * p.x);\n const firstHigh = g.sub(g.highest(g.high, p.p), a), firstLow = g.add(g.lowest(g.low, p.p), a);\n return [g.highest(firstHigh, p.q), g.lowest(firstLow, p.q)];\n },\n reference: \"TradingView Chande Kroll Stop: first_high = ta.highest(high, p) - x * ta.atr(p); first_low = ta.lowest(low, p) + x * ta.atr(p); stop_short = ta.highest(first_high, q); stop_long = ta.lowest(first_low, q)\",\n});\n\nexport const linregChannel = defineStudy({\n id: \"linreg-channel\", name: \"Linear Regression Channel\", family: \"tv\", needs: \"value\", pane: \"overlay\",\n inputs: [len(100, 2), float(\"upperDev\", 2, 0, 100, 0.25), float(\"lowerDev\", 2, 0, 100, 0.25), source()],\n columns: [\"base\", \"upper\", \"lower\"],\n plots: [line(\"base\", COLORS.orange, { title: \"Base\" }), band(\"band\", \"upper\", \"lower\", COLORS.blue, rgba(COLORS.blue, 0.08), \"Channel\")],\n label: (p) => `${p.length}, ${p.upperDev}, ${p.lowerDev}`,\n build: (g, p) => {\n const n: number = p.length;\n const x = g.src(p.source), r = linregFit(g, x, n);\n // population standard deviation of the residuals y_j - (intercept + slope * j) over the window\n const dev = g.node((s, a, b) => {\n const xv = x.v, sl = r.slope.v, ib = r.intercept.v, v = s.v;\n for (let i = a; i < b; i++) {\n const m = sl[i]!, c0 = ib[i]!;\n if (m !== m) { v[i] = NaN_; continue; }\n let t = 0;\n for (let j = 0; j < n; j++) { const e = xv[i - n + 1 + j]! - (c0 + m * j); t += e * e; }\n v[i] = Math.sqrt(t / n);\n }\n });\n return [r.value, g.map2(r.value, dev, (v, d) => v + p.upperDev * d), g.map2(r.value, dev, (v, d) => v - p.lowerDev * d)];\n },\n reference: \"TradingView Linear Regression Channel: base = linear regression value at the newest bar over n bars (Pine ta.linreg(src, n, 0)), bands = base +- deviation * population stdev of the residuals. TradingView draws the tool as one anchored segment between two chosen bars; this study is the rolling per-bar form (each bar's own n-bar fit, newest point), not the anchored line.\",\n});\n\nexport const median = defineStudy({\n id: \"median\", name: \"Median\", family: \"tv\", needs: \"ohlc\", pane: \"overlay\",\n inputs: [len(3), int(\"atrLength\", 14, 1, 5000), float(\"mult\", 2, 0, 100, 0.25), source(\"hl2\")],\n columns: [\"median\", \"upper\", \"lower\"],\n plots: [line(\"median\", COLORS.blue, { title: \"Median\" }), band(\"band\", \"upper\", \"lower\", COLORS.gray, rgba(COLORS.gray, 0.08), \"ATR band\")],\n label: (p) => `${p.length}, ${p.atrLength}, ${p.mult}`,\n build: (g, p) => {\n const n: number = p.length;\n const x = g.src(p.source), cnt = g.validRun(x);\n const med = g.node((s, a, b) => {\n const xv = x.v, c = cnt.v, v = s.v, w = new Float64Array(n);\n for (let i = a; i < b; i++) {\n if (c[i]! < n) { v[i] = NaN_; continue; }\n for (let j = 0; j < n; j++) w[j] = xv[i - n + 1 + j]!;\n w.sort();\n // even n: mean of the two middle values\n v[i] = n % 2 === 1 ? w[(n - 1) / 2]! : (w[n / 2 - 1]! + w[n / 2]!) / 2;\n }\n });\n const r = g.map(g.atr(p.atrLength), (v) => v * p.mult);\n return [med, g.add(med, r), g.sub(med, r)];\n },\n reference: \"TradingView Median: rolling median of src (hl2) over n bars with an ATR band, median +- mult * ta.atr(atrLength). The band construction follows the task's definition; an even n takes the mean of the two middle values.\",\n});\n\n// ---- Ichimoku -------------------------------------------------------------------\n\n/** The Ichimoku displacement (TradingView's input default); plots shift by displacement - 1. */\nconst DISPLACEMENT = 26;\n\nexport const ichimoku = defineStudy({\n id: \"ichimoku\", name: \"Ichimoku Cloud\", family: \"tv\", needs: \"ohlc\", pane: \"overlay\",\n inputs: [int(\"conversion\", 9, 1, 5000), int(\"base\", 26, 1, 5000), int(\"spanB\", 52, 1, 5000)],\n columns: [\"conversion\", \"base\", \"spanA\", \"spanB\", \"lagging\"],\n plots: [\n line(\"conversion\", COLORS.blue, { title: \"Conversion line\" }),\n line(\"base\", COLORS.red, { title: \"Base line\" }),\n fillBetween(\"cloud\", \"spanA\", \"spanB\", COLORS.green, \"Cloud\"),\n line(\"spanA\", COLORS.green, { title: \"Leading span A\", offset: DISPLACEMENT - 1 }),\n line(\"spanB\", COLORS.orange, { title: \"Leading span B\", offset: DISPLACEMENT - 1 }),\n line(\"lagging\", COLORS.purple, { title: \"Lagging span\", offset: -(DISPLACEMENT - 1) }),\n ],\n label: (p) => `${p.conversion}, ${p.base}, ${p.spanB}, ${DISPLACEMENT}`,\n build: (g, p) => {\n const conv = channel(g, p.conversion).mid, base = channel(g, p.base).mid;\n const a = g.map2(conv, base, (x, y) => (x + y) / 2);\n return [conv, base, a, channel(g, p.spanB).mid, g.map(g.close, (x) => x)];\n },\n reference: \"TradingView Ichimoku Cloud: donchian(n) = (ta.highest(high, n) + ta.lowest(low, n)) / 2; conversion = donchian(9), base = donchian(26), span A = (conversion + base) / 2, span B = donchian(52), lagging = close; leading spans plotted with offset displacement - 1 = 25, the lagging span with -25 (TradingView's own plot offsets for displacement 26). Columns hold the undisplaced values.\",\n});\n\n// ---- Supertrend -----------------------------------------------------------------\n\nexport const supertrend = defineStudy({\n id: \"supertrend\", name: \"Supertrend\", family: \"tv\", needs: \"ohlc\", pane: \"overlay\",\n inputs: [int(\"atrLength\", 10, 1, 5000), float(\"factor\", 3, 0.1, 100, 0.1)],\n columns: [\"up\", \"down\", \"direction\"],\n plots: [line(\"up\", COLORS.green, { title: \"Up trend\" }), line(\"down\", COLORS.red, { title: \"Down trend\" })],\n label: (p) => `${p.factor}, ${p.atrLength}`,\n build: (g, p) => {\n const { high, low, close } = g;\n const atr = g.atr(p.atrLength);\n const lb = g.col(), ub = g.col(), dr = g.col(), st = g.col();\n const main = g.node((s, a, b) => {\n const h = high.v, l = low.v, c = close.v, at = atr.v, lo = lb.v, up = ub.v, d = dr.v, t = st.v;\n for (let i = a; i < b; i++) {\n const r = at[i]!;\n if (r !== r) { lo[i] = NaN_; up[i] = NaN_; d[i] = NaN_; t[i] = NaN_; s.v[i] = NaN_; continue; }\n const mid = (h[i]! + l[i]!) / 2;\n let lower = mid - p.factor * r, upper = mid + p.factor * r;\n const first = i === 0 || lo[i - 1]! !== lo[i - 1]!;\n if (!first) {\n const pl = lo[i - 1]!, pu = up[i - 1]!, pc = c[i - 1]!;\n lower = lower > pl || pc < pl ? lower : pl;\n upper = upper < pu || pc > pu ? upper : pu;\n }\n let dir: number;\n // Pine: na(atr[1]) -> 1; prev supertrend was the upper band -> down unless close breaks it\n if (first) dir = 1;\n else if (t[i - 1]! === up[i - 1]!) dir = c[i]! > upper ? -1 : 1;\n else dir = c[i]! < lower ? 1 : -1;\n lo[i] = lower; up[i] = upper; d[i] = dir;\n t[i] = dir === -1 ? lower : upper;\n s.v[i] = dir;\n }\n });\n return [g.calc((i) => (dr.v[i] === -1 ? st.v[i]! : NaN_)), g.calc((i) => (dr.v[i] === 1 ? st.v[i]! : NaN_)), main];\n },\n reference: \"Pine ta.supertrend(factor, atrPeriod): bands hl2 +- factor * ta.atr; direction is Pine's: -1 = uptrend (line below price, column `up`), 1 = downtrend (line above price, column `down`)\",\n});\n\n// ---- Alligator ------------------------------------------------------------------\n\nexport const alligator = defineStudy({\n id: \"alligator\", name: \"Williams Alligator\", family: \"tv\", needs: \"ohlc\", pane: \"overlay\",\n inputs: [int(\"jawLength\", 13, 1, 5000), int(\"teethLength\", 8, 1, 5000), int(\"lipsLength\", 5, 1, 5000), source(\"hl2\")],\n columns: [\"jaw\", \"teeth\", \"lips\"],\n plots: [\n line(\"jaw\", COLORS.blue, { title: \"Jaw\", offset: 8 }),\n line(\"teeth\", COLORS.red, { title: \"Teeth\", offset: 5 }),\n line(\"lips\", COLORS.green, { title: \"Lips\", offset: 3 }),\n ],\n label: (p) => `${p.jawLength}, ${p.teethLength}, ${p.lipsLength}`,\n build: (g, p) => { const x = g.src(p.source); return [g.rma(x, p.jawLength), g.rma(x, p.teethLength), g.rma(x, p.lipsLength)]; },\n reference: \"TradingView Williams Alligator: jaw = smma(hl2, 13) shifted 8 bars, teeth = smma(hl2, 8) shifted 5, lips = smma(hl2, 5) shifted 3 (the shifts are fixed plot offsets, not inputs)\",\n});\n\n// ---- Fractals -------------------------------------------------------------------\n\n/** Williams fractals look n bars to each side. The plot offsets (-2) are static, so n is fixed. */\nconst FRACTAL_N = 2;\n/** Equal highs/lows tolerated on the left side of the extreme before the strictly beyond bar. */\nconst FRACTAL_TIES = 4;\n\nfunction fractal(g: Graph, x: Col, isHigh: boolean): Node {\n const n = FRACTAL_N;\n return g.node((s, a, b) => {\n const xv = x.v, v = s.v;\n for (let i = a; i < b; i++) {\n v[i] = NaN_;\n const c = i - n;\n if (c < 0) continue;\n const e = xv[c]!;\n const beyond = (y: number) => (isHigh ? y < e : y > e);\n let ok = true;\n for (let j = 1; j <= n && ok; j++) ok = beyond(xv[c + j]!);\n if (!ok) continue;\n let t = 0;\n while (t <= FRACTAL_TIES && c - 1 - t >= 0 && xv[c - 1 - t]! === e) t++;\n const k = c - 1 - t;\n if (t <= FRACTAL_TIES && k >= 0 && beyond(xv[k]!)) v[i] = e;\n }\n });\n}\n\nexport const fractals = defineStudy({\n id: \"fractals\", name: \"Williams Fractals\", family: \"tv\", needs: \"ohlc\", pane: \"overlay\",\n inputs: [], columns: [\"up\", \"down\"],\n plots: [\n markers(\"up\", \"triangleUp\", \"above\", COLORS.green, { title: \"Up fractal\", offset: -FRACTAL_N }),\n markers(\"down\", \"triangleDown\", \"below\", COLORS.red, { title: \"Down fractal\", offset: -FRACTAL_N }),\n ],\n // A fractal at bar c needs bars c+1..c+n, so it is known at bar c+n: the columns hold the fractal's price at that\n // CONFIRMATION bar and the plots shift the marker back by n onto the fractal's own bar.\n build: (g) => [fractal(g, g.high, true), fractal(g, g.low, false)],\n reference: \"TradingView Williams Fractals (n = 2): high[n] strictly above the n bars after it, and above the bars before it allowing up to four tied equal highs followed by a strictly lower one; mirrored for lows. Confirmed n bars late.\",\n});\n\n// ---- ZigZag ---------------------------------------------------------------------\n//\n// Not a closed-form TradingView study, so the algorithm is defined here and is\n// causal (a bar only ever uses bars up to itself):\n// - The first pivot appears once price has moved `deviation` % off the running\n// low (a low pivot) or the running high (a high pivot) seen since bar 0.\n// - After a low pivot the leg runs up: its running extreme is the highest high.\n// The extreme becomes a high pivot when a later bar's low is `deviation` %\n// below it (the extreme was not exceeded on that bar). Mirrored after a high.\n// - depth: a pivot is confirmed no sooner than `depth` bars after the previous\n// pivot's bar, which keeps legs from being confirmed on the bar after the last\n// pivot. (It delays a confirmation, it never changes the pivot found.)\n// - `price` holds the pivot's price at the bar where it is CONFIRMED and `back`\n// the number of bars from there to the pivot bar (the chart draws the pivot at\n// confirmation bar - back). Pivots alternate high/low by construction.\n// - The unconfirmed running extreme of the current leg is the last point of the\n// line: columns `live` (its price) and `liveBack` (bars back from this bar)\n// carry it on every bar. It can still move or be abandoned, so it is not in\n// `price`, which is final; a renderer joins the last pivot to it.\n\nexport const zigzag = defineStudy({\n id: \"zigzag\", name: \"ZigZag\", family: \"tv\", needs: \"ohlc\", pane: \"overlay\",\n inputs: [float(\"deviation\", 5, 0.01, 100, 0.5), int(\"depth\", 10, 1, 5000)],\n columns: [\"price\", \"back\", \"live\", \"liveBack\"],\n plots: [{ kind: \"zigzag\", key: \"zigzag\", title: \"ZigZag\", price: \"price\", back: \"back\", color: COLORS.blue, width: 2 } satisfies PlotDef],\n label: (p) => `${p.deviation}, ${p.depth}`,\n build: (g, p) => {\n const { high, low } = g;\n const d: number = p.deviation / 100, depth: number = p.depth;\n // state per bar: dir 0 = no pivot yet, 1 = leg up (looking for a high), -1 = leg down\n const dir = g.col(), exP = g.col(), exI = g.col(), pvI = g.col(), hP = g.col(), hI = g.col(), lP = g.col(), lI = g.col();\n const back = g.col(), live = g.col(), liveBack = g.col();\n const price = g.node((s, a, b) => {\n const H = high.v, L = low.v, v = s.v;\n for (let i = a; i < b; i++) {\n let dr = 0, eP = NaN_, eI = NaN_, pI = NaN_, hp = H[i]!, hi = i, lp = L[i]!, li = i;\n if (i > 0) { dr = dir.v[i - 1]!; eP = exP.v[i - 1]!; eI = exI.v[i - 1]!; pI = pvI.v[i - 1]!; hp = hP.v[i - 1]!; hi = hI.v[i - 1]!; lp = lP.v[i - 1]!; li = lI.v[i - 1]!; }\n let out = NaN_, ob = NaN_;\n if (dr === 0) {\n if (H[i]! > hp) { hp = H[i]!; hi = i; }\n if (L[i]! < lp) { lp = L[i]!; li = i; }\n if (hi > li && hp >= lp * (1 + d)) { out = lp; ob = i - li; pI = li; dr = 1; eP = hp; eI = hi; }\n else if (li > hi && lp <= hp * (1 - d)) { out = hp; ob = i - hi; pI = hi; dr = -1; eP = lp; eI = li; }\n } else if (dr === 1) {\n if (H[i]! > eP) { eP = H[i]!; eI = i; }\n else if (L[i]! <= eP * (1 - d) && i - pI >= depth) { out = eP; ob = i - eI; pI = eI; dr = -1; eP = L[i]!; eI = i; }\n } else {\n if (L[i]! < eP) { eP = L[i]!; eI = i; }\n else if (H[i]! >= eP * (1 + d) && i - pI >= depth) { out = eP; ob = i - eI; pI = eI; dr = 1; eP = H[i]!; eI = i; }\n }\n dir.v[i] = dr; exP.v[i] = eP; exI.v[i] = eI; pvI.v[i] = pI;\n hP.v[i] = hp; hI.v[i] = hi; lP.v[i] = lp; lI.v[i] = li;\n v[i] = out; back.v[i] = ob;\n live.v[i] = dr === 0 ? NaN_ : eP;\n liveBack.v[i] = dr === 0 ? NaN_ : i - eI;\n }\n });\n return [price, g.alias(back), g.alias(live), g.alias(liveBack)];\n },\n reference: \"ZigZag as defined in this file's header: percentage-reversal pivots on high/low with a minimum spacing in bars, confirmed causally\",\n});\n","// TradingView built-in oscillators. Each study cites the TradingView/Pine v5\n// definition it implements. Shared deviation: `ema` and `rma` seed with the\n// simple mean of the first `length` values (the engine's, TA-Lib's seeding);\n// Pine's ta.ema seeds with the first value. The two differ only in the first\n// bars and converge geometrically ((1 - alpha)^bars).\n\nimport { COLORS, bool, defineStudy, hist, hline, int, line, select, source } from \"../define.js\";\nimport type { Col, Graph, Node } from \"../engine/graph.js\";\n\nconst NaN_ = Number.NaN;\n\n// ---- local helpers (all state in columns) -----------------------------------\n\n/** Pine ta.roc: 100 * (x - x[n]) / x[n]. */\nfunction roc(g: Graph, x: Col, n: number): Node {\n return g.node((s, a, b) => {\n const xv = x.v, v = s.v;\n for (let i = a; i < b; i++) {\n const p = i >= n ? xv[i - n]! : NaN_;\n v[i] = p === 0 ? NaN_ : (100 * (xv[i]! - p)) / p;\n }\n });\n}\n\n/** Pine ta.rsi from up/down Wilder means: down == 0 -> 100, up == 0 -> 0. */\nfunction rsiOf(g: Graph, x: Col, n: number): Node {\n const ch = g.change(x, 1);\n const up = g.map(ch, (d) => (d > 0 ? d : d === d ? 0 : NaN_));\n const dn = g.map(ch, (d) => (d < 0 ? -d : d === d ? 0 : NaN_));\n const au = g.rma(up, n), ad = g.rma(dn, n);\n return g.map2(au, ad, (u, d) => (u !== u || d !== d ? NaN_ : d === 0 ? 100 : u === 0 ? 0 : 100 - 100 / (1 + u / d)));\n}\n\n/** ema(ema(x, a), b): TradingView's double_smooth(x, long = a, short = b). */\nfunction doubleEma(g: Graph, x: Col, a: number, b: number): Node {\n return g.ema(g.ema(x, a), b);\n}\n\n/** Pine ta.swma: (x + 2 x[1] + 2 x[2] + x[3]) / 6. */\nfunction swma(g: Graph, x: Col): Node {\n return g.calc((i) => (i >= 3 ? (x.v[i]! + 2 * x.v[i - 1]! + 2 * x.v[i - 2]! + x.v[i - 3]!) / 6 : NaN_));\n}\n\n/** Pine ta.tr(true): the first bar's true range is high - low. */\nfunction trFirstBar(g: Graph): Node {\n const { high, low, close } = g;\n return g.calc((i) => {\n const h = high.v[i]!, l = low.v[i]!;\n if (i === 0) return h - l;\n const pc = close.v[i - 1]!;\n return Math.max(h - l, Math.abs(h - pc), Math.abs(l - pc));\n });\n}\n\n/** Positive part where `x` rose, negative where it did not (for coloured histograms): up / down columns. */\nfunction risingFalling(g: Graph, x: Col): { up: Node; down: Node } {\n const d = g.change(x, 1);\n return { up: g.map2(x, d, (v, c) => (c > 0 ? v : NaN_)), down: g.map2(x, d, (v, c) => (c <= 0 ? v : NaN_)) };\n}\n\n/** 100 * (x - lowest) / (highest - lowest) over n bars, carrying the last value over a flat range (Pine fixnan). */\nfunction stochOf(g: Graph, x: Col, n: number): Node {\n const hi = g.highest(x, n), lo = g.lowest(x, n);\n return g.node((s, a, b) => {\n const xv = x.v, h = hi.v, l = lo.v, v = s.v;\n for (let i = a; i < b; i++) {\n const h1 = h[i]!, l1 = l[i]!;\n if (h1 !== h1 || l1 !== l1) { v[i] = NaN_; continue; }\n v[i] = h1 > l1 ? (100 * (xv[i]! - l1)) / (h1 - l1) : i > 0 ? v[i - 1]! : NaN_;\n }\n });\n}\n\n// ---- Fisher Transform -------------------------------------------------------\n\nexport const fisher = defineStudy({\n id: \"fisher\", name: \"Fisher Transform\", family: \"tv\", needs: \"ohlc\", pane: \"new\",\n inputs: [int(\"length\", 9, 1, 5000)], columns: [\"fisher\", \"trigger\"],\n plots: [line(\"fisher\", COLORS.blue), line(\"trigger\", COLORS.orange), hline(\"zero\", 0, COLORS.gray, \"dotted\")],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const x = g.src(\"hl2\");\n const hi = g.highest(x, p.length), lo = g.lowest(x, p.length);\n // value = clamp(0.66 (pos - 0.5) + 0.67 nz(value[1]), +-0.999); a flat window leaves it absent (Pine: division by zero is na)\n const value = g.node((s, a, b) => {\n const xv = x.v, h = hi.v, l = lo.v, v = s.v;\n for (let i = a; i < b; i++) {\n const h1 = h[i]!, l1 = l[i]!;\n if (!(h1 > l1)) { v[i] = NaN_; continue; }\n const prev = i > 0 && v[i - 1]! === v[i - 1]! ? v[i - 1]! : 0;\n const r = 0.66 * ((xv[i]! - l1) / (h1 - l1) - 0.5) + 0.67 * prev;\n v[i] = r > 0.99 ? 0.999 : r < -0.99 ? -0.999 : r;\n }\n });\n const fish = g.node((s, a, b) => {\n const val = value.v, v = s.v;\n for (let i = a; i < b; i++) {\n const q = val[i]!;\n if (q !== q) { v[i] = NaN_; continue; }\n const prev = i > 0 && v[i - 1]! === v[i - 1]! ? v[i - 1]! : 0;\n v[i] = 0.5 * Math.log((1 + q) / (1 - q)) + 0.5 * prev;\n }\n });\n return [fish, g.lag(fish, 1)];\n },\n reference: \"TradingView 'Fisher Transform' (Pine v5): value = round(0.66 ((hl2 - lowest) / (highest - lowest) - 0.5) + 0.67 nz(value[1])), fish = 0.5 ln((1 + value) / (1 - value)) + 0.5 nz(fish[1]); trigger = fish[1]\",\n});\n\n// ---- Know Sure Thing --------------------------------------------------------\n\nexport const kst = defineStudy({\n id: \"kst\", name: \"Know Sure Thing\", family: \"tv\", needs: \"value\", pane: \"new\",\n inputs: [\n int(\"roc1\", 10, 1, 5000), int(\"roc2\", 15, 1, 5000), int(\"roc3\", 20, 1, 5000), int(\"roc4\", 30, 1, 5000),\n int(\"sma1\", 10, 1, 5000), int(\"sma2\", 10, 1, 5000), int(\"sma3\", 10, 1, 5000), int(\"sma4\", 15, 1, 5000),\n int(\"signal\", 9, 1, 5000), source(),\n ],\n columns: [\"kst\", \"signal\"],\n plots: [line(\"kst\", COLORS.green), line(\"signal\", COLORS.red), hline(\"zero\", 0, COLORS.gray, \"dotted\")],\n label: (p) => `${p.roc1} ${p.roc2} ${p.roc3} ${p.roc4} ${p.sma1} ${p.sma2} ${p.sma3} ${p.sma4} ${p.signal}`,\n build: (g, p) => {\n const x = g.src(p.source);\n const parts = [1, 2, 3, 4].map((k) => g.sma(roc(g, x, p[`roc${k}`]), p[`sma${k}`]));\n const k = g.calc((i) => parts[0]!.v[i]! + 2 * parts[1]!.v[i]! + 3 * parts[2]!.v[i]! + 4 * parts[3]!.v[i]!);\n return [k, g.sma(k, p.signal)];\n },\n reference: \"TradingView 'Know Sure Thing': kst = sma(roc(c,10),10) + 2 sma(roc(c,15),10) + 3 sma(roc(c,20),10) + 4 sma(roc(c,30),15); signal = sma(kst, 9)\",\n});\n\n// ---- True Strength Index ----------------------------------------------------\n\nexport const tsi = defineStudy({\n id: \"tsi\", name: \"True Strength Index\", family: \"tv\", needs: \"value\", pane: \"new\",\n inputs: [int(\"long\", 25, 1, 5000), int(\"short\", 13, 1, 5000), int(\"signal\", 13, 1, 5000), source()],\n columns: [\"tsi\", \"signal\"],\n plots: [line(\"tsi\", COLORS.blue), line(\"signal\", COLORS.red), hline(\"zero\", 0, COLORS.gray, \"dotted\")],\n label: (p) => `${p.long} ${p.short} ${p.signal}`,\n build: (g, p) => {\n const pc = g.change(g.src(p.source), 1);\n const num = doubleEma(g, pc, p.long, p.short);\n const den = doubleEma(g, g.abs(pc), p.long, p.short);\n const t = g.mul(g.div(num, den), 100);\n return [t, g.ema(t, p.signal)];\n },\n reference: \"TradingView 'True Strength Index' (Pine v5): 100 ema(ema(change(src), long), short) / ema(ema(abs(change(src)), long), short); signal = ema(tsi, 13)\",\n});\n\n// ---- Vortex Indicator -------------------------------------------------------\n\nexport const vortex = defineStudy({\n id: \"vortex\", name: \"Vortex Indicator\", family: \"tv\", needs: \"ohlc\", pane: \"new\",\n inputs: [int(\"length\", 14, 2, 5000)], columns: [\"viPlus\", \"viMinus\"],\n plots: [line(\"viPlus\", COLORS.blue, { title: \"VI+\" }), line(\"viMinus\", COLORS.red, { title: \"VI-\" })],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const { high, low } = g;\n const vmp = g.calc((i) => (i >= 1 ? Math.abs(high.v[i]! - low.v[i - 1]!) : NaN_));\n const vmm = g.calc((i) => (i >= 1 ? Math.abs(low.v[i]! - high.v[i - 1]!) : NaN_));\n const str = g.sum(trFirstBar(g), p.length);\n return [g.div(g.sum(vmp, p.length), str), g.div(g.sum(vmm, p.length), str)];\n },\n reference: \"TradingView 'Vortex Indicator' (Pine v5): VI+ = sum(|high - low[1]|, n) / sum(atr(1), n); VI- = sum(|low - high[1]|, n) / sum(atr(1), n)\",\n});\n\n// ---- Coppock Curve ----------------------------------------------------------\n\nexport const coppock = defineStudy({\n id: \"coppock\", name: \"Coppock Curve\", family: \"tv\", needs: \"value\", pane: \"new\",\n inputs: [int(\"length\", 10, 1, 5000, \"WMA length\"), int(\"longRoc\", 14, 1, 5000, \"Long ROC length\"), int(\"shortRoc\", 11, 1, 5000, \"Short ROC length\"), source()],\n columns: [\"coppock\"],\n plots: [line(\"coppock\", COLORS.blue), hline(\"zero\", 0, COLORS.gray, \"dotted\")],\n label: (p) => `${p.length} ${p.longRoc} ${p.shortRoc}`,\n build: (g, p) => {\n const x = g.src(p.source);\n return [g.wma(g.add(roc(g, x, p.longRoc), roc(g, x, p.shortRoc)), p.length)];\n },\n reference: \"TradingView 'Coppock Curve' (Pine v5): wma(roc(src, 14) + roc(src, 11), 10)\",\n});\n\n// ---- Connors RSI ------------------------------------------------------------\n\nexport const connorsRsi = defineStudy({\n id: \"connors-rsi\", name: \"Connors RSI\", family: \"tv\", needs: \"value\", pane: \"new\",\n inputs: [int(\"rsiLength\", 3, 1, 5000), int(\"updownLength\", 2, 1, 5000), int(\"rocLength\", 100, 1, 5000), source()],\n columns: [\"crsi\"],\n plots: [line(\"crsi\", COLORS.blue), hline(\"upper\", 70), hline(\"lower\", 30), hline(\"middle\", 50, COLORS.gray, \"dotted\")],\n label: (p) => `${p.rsiLength} ${p.updownLength} ${p.rocLength}`,\n build: (g, p) => {\n const x = g.src(p.source);\n const rsi = rsiOf(g, x, p.rsiLength);\n // streak length: +1, +2.. while rising, -1, -2.. while falling, 0 when unchanged (the first bar has no streak)\n const ud = g.node((s, a, b) => {\n const xv = x.v, v = s.v;\n for (let i = a; i < b; i++) {\n if (i === 0 || xv[i]! !== xv[i]! || xv[i - 1]! !== xv[i - 1]!) { v[i] = NaN_; continue; }\n const prev = v[i - 1]! === v[i - 1]! ? v[i - 1]! : 0;\n const c = xv[i]!, q = xv[i - 1]!;\n v[i] = c === q ? 0 : c > q ? (prev <= 0 ? 1 : prev + 1) : prev >= 0 ? -1 : prev - 1;\n }\n });\n const udRsi = rsiOf(g, ud, p.updownLength);\n // Pine ta.percentrank(roc(src, 1), n): share of the previous n values <= the current one\n const r1 = roc(g, x, 1);\n const cnt = g.validRun(r1);\n const rank = g.node((s, a, b) => {\n const rv = r1.v, c = cnt.v, v = s.v;\n for (let i = a; i < b; i++) {\n if (c[i]! < p.rocLength + 1) { v[i] = NaN_; continue; }\n let k = 0;\n for (let j = 1; j <= p.rocLength; j++) if (rv[i - j]! <= rv[i]!) k++;\n v[i] = (100 * k) / p.rocLength;\n }\n });\n return [g.calc((i) => (rsi.v[i]! + udRsi.v[i]! + rank.v[i]!) / 3)];\n },\n reference: \"TradingView 'Connors RSI' (Pine v5): avg(rsi(src, 3), rsi(updown streak, 2), percentrank(roc(src, 1), 100)); the first bar has no streak (absent)\",\n});\n\n// ---- Choppiness Index -------------------------------------------------------\n\nexport const choppiness = defineStudy({\n id: \"choppiness\", name: \"Choppiness Index\", family: \"tv\", needs: \"ohlc\", pane: \"new\",\n inputs: [int(\"length\", 14, 2, 5000)], columns: [\"chop\"],\n plots: [line(\"chop\", COLORS.blue), hline(\"upper\", 61.8, COLORS.gray, \"dashed\"), hline(\"lower\", 38.2, COLORS.gray, \"dashed\")],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const atrSum = g.sum(trFirstBar(g), p.length);\n const range = g.sub(g.highest(g.high, p.length), g.lowest(g.low, p.length));\n const ratio = g.div(atrSum, range);\n const k = 100 / Math.log10(p.length);\n return [g.map(ratio, (r) => (r > 0 ? k * Math.log10(r) : NaN_))];\n },\n reference: \"TradingView 'Choppiness Index' (Pine v5): 100 log10(sum(atr(1), n) / (highest(high, n) - lowest(low, n))) / log10(n)\",\n});\n\n// ---- Relative Vigor Index ---------------------------------------------------\n\nexport const rviVigor = defineStudy({\n id: \"rvi-vigor\", name: \"Relative Vigor Index\", family: \"tv\", needs: \"ohlc\", pane: \"new\",\n inputs: [int(\"length\", 10, 1, 5000)], columns: [\"rvi\", \"signal\"],\n plots: [line(\"rvi\", COLORS.green), line(\"signal\", COLORS.red)],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const num = g.sma(swma(g, g.sub(g.close, g.open)), p.length);\n const den = g.sma(swma(g, g.sub(g.high, g.low)), p.length);\n const rvi = g.div(num, den);\n return [rvi, swma(g, rvi)];\n },\n reference: \"TradingView 'Relative Vigor Index' (Pine v5): rvi = sma(swma(close - open), n) / sma(swma(high - low), n); signal = swma(rvi)\",\n});\n\n// ---- Relative Volatility Index ----------------------------------------------\n\nexport const rviVolatility = defineStudy({\n id: \"rvi-volatility\", name: \"Relative Volatility Index\", family: \"tv\", needs: \"value\", pane: \"new\",\n inputs: [int(\"length\", 10, 2, 5000, \"StdDev length\"), int(\"smoothing\", 14, 1, 5000), select(\"ma\", \"ema\", [\"ema\", \"rma\"], \"Smoothing\"), source()],\n columns: [\"rvi\"],\n plots: [line(\"rvi\", COLORS.purple), hline(\"upper\", 80), hline(\"lower\", 20), hline(\"middle\", 50, COLORS.gray, \"dotted\")],\n label: (p) => `${p.length} ${p.smoothing}`,\n build: (g, p) => {\n const x = g.src(p.source);\n const sd = g.stdev(x, p.length), ch = g.change(x, 1);\n // both legs are absent until the stdev exists, so their smoothing starts on the same bar\n const upIn = g.map2(ch, sd, (c, s) => (c !== c || s !== s ? NaN_ : c <= 0 ? 0 : s));\n const dnIn = g.map2(ch, sd, (c, s) => (c !== c || s !== s ? NaN_ : c > 0 ? 0 : s));\n const sm = (c: Col) => (p.ma === \"rma\" ? g.rma(c, p.smoothing) : g.ema(c, p.smoothing));\n const up = sm(upIn), dn = sm(dnIn);\n return [g.mul(g.div(up, g.add(up, dn)), 100)];\n },\n reference: \"TradingView 'Relative Volatility Index' (Pine v5): upper = ema(change(src) <= 0 ? 0 : stdev(src, 10), 14), lower = ema(change(src) > 0 ? 0 : stdev, 14), rvi = 100 upper / (upper + lower); ma 'rma' gives Dorsey's Wilder form\",\n});\n\n// ---- SMI Ergodic ------------------------------------------------------------\n\nexport const smiErgodic = defineStudy({\n id: \"smi-ergodic\", name: \"SMI Ergodic Indicator/Oscillator\", family: \"tv\", needs: \"value\", pane: \"new\",\n inputs: [int(\"longLength\", 5, 1, 5000), int(\"shortLength\", 20, 1, 5000), int(\"signal\", 5, 1, 5000), source()],\n columns: [\"erg\", \"signal\", \"osc\"],\n plots: [hist(\"osc\", COLORS.gray, COLORS.gray, { title: \"Oscillator\" }), line(\"erg\", COLORS.blue, { title: \"SMI Ergodic\" }), line(\"signal\", COLORS.red), hline(\"zero\", 0, COLORS.gray, \"dotted\")],\n label: (p) => `${p.longLength} ${p.shortLength} ${p.signal}`,\n build: (g, p) => {\n const pc = g.change(g.src(p.source), 1);\n const erg = g.mul(g.div(doubleEma(g, pc, p.longLength, p.shortLength), doubleEma(g, g.abs(pc), p.longLength, p.shortLength)), 100);\n const sig = g.ema(erg, p.signal);\n return [erg, sig, g.sub(erg, sig)];\n },\n reference: \"TradingView 'SMI Ergodic Indicator/Oscillator' (Pine v5): erg = 100 ema(ema(change, long 5), short 20) / ema(ema(abs(change), 5), 20); signal = ema(erg, 5); oscillator = erg - signal\",\n});\n\n// ---- Spearman rank correlation against time ---------------------------------\n\nexport const rankCorr = defineStudy({\n id: \"rank-corr\", name: \"Rank Correlation vs Time\", family: \"tv\", needs: \"value\", pane: \"new\",\n inputs: [int(\"length\", 14, 2, 500), source()], columns: [\"rho\"],\n plots: [line(\"rho\", COLORS.teal), hline(\"zero\", 0, COLORS.gray, \"dotted\")],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const x = g.src(p.source);\n const cnt = g.validRun(x);\n const n: number = p.length;\n const m = (n + 1) / 2;\n const syy = (n * (n * n - 1)) / 12; // sum of squared deviations of the time ranks 1..n\n const rho = g.node((s, a, b) => {\n const xv = x.v, c = cnt.v, v = s.v;\n for (let i = a; i < b; i++) {\n if (c[i]! < n) { v[i] = NaN_; continue; }\n const o = i - n + 1;\n let sxy = 0, sxx = 0;\n for (let j = 0; j < n; j++) {\n const y = xv[o + j]!;\n let less = 0, eq = 0;\n for (let k = 0; k < n; k++) {\n const z = xv[o + k]!;\n if (z < y) less++;\n else if (z === y && k !== j) eq++;\n }\n const r = 1 + less + eq / 2; // tied values share the mean of their ranks\n sxy += (r - m) * (j + 1 - m);\n sxx += (r - m) * (r - m);\n }\n const den = Math.sqrt(sxx * syy);\n v[i] = den > 0 ? Math.max(-1, Math.min(1, sxy / den)) : NaN_;\n }\n });\n return [rho];\n },\n reference: \"Spearman's rho of the source against the bar index over a rolling window (not a TradingView built-in): Pearson correlation of the ranks, tied source values take the mean rank; a window of all equal values is absent\",\n});\n\n// ---- Elder Ray (Bull Bear Power) --------------------------------------------\n\nexport const bullBearPower = defineStudy({\n id: \"bull-bear-power\", name: \"Bull Bear Power\", family: \"tv\", needs: \"ohlc\", pane: \"new\",\n inputs: [int(\"length\", 13, 1, 5000), source()], columns: [\"bull\", \"bear\"],\n plots: [hist(\"bull\", COLORS.green, COLORS.green, { title: \"Bull Power\" }), hist(\"bear\", COLORS.red, COLORS.red, { title: \"Bear Power\" }), hline(\"zero\", 0, COLORS.gray, \"dotted\")],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const e = g.ema(g.src(p.source), p.length);\n return [g.sub(g.high, e), g.sub(g.low, e)];\n },\n reference: \"Elder Ray (TradingView 'Bull Bear Power'): bull = high - ema(close, 13), bear = low - ema(close, 13)\",\n});\n\n// ---- Awesome and Accelerator ------------------------------------------------\n\nfunction aoOf(g: Graph, fast: number, slow: number): Node {\n const m = g.src(\"hl2\");\n return g.sub(g.sma(m, fast), g.sma(m, slow));\n}\n\nexport const awesome = defineStudy({\n id: \"awesome\", name: \"Awesome Oscillator\", family: \"tv\", needs: \"ohlc\", pane: \"new\",\n inputs: [int(\"fast\", 5, 1, 5000), int(\"slow\", 34, 2, 5000)], columns: [\"ao\", \"up\", \"down\"],\n plots: [hist(\"up\", COLORS.green, undefined, { title: \"AO rising\" }), hist(\"down\", COLORS.red, undefined, { title: \"AO falling\" })],\n label: () => \"\",\n build: (g, p) => {\n if (p.fast >= p.slow) throw new RangeError(`awesome: fast (${p.fast}) must be below slow (${p.slow})`);\n const ao = aoOf(g, p.fast, p.slow);\n const { up, down } = risingFalling(g, ao);\n return [ao, up, down];\n },\n reference: \"TradingView 'Awesome Oscillator': sma(hl2, 5) - sma(hl2, 34); bar green when above the previous bar's value, red otherwise\",\n});\n\nexport const accelerator = defineStudy({\n id: \"accelerator\", name: \"Accelerator Oscillator\", family: \"tv\", needs: \"ohlc\", pane: \"new\",\n inputs: [int(\"fast\", 5, 1, 5000), int(\"slow\", 34, 2, 5000), int(\"signal\", 5, 1, 5000)], columns: [\"ac\", \"up\", \"down\"],\n plots: [hist(\"up\", COLORS.green, undefined, { title: \"AC rising\" }), hist(\"down\", COLORS.red, undefined, { title: \"AC falling\" })],\n label: () => \"\",\n build: (g, p) => {\n if (p.fast >= p.slow) throw new RangeError(`accelerator: fast (${p.fast}) must be below slow (${p.slow})`);\n const ao = aoOf(g, p.fast, p.slow);\n const ac = g.sub(ao, g.sma(ao, p.signal));\n const { up, down } = risingFalling(g, ac);\n return [ac, up, down];\n },\n reference: \"Bill Williams / TradingView 'Accelerator Oscillator': AO - sma(AO, 5); bar green when above the previous bar's value, red otherwise\",\n});\n\n// ---- Mass Index -------------------------------------------------------------\n\nexport const massIndex = defineStudy({\n id: \"mass-index\", name: \"Mass Index\", family: \"tv\", needs: \"ohlc\", pane: \"new\",\n inputs: [int(\"length\", 10, 1, 5000, \"Sum length\"), int(\"emaLength\", 9, 1, 5000)], columns: [\"mi\"],\n plots: [line(\"mi\", COLORS.blue)],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const e1 = g.ema(g.sub(g.high, g.low), p.emaLength);\n const e2 = g.ema(e1, p.emaLength);\n return [g.sum(g.div(e1, e2), p.length)];\n },\n reference: \"TradingView 'Mass Index' (Pine v5): sum(ema(high - low, 9) / ema(ema(high - low, 9), 9), length), length 10 (Dorsey's 25 via the input)\",\n});\n\n// ---- Detrended Price Oscillator ---------------------------------------------\n\nexport const dpo = defineStudy({\n id: \"dpo\", name: \"Detrended Price Oscillator\", family: \"tv\", needs: \"value\", pane: \"new\",\n inputs: [int(\"length\", 21, 1, 5000), bool(\"centered\", false), source()], columns: [\"dpo\"],\n plots: [line(\"dpo\", COLORS.teal), hline(\"zero\", 0, COLORS.gray, \"dotted\")],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const x = g.src(p.source);\n const back = Math.floor(p.length / 2) + 1;\n const ma = g.sma(x, p.length);\n const out = p.centered\n ? g.calc((i) => (i >= back ? x.v[i - back]! - ma.v[i]! : NaN_))\n : g.calc((i) => (i >= back ? x.v[i]! - ma.v[i - back]! : NaN_));\n return [out];\n },\n reference: \"TradingView 'Detrended Price Oscillator' (Pine v5): barsback = floor(n/2) + 1; dpo = src - sma(src, n)[barsback]; centered: src[barsback] - sma(src, n), which TradingView draws shifted back by barsback bars (here the value stays on the bar that computes it)\",\n});\n\n// ---- Schaff Trend Cycle -----------------------------------------------------\n\nexport const schaffTc = defineStudy({\n id: \"schaff-tc\", name: \"Schaff Trend Cycle\", family: \"tv\", needs: \"value\", pane: \"new\",\n inputs: [int(\"fast\", 23, 1, 5000), int(\"slow\", 50, 2, 5000), int(\"cycle\", 10, 2, 5000), int(\"d1\", 3, 1, 5000), int(\"d2\", 3, 1, 5000), source()], columns: [\"stc\"],\n plots: [line(\"stc\", COLORS.blue), hline(\"upper\", 75), hline(\"lower\", 25)],\n label: (p) => `${p.fast} ${p.slow} ${p.cycle}`,\n build: (g, p) => {\n const x = g.src(p.source);\n const macd = g.sub(g.ema(x, p.fast), g.ema(x, p.slow));\n const d = g.ema(stochOf(g, macd, p.cycle), p.d1);\n const stc = g.ema(stochOf(g, d, p.cycle), p.d2);\n return [g.map(stc, (v) => (v > 100 ? 100 : v < 0 ? 0 : v))];\n },\n reference: \"TradingView 'Schaff Trend Cycle' (reproduced from the published script, not fetched): macd = ema(src,23) - ema(src,50); k = stoch(macd,10); d = ema(k,3); kd = stoch(d,10); stc = clamp(ema(kd,3), 0, 100); a flat range carries the last stoch (fixnan) and warm-up stays absent instead of nz-ed to 0\",\n});\n\n// ---- TradingView Stochastic -------------------------------------------------\n\nexport const stochTv = defineStudy({\n id: \"stoch-tv\", name: \"Stochastic\", family: \"tv\", needs: \"ohlc\", pane: \"new\",\n inputs: [int(\"kLength\", 14, 1, 5000, \"%K length\"), int(\"kSmooth\", 1, 1, 5000, \"%K smoothing\"), int(\"dLength\", 3, 1, 5000, \"%D smoothing\")], columns: [\"k\", \"d\"],\n plots: [line(\"k\", COLORS.blue, { title: \"%K\" }), line(\"d\", COLORS.orange, { title: \"%D\" }), hline(\"upper\", 80), hline(\"lower\", 20), hline(\"middle\", 50, COLORS.gray, \"dotted\")],\n label: (p) => `${p.kLength} ${p.kSmooth} ${p.dLength}`,\n build: (g, p) => {\n const hh = g.highest(g.high, p.kLength), ll = g.lowest(g.low, p.kLength);\n const raw = g.mul(g.div(g.sub(g.close, ll), g.sub(hh, ll)), 100);\n const k = g.sma(raw, p.kSmooth);\n return [k, g.sma(k, p.dLength)];\n },\n reference: \"TradingView 'Stochastic' (Pine v5): k = sma(stoch(close, high, low, 14), 1), d = sma(k, 3); TA-Lib STOCH with fastk 14 / slowk sma 1 / slowd sma 3 (TA-Lib gives 0 on a flat range, here it is absent)\",\n});\n","// TradingView's volume-based studies, session/anchored VWAP, pivot points and\n// historical volatility, built from the built-in definitions and their default\n// parameters. Period boundaries (session, week, month, year) are computed from\n// the bar time shifted by `utcOffsetMinutes` (the exchange time zone); the\n// boundary state lives in columns, so appends and revisions equal a batch run.\n\nimport { COLORS, band, defineStudy, float, hist, int, line, select, source } from \"../define.js\";\nimport type { Col, Graph, Node } from \"../engine/graph.js\";\n\nconst NaN_ = Number.NaN;\nconst DAY_MS = 86_400_000;\n\n// ---- helpers ----------------------------------------------------------------------\n\n/** Proleptic Gregorian year and month (0..11) of a day count since 1970-01-01 (Hinnant's civil_from_days). */\nfunction civil(days: number): [number, number] {\n const z = days + 719468;\n const era = Math.floor(z / 146097);\n const doe = z - era * 146097;\n const yoe = Math.floor((doe - Math.floor(doe / 1460) + Math.floor(doe / 36524) - Math.floor(doe / 146096)) / 365);\n const doy = doe - (365 * yoe + Math.floor(yoe / 4) - Math.floor(yoe / 100));\n const mp = Math.floor((5 * doy + 2) / 153);\n const m = mp < 10 ? mp + 3 : mp - 9; // 1..12\n const y = yoe + era * 400 + (m <= 2 ? 1 : 0);\n return [y, m - 1];\n}\n\nexport type Period = \"day\" | \"week\" | \"month\" | \"year\";\n\n/** An integer naming the calendar period (in the exchange time zone) each bar falls in; weeks start on Monday. */\nfunction periodKey(g: Graph, period: Period, offsetMin: number): Node {\n const t = g.time;\n const off = offsetMin * 60_000;\n return g.calc((i) => {\n const day = Math.floor((t.v[i]! + off) / DAY_MS);\n switch (period) {\n case \"day\": return day;\n case \"week\": return Math.floor((day + 3) / 7); // 1970-01-01 was a Thursday; day 4 is the first Monday\n case \"month\": { const [y, m] = civil(day); return y * 12 + m; }\n case \"year\": return civil(day)[0];\n }\n });\n}\n\n/** Running sum of `term(i)` that restarts at bars where `fresh(i)` is true and is absent where `live(i)` is false. */\nfunction cum(g: Graph, term: (i: number) => number, fresh: (i: number) => boolean, live: (i: number) => boolean = () => true): Node {\n return g.node((s, a, b) => {\n const v = s.v;\n for (let i = a; i < b; i++) {\n if (!live(i)) { v[i] = NaN_; continue; }\n v[i] = (fresh(i) ? 0 : v[i - 1]!) + term(i);\n }\n });\n}\n\n/** The four VWAP series from cumulative pv, v and pv2: vwap, stdev, upper, lower (zero cumulative volume is absent). */\nfunction vwapOutputs(g: Graph, cpv: Col, cv: Col, cpv2: Col, mult: number): Node[] {\n const vw = g.calc((i) => (cv.v[i]! > 0 ? cpv.v[i]! / cv.v[i]! : NaN_));\n const sd = g.calc((i) => {\n const w = vw.v[i]!;\n const r = cpv2.v[i]! / cv.v[i]! - w * w;\n return w !== w ? NaN_ : r > 0 ? Math.sqrt(r) : 0;\n });\n return [vw, g.calc((i) => vw.v[i]! + mult * sd.v[i]!), g.calc((i) => vw.v[i]! - mult * sd.v[i]!)];\n}\n\nconst OFFSET = int(\"utcOffsetMinutes\", 0, -720, 840, \"UTC offset (minutes)\");\n\n// ---- volume -----------------------------------------------------------------------\n\nexport const volume = defineStudy({\n id: \"volume\", name: \"Volume\", family: \"tv\", needs: \"ohlcv\", pane: \"new\",\n inputs: [int(\"maLength\", 20, 1, 5000, \"MA length\")],\n columns: [\"volume\", \"up\", \"down\", \"ma\"],\n plots: [hist(\"up\", COLORS.green, undefined, { title: \"Volume (up)\" }), hist(\"down\", COLORS.red, undefined, { title: \"Volume (down)\" }), line(\"ma\", COLORS.yellow, { title: \"Volume MA\" })],\n label: (p) => `${p.maLength}`,\n build: (g, p) => {\n const { volume: v, open, close } = g;\n const up = g.calc((i) => (close.v[i]! > open.v[i]! ? v.v[i]! : NaN_));\n const dn = g.calc((i) => (close.v[i]! > open.v[i]! ? NaN_ : v.v[i]!));\n return [g.calc((i) => v.v[i]!), up, dn, g.sma(v, p.maLength)];\n },\n reference: \"TradingView Volume: histogram of volume, green when close > open, red otherwise; MA is ta.sma(volume, 20). Verified against TA-Lib SMA for the MA.\",\n});\n\n// ---- volume oscillator ------------------------------------------------------------\n\nexport const volumeOsc = defineStudy({\n id: \"volume-osc\", name: \"Volume Oscillator\", family: \"tv\", needs: \"ohlcv\", pane: \"new\",\n inputs: [int(\"short\", 5, 1, 5000, \"Short length\"), int(\"long\", 10, 1, 5000, \"Long length\")],\n columns: [\"osc\"],\n plots: [line(\"osc\", COLORS.blue, { title: \"Volume Oscillator\" })],\n label: (p) => `${p.short}, ${p.long}`,\n build: (g, p) => {\n const s = g.ema(g.volume, p.short), l = g.ema(g.volume, p.long);\n return [g.map2(s, l, (a, b) => (b === 0 ? NaN_ : (100 * (a - b)) / b))];\n },\n reference: \"TradingView Volume Oscillator: 100 * (ta.ema(volume, 5) - ta.ema(volume, 10)) / ta.ema(volume, 10). Equals TA-Lib PPO(volume, 5, 10, EMA).\",\n});\n\n// ---- cumulative / flow ------------------------------------------------------------\n\nexport const pvt = defineStudy({\n id: \"pvt\", name: \"Price Volume Trend\", family: \"tv\", needs: \"ohlcv\", pane: \"new\",\n inputs: [], columns: [\"pvt\"],\n plots: [line(\"pvt\", COLORS.blue, { title: \"PVT\" })],\n build: (g) => {\n const { close, volume: vol } = g;\n // ta.pvt = ta.cum(ta.change(close) / close[1] * volume); the first bar has no change, so it is absent.\n const term = g.calc((i) => (i === 0 ? NaN_ : ((close.v[i]! - close.v[i - 1]!) / close.v[i - 1]!) * vol.v[i]!));\n return [cum(g, (i) => term.v[i]!, (i) => i <= 1, (i) => i >= 1)];\n },\n reference: \"Pine ta.pvt = ta.cum(ta.change(close) / close[1] * volume)\",\n});\n\nexport const netVolume = defineStudy({\n id: \"net-volume\", name: \"Net Volume\", family: \"tv\", needs: \"ohlcv\", pane: \"new\",\n inputs: [], columns: [\"netVolume\"],\n plots: [hist(\"netVolume\", COLORS.green, COLORS.red, { title: \"Net Volume\" })],\n build: (g) => {\n const { close, volume: vol } = g;\n return [g.calc((i) => {\n if (i === 0) return NaN_;\n const d = close.v[i]! - close.v[i - 1]!;\n return d > 0 ? vol.v[i]! : d < 0 ? -vol.v[i]! : 0;\n })];\n },\n reference: \"TradingView Net Volume: volume signed by the sign of ta.change(close) (zero on an unchanged close)\",\n});\n\nexport const elderForce = defineStudy({\n id: \"elder-force\", name: \"Elder's Force Index\", family: \"tv\", needs: \"ohlcv\", pane: \"new\",\n inputs: [int(\"length\", 13, 1, 5000)], columns: [\"efi\"],\n plots: [line(\"efi\", COLORS.red, { title: \"EFI\" })],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const { close, volume: vol } = g;\n const raw = g.calc((i) => (i === 0 ? NaN_ : (close.v[i]! - close.v[i - 1]!) * vol.v[i]!));\n return [g.ema(raw, p.length)];\n },\n reference: \"TradingView Elder's Force Index: ta.ema(ta.change(close) * volume, 13)\",\n});\n\nexport const eom = defineStudy({\n id: \"eom\", name: \"Ease of Movement\", family: \"tv\", needs: \"ohlcv\", pane: \"new\",\n inputs: [int(\"length\", 14, 1, 5000), int(\"divisor\", 10000, 1, 1_000_000_000)], columns: [\"eom\"],\n plots: [line(\"eom\", COLORS.teal, { title: \"EOM\" })],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const { high, low, volume: vol } = g;\n const hl2 = g.src(\"hl2\");\n const num = g.calc((i) => (i === 0 ? NaN_ : p.divisor * (hl2.v[i]! - hl2.v[i - 1]!) * (high.v[i]! - low.v[i]!)));\n return [g.sma(g.div(num, vol), p.length)];\n },\n reference: \"TradingView Ease of Movement: ta.sma(10000 * ta.change(hl2) * (high - low) / volume, 14); zero volume is absent\",\n});\n\nexport const chaikinMf = defineStudy({\n id: \"chaikin-mf\", name: \"Chaikin Money Flow\", family: \"tv\", needs: \"ohlcv\", pane: \"new\",\n inputs: [int(\"length\", 20, 1, 5000)], columns: [\"cmf\"],\n plots: [line(\"cmf\", COLORS.green, { title: \"CMF\" })],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const { high, low, close, volume: vol } = g;\n // ad = close == high and close == low or high == low ? 0 : (2*close - low - high) / (high - low) * volume\n const ad = g.calc((i) => {\n const h = high.v[i]!, l = low.v[i]!, c = close.v[i]!;\n return h === l ? 0 : ((2 * c - l - h) / (h - l)) * vol.v[i]!;\n });\n return [g.div(g.sum(ad, p.length), g.sum(vol, p.length))];\n },\n reference: \"TradingView Chaikin Money Flow: sum(ad, 20) / sum(volume, 20), ad = (2*close - low - high) / (high - low) * volume (0 when high == low)\",\n});\n\nexport const klinger = defineStudy({\n id: \"klinger\", name: \"Klinger Oscillator\", family: \"tv\", needs: \"ohlcv\", pane: \"new\",\n inputs: [int(\"fast\", 34, 1, 5000), int(\"slow\", 55, 1, 5000), int(\"signal\", 13, 1, 5000)],\n columns: [\"kvo\", \"signal\"],\n plots: [line(\"kvo\", COLORS.blue, { title: \"KVO\" }), line(\"signal\", COLORS.green, { title: \"Signal\" })],\n label: (p) => `${p.fast}, ${p.slow}, ${p.signal}`,\n build: (g, p) => {\n const h3 = g.src(\"hlc3\");\n const vol = g.volume;\n // sv = ta.change(hlc3) >= 0 ? volume : -volume\n const sv = g.calc((i) => (i === 0 ? NaN_ : h3.v[i]! - h3.v[i - 1]! >= 0 ? vol.v[i]! : -vol.v[i]!));\n const kvo = g.sub(g.ema(sv, p.fast), g.ema(sv, p.slow));\n return [kvo, g.ema(kvo, p.signal)];\n },\n reference: \"TradingView Klinger Oscillator: sv = ta.change(hlc3) >= 0 ? volume : -volume; kvo = ta.ema(sv, 34) - ta.ema(sv, 55); signal = ta.ema(kvo, 13)\",\n});\n\n// ---- VWAP -------------------------------------------------------------------------\n\nexport const vwap = defineStudy({\n id: \"vwap\", name: \"Session VWAP\", family: \"tv\", needs: \"ohlcv\", pane: \"overlay\",\n inputs: [select(\"anchor\", \"session\", [\"session\", \"week\", \"month\", \"year\"]), source(\"hlc3\"), float(\"bandMult\", 1, 0, 100, 0.1, \"Band multiplier\"), OFFSET],\n columns: [\"vwap\", \"upper\", \"lower\"],\n plots: [line(\"vwap\", COLORS.blue, { title: \"Session VWAP\" }), band(\"bands\", \"upper\", \"lower\", COLORS.green, \"rgba(8,153,129,0.1)\", \"Session VWAP bands\")],\n label: (p) => `${p.anchor}`,\n build: (g, p) => {\n const key = periodKey(g, p.anchor === \"session\" ? \"day\" : p.anchor, p.utcOffsetMinutes);\n const src = g.src(p.source), vol = g.volume;\n const fresh = (i: number) => i === 0 || key.v[i] !== key.v[i - 1];\n const cv = cum(g, (i) => vol.v[i]!, fresh);\n const cpv = cum(g, (i) => src.v[i]! * vol.v[i]!, fresh);\n const cpv2 = cum(g, (i) => src.v[i]! * src.v[i]! * vol.v[i]!, fresh);\n return vwapOutputs(g, cpv, cv, cpv2, p.bandMult);\n },\n reference: \"Pine ta.vwap(hlc3, anchor, stdev_mult 1): cumulative sum(src*volume) / sum(volume) restarting at each session/week/month/year; bands = vwap +/- mult * sqrt(sum(volume*src^2)/sum(volume) - vwap^2). Session = calendar day in the exchange time zone. It restarts at each session, which is what a trader means by VWAP intraday; it is never a running average over the whole chart (use anchored-vwap for a start you choose).\",\n});\n\nexport const anchoredVwap = defineStudy({\n id: \"anchored-vwap\", name: \"Anchored VWAP\", family: \"tv\", needs: \"ohlcv\", pane: \"overlay\",\n inputs: [float(\"anchorTime\", 0, 0, 1e15, 1, \"Anchor time (UTC ms)\"), source(\"hlc3\"), float(\"bandMult\", 1, 0, 100, 0.1, \"Band multiplier\")],\n columns: [\"vwap\", \"upper\", \"lower\"],\n plots: [line(\"vwap\", COLORS.orange, { title: \"Anchored VWAP\" }), band(\"bands\", \"upper\", \"lower\", COLORS.orange, \"rgba(255,109,0,0.1)\", \"Anchored VWAP bands\")],\n build: (g, p) => {\n const t = g.time, src = g.src(p.source), vol = g.volume;\n const live = (i: number) => t.v[i]! >= p.anchorTime;\n const fresh = (i: number) => i === 0 || !live(i - 1);\n const cv = cum(g, (i) => vol.v[i]!, fresh, live);\n const cpv = cum(g, (i) => src.v[i]! * vol.v[i]!, fresh, live);\n const cpv2 = cum(g, (i) => src.v[i]! * src.v[i]! * vol.v[i]!, fresh, live);\n return vwapOutputs(g, cpv, cv, cpv2, p.bandMult);\n },\n reference: \"TradingView Anchored VWAP: VWAP (hlc3) accumulated from the first bar at or after the anchor time, with stdev bands; earlier bars are absent\",\n});\n\n// ---- pivot points -----------------------------------------------------------------\n\ntype Levels = { p: number; r1: number; r2: number; r3: number; r4: number; s1: number; s2: number; s3: number; s4: number };\nconst LEVEL_KEYS = [\"p\", \"r1\", \"r2\", \"r3\", \"r4\", \"s1\", \"s2\", \"s3\", \"s4\"] as const;\n\n/** Levels from the previous period's open, high, low, close; kinds lacking a level leave it absent. */\nfunction levels(kind: string, O: number, H: number, L: number, C: number): Levels {\n const out: Levels = { p: NaN_, r1: NaN_, r2: NaN_, r3: NaN_, r4: NaN_, s1: NaN_, s2: NaN_, s3: NaN_, s4: NaN_ };\n const R = H - L;\n if (kind === \"dm\") {\n const x = C < O ? H + 2 * L + C : C > O ? 2 * H + L + C : H + L + 2 * C;\n out.p = x / 4; out.r1 = x / 2 - L; out.s1 = x / 2 - H;\n return out;\n }\n if (kind === \"woodie\") {\n const P = (H + L + 2 * C) / 4;\n out.p = P; out.r1 = 2 * P - L; out.s1 = 2 * P - H; out.r2 = P + R; out.s2 = P - R;\n out.r3 = H + 2 * R; out.s3 = L - 2 * R; out.r4 = out.r3 + R; out.s4 = out.s3 - R;\n return out;\n }\n if (kind === \"camarilla\") {\n out.p = (H + L + C) / 3;\n out.r1 = C + (R * 1.1) / 12; out.r2 = C + (R * 1.1) / 6; out.r3 = C + (R * 1.1) / 4; out.r4 = C + (R * 1.1) / 2;\n out.s1 = C - (R * 1.1) / 12; out.s2 = C - (R * 1.1) / 6; out.s3 = C - (R * 1.1) / 4; out.s4 = C - (R * 1.1) / 2;\n return out;\n }\n const P = (H + L + C) / 3;\n out.p = P;\n if (kind === \"fibonacci\") {\n out.r1 = P + 0.382 * R; out.r2 = P + 0.618 * R; out.r3 = P + R;\n out.s1 = P - 0.382 * R; out.s2 = P - 0.618 * R; out.s3 = P - R;\n } else if (kind === \"classic\") {\n out.r1 = 2 * P - L; out.s1 = 2 * P - H;\n out.r2 = P + R; out.s2 = P - R; out.r3 = P + 2 * R; out.s3 = P - 2 * R; out.r4 = P + 3 * R; out.s4 = P - 3 * R;\n } else { // standard (TradingView \"Traditional\")\n out.r1 = 2 * P - L; out.s1 = 2 * P - H; out.r2 = P + R; out.s2 = P - R;\n out.r3 = 2 * P + H - 2 * L; out.s3 = 2 * P - (2 * H - L); out.r4 = 3 * P + H - 3 * L; out.s4 = 3 * P - (3 * H - L);\n }\n return out;\n}\n\nconst PIVOT_COLORS: Record<(typeof LEVEL_KEYS)[number], string> = {\n p: COLORS.gray, r1: COLORS.red, r2: COLORS.red, r3: COLORS.red, r4: COLORS.red, s1: COLORS.green, s2: COLORS.green, s3: COLORS.green, s4: COLORS.green,\n};\n\nexport const pivotPoints = defineStudy({\n id: \"pivot-points\", name: \"Pivot Points Standard\", family: \"tv\", needs: \"ohlc\", pane: \"overlay\",\n inputs: [\n select(\"kind\", \"standard\", [\"standard\", \"fibonacci\", \"woodie\", \"classic\", \"dm\", \"camarilla\"]),\n select(\"period\", \"day\", [\"day\", \"week\", \"month\", \"year\"]),\n OFFSET,\n ],\n columns: [...LEVEL_KEYS],\n plots: LEVEL_KEYS.map((k) => line(k, PIVOT_COLORS[k], { title: k.toUpperCase(), width: 1 })),\n label: (p) => `${p.kind} ${p.period}`,\n build: (g, p) => {\n const key = periodKey(g, p.period, p.utcOffsetMinutes);\n const { open, high, low, close } = g;\n // current period's running O/H/L/C and the previous completed period's, one slot per bar\n const cO = g.col(), cH = g.col(), cL = g.col(), cC = g.col(), pO = g.col(), pH = g.col(), pL = g.col(), pC = g.col();\n g.node((_s, a, b) => {\n for (let i = a; i < b; i++) {\n if (i === 0 || key.v[i] !== key.v[i - 1]) {\n if (i === 0) { pO.v[i] = NaN_; pH.v[i] = NaN_; pL.v[i] = NaN_; pC.v[i] = NaN_; }\n else { pO.v[i] = cO.v[i - 1]!; pH.v[i] = cH.v[i - 1]!; pL.v[i] = cL.v[i - 1]!; pC.v[i] = cC.v[i - 1]!; }\n cO.v[i] = open.v[i]!; cH.v[i] = high.v[i]!; cL.v[i] = low.v[i]!;\n } else {\n pO.v[i] = pO.v[i - 1]!; pH.v[i] = pH.v[i - 1]!; pL.v[i] = pL.v[i - 1]!; pC.v[i] = pC.v[i - 1]!;\n cO.v[i] = cO.v[i - 1]!; cH.v[i] = Math.max(cH.v[i - 1]!, high.v[i]!); cL.v[i] = Math.min(cL.v[i - 1]!, low.v[i]!);\n }\n cC.v[i] = close.v[i]!;\n }\n });\n return LEVEL_KEYS.map((k) => g.calc((i) => (pH.v[i]! === pH.v[i]! ? levels(p.kind, pO.v[i]!, pH.v[i]!, pL.v[i]!, pC.v[i]!)[k] : NaN_)));\n },\n reference: \"TradingView Pivot Points Standard (Traditional, Fibonacci, Woodie, Classic, DM, Camarilla) from the previous completed period's open/high/low/close; constant over the current period, absent in the first\",\n});\n\n// ---- volatility / range -----------------------------------------------------------\n\nexport const histVol = defineStudy({\n id: \"hist-vol\", name: \"Historical Volatility\", family: \"tv\", needs: \"value\", pane: \"new\",\n inputs: [int(\"length\", 10, 2, 5000), int(\"annual\", 252, 1, 10_000, \"Periods per year\"), int(\"periodDays\", 1, 1, 10_000, \"Days per bar\")],\n columns: [\"hv\"],\n plots: [line(\"hv\", COLORS.blue, { title: \"HV\" })],\n label: (p) => `${p.length}`,\n build: (g, p) => {\n const c = g.close;\n const r = g.calc((i) => (i === 0 ? NaN_ : Math.log(c.v[i]! / c.v[i - 1]!)));\n const k = 100 * Math.sqrt(p.annual / p.periodDays);\n return [g.map(g.stdev(r, p.length), (s) => s * k)];\n },\n reference: \"TradingView Historical Volatility: 100 * ta.stdev(ln(close/close[1]), 10) * sqrt(annual / periodDays); ta.stdev is the population deviation (biased). annual defaults to 252 trading days (TradingView's script uses 365).\",\n});\n\nexport const adr = defineStudy({\n id: \"adr\", name: \"Average Day Range\", family: \"tv\", needs: \"ohlc\", pane: \"new\",\n inputs: [int(\"length\", 14, 1, 5000)], columns: [\"adr\"],\n plots: [line(\"adr\", COLORS.orange, { title: \"ADR\" })],\n label: (p) => `${p.length}`,\n build: (g, p) => [g.sma(g.sub(g.high, g.low), p.length)],\n reference: \"TradingView Average Day Range: ta.sma(high - low, 14) on the chart's bars\",\n});\n\n// ---- bars per year ---------------------------------------------------------------\n\nexport const barsPerYear = defineStudy({\n id: \"bars-per-year\", name: \"Bars per year\", family: \"tv\", needs: \"value\", pane: \"new\",\n inputs: [source(), OFFSET], columns: [\"barsPerYear\"],\n plots: [line(\"barsPerYear\", COLORS.gray, { title: \"Bars per year\" })],\n label: (p) => `${p.utcOffsetMinutes}`,\n // `source` is not read: it only says whose bars are counted (a script passes an outside series to count that series' bars)\n build: (g, p) => [g.barsPerYear(p.utcOffsetMinutes)],\n reference: \"Annualisation made causal: intraday = median bars per exchange-clock day over the last 60 finished days x 252; bars of a day or longer = 252 for a daily series without weekends, else 365 days / median spacing. Constant within a day; absent before the first day has finished. Use it for sqrt(bars per year) in Sharpe and annualised volatility instead of a typed number\",\n});\n"],"mappings":"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"}