Skip to main content
Reference8 min read
Trend-following indicators that smooth price data over time. Moving averages help identify trend direction, support/resistance levels, and generate trading signals through crossovers.

Overview

FunctionDescription
sma()Simple Moving Average - equal weight to all data points
ema()Exponential Moving Average - more weight to recent prices
rma()Running Moving Average - Wilder’s smoothing method

sma()

Simple Moving Average - arithmetic mean of prices over a specified period.

Signature

sma(source: TimeSeries, period?: number = 12, priceIndex?: number = 1): number

Parameters

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

Example

//@version=2

define(title="SMA Indicator", position="onchart", axis=false);

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 - weighted average giving more importance to recent prices.

Signature

ema(source: TimeSeries, period?: number = 12, priceIndex?: number = 1): number

Parameters

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

Example

//@version=2

define(title="EMA Indicator", position="onchart", axis=false);

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 (Wilder’s smoothing) - modified EMA using alpha = 1/period.

Signature

rma(source: TimeSeries, period?: number = 12, priceIndex?: number = 1): number

Parameters

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

Example

//@version=2

define(title="RMA Indicator", position="onchart", axis=false);

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"]);

Comparison

TypeSpeedSmoothnessBest For
SMASlowHighSupport/resistance, ranging markets
EMAFastMediumTrending markets, quick signals
RMAMediumHighRSI calculations, smooth trends

Complete Example: Multi-MA Strategy

//@version=2

define(title="Multi-MA Strategy", position="onchart", axis=false, customTitle="($fastPeriod, $slowPeriod)");

var fastPeriod = input(name="fastPeriod", type="number", defaultValue=10, label="Fast Period");
var slowPeriod = input(name="slowPeriod", type="number", defaultValue=20, label="Slow Period");

timeseries ohlcvData = ohlcv(symbol=currentSymbol, exchange=currentExchange);

// Calculate EMAs
var fastEMA = ema(source=ohlcvData.close, period=fastPeriod);
var slowEMA = ema(source=ohlcvData.close, period=slowPeriod);

// Detect crossover
var bullish = fastEMA > slowEMA;
var colorIndex = bullish ? 0 : 1;

// Plot
plotLine(value=fastEMA, width=2, colors=["green", "red"], colorIndex=colorIndex, label=["Fast EMA"], desc=["Fast Exponential Moving Average"]);
plotLine(value=slowEMA, width=2, colors=["gray"], label=["Slow EMA"], desc=["Slow Exponential Moving Average"]);

Tips

Period Selection

Common periods for different timeframes:
  • 20 - Short-term trading
  • 50 - Medium-term trends
  • 200 - Long-term trends

EMA vs SMA

  • Use EMA for faster signals in trending markets
  • Use 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 signal confirmation. Never rely on MA alone.

False Signals

Moving averages lag price action. In choppy markets, use additional filters to reduce whipsaws and false breakouts.