PureBytes Links
Trading Reference Links
|
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);
------------------------ Yahoo! Groups Sponsor --------------------~-->
Get to your groups with one click. Know instantly when new email arrives
http://us.click.yahoo.com/.7bhrC/MGxNAA/yQLSAA/GHeqlB/TM
--------------------------------------------------------------------~->
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
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/amibroker/
<*> To unsubscribe from this group, send an email to:
amibroker-unsubscribe@xxxxxxxxxxxxxxx
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
|