# MovingAverages: Moving Averages In TTR: Technical Trading Rules

## Description

Calculate various moving averages (MA) of a series.

## Usage

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19``` ```SMA(x, n = 10, ...) EMA(x, n = 10, wilder = FALSE, ratio = NULL, ...) DEMA(x, n = 10, v = 1, wilder = FALSE, ratio = NULL) WMA(x, n = 10, wts = 1:n, ...) EVWMA(price, volume, n = 10, ...) ZLEMA(x, n = 10, ratio = NULL, ...) VWAP(price, volume, n = 10, ...) VMA(x, w, ratio = 1, ...) HMA(x, n = 20, ...) ALMA(x, n = 9, offset = 0.85, sigma = 6, ...) ```

## Arguments

 `x` Price, volume, etc. series that is coercible to xts or matrix. `n` Number of periods to average over. Must be between 1 and `nrow(x)`, inclusive. `...` any other passthrough parameters `wilder` logical; if `TRUE`, a Welles Wilder type EMA will be calculated; see notes. `ratio` A smoothing/decay ratio. `ratio` overrides `wilder` in `EMA`, and provides additional smoothing in `VMA`. `v` The 'volume factor' (a number in [0,1]). See Notes. `wts` Vector of weights. Length of `wts` vector must equal the length of `x`, or `n` (the default). `price` Price series that is coercible to xts or matrix. `volume` Volume series that is coercible to xts or matrix, that corresponds to price series, or a constant. See Notes. `w` Vector of weights (in [0,1]) the same length as `x`. `offset` Percentile at which the center of the distribution should occur. `sigma` Standard deviation of the distribution.

## Details

`SMA` calculates the arithmetic mean of the series over the past `n` observations.

`EMA` calculates an exponentially-weighted mean, giving more weight to recent observations. See Warning section below.

`WMA` is similar to an EMA, but with linear weighting if the length of `wts` is equal to `n`. If the length of `wts` is equal to the length of `x`, the WMA will use the values of `wts` as weights.

`DEMA` is calculated as: ```DEMA = (1 + v) * EMA(x,n) - EMA(EMA(x,n),n) * v``` (with the corresponding `wilder` and `ratio` arguments).

`EVWMA` uses volume to define the period of the MA.

`ZLEMA` is similar to an EMA, as it gives more weight to recent observations, but attempts to remove lag by subtracting data prior to `(n-1)/2` periods (default) to minimize the cumulative effect.

`VWMA` and `VWAP` calculate the volume-weighted moving average price.

`VMA` calculate a variable-length moving average based on the absolute value of `w`. Higher (lower) values of `w` will cause `VMA` to react faster (slower).

`HMA` a WMA of the difference of two other WMAs, making it very reponsive.

`ALMA` inspired by Gaussian filters. Tends to put less weight on most recent observations, reducing tendency to overshoot.

## Value

A object of the same class as `x` or `price` or a vector (if `try.xts` fails) containing the columns:

SMA

Simple moving average.

EMA

Exponential moving average.

WMA

Weighted moving average.

DEMA

Double-exponential moving average.

EVWMA

Elastic, volume-weighted moving average.

ZLEMA

Zero lag exponential moving average.

VWMA

Volume-weighed moving average (same as `VWAP`).

VWAP

Volume-weighed average price (same as `VWMA`).

VWA

Variable-length moving average.

HMA

Hull moving average.

ALMA

Arnaud Legoux moving average.

## Warning

Some indicators (e.g. EMA, DEMA, EVWMA, etc.) are calculated using the indicators' own previous values, and are therefore unstable in the short-term. As the indicator receives more data, its output becomes more stable. See example below.

## Note

For `EMA`, `wilder=FALSE` (the default) uses an exponential smoothing ratio of `2/(n+1)`, while `wilder=TRUE` uses Welles Wilder's exponential smoothing ratio of `1/n`. The `EMA` result is initialized with the `n`-period sample average at period `n`. The exponential decay is applied from that point forward.

Since `WMA` can accept a weight vector of length equal to the length of `x` or of length `n`, it can be used as a regular weighted moving average (in the case `wts=1:n`) or as a moving average weighted by volume, another indicator, etc.

Since `DEMA` allows adjusting `v`, it is technically Tim Tillson's generalized DEMA (GD). When `v=1` (the default), the result is the standard DEMA. When `v=0`, the result is a regular EMA. All other values of `v` return the GD result. This function can be used to calculate Tillson's T3 indicator (see example below). Thanks to John Gavin for suggesting the generalization.

For `EVWMA`, if `volume` is a series, `n` should be chosen so the sum of the volume for `n` periods approximates the total number of outstanding shares for the security being averaged. If `volume` is a constant, it should represent the total number of outstanding shares for the security being averaged.

## Author(s)

Joshua Ulrich, Ivan Popivanov (HMA, ALMA)

## References

See `wilderSum`, which is used in calculating a Welles Wilder type MA.
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22``` ```data(ttrc) ema.20 <- EMA(ttrc[,"Close"], 20) sma.20 <- SMA(ttrc[,"Close"], 20) dema.20 <- DEMA(ttrc[,"Close"], 20) evwma.20 <- EVWMA(ttrc[,"Close"], ttrc[,"Volume"], 20) zlema.20 <- ZLEMA(ttrc[,"Close"], 20) alma <- ALMA(ttrc[,"Close"]) hma <- HMA(ttrc[,"Close"]) ## Example of Tim Tillson's T3 indicator T3 <- function(x, n=10, v=1) DEMA(DEMA(DEMA(x,n,v),n,v),n,v) t3 <- T3(ttrc[,"Close"]) ## Example of short-term instability of EMA ## (and other indicators mentioned above) x <- rnorm(100) tail( EMA(x[90:100],10), 1 ) tail( EMA(x[70:100],10), 1 ) tail( EMA(x[50:100],10), 1 ) tail( EMA(x[30:100],10), 1 ) tail( EMA(x[10:100],10), 1 ) tail( EMA(x[ 1:100],10), 1 ) ```