Appearance
Samples
Ready-to-use indicator scripts demonstrating dxScript features.
Accumulation Distribution (ADL)
javascript
// https://devexperts.com/dxcharts/kb/docs/accumulationdistribution
function onTick() {
const moneyFlowMultiplier = (high[0] !== low[0]) ? ((close - low) - (high - close)) / (high - low) : 1.0;
const moneyFlowVolume = moneyFlowMultiplier * volume;
spline(ta.cum(moneyFlowVolume), {title: "adl", color: color.BLUE, overlay: false});
spline(0, {title: "zero", color: color.GRAY, overlay: false});
}Aroon
javascript
// https://devexperts.com/dxcharts/kb/docs/aroon-indicator
indicator({overlay: false});
const n = input("n", 25);
const overBought = input("overBought", 70);
const overSold = input("overSold", 30);
function onTick() {
const aroonUp = 100 * (n - ta.highestBar(high, n)) / n;
const aroonDown = 100 * (n - ta.lowestBar(low, n)) / n;
spline(aroonUp, {title: "aroonUp", color: color.GREEN});
spline(aroonDown, {title: "aroonDown", color: color.RED});
spline(overBought, {title: "overBought", color: color.GRAY});
spline(overSold, {title: "overSold", color: color.GRAY});
}Average True Range (ATR)
javascript
// https://devexperts.com/dxcharts/kb/docs/average-true-range-atr
const n = input("n", 14);
function onTick() {
spline(ta.atr(n), {title: "atr", color: color.BLUE, overlay: false});
}Awesome Oscillator (AO)
javascript
// https://devexperts.com/dxcharts/kb/docs/awesome-oscillator-ao
const fastLength = input("Fast Length", 5);
const slowLength = input("Slow Length", 34);
function onTick() {
const mid = hl2;
const ao = ta.sma(mid, fastLength) - ta.sma(mid, slowLength);
spline(ao, {title: "awesome", color: color.BLUE, overlay: false});
spline(0, {title: "zero", color: color.GRAY, overlay: false});
}Bollinger Bands (BB)
javascript
// https://devexperts.com/dxcharts/kb/docs/bollinger-bands
const n = input("n", 20);
const displace = input("displace", 0);
const numDevUp = input("numDevUp", 2);
const numDevDown = input("numDevDown", -2);
const typical = input.source("typical", close);
function onTick() {
const midLineValue = ta.sma(typical, n);
const sd = ta.stdev(typical, n);
spline(midLineValue, {title: "midLine", color: color.BLUE});
spline(midLineValue + numDevUp * sd, {title: "upBand", color: color.RED});
spline(midLineValue + numDevDown * sd, {title: "lowBand", color: color.GREEN});
}Chande Momentum Oscillator (CMO)
javascript
// https://devexperts.com/dxcharts/kb/docs/chandle-momentum-oscillator
indicator({overlay: false});
const n = input("n", 20);
function onTick() {
const diff = close - close[1];
const inc = ts(Math.max(diff, 0));
const dec = ts(Math.max(diff * -1, 0));
const hasFullWindow = !isNaN(inc[n - 1]) && !isNaN(dec[n - 1]);
const sumInc = ta.sum(inc, n);
const sumDec = ta.sum(dec, n);
const cmo = hasFullWindow ? (sumInc - sumDec) / (sumInc + sumDec) * 100 : NaN;
spline(cmo, {title: "CMO", color: color.BLUE});
spline(50, {title: "UpperLevel", color: color.RED});
spline(-50, {title: "LowerLevel", color: color.GREEN});
spline(0, {title: "Zero", color: color.GRAY});
}Commodity Channel Index (CCI)
javascript
// https://devexperts.com/dxcharts/kb/docs/commodity-channel-index
indicator({overlay: false});
const n = input("n", 14);
const overBought = input("overBought", 100);
const overSold = input("overSold", -100);
function onTick() {
const cci = ta.cci(hlc3, n)
spline(cci, {title: "cci", color: color.BLUE});
spline(overBought, {title: "OverBought", color: color.RED});
spline(overSold, {title: "OverSold", color: color.GREEN});
spline(0, {title: "Zero", color: color.GRAY});
}Directional Movement Index(DMI)
javascript
// https://devexperts.com/dxcharts/kb/docs/directional-movement-index
indicator({overlay: false});
const n = input("length", 20);
function onTick() {
const [dplus, dminus, adx] = ta.dmi(n);
spline(dplus, {title: "D+", color: color.GREEN});
spline(dminus, {title: "D-", color: color.RED});
spline(adx, {title: "ADX", color: color.BLUE});
}Double Exponential Moving Average
javascript
// https://devexperts.com/dxcharts/kb/docs/double-exponential-moving-average
const n = input("n", 9);
function onTick() {
const c = close;
const ema1 = ta.ema(c, n);
const ema2 = ta.ema(ema1, n);
spline(2 * ema1 - ema2, {title: "dema", color: color.BLUE});
}Exponential Moving Average (EMA)
javascript
// https://devexperts.com/dxcharts/kb/docs/exponential-moving-average-ema
const n = input("n", 9);
const price = input.source("price", close)
function onTick() {
spline(ta.ema(price, n), {title: "ema", color: color.BLUE});
}Linear Regression Curve
javascript
// https://devexperts.com/dxcharts/kb/docs/linear-regression-curve
const price = input.source("price", close);
const length = input("length", 20);
function onTick() {
const liRegression = ta.lreg(price, length);
spline(liRegression, {title: "LinearRegression", color: color.GREEN});
}Mass Index
javascript
// https://devexperts.com/dxcharts/kb/docs/mass-index
indicator({overlay: false});
const n = input("n", 9);
const sumLength = input("sumLength", 25);
const triggerLevel = input("triggerLevel", 26.5);
const setupLevel = input("setupLevel", 27);
function onTick() {
const diff = ts(high - low);
const emaDiff1 = ta.ema(diff, n);
const emaEmaDiff = ta.ema(emaDiff1, n);
const emaEmaCoef = ts(emaDiff1 / emaEmaDiff);
spline(ta.sum(emaEmaCoef, sumLength), {title: "mi", color: color.BLUE});
spline(triggerLevel, {title: "trigger", color: color.ORANGE});
spline(setupLevel, {title: "setup", color: color.RED});
}Momentum
javascript
// https://devexperts.com/dxcharts/kb/docs/momentum
const n = input("n", 12);
function onTick() {
const mom = close - close[n];
spline(mom, {title: "momentum", color: mom >= 0 ? color.GREEN : color.RED, overlay: false});
}Money Flow (MFI)
javascript
// https://devexperts.com/dxcharts/kb/docs/money-flow-index-mfi
indicator({overlay: false});
const n = input("n", 14);
const overBought = input("overBought", 80);
const overSold = input("overSold", 20);
function onTick() {
const tp = ts((high + low + close) / 3);
const tpPrev = ts((high[1] + low[1] + close[1]) / 3);
const positiveMoneyFlow = ts((tp > tpPrev) ? tp * volume : 0);
const negativeMoneyFlow = ts((tp < tpPrev) ? tp * volume : 0);
const sumPositiveMoneyFlow = ta.sum(positiveMoneyFlow, n);
const sumNegativeMoneyFlow = ta.sum(negativeMoneyFlow, n);
const mfidx = 100 - (100 / (1 + sumPositiveMoneyFlow / sumNegativeMoneyFlow));
spline(mfidx, {title: "MFidx", color: color.BLUE});
spline(overBought, {title: "OverBought", color: color.RED});
spline(overSold, {title: "OverSold", color: color.GREEN});
}Moving Average Convergence Divergence (MACD)
javascript
// https://devexperts.com/dxcharts/kb/docs/moving-average-convergence-divergence-macd
indicator({overlay: false});
const fastLen = input("fastLen", 12);
const slowLen = input("slowLen", 26);
const macdLen = input("macdLen", 9);
const avgFn = input.enum("averageType", "EXPONENTIAL", {
"EXPONENTIAL": ta.ema,
"SMA": ta.sma,
"WMA": ta.wma,
"WILDERS": ta.wima,
});
function onTick() {
const series = close;
const MACD = ts(ta.ema(series, fastLen) - ta.ema(series, slowLen));
const avg = avgFn(MACD, macdLen);
const diff = MACD - avg;
spline(MACD, {title: "MACD", color: color.BLUE});
spline(avg, {title: "avg", color: color.ORANGE});
spline(diff, {title: "diff", color: diff >= 0 ? color.GREEN : color.RED});
}On Balance Volume (OBV)
javascript
// https://devexperts.com/dxcharts/kb/docs/on-balance-volume
function onTick() {
const diff = close - close[1];
const v = (diff > 0) ? volume : ((diff < 0) ? -volume : 0);
spline(ta.cum(v), {title: "obv", color: color.BLUE, overlay: false});
}Pivot High
javascript
// https://devexperts.com/dxcharts/kb/docs/pivot-points
const left = input("left", 3);
const right = input("right", 2);
function onTick() {
let pivotH = ta.pivotHigh(close, left, right);
spline(pivotH, {title: "pivotHigh", color: color.RED, offset: -right});
}Pivot Low
javascript
// https://devexperts.com/dxcharts/kb/docs/pivot-points
const left = input("left", 3);
const right = input("right", 2);
function onTick() {
let pivotL = ta.pivotLow(close, left, right);
spline(pivotL, {title: "pivotLow", color: color.GREEN, offset: -right});
}Price Oscillator
javascript
// https://devexperts.com/dxcharts/kb/docs/price-oscillator
const fastLen = input("fastLen", 9);
const slowLen = input("slowLen", 18);
function onTick() {
const emaFast = ta.ema(close, fastLen);
const emaSlow = ta.ema(close, slowLen);
const ppo = emaFast - emaSlow;
spline(ppo, {title: "PriceOscillator", color: ppo >= 0 ? color.GREEN : color.RED, overlay: false});
spline(0, {title: "Zero", color: color.GRAY, overlay: false});
}Price Volume Trend (PVT)
javascript
// https://devexperts.com/dxcharts/kb/docs/price-and-volume-trend
function onTick() {
const prevClose = close[1];
const currentClose = close;
const v = (currentClose - prevClose) / prevClose * volume;
spline(ta.cum(v), {title: "pvt", color: color.BLUE, overlay: false});
}Rate of Change (ROC)
javascript
// https://devexperts.com/dxcharts/kb/docs/rate-of-change
const n = input("n", 12);
function onTick() {
const prevClose = close[n];
const currentClose = close;
const roc = ((currentClose - prevClose) / prevClose) * 100;
spline(roc, {title: "roc", color: roc >= 0 ? color.GREEN : color.RED, overlay: false});
spline(0, {title: "zero", color: color.GRAY, overlay: false});
}Relative Strength Index (RSI)
javascript
// https://devexperts.com/dxcharts/kb/docs/relative-strength-index-rsi
indicator({overlay: false})
const n = input("n", 14);
const overBought = input("overBought", 70);
const overSold = input("overSold", 30);
function onTick() {
spline(ta.rsi(close, n), {title: "RSI", color: color.BLUE});
spline(overBought, {title: "overBought", color: color.RED});
spline(overSold, {title: "overSold", color: color.GREEN});
}Relative Vigor Index (RVI)
javascript
// https://devexperts.com/dxcharts/kb/docs/relative-vigor-index
function onTick() {
const nominator = close - open;
const denominator = high - low;
const rvi = denominator !== 0 ? nominator / denominator: 0;
spline(rvi, {title: "rvi", color: rvi >= 0 ? color.GREEN : color.RED, overlay: false});
}Simple Moving Average
javascript
// https://devexperts.com/dxcharts/kb/docs/simple-moving-average-sma
const n = input("n", 9);
const price = input.source("price", open)
function onTick() {
spline(ta.sma(price, n), {title: "sma", color: color.BLUE});
}Smoothed Moving Average
javascript
// https://devexperts.com/dxcharts/kb/docs/smoothed-simple-moving-average
const n = input("n", 9);
function onTick() {
spline(ta.wima(close, n), {title: "SMMA", color: color.BLUE});
}SuperTrend
javascript
// https://devexperts.com/dxcharts/kb/docs/super-trend
const factor = input("factor", 3.0);
const atrPeriod = input("atrPeriod", 10);
function onTick() {
const [st, dir] = ta.supertrend(factor, atrPeriod);
spline(dir < 0 ? st : NaN, {title: "Up direction", color: color.GREEN, style: spline.STYLE_LINE_BREAK});
spline(dir > 0 ? st : NaN, {title: "Down direction", color: color.RED, style: spline.STYLE_LINE_BREAK});
spline(hl2, {title: "HL2 Line", color: color.GRAY})
}Triple Exponential Average (TRIX)
javascript
// https://devexperts.com/dxcharts/kb/docs/triple-exponential-average
const n = input("n", 9);
function trix(x, n) {
const ema1 = ta.ema(x, n);
const ema2 = ta.ema(ema1, n);
return ta.ema(ema2, n);
}
function onTick() {
const logPrice = ts(Math.log(close));
const logPrevPrice = ts(Math.log(close[1]));
const triple = trix(logPrice, n);
const triplePrev = trix(logPrevPrice, n);
const trixValue = (triple - triplePrev) * 10000;
spline(trixValue, {title: "TRIX", color: trixValue >= 0 ? color.GREEN : color.RED, overlay: false});
}Triple Exponential Moving Average (TEMA)
javascript
// https://devexperts.com/dxcharts/kb/docs/triple-exponential-moving-average
const n = input("n", 9);
function onTick() {
const series = close;
const ema1 = ta.ema(series, n);
const ema2 = ta.ema(ema1, n);
const ema3 = ta.ema(ema2, n);
spline(3 * ema1 - 3 * ema2 + ema3, {title: "tema", color: color.BLUE});
}True Strength Index (TSI)
javascript
// https://devexperts.com/dxcharts/kb/docs/true-strength-index
indicator({overlay: false});
const price = input.source("source", close)
const longLength = input("longLength", 25);
const shortLength = input("shortLength", 13);
const signalLength = input("signalLength", 8);
function doubleEma(x, longLength, shortLength) {
const ema1 = ta.ema(x, longLength);
return ta.ema(ema1, shortLength);
}
function onTick() {
const momentum = ts(price - price[1]);
const averageOfAverage = doubleEma(momentum, longLength, shortLength);
const absMomentum = ts(Math.abs(momentum));
const absEmaEma = doubleEma(absMomentum, longLength, shortLength);
const tsi = ts(averageOfAverage / absEmaEma * 100);
spline(tsi, {title: "tsi", color: color.BLUE});
spline(ta.ema(tsi, signalLength), {title: "signal", color: color.ORANGE});
spline(0, {title: "zero", color: color.GRAY});
}Weighted Moving Average
javascript
// https://devexperts.com/dxcharts/kb/docs/weighted-moving-average-wma
const n = input("n", 9);
const price = input("price", open);
function onTick() {
spline(ta.wma(price, n), {title: "wma", color: color.BLUE});
}Williams Alligator
javascript
// https://devexperts.com/dxcharts/kb/docs/williams-alligator
const jawLen = input("jawLen", 13);
const jawDisplace = input("jawDisplace", 8);
const teethLen = input("teethLen", 8);
const teethDisplace = input("teethDisplace", 5);
const lipsLen = input("lipsLen", 5);
const lipsDisplace = input("lipsDisplace", 3);
function onTick() {
const median = ts((high + low) / 2);
const lips = ta.wima(median, lipsLen);
const teeth = ta.wima(median, teethLen);
const jaw = ta.wima(median, jawLen);
spline(lips, {title: "Lips", color: color.LIME, offset: lipsDisplace});
spline(teeth, {title: "Teeth", color: color.RED, offset: teethDisplace});
spline(jaw, {title: "Jaw", color: color.BLUE, offset: jawDisplace});
}