# Moving Averages

ICE Data Services -

sma(), ema(), smma(), wma(), vwma() Built-in Study Functions

A Moving Average is an indicator that shows the average value of a security's price over a period of time. When calculating a moving average, a mathematical analysis of the security's average value over a predetermined time period is made. As the security's price changes, its average price moves up or down.

Syntax

sma(  nLength [, Series | sym() | inv() ][, nBarIndex ] )
ema(  nLength [, Series | sym() | inv() ][, nBarIndex ] )
smma(  nLength [, Series | sym() | inv() ][, nBarIndex ] )
wma (  nLength [, Series | sym() | inv() ][, nBarIndex ] )
vwma ( nLength [, Series | sym() | inv() ][, nBarIndex ] )

Parameters

 Parameter: Description: Default: nLength Required. Number of periods to use for calculation. n/a Series orsym() orinv() [Optional]   Series Object or function of sym() or inv() to determine symbol/interval source for the study. Base sym/inv nBarIndex [Optional]   Bar index of series to retrieve . n/a

Return Value(s)

Returns a Series Object when nBarIndex is not specified.

Returns a single value when nBarIndex is specified.

Notes

Functions sma(), ema(), wma(), vwma() are only available in versions 7.9 or later.
Function smma() is only available in versions 12.1 or later.

Code Examples

Single Line Indicator:
```function main() {
return new Array(sma(10), ema(10), smma(10), wma(10), vwma(10));
}```

Single Line Study-on-Study Indicator:
```function main() {
return new Array(
sma(10, hl2()),
ema(10, hl2()),
smma(10, hl2()),
wma(10, hl2()),
vwma(10, hl2())
);
}```

Retrieve single values:

```function main() {
var nValue_0 = ema(10, 0); // Current Bar Index
var nValue_1 = ema(10, -1); // Prior Bar Index
return new Array(nValue_0, nValue_1);
}```

Initialize Series Objects:
```//global Series Object variables
var xStudy1 = null;
var xStudy2 = null;
var xStudy3 = null;
function main() {
if (xStudy1 == null) xStudy1 = sma(10);
if (xStudy2 == null) xStudy2 = ema(10);
if (xStudy3 == null) xStudy3 = wma(10); // retrieve single values for conditional statements
var nValue1_0 = xStudy1.getValue(0); // Current Bar Index value
var nValue2_0 = xStudy2.getValue(0); // Current Bar Index value
var nValue3_0 = xStudy3.getValue(0); // Current Bar Index value
var nValue1_1 = xStudy1.getValue(-1); // Prior Bar Index value
// Plot Current Bar Index Value
return new Array(nValue1_0, nValue2_0, nValue3_0);
}```

Initialize a Series Object based on an external interval:
```// global Series Object variables
var xStudy1 = null;
var xStudy2 = null;
var xStudy3 = null;
var bInit = false; // Initialization flag
function main() {
if (bInit == false) {
xStudy1 = sma(10, inv(20)); // 20-min interval
xStudy2 = ema(10, inv(20)); // 20-min interval
xStudy3 = wma(10, inv(20)); // 20-min interval
bInit = true;
} // retrieve single values for conditional statements
var nValue1_0 = xStudy1.getValue(0); // Current Bar Index value
var nValue1_1 = xStudy1.getValue(-1); // Prior Bar Index value
// Synchronized Series plot
return new Array(getSeries(xStudy1), getSeries(xStudy2), getSeries(xStudy3));
}```

Initialize a Series Object based on an external symbol and interval:
```// global Series Object variables
var xStudy1 = null;
var xStudy2 = null;
var xStudy3 = null;
var bInit = false; // Initialization flag
function main() {
if (bInit == false) {
xStudy1 = sma(10, sym("IBM,20")); // IBM 20-min interval
xStudy2 = ema(10, sym("IBM,20")); // IBM 20-min interval
xStudy3 = wma(10, sym("IBM,20")); // IBM 20-min interval
bInit = true;
} // retrieve single values for conditional statements
var nValue1_0 = xStudy1.getValue(0); // Current Bar Index value
var nValue1_1 = xStudy1.getValue(-1); // Prior Bar Index value
// Synchronized Series plot
return new Array(getSeries(xStudy1), getSeries(xStudy2), getSeries(xStudy3));
}```