R: Moving Averages

SMA {TTR} | R Documentation

## Moving Averages

### Description

Calculate various moving averages (MA) of a series.

### Usage

    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.
`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.
`...` | any other passthrough parameters

### 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`.

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

The following site(s) were used to code/document this indicator:
http://www.fmlabs.com/reference/ExpMA.htm
http://www.fmlabs.com/reference/WeightedMA.htm
http://www.fmlabs.com/reference/DEMA.htm
http://www.fmlabs.com/reference/T3.htm
http://linnsoft.com/tour/techind/evwma.htm
http://www.fmlabs.com/reference/ZeroLagExpMA.htm
http://www.fmlabs.com/reference/VIDYA.htm
http://www.traderslog.com/hullmovingaverage
http://www.arnaudlegoux.com/

### See Also

See `wilderSum`, which is used in calculating a Welles Wilder type MA.

### Examples

    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 )

[Package TTR version 0.23-1 Index]