
QuaScript Documentation
Language guide, engine API, 601 builtins and the preset library · v3.0.0-phase1
ta: technical analysis
Generated from the engine catalog by tools/gen-docs.mjs; do not edit.
ta.accum_dist
ta.accum_dist() -> seriesAccumulation / distribution line.
Keeps state per call site.
analysis "ta.accum_dist" { overlay = true }
v = ta.accum_dist()
render.line(v, "ta.accum_dist", color = color.sky.400, width = 2, pane = 1)ta.adx
ta.adx(len = 14, smooth = 14) -> (adx, plus_di, minus_di)Average directional index: (adx, plusdi, minusdi).
| Argument | Kind | Default | Notes |
|---|---|---|---|
len | int | 14 | |
smooth | int | 14 |
Returns 3 values: adx, plus_di, minus_di. Keeps state per call site.
analysis "ta.adx" { overlay = true }
(v_adx, v_plus_di, v_minus_di) = ta.adx()
render.line(v_adx, "adx", color = color.sky.400, width = 2, pane = 1)
render.line(v_plus_di, "plus_di", color = color.amber.400, width = 2, pane = 1)
render.line(v_minus_di, "minus_di", color = color.violet.400, width = 2, pane = 1)ta.aroon
ta.aroon(len = 14) -> (up, down, osc)Aroon: (up, down, osc).
| Argument | Kind | Default | Notes |
|---|---|---|---|
len | int | 14 |
Returns 3 values: up, down, osc. Keeps state per call site.
analysis "ta.aroon" { overlay = true }
(v_up, v_down, v_osc) = ta.aroon()
render.line(v_up, "up", color = color.sky.400, width = 2, pane = 1)
render.line(v_down, "down", color = color.amber.400, width = 2, pane = 1)
render.line(v_osc, "osc", color = color.violet.400, width = 2, pane = 1)ta.atr
ta.atr(len = 14) -> seriesAverage true range (RMA of the true range).
| Argument | Kind | Default | Notes |
|---|---|---|---|
len | int | 14 |
Keeps state per call site.
analysis "ta.atr" { overlay = true }
v = ta.atr()
render.line(v, "ta.atr", color = color.sky.400, width = 2, pane = 1)ta.awesome
ta.awesome(fast = 5, slow = 34) -> seriesAwesome oscillator: SMA(mid, fast) - SMA(mid, slow).
| Argument | Kind | Default | Notes |
|---|---|---|---|
fast | int | 5 | |
slow | int | 34 |
Keeps state per call site.
analysis "ta.awesome" { overlay = true }
v = ta.awesome()
render.line(v, "ta.awesome", color = color.sky.400, width = 2, pane = 1)ta.bars_since
ta.bars_since(cond) -> seriesBars since cond was last true (na before the first time).
| Argument | Kind | Default | Notes |
|---|---|---|---|
cond | bool | required |
Keeps state per call site.
analysis "ta.bars_since" { overlay = true }
v = ta.bars_since(close > ta.sma(close, 20))
render.line(v, "ta.bars_since", color = color.sky.400, width = 2, pane = 1)ta.bollinger
ta.bollinger(src, len = 20, mult = 2) -> (mid, upper, lower)Bollinger bands: (mid, upper, lower).
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | 20 | |
mult | num | 2 |
Returns 3 values: mid, upper, lower. Keeps state per call site.
analysis "ta.bollinger" { overlay = true }
(v_mid, v_upper, v_lower) = ta.bollinger(close)
render.line(v_mid, "mid", color = color.sky.400, width = 2)
render.line(v_upper, "upper", color = color.amber.400, width = 2)
render.line(v_lower, "lower", color = color.violet.400, width = 2)ta.bollinger_pct
ta.bollinger_pct(src, len = 20, mult = 2) -> seriesPosition of src inside the bands (0 = lower, 1 = upper).
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | 20 | |
mult | num | 2 |
Keeps state per call site.
analysis "ta.bollinger_pct" { overlay = true }
v = ta.bollinger_pct(close)
render.line(v, "ta.bollinger_pct", color = color.sky.400, width = 2, pane = 1)ta.bollinger_width
ta.bollinger_width(src, len = 20, mult = 2) -> seriesBollinger band width: (upper - lower) / mid.
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | 20 | |
mult | num | 2 |
Keeps state per call site.
analysis "ta.bollinger_width" { overlay = true }
v = ta.bollinger_width(close)
render.line(v, "ta.bollinger_width", color = color.sky.400, width = 2, pane = 1)ta.cci
ta.cci(src = bar.typical, len = 20) -> seriesCommodity channel index.
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | bar.typical | |
len | int | 20 |
Keeps state per call site.
analysis "ta.cci" { overlay = true }
v = ta.cci()
render.line(v, "ta.cci", color = color.sky.400, width = 2, pane = 1)ta.chaikin_mf
ta.chaikin_mf(len = 20) -> seriesChaikin money flow.
| Argument | Kind | Default | Notes |
|---|---|---|---|
len | int | 20 |
Keeps state per call site.
analysis "ta.chaikin_mf" { overlay = true }
v = ta.chaikin_mf()
render.line(v, "ta.chaikin_mf", color = color.sky.400, width = 2, pane = 1)ta.chaikin_osc
ta.chaikin_osc(fast = 3, slow = 10) -> seriesChaikin oscillator.
| Argument | Kind | Default | Notes |
|---|---|---|---|
fast | int | 3 | |
slow | int | 10 |
Keeps state per call site.
analysis "ta.chaikin_osc" { overlay = true }
v = ta.chaikin_osc()
render.line(v, "ta.chaikin_osc", color = color.sky.400, width = 2, pane = 1)ta.chande
ta.chande(src, len = 9) -> seriesChande momentum oscillator (-100 .. 100).
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | 9 |
Keeps state per call site.
analysis "ta.chande" { overlay = true }
v = ta.chande(close)
render.line(v, "ta.chande", color = color.sky.400, width = 2, pane = 1)ta.chandelier
ta.chandelier(len = 22, mult = 3) -> (long_stop, short_stop)Chandelier exits: (longstop, shortstop).
| Argument | Kind | Default | Notes |
|---|---|---|---|
len | int | 22 | |
mult | num | 3 |
Returns 2 values: long_stop, short_stop. Keeps state per call site.
analysis "ta.chandelier" { overlay = true }
(v_long_stop, v_short_stop) = ta.chandelier()
render.line(v_long_stop, "long_stop", color = color.sky.400, width = 2)
render.line(v_short_stop, "short_stop", color = color.amber.400, width = 2)ta.change
ta.change(src, len = 1) -> seriessrc - src[len] (momentum).
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | 1 |
Keeps state per call site.
analysis "ta.change" { overlay = true }
v = ta.change(close)
render.line(v, "ta.change", color = color.sky.400, width = 2, pane = 1)ta.choppiness
ta.choppiness(len = 14) -> seriesChoppiness index (100 = choppy, 0 = trending).
| Argument | Kind | Default | Notes |
|---|---|---|---|
len | int | 14 |
Keeps state per call site.
analysis "ta.choppiness" { overlay = true }
v = ta.choppiness()
render.line(v, "ta.choppiness", color = color.sky.400, width = 2, pane = 1)ta.connors_rsi
ta.connors_rsi(src, rsi_len = 3, streak_len = 2, rank_len = 100) -> seriesConnors RSI: mean of RSI, streak RSI and percent rank of the 1-bar return.
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
rsi_len | int | 3 | |
streak_len | int | 2 | |
rank_len | int | 100 |
Keeps state per call site.
analysis "ta.connors_rsi" { overlay = true }
v = ta.connors_rsi(close)
render.line(v, "ta.connors_rsi", color = color.sky.400, width = 2, pane = 1)ta.coppock
ta.coppock(src, wma_len = 10, long_roc = 14, short_roc = 11) -> seriesCoppock curve.
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
wma_len | int | 10 | |
long_roc | int | 14 | |
short_roc | int | 11 |
Keeps state per call site.
analysis "ta.coppock" { overlay = true }
v = ta.coppock(close)
render.line(v, "ta.coppock", color = color.sky.400, width = 2, pane = 1)ta.cross
ta.cross(a, b) -> boolTrue on the bar where a crosses b in either direction.
| Argument | Kind | Default | Notes |
|---|---|---|---|
a | series | required | |
b | series | required |
Keeps state per call site.
analysis "ta.cross" { overlay = true }
v = ta.cross(close, ta.sma(close, 20))
render.mark(v, shape = shape.triangle_up, at = anchor.below_bar, color = color.sky.400, text = "")ta.cross_down
ta.cross_down(a, b) -> boolTrue on the bar where a crosses below b.
| Argument | Kind | Default | Notes |
|---|---|---|---|
a | series | required | |
b | series | required |
Keeps state per call site.
analysis "ta.cross_down" { overlay = true }
v = ta.cross_down(close, ta.sma(close, 20))
render.mark(v, shape = shape.triangle_up, at = anchor.below_bar, color = color.sky.400, text = "")ta.cross_up
ta.cross_up(a, b) -> boolTrue on the bar where a crosses above b.
| Argument | Kind | Default | Notes |
|---|---|---|---|
a | series | required | |
b | series | required |
Keeps state per call site.
analysis "ta.cross_up" { overlay = true }
v = ta.cross_up(close, ta.sma(close, 20))
render.mark(v, shape = shape.triangle_up, at = anchor.below_bar, color = color.sky.400, text = "")ta.cum
ta.cum(src) -> seriesCumulative sum since the first bar.
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required |
Keeps state per call site.
analysis "ta.cum" { overlay = true }
v = ta.cum(close)
render.line(v, "ta.cum", color = color.sky.400, width = 2, pane = 1)ta.decycler
ta.decycler(src, len = 20) -> seriesRemoves cycles shorter than len with a high-pass filter.
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | 20 |
Keeps state per call site.
analysis "ta.decycler" { overlay = true }
v = ta.decycler(close)
render.line(v, "ta.decycler", color = color.sky.400, width = 2)ta.dema
ta.dema(src, len) -> seriesDouble exponential moving average: 2*EMA - EMA(EMA).
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | required |
Keeps state per call site.
analysis "ta.dema" { overlay = true }
v = ta.dema(close, 20)
render.line(v, "ta.dema", color = color.sky.400, width = 2)ta.divergence
ta.divergence(osc, left = 5, right = 5, range_max = 60, hidden = 0) -> (bullish, bearish)Price / oscillator divergence at confirmed pivots: (bullish, bearish).
| Argument | Kind | Default | Notes |
|---|---|---|---|
osc | series | required | |
left | int | 5 | |
right | int | 5 | |
range_max | int | 60 | |
hidden | bool | 0 |
Returns 2 values: bullish, bearish. Keeps state per call site.
analysis "ta.divergence" { overlay = true }
(v_bullish, v_bearish) = ta.divergence(ta.rsi(close, 14))
render.mark(v_bullish, shape = shape.triangle_up, at = anchor.below_bar, color = color.sky.400, text = "bullish")
render.mark(v_bearish, shape = shape.triangle_up, at = anchor.below_bar, color = color.amber.400, text = "bearish")ta.donchian
ta.donchian(len = 20) -> (mid, upper, lower)Donchian channels: (mid, upper, lower).
| Argument | Kind | Default | Notes |
|---|---|---|---|
len | int | 20 |
Returns 3 values: mid, upper, lower. Keeps state per call site.
analysis "ta.donchian" { overlay = true }
(v_mid, v_upper, v_lower) = ta.donchian()
render.line(v_mid, "mid", color = color.sky.400, width = 2)
render.line(v_upper, "upper", color = color.amber.400, width = 2)
render.line(v_lower, "lower", color = color.violet.400, width = 2)ta.ease_of_movement
ta.ease_of_movement(len = 14, divisor = 10000) -> seriesEase of movement.
| Argument | Kind | Default | Notes |
|---|---|---|---|
len | int | 14 | |
divisor | num | 10000 |
Keeps state per call site.
analysis "ta.ease_of_movement" { overlay = true }
v = ta.ease_of_movement()
render.line(v, "ta.ease_of_movement", color = color.sky.400, width = 2, pane = 1)ta.ema
ta.ema(src, len) -> seriesExponential moving average (alpha = 2 / (len + 1)), seeded with the SMA.
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | required |
Keeps state per call site.
analysis "ta.ema" { overlay = true }
v = ta.ema(close, 20)
render.line(v, "ta.ema", color = color.sky.400, width = 2)ta.falling
ta.falling(src, len) -> boolTrue when src is below each of its last len values.
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | required |
Keeps state per call site.
analysis "ta.falling" { overlay = true }
v = ta.falling(close, 20)
render.mark(v, shape = shape.triangle_up, at = anchor.below_bar, color = color.sky.400, text = "")ta.fisher
ta.fisher(len = 9) -> (fisher, trigger)Fisher transform of the bar mid: (fisher, trigger).
| Argument | Kind | Default | Notes |
|---|---|---|---|
len | int | 9 |
Returns 2 values: fisher, trigger. Keeps state per call site.
analysis "ta.fisher" { overlay = true }
(v_fisher, v_trigger) = ta.fisher()
render.line(v_fisher, "fisher", color = color.sky.400, width = 2, pane = 1)
render.line(v_trigger, "trigger", color = color.amber.400, width = 2, pane = 1)ta.force
ta.force(len = 13) -> seriesForce index (EMA of change x volume).
| Argument | Kind | Default | Notes |
|---|---|---|---|
len | int | 13 |
Keeps state per call site.
analysis "ta.force" { overlay = true }
v = ta.force()
render.line(v, "ta.force", color = color.sky.400, width = 2, pane = 1)ta.frama
ta.frama(src, len = 16) -> seriesFractal adaptive moving average.
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | 16 |
Keeps state per call site.
analysis "ta.frama" { overlay = true }
v = ta.frama(close)
render.line(v, "ta.frama", color = color.sky.400, width = 2)ta.highest
ta.highest(src, len) -> seriesHighest value of the last len bars.
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | required |
Keeps state per call site.
analysis "ta.highest" { overlay = true }
v = ta.highest(close, 20)
render.line(v, "ta.highest", color = color.sky.400, width = 2)ta.highest_offset
ta.highest_offset(src, len) -> seriesBars back to the highest value of the window (0 = current bar).
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | required |
Keeps state per call site.
analysis "ta.highest_offset" { overlay = true }
v = ta.highest_offset(close, 20)
render.line(v, "ta.highest_offset", color = color.sky.400, width = 2, pane = 1)ta.historical_vol
ta.historical_vol(src, len = 20, annual = 252) -> seriesAnnualised historical volatility of log returns, in percent.
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | 20 | |
annual | int | 252 |
Keeps state per call site.
analysis "ta.historical_vol" { overlay = true }
v = ta.historical_vol(close)
render.line(v, "ta.historical_vol", color = color.sky.400, width = 2, pane = 1)ta.hull
ta.hull(src, len) -> seriesHull moving average: WMA(2*WMA(n/2) - WMA(n), sqrt(n)).
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | required |
Keeps state per call site.
analysis "ta.hull" { overlay = true }
v = ta.hull(close, 20)
render.line(v, "ta.hull", color = color.sky.400, width = 2)ta.ichimoku
ta.ichimoku(conversion = 9, base = 26, span_b = 52, displacement = 26) -> (conversion, base, span_a, span_b, lagging)Cloud system lines; draw spana/spanb with offset = displacement and lagging with offset = -displacement.
| Argument | Kind | Default | Notes |
|---|---|---|---|
conversion | int | 9 | |
base | int | 26 | |
span_b | int | 52 | |
displacement | int | 26 |
Returns 5 values: conversion, base, span_a, span_b, lagging. Keeps state per call site.
analysis "ta.ichimoku" { overlay = true }
(v_conversion, v_base, v_span_a, v_span_b, v_lagging) = ta.ichimoku()
render.line(v_conversion, "conversion", color = color.sky.400, width = 2)
render.line(v_base, "base", color = color.amber.400, width = 2)
render.line(v_span_a, "span_a", color = color.violet.400, width = 2)
render.line(v_span_b, "span_b", color = color.emerald.400, width = 2)
render.line(v_lagging, "lagging", color = color.rose.400, width = 2)ta.intraday_intensity
ta.intraday_intensity() -> seriesIntraday intensity of the bar.
Keeps state per call site.
analysis "ta.intraday_intensity" { overlay = true }
v = ta.intraday_intensity()
render.line(v, "ta.intraday_intensity", color = color.sky.400, width = 2, pane = 1)ta.jurik
ta.jurik(src, len = 7, phase = 0, power = 2) -> seriesJurik-style adaptive low-lag filter.
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | 7 | |
phase | num | 0 | |
power | num | 2 |
Keeps state per call site.
analysis "ta.jurik" { overlay = true }
v = ta.jurik(close)
render.line(v, "ta.jurik", color = color.sky.400, width = 2)ta.kalman
ta.kalman(src, process_noise = 0.01, measurement_noise = 0.1) -> seriesOne-dimensional Kalman filter estimate.
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
process_noise | num | 0.01 | |
measurement_noise | num | 0.1 |
Keeps state per call site.
analysis "ta.kalman" { overlay = true }
v = ta.kalman(close)
render.line(v, "ta.kalman", color = color.sky.400, width = 2)ta.kaufman
ta.kaufman(src, len = 10, fast = 2, slow = 30) -> seriesKaufman adaptive moving average driven by the efficiency ratio.
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | 10 | |
fast | int | 2 | |
slow | int | 30 |
Keeps state per call site.
analysis "ta.kaufman" { overlay = true }
v = ta.kaufman(close)
render.line(v, "ta.kaufman", color = color.sky.400, width = 2)ta.keltner
ta.keltner(src, len = 20, mult = 1.5, atr_len = 10) -> (mid, upper, lower)Keltner channels: (mid, upper, lower).
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | 20 | |
mult | num | 1.5 | |
atr_len | int | 10 |
Returns 3 values: mid, upper, lower. Keeps state per call site.
analysis "ta.keltner" { overlay = true }
(v_mid, v_upper, v_lower) = ta.keltner(close)
render.line(v_mid, "mid", color = color.sky.400, width = 2)
render.line(v_upper, "upper", color = color.amber.400, width = 2)
render.line(v_lower, "lower", color = color.violet.400, width = 2)ta.kst
ta.kst(src, r1 = 10, r2 = 15, r3 = 20, r4 = 30, s1 = 10, s2 = 10, s3 = 10, s4 = 15, signal = 9) -> (kst, signal)Know sure thing: (kst, signal).
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
r1 | int | 10 | |
r2 | int | 15 | |
r3 | int | 20 | |
r4 | int | 30 | |
s1 | int | 10 | |
s2 | int | 10 | |
s3 | int | 10 | |
s4 | int | 15 | |
signal | int | 9 |
Returns 2 values: kst, signal. Keeps state per call site.
analysis "ta.kst" { overlay = true }
(v_kst, v_signal) = ta.kst(close)
render.line(v_kst, "kst", color = color.sky.400, width = 2, pane = 1)
render.line(v_signal, "signal", color = color.amber.400, width = 2, pane = 1)ta.legoux
ta.legoux(src, len = 9, offset = 0.85, sigma = 6) -> seriesGaussian-weighted moving average with an offset towards recent bars.
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | 9 | |
offset | num | 0.85 | |
sigma | num | 6 |
Keeps state per call site.
analysis "ta.legoux" { overlay = true }
v = ta.legoux(close)
render.line(v, "ta.legoux", color = color.sky.400, width = 2)ta.lowest
ta.lowest(src, len) -> seriesLowest value of the last len bars.
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | required |
Keeps state per call site.
analysis "ta.lowest" { overlay = true }
v = ta.lowest(close, 20)
render.line(v, "ta.lowest", color = color.sky.400, width = 2)ta.lowest_offset
ta.lowest_offset(src, len) -> seriesBars back to the lowest value of the window (0 = current bar).
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | required |
Keeps state per call site.
analysis "ta.lowest_offset" { overlay = true }
v = ta.lowest_offset(close, 20)
render.line(v, "ta.lowest_offset", color = color.sky.400, width = 2, pane = 1)ta.macd
ta.macd(src, fast = 12, slow = 26, signal = 9) -> (line, signal, hist)MACD: (line, signal, hist).
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
fast | int | 12 | |
slow | int | 26 | |
signal | int | 9 |
Returns 3 values: line, signal, hist. Keeps state per call site.
analysis "ta.macd" { overlay = true }
(v_line, v_signal, v_hist) = ta.macd(close)
render.line(v_line, "line", color = color.sky.400, width = 2, pane = 1)
render.line(v_signal, "signal", color = color.amber.400, width = 2, pane = 1)
render.line(v_hist, "hist", color = color.violet.400, width = 2, pane = 1)ta.mcginley
ta.mcginley(src, len = 14) -> seriesMcGinley dynamic average.
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | 14 |
Keeps state per call site.
analysis "ta.mcginley" { overlay = true }
v = ta.mcginley(close)
render.line(v, "ta.mcginley", color = color.sky.400, width = 2)ta.money_flow
ta.money_flow(len = 14) -> seriesMoney flow index (volume-weighted RSI).
| Argument | Kind | Default | Notes |
|---|---|---|---|
len | int | 14 |
Keeps state per call site.
analysis "ta.money_flow" { overlay = true }
v = ta.money_flow()
render.line(v, "ta.money_flow", color = color.sky.400, width = 2, pane = 1)ta.nvi
ta.nvi() -> seriesNegative volume index.
Keeps state per call site.
analysis "ta.nvi" { overlay = true }
v = ta.nvi()
render.line(v, "ta.nvi", color = color.sky.400, width = 2, pane = 1)ta.obv
ta.obv() -> seriesOn-balance volume.
Keeps state per call site.
analysis "ta.obv" { overlay = true }
v = ta.obv()
render.line(v, "ta.obv", color = color.sky.400, width = 2, pane = 1)ta.pivot_high
ta.pivot_high(left = 10, right = 10, src = high) -> seriesPivot high value, reported right bars after the pivot (na elsewhere).
| Argument | Kind | Default | Notes |
|---|---|---|---|
left | int | 10 | |
right | int | 10 | |
src | series | high |
Keeps state per call site.
analysis "ta.pivot_high" { overlay = true }
v = ta.pivot_high()
render.line(v, "ta.pivot_high", color = color.sky.400, width = 2)ta.pivot_low
ta.pivot_low(left = 10, right = 10, src = low) -> seriesPivot low value, reported right bars after the pivot (na elsewhere).
| Argument | Kind | Default | Notes |
|---|---|---|---|
left | int | 10 | |
right | int | 10 | |
src | series | low |
Keeps state per call site.
analysis "ta.pivot_low" { overlay = true }
v = ta.pivot_low()
render.line(v, "ta.pivot_low", color = color.sky.400, width = 2)ta.ppo
ta.ppo(src, fast = 12, slow = 26, signal = 9) -> (line, signal, hist)Percentage price oscillator: (line, signal, hist).
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
fast | int | 12 | |
slow | int | 26 | |
signal | int | 9 |
Returns 3 values: line, signal, hist. Keeps state per call site.
analysis "ta.ppo" { overlay = true }
(v_line, v_signal, v_hist) = ta.ppo(close)
render.line(v_line, "line", color = color.sky.400, width = 2, pane = 1)
render.line(v_signal, "signal", color = color.amber.400, width = 2, pane = 1)
render.line(v_hist, "hist", color = color.violet.400, width = 2, pane = 1)ta.psar
ta.psar(start = 0.02, inc = 0.02, max = 0.2) -> seriesParabolic stop and reverse.
| Argument | Kind | Default | Notes |
|---|---|---|---|
start | num | 0.02 | |
inc | num | 0.02 | |
max | num | 0.2 |
Keeps state per call site.
analysis "ta.psar" { overlay = true }
v = ta.psar()
render.line(v, "ta.psar", color = color.sky.400, width = 2)ta.pvi
ta.pvi() -> seriesPositive volume index.
Keeps state per call site.
analysis "ta.pvi" { overlay = true }
v = ta.pvi()
render.line(v, "ta.pvi", color = color.sky.400, width = 2, pane = 1)ta.pvt
ta.pvt() -> seriesPrice-volume trend.
Keeps state per call site.
analysis "ta.pvt" { overlay = true }
v = ta.pvt()
render.line(v, "ta.pvt", color = color.sky.400, width = 2, pane = 1)ta.rising
ta.rising(src, len) -> boolTrue when src is above each of its last len values.
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | required |
Keeps state per call site.
analysis "ta.rising" { overlay = true }
v = ta.rising(close, 20)
render.mark(v, shape = shape.triangle_up, at = anchor.below_bar, color = color.sky.400, text = "")ta.rma
ta.rma(src, len) -> seriesWilder's running moving average (alpha = 1 / len).
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | required |
Keeps state per call site.
analysis "ta.rma" { overlay = true }
v = ta.rma(close, 20)
render.line(v, "ta.rma", color = color.sky.400, width = 2)ta.roc
ta.roc(src, len = 9) -> seriesRate of change in percent.
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | 9 |
Keeps state per call site.
analysis "ta.roc" { overlay = true }
v = ta.roc(close)
render.line(v, "ta.roc", color = color.sky.400, width = 2, pane = 1)ta.rsi
ta.rsi(src, len = 14) -> seriesRelative strength index (Wilder).
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | 14 |
Keeps state per call site.
analysis "ta.rsi" { overlay = true }
v = ta.rsi(close)
render.line(v, "ta.rsi", color = color.sky.400, width = 2, pane = 1)ta.sma
ta.sma(src, len) -> seriesSimple moving average of the last len values.
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | required |
Keeps state per call site.
analysis "ta.sma" { overlay = true }
v = ta.sma(close, 20)
render.line(v, "ta.sma", color = color.sky.400, width = 2)ta.stoch
ta.stoch(src = close, high_src = high, low_src = low, len = 14, smooth_k = 1, smooth_d = 3) -> (k, d)Stochastic oscillator: (k, d).
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | close | |
high_src | series | high | |
low_src | series | low | |
len | int | 14 | |
smooth_k | int | 1 | |
smooth_d | int | 3 |
Returns 2 values: k, d. Keeps state per call site.
analysis "ta.stoch" { overlay = true }
(v_k, v_d) = ta.stoch()
render.line(v_k, "k", color = color.sky.400, width = 2, pane = 1)
render.line(v_d, "d", color = color.amber.400, width = 2, pane = 1)ta.stoch_rsi
ta.stoch_rsi(src, len = 14, stoch_len = 14, smooth_k = 3, smooth_d = 3) -> (k, d)Stochastic of the RSI: (k, d).
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | 14 | |
stoch_len | int | 14 | |
smooth_k | int | 3 | |
smooth_d | int | 3 |
Returns 2 values: k, d. Keeps state per call site.
analysis "ta.stoch_rsi" { overlay = true }
(v_k, v_d) = ta.stoch_rsi(close)
render.line(v_k, "k", color = color.sky.400, width = 2, pane = 1)
render.line(v_d, "d", color = color.amber.400, width = 2, pane = 1)ta.super_smoother
ta.super_smoother(src, len = 10) -> seriesTwo-pole Butterworth low-pass filter.
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | 10 |
Keeps state per call site.
analysis "ta.super_smoother" { overlay = true }
v = ta.super_smoother(close)
render.line(v, "ta.super_smoother", color = color.sky.400, width = 2)ta.supertrend
ta.supertrend(factor = 3, len = 10) -> (line, direction)Supertrend: (line, direction) with direction 1 up, -1 down.
| Argument | Kind | Default | Notes |
|---|---|---|---|
factor | num | 3 | |
len | int | 10 |
Returns 2 values: line, direction. Keeps state per call site.
analysis "ta.supertrend" { overlay = true }
(v_line, v_direction) = ta.supertrend()
render.line(v_line, "line", color = color.sky.400, width = 2)
render.line(v_direction, "direction", color = color.amber.400, width = 2, pane = 1)ta.symmetric
ta.symmetric(src) -> seriesSymmetric 4-bar weighted average (1, 2, 2, 1).
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required |
Keeps state per call site.
analysis "ta.symmetric" { overlay = true }
v = ta.symmetric(close)
render.line(v, "ta.symmetric", color = color.sky.400, width = 2)ta.tema
ta.tema(src, len) -> seriesTriple exponential moving average.
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | required |
Keeps state per call site.
analysis "ta.tema" { overlay = true }
v = ta.tema(close, 20)
render.line(v, "ta.tema", color = color.sky.400, width = 2)ta.triple_smooth
ta.triple_smooth(src, len = 5, vfactor = 0.7) -> seriesSix-stage EMA smoother with volume factor (T3-type).
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | 5 | |
vfactor | num | 0.7 |
Keeps state per call site.
analysis "ta.triple_smooth" { overlay = true }
v = ta.triple_smooth(close)
render.line(v, "ta.triple_smooth", color = color.sky.400, width = 2)ta.trix
ta.trix(src, len = 18) -> seriesRate of change of a triple EMA, in percent.
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | 18 |
Keeps state per call site.
analysis "ta.trix" { overlay = true }
v = ta.trix(close)
render.line(v, "ta.trix", color = color.sky.400, width = 2, pane = 1)ta.true_range
ta.true_range() -> seriesTrue range of the bar.
analysis "ta.true_range" { overlay = true }
v = ta.true_range()
render.line(v, "ta.true_range", color = color.sky.400, width = 2, pane = 1)ta.tsi
ta.tsi(src, short = 13, long = 25, signal = 13) -> (tsi, signal)True strength index: (tsi, signal).
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
short | int | 13 | |
long | int | 25 | |
signal | int | 13 |
Returns 2 values: tsi, signal. Keeps state per call site.
analysis "ta.tsi" { overlay = true }
(v_tsi, v_signal) = ta.tsi(close)
render.line(v_tsi, "tsi", color = color.sky.400, width = 2, pane = 1)
render.line(v_signal, "signal", color = color.amber.400, width = 2, pane = 1)ta.ultimate
ta.ultimate(fast = 7, mid = 14, slow = 28) -> seriesUltimate oscillator over three windows.
| Argument | Kind | Default | Notes |
|---|---|---|---|
fast | int | 7 | |
mid | int | 14 | |
slow | int | 28 |
Keeps state per call site.
analysis "ta.ultimate" { overlay = true }
v = ta.ultimate()
render.line(v, "ta.ultimate", color = color.sky.400, width = 2, pane = 1)ta.value_at
ta.value_at(cond, src, occurrence = 0) -> seriesValue of src on the occurrence-th most recent bar where cond was true.
| Argument | Kind | Default | Notes |
|---|---|---|---|
cond | bool | required | |
src | series | required | |
occurrence | int | 0 |
Keeps state per call site.
analysis "ta.value_at" { overlay = true }
v = ta.value_at(close > ta.sma(close, 20), close)
render.line(v, "ta.value_at", color = color.sky.400, width = 2)ta.vidya
ta.vidya(src, len = 14, cmo_len = 9) -> seriesVariable index dynamic average (CMO-adaptive).
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | 14 | |
cmo_len | int | 9 |
Keeps state per call site.
analysis "ta.vidya" { overlay = true }
v = ta.vidya(close)
render.line(v, "ta.vidya", color = color.sky.400, width = 2)ta.volume_osc
ta.volume_osc(short = 5, long = 10) -> seriesVolume oscillator in percent.
| Argument | Kind | Default | Notes |
|---|---|---|---|
short | int | 5 | |
long | int | 10 |
Keeps state per call site.
analysis "ta.volume_osc" { overlay = true }
v = ta.volume_osc()
render.line(v, "ta.volume_osc", color = color.sky.400, width = 2, pane = 1)ta.volume_profile
ta.volume_profile(rows = 24, value_area = 0.7, period = session, bars = 0) -> (poc, vah, val)Volume profile levels: (poc, vah, val).
| Argument | Kind | Default | Notes |
|---|---|---|---|
rows | int | 24 | |
value_area | num | 0.7 | |
period | text | session | one of session, bars, all |
bars | int | 0 |
Returns 3 values: poc, vah, val. Keeps state per call site.
analysis "ta.volume_profile" { overlay = true }
(v_poc, v_vah, v_val) = ta.volume_profile()
render.line(v_poc, "poc", color = color.sky.400, width = 2)
render.line(v_vah, "vah", color = color.amber.400, width = 2)
render.line(v_val, "val", color = color.violet.400, width = 2, pane = 1)ta.vortex
ta.vortex(len = 14) -> (plus, minus)Vortex: (plus, minus).
| Argument | Kind | Default | Notes |
|---|---|---|---|
len | int | 14 |
Returns 2 values: plus, minus. Keeps state per call site.
analysis "ta.vortex" { overlay = true }
(v_plus, v_minus) = ta.vortex()
render.line(v_plus, "plus", color = color.sky.400, width = 2, pane = 1)
render.line(v_minus, "minus", color = color.amber.400, width = 2, pane = 1)ta.vwap
ta.vwap(src = bar.typical, period = day, mult = 1, reset = 0) -> (vwap, upper, lower)Anchored VWAP with deviation bands: (vwap, upper, lower).
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | bar.typical | |
period | text | day | one of day, week, month, none |
mult | num | 1 | |
reset | bool | 0 |
Returns 3 values: vwap, upper, lower. Keeps state per call site.
analysis "ta.vwap" { overlay = true }
(v_vwap, v_upper, v_lower) = ta.vwap()
render.line(v_vwap, "vwap", color = color.sky.400, width = 2)
render.line(v_upper, "upper", color = color.amber.400, width = 2)
render.line(v_lower, "lower", color = color.violet.400, width = 2)ta.vwma
ta.vwma(src, len, vol = volume) -> seriesVolume-weighted moving average.
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | required | |
vol | series | volume |
Keeps state per call site.
analysis "ta.vwma" { overlay = true }
v = ta.vwma(close, 20)
render.line(v, "ta.vwma", color = color.sky.400, width = 2)ta.williams
ta.williams(len = 14) -> seriesWilliams %R (-100 .. 0).
| Argument | Kind | Default | Notes |
|---|---|---|---|
len | int | 14 |
Keeps state per call site.
analysis "ta.williams" { overlay = true }
v = ta.williams()
render.line(v, "ta.williams", color = color.sky.400, width = 2, pane = 1)ta.williams_ad
ta.williams_ad() -> seriesWilliams accumulation / distribution.
Keeps state per call site.
analysis "ta.williams_ad" { overlay = true }
v = ta.williams_ad()
render.line(v, "ta.williams_ad", color = color.sky.400, width = 2, pane = 1)ta.wma
ta.wma(src, len) -> seriesLinearly weighted moving average.
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | required |
Keeps state per call site.
analysis "ta.wma" { overlay = true }
v = ta.wma(close, 20)
render.line(v, "ta.wma", color = color.sky.400, width = 2)ta.zero_lag
ta.zero_lag(src, len) -> seriesZero-lag EMA (de-lagged input).
| Argument | Kind | Default | Notes |
|---|---|---|---|
src | series | required | |
len | int | required |
Keeps state per call site.
analysis "ta.zero_lag" { overlay = true }
v = ta.zero_lag(close, 20)
render.line(v, "ta.zero_lag", color = color.sky.400, width = 2)ta.zigzag
ta.zigzag(deviation = 5, depth = 10) -> (price, offset, direction)Last confirmed swing: (price, bars back, direction).
| Argument | Kind | Default | Notes |
|---|---|---|---|
deviation | num | 5 | |
depth | int | 10 |
Returns 3 values: price, offset, direction. Keeps state per call site.
analysis "ta.zigzag" { overlay = true }
(v_price, v_offset, v_direction) = ta.zigzag()
render.line(v_price, "price", color = color.sky.400, width = 2)
render.line(v_offset, "offset", color = color.amber.400, width = 2, pane = 1)
render.line(v_direction, "direction", color = color.violet.400, width = 2, pane = 1)