Hi Dan,
Try using a Hull MA -- it's a lot faster.
Peace and Justice --- Patrick
----- Original Message -----
Sent: Sunday, May 21, 2006 8:42 PM
Subject: [amibroker] Exponential Standard
Deviation (EStDev)
Trying to figure out volatility, I had an interesting diversion
into what StDev is doing, and how I might make something more useful.
Since StDev uses a simple moving average in its calculation, you'll
see a laggy bounce effect from sudden price changes. That is the way
it is defined, and that is fine, but not what I wanted. So I swapped
out the MA for EMA, and I like the result.
dan
/*
Exponential Standard Deviation by Daniel LaLiberte
liberte@xxxxxxxxxxxxx
Same calculation as Standard Deviation,
but using an EMA instead of MA. The effect is to smooth out the
laggy bounce from sudden changes.
For comparision, I tried to reproduce
the built-in StDev function, and discovered that it is using a rapid
calculation method instead. The RapidStDev function defined below appears
to work just like StDev, although there my be some rounding errors, or
perhaps a different method is actually used. It would be good for
this to be documented.
The standard (non-rapid) form of the calculation
is described at: http://stockcharts.com/education/IndicatorAnalysis/indic_standardDev.h tml Wikipedia
tells all: http://en.wikipedia.org/wiki/Standard_deviation Also
see comparison of different methods for AmiBroker: http://www.purebytes.com/archives/amibroker/2005/msg01812.html
Using
the standard form of the standard deviation, I modified it to use an
exponential moving average instead of the normal MA. This is EStDev.
I also modified RapidStDev to create an expontial form, RapidEStDev.
Curiously, the two functions perform identically, for large enough
n. */
function EStDev(base, n) { // Calculate the simple
average (mean) of the closing price. // Use EMA instead, to de-bounce the
spikes // m = MA(base, n); //
orignial m = EMA(base, n); //
exponential
// subtract the average closing price from the actual
closing price. d = m - base;
//
Square each period's deviation. d2 = d *
d;
// Sum the squared deviations. // Divide that by the number of
periods. // sd2 = MA(d2, n); //
original sd2 = EMA(d2, n); //
exponential
// The StDev is then equal to the square root of that
number. sd =
sqrt(sd2); return sd;
}
function RapidStDev(base,
n) { m = MA(base,
n); return Sqrt( (Sum(base * base, n) - n *
m * m ) / (n - 1) ); }
function RapidEStDev(base,
n) { m = EMA(base,
n); return Sqrt( (n * EMA(base * base, n) -
n * m * m ) / (n - 1) ); }
pds = Param("pds", 200, 2, 500,
1);
// These two are the same: Plot(EStDev(Close, pds), "EStDev",
colorBlack); Plot(RapidEStDev(Close, pds), "RapidEStDev",
colorRed);
// These two are the same: Plot(StDev(Close, pds),
"StDev", colorBlue); Plot(RapidStDev(Close, pds), "RapidStDev",
colorGold);
Please note that this group is for discussion between users only.
To get support from AmiBroker please send an e-mail directly to
SUPPORT {at} amibroker.com
For other support material please check also:
http://www.amibroker.com/support.html
SPONSORED LINKS
YAHOO! GROUPS LINKS
|