PureBytes Links
Trading Reference Links
|
Hi all and Gary.
I was just wondering how people have successfully used something like this
in their trading. eg. Only trade when it is positive
Any comments?
Cameron
-----Original Message-----
From: Gary Fritz [mailto:fritz@xxxxxxxx]
Sent: Sunday, May 20, 2001 12:56 AM
To: Omegalist
Subject: Re: trendiness measures
> Could someone please briefly explain some measures of trendiness
> that I could use to decide which markets tend to trend more than
> others? ... Yes, I'm familiar with the ADX, the CMO, etc., but
> how are indicators like these used to give a summary of a market's
> trendiness over, say, a year?
Here's an indicator you can apply to a market to get a statistical
measure for its trendiness. It measures the movement of the market
over several sample lengths, and compares the result to what would be
expected of a "random walk." If the market has moved more than a
random walk, that indicates it tends to trend in that timeframe. If
it moves less, it's *anti*-trending -- that is, it reverses more than
would be expected of even a random walk.
Also note that you must apply it to a chart with AT LEAST 100 bars.
Longer charts will give you a more accurate result.
Here's an example of the indicator's output:
Trend data for SP M1:
10-minute bars
1926 samples
Bars StdDev Expected Actual
1 0.00260 1 1.00000
4 0.00492 2 1.89514
9 0.00761 3 2.93162
16 0.01032 4 3.97341
25 0.01313 5 5.05649
36 0.01590 6 6.12256
49 0.01835 7 7.06543
64 0.02091 8 8.05145
81 0.02333 9 8.98652
100 0.02536 10 9.76810
Since the "Actual" value for the sample lengths 25, 36, 49, and 64 is
slightly longer than the "Expected," that indicates the 10min SP
tends to trend (slightly) in this period when you look at 25-64 bar
moves. Longer and shorter moves tend NOT to trend, since their
"Actual" value is slightly LESS than the "Expected."
Here's an interesting result: this is a year of DAILY S&P:
Bars StdDev Expected Actual
1 0.01399 1 1.00000
4 0.02595 2 1.85540
9 0.03649 3 2.60854
16 0.04641 4 3.31798
25 0.05049 5 3.60985
36 0.05489 6 3.92427
49 0.05456 7 3.90075
64 0.05884 8 4.20646
81 0.06229 9 4.45316
100 0.06400 10 4.57589
Note that the S&P shows anti-trending (reversing) behavior at ALL
sample lengths, especially at longer lengths. This should come as no
surprise. The S&P is known as a reversing market -- that's why "buy
the dips" works. "Trending" means "if it's going up, it will tend to
keep going up, and vice versa." But in the S&P it usually works to
say "if it's going down, buy, because soon it will go back up."
That's ANTI-trending behavior.
By default the indicator DOES NOT PLOT ANYTHING. It prints its
results in the Print Log. Several people had trouble with that the
last time I posted an indicator like this. Remember to scroll down
to the bottom of the Print Log. :-) If you set the PlotSD input to
True, it will plot the SD's of several sample lengths, but I don't
think this is very useful.
Gary
{***************************************************************************
*
* Indicator: Trend StdDev
* Gary Fritz 1/7/99
* 7/20/99: Minor fixes and improvements
*
* Computes the standard deviation of Nlengs different lengths of
* price action: C-C[1], C-C[4], C-C[9], C-C[16], etc.
* In a pure Random Walk, the N^2-length sample will have a StdDev
* of N times the StdDev of the 1-length sample. If a particular
* price example shows larger-than-expected StdDevs it indicates
* a trending market; if the StdDevs are smaller than the expected
* values it indicates an anti-trending (reversing) market.
*
* Doesn't start recording data until 100 bars are available.
* Needs a lot of bars to compute valid data anyway, so just apply it
* to a long chart.
*
* StdDev values are printed to the Print Log.
*
* References:
* TASC Aug 95, Alex Saitta, Trending on a Historical Basis
* TASC Jan 92, E. Michael Poulos, Futures According to Trend Tendency
* (Thanks to Dave Chamness for the pointer & explanation!)
*
* Inputs: Price Price point used in SD calculations
* PlotStD If true, plots StdDev for 4 sample lengths
* (Probably not very useful)
*
***************************************************************************}
Inputs: Price(Close),
PlotStD(False); { Plot Std Devs of 9, 25, 49, 81-long
samples }
Vars: Nlengs(10); { Compute stddev for lengths 1:Nlengs^2 }
Vars: Nbars(0), Index(0), Barsback(0), Diff(0), Mean(0), Sigma(0), SD1(0);
Arrays: BarSum[20](0), BarSum2[20](0);
if (currentBar = 1) then begin
for Index = 1 to Nlengs begin
Nbars = 0;
BarSum[Index] = 0;
BarSum2[Index] = 0;
end;
end;
{ On each bar, add up sums & sum-of-squares,
for lookback lengths of Index^2 }
if (currentBar > Nlengs*Nlengs) then begin
Nbars = Nbars+1;
for Index = 1 to Nlengs begin
if Price[Index*Index] = 0
then Diff = 0
else Diff = (Price - Price[Index*Index]) / Price[Index*Index];
BarSum[Index] = BarSum[Index] + Diff;
BarSum2[Index] = BarSum2[Index] + Diff*Diff;
end;
end;
if LastBarOnChart and (Nbars > 1) then begin
print("Trend data for ",GetSymbolName,":");
if (DataCompression = 4) then print(" Monthly bars")
else if (DataCompression = 3) then print(" Weekly bars")
else if (DataCompression = 2) then print(" Daily bars")
else if (DataCompression = 1) then print(" ",BarInterval:3:0,"-minute
bars");
print(Nbars:5:0," samples");
{ An N^2 day test, with a perfect random walk, is expected to have
a standard deviation N times larger than a 1-day test.
So the "Expected" column is N, and the "Actual" column is
N^2-day_StdDev / 1-day_StdDev. }
print("Bars StdDev Expected Actual");
for Index = 1 to Nlengs begin
Mean = BarSum[Index] / Nbars;
Sigma = SquareRoot((BarSum2[Index]-Nbars*Mean*Mean)/(Nbars-1));
if (Index = 1) then SD1 = Sigma;
print(Index*Index:4:0," ",Sigma:2:5," ",Index:2:0,"
",Sigma/SD1:2:5);
end;
end;
{ If desired, plot 4 of the SD's. I'm not sure this is useful but
I thought somebody might like to see it. The repeated code is not
very pretty, but EL's limits made it a pain to do it via looping. }
if PlotStD and (Nbars > 10) then begin
Mean = BarSum[3] / Nbars;
Sigma = SquareRoot((BarSum2[3]-Nbars*Mean*Mean)/(Nbars-1));
plot1(Sigma, "StD3");
Mean = BarSum[5] / Nbars;
Sigma = SquareRoot((BarSum2[5]-Nbars*Mean*Mean)/(Nbars-1));
plot2(Sigma, "StD5");
Mean = BarSum[7] / Nbars;
Sigma = SquareRoot((BarSum2[7]-Nbars*Mean*Mean)/(Nbars-1));
plot3(Sigma, "StD7");
Mean = BarSum[9] / Nbars;
Sigma = SquareRoot((BarSum2[9]-Nbars*Mean*Mean)/(Nbars-1));
plot4(Sigma, "StD9");
end;
|