Calculate various moving averages (MA) of a series.
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, ...)
Price, volume, etc. series that is coercible to xts or matrix.
Number of periods to average over. Must be between 1 and
any other passthrough parameters
A smoothing/decay ratio.
The 'volume factor' (a number in [0,1]). See Notes.
Vector of weights. Length of
Price series that is coercible to xts or matrix.
Volume series that is coercible to xts or matrix, that corresponds to price series, or a constant. See Notes.
Vector of weights (in [0,1]) the same length as
Percentile at which the center of the distribution should occur.
Standard deviation of the distribution.
SMA calculates the arithmetic mean of the series over the past
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
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
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.
VWAP calculate the volume-weighted moving average
VMA calculate a variable-length moving average based on the absolute
w. Higher (lower) values of
w will cause
to react faster (slower).
HMA a WMA of the difference of two other WMAs, making it very
ALMA inspired by Gaussian filters. Tends to put less weight on most
recent observations, reducing tendency to overshoot.
A object of the same class as
price or a vector
try.xts fails) containing the columns:
Simple moving average.
Exponential moving average.
Weighted moving average.
Double-exponential moving average.
Elastic, volume-weighted moving average.
Zero lag exponential moving average.
Volume-weighed moving average (same as
Volume-weighed average price (same as
Variable-length moving average.
Hull moving average.
Arnaud Legoux moving average.
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.
wilder=FALSE (the default) uses an exponential
smoothing ratio of
wilder=TRUE uses Welles
Wilder's exponential smoothing ratio of
is initialized with the
n-period sample average at period
The exponential decay is applied from that point forward.
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.
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
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.
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.
Joshua Ulrich, Ivan Popivanov (HMA, ALMA)
The following site(s) were used to code/document this
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 )
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.