PureBytes Links
Trading Reference Links
|
> I thought I'd try to use the ehlers cycle length idea to create a
> varying term oscillator .. so the idea is to find the number of
> periods you have to go back in time until you reach the condition
> where the sum of the closes or the sum of (high+low)/2 =0 ..
Assuming you're looking at price when you're doing this, the sum
of closes and the sum of (H+L)/2 will **NEVER** approach zero.
They are all positive values, so the sums will all be positive.
You need a "price" that oscillates around zero.
One option, as Gary Funck mentioned, is to detrend the data.
Another is to use the slope of price instead of price itself, but
you still might want to detrend the data to take out strong
moves. Otherwise a strong move will skew your cycle-length
calculations. (I.e. in a strong up-move the slope might stay
positive even though there are clear cycles in the uptrend.)
You could use LinearRegSlope(Price, LRSlen) as your price proxy.
That will cross above and below zero as the price moves up and
down. You could sum up the LRS values looking for a zero sum
like you were thinking, but it's probably simpler and more
accurate to look at zero-crossings.
So e.g. something like this (untested):
vars: LRS(0), LastCross(0), CycleLen(0);
LRS = LinearRegSlope(Price, LRSlen);
if LRS crosses over 0 then begin
CycleLen = CurrentBar - lastCross;
LastCross = CurrentBar;
end;
That gives you the "cycle length" of the most recent "cycle,"
where "cycle" is defined as the # of bars between places where
the price slope turns up. That will change dramatically from
cycle to cycle. If you want an average cycle length, you could
calculate an xaverage of the last N cycle lengths. You should
calculate this yourself, e.g. something like
AvgCycLen = alpha*CycleLen + (1-alpha)*AvgCycLen;
rather than using xaverage(), because xaverage will calculate the
average value over the last N *bars*, not the last N *cycles*.
alpha = 2 / (Xlen + 1) for xaverage(price, Xlen).
If you want to detrend your data before calculating the LRS, you
can do something as simple as subtracting two xaverages. E.g.
take a look at the oscillator you get with
LRS = LinearRegSlope(xaverage(Price,20)-xaverage(Price,15), 10);
BTW gaps will throw off this simple calculation. You'll have to
get more clever to avoid that.
Gary
|