Functions

Moving Averages

Trend-following indicators that smooth price data — SMA, EMA, and RMA help identify direction, support/resistance, and crossover signals.

Overview

Trend-following indicators smooth price data over time. Moving averages help identify trend direction, support/resistance levels, and trading signals through crossovers and price interactions.

TypeDescription
Simple Moving Average (SMA)Arithmetic mean of prices over a specified period. Equal weight is given to every data point.
Exponential Moving Average (EMA)Weighted average that gives more importance to recent prices, making it more responsive to price changes.
Running Moving Average (RMA)Modified exponential moving average using alpha = 1 / period, also known as Wilder's smoothing method.
FunctionDescription
smaSimple Moving Average helper function
emaExponential Moving Average helper function
rmaRunning Moving Average helper function

sma - Simple Moving Average

sma(source: TimeSeries, period?: number = 12, priceIndex?: number = 1): number — Simple Moving Average.

ParameterTypeDescription
sourceTimeSeriesSource data series
periodnumberNumber of periods for calculation (default: 12)
priceIndexnumberIndex of price data (default: 1)

Returns: number — moving average value at the current bar.

//@version=2

timeseries trade = ohlcv(symbol=currentSymbol, exchange=currentExchange);
var data = sma(source=trade.close, period=20);
plotLine(value=data, width=2, colors=["green"], label=["SMA 20"], desc=["20-period Simple Moving Average"]);

ema - Exponential Moving Average

ema(source: TimeSeries, period?: number = 12, priceIndex?: number = 1): number — Exponential Moving Average.

ParameterTypeDescription
sourceTimeSeriesSource data series
periodnumberNumber of periods for calculation (default: 12)
priceIndexnumberIndex of price data (default: 1)

Returns: number — exponential moving average value at the current bar.

//@version=2

timeseries trade = ohlcv(symbol=currentSymbol, exchange=currentExchange);
var data = ema(source=trade.close, period=20);
plotLine(value=data, width=2, colors=["orange"], label=["EMA 20"], desc=["20-period Exponential Moving Average"]);

rma - Running Moving Average

rma(source: TimeSeries, period?: number = 12, priceIndex?: number = 1): number — Running Moving Average using Wilder's smoothing method.

ParameterTypeDescription
sourceTimeSeriesSource data series
periodnumberNumber of periods for calculation (default: 12)
priceIndexnumberIndex of price data (default: 1)

Returns: number — running moving average value at the current bar.

//@version=2

timeseries trade = ohlcv(symbol=currentSymbol, exchange=currentExchange);
var data = rma(source=trade.close, period=20);
plotLine(value=data, width=2, colors=["blue"], label=["RMA 20"], desc=["20-period Running Moving Average"]);

Best Practices

Period Selection
Common periods: 20 for short-term, 50 for medium-term, and 200 for long-term. Adjust based on trading timeframe and market volatility.
EMA vs SMA
Use EMA for faster signals in trending markets and SMA for smoother signals in ranging markets. EMA reacts quicker to price changes.
Confirmation
Combine moving averages with volume, RSI, or other indicators for stronger confirmation. Do not rely on a moving average alone.
False Signals
Moving averages lag price action. In choppy markets, use additional filters to reduce whipsaws and false breakouts.