[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[amibroker] AFL gurus-John Ehlers-Market Mode Strategies.



PureBytes Links

Trading Reference Links

I am trying to get this code converted to AFL are there any gurus 
who might be able to do the conversion???

MARKET MODE STRATEGIES

By

John Ehlers 



INTRODUCTION
Haven't you noticed that oscillators don't work in trending markets? 
Ever wonder why? Sometimes it is best to step back and take a 
philosophical look at why we do what we do. Some time back I 
discovered a general description of Random Walks1. As a result, I 
concluded that the market could be modeled as a combination of a 
Trend Mode and a Cycle Mode. This is not earth-shattering, nor at 
odds with some of the more modern observations of Chaos Theory. What 
is helpful is that the generalized partial differential equations 
that apply to these modes point directly to technical analysis 
indicators that can exploit them.
I earlier promised you to show you what works. In this article I 
disclose two indicators you can program for each of the modes – and 
in fact help you identify the modes themselves. Just to save you 
time and disappointment, I thought it might be instructive to begin 
this article with a general discussion of momentum functions. 



MOMENTUM FUNCTIONS
I can't begin to tell you how many hours I have wasted trying to get 
any indicator to give a signal just one bar sooner. Perhaps this 
brief description of momentum functions might spare you a similar 
fate.

With reference to Figure 1, consider an input function as a ramp 
that starts at t=0. Momentum is the rate of change. So, in the 
second line, the rate of change of the ramp is shown as a step 
function. That is, to the left of t=0 the rate of change is zero. At 
t=0 the rate of change of the ramp jumps up to a constant value. 
Next, examining the momentum of the step function, we conclude that 
it is an impulse. An impulse can be pictured as a rectangle that is 
infinitely high and has zero width in such a way that the area 
within the rectangle is unity. The momentum of the step function 
initially is zero. At t=0 the step function jumps to a new value so 
that the rate of change is infinite. Also, at t=0 the step function 
has a zero rate of change at the new level to complete the back side 
of the rectangle, forming the impulse. The momentum of an impulse, 
seen in the bottom segment of Figure 1, is called a jerk. A jerk is 
a double impulse. The rate of change of the impulse consists of 
traversing up the front of the rectangle and then back down the back 
side of the rectangle. There are two truths about momentum functions 
that can be gleaned from the sequence shown in Figure 1. 

Momentum can never precede the driving function. 
Momentum is always more disjoint, or irregular, than the original 
function. 
The first of these truths is blindingly obvious when viewed at the 
theoretical level. However, the obvious gets subordinated when you 
are searching for an indicator that is just a little bit better. The 
second truth is visible in momentum indicators as noisy signals. 
Momentum indicators are almost always combined with smoothing 
functions to reduce the noise that has been created. The lag 
introduced by this smoothing tends to mitigate the advantages of 
getting an early signal from the momentum.

Rather than accept the limitations of momentum functions or the lag 
of moving averages, there is perhaps a better way to apply signal 
analysis to the market activity. One such approach is to define 
modes of the market and then use a strategy of applying the best 
analysis technique for each mode after the mode has been identified. 
Let's take a philosophical look at what those modes might be.  



RANDOM WALK

Randomness in the market results from a large number of traders 
exercising their prerogatives with different motivations of profit, 
loss, greed, fear, and entertainment; it is complicated by different 
perspectives of time. Market movement can therefore be analyzed in 
terms of random variables. One such analysis is the random walk. 
Imagine an atom of oxygen in a plastic box containing nothing but 
air. The path of this atom is erratic as it bounces from one 
molecule to another. Brownian motion is used to describe the way the 
atom moves. Its path is described as a three dimensional random 
walk. Following such a random walk, the position of that atom is 
just as likely to be at any one location in that box as at any 
other. If the market activity were purely random it would be 
perfectly efficient and any attempt at technical analysis would be 
futile. While some hold this to be true, it is easy to refute on the 
basis of the obvious success of some technical analysts.

Another form of the random walk is more appropriate for describing 
the motion of the market. This form is a two dimensional random 
walk, called the "drunkard's walk." The two dimensional structure is 
appropriate for the market because the prices can only go up or down 
in one dimension. The other dimension, time, can only move forward. 
These are similar to the way a drunkard's walk is described. 



DIFFUSION EQUATION

The drunkard's walk is formulated by allowing the "drunk" to step to 
either the right or left randomly with each step forward. The ensure 
randomness, the decision to step right or left is made on the 
outcome of a coin toss from a fair coin. If the coin turns up heads, 
the drunk steps to the right. If the coin turns up tails, the drunk 
steps to the left. Viewed from above, we see the random path the 
drunk has followed. We can write a differential equation for this 
path because the rate change of time is related to the rate change 
of position in two dimensions. The result is a relatively famous 
differential equation (among mathematicians, at least) called the 
diffusion equation. The equation describes many physical phenomena 
such as heat traveling up a silver spoon when it is placed in a hot 
cup of coffee or the shape of the plume of smoke as it leaves a 
smokestack.

Picture this plume of smoke in a gentle breeze. The plume is roughly 
conical, widening with greater distance from the smokestack. The 
plume is bent in the direction of the breeze. The widening of the 
plume is, more or less, the description of the probability of the 
location of a single particle of smoke. There are clearly no cycles 
involved. I think the plume of smoke is generally descriptive of 
predicting the market action in a trend. 

 

TELEGRAPHERS EQUATION

If we reformulate the drunkard's walk problem so that the outcome of 
the coin flip determines whether the drunk should change his 
direction or keep going the same direction of the previous step, the 
random variable become momentum rather than position. In this case, 
the solution to the random walk problem is an equally famous 
differential equation called the telegrapher's equation. In addition 
to describing waves on a telegraph wire, the equation also describes 
the meandering of a river. The significance is that short term 
coherence often exists in the drunkard's path. 

This makes sense. If we are in a short meander of a river we can 
pretty well predict how that meander is going to behave. On the 
other hand, if we were to overlay all the meanders of a given river 
as in a multiple exposure photograph, they would all be different. 

Just as the river has a short term coherency but is random over the 
longer span, I feel that the market has short term cycles but is 
generally efficient over the longer time span. By measuring the 
short term market cycles we can use their predictive nature to our 
advantage. However, we must realize they come and go in the longer 
term. 



Market Modes

Arguments that cycles exist in the market arise not only from 
fundamental considerations or direct measurement but also on 
philosophical grounds related to physical phenomena. The natural 
response to any physical disturbance is harmonic motion. If you 
pluck a guitar string, the string vibrates with cycles you can hear. 
By analogy, we have every right to expect that the market will 
respond to disturbances with cyclic motion. This expectation is 
reinforced with random walk theory that suggests there are times the 
market prices can be described by the diffusion equation and other 
times when the market prices can be described by the telegrapher's 
equations.

>From this philosophical background it is a small jump to conclude 
that the market can be modeled as a trend mode plus a cycle mode. We 
can measure the cycles in the market. Therefore, if we subtract the 
cycle from the composite waveform the residual must be the 
instantaneous Trendline. Having a mechanism to separate the trend 
from the cycle we can establish trading indicators for each mode. 



Instantaneous Trendline
The Instantaneous Trendline is created by removing the dominant 
cycle from the price information. We must first ascertain the period 
of the dominant cycle. We demonstrated a way to do this in the first 
article of this series2. Knowing the dominant cycle period, it is 
surprisingly easy to completely remove it by filtering. A simple 
average taken over the period of the dominant cycle has as many 
sample points above the average as below it, with the result that 
the dominant cycle component is removed at the output of the filter. 
The filtered residual is the Instantaneous Trendline. The period of 
the dominant cycle often changes as we move across the chart, so the 
period of the simple average must change accordingly. The output of 
this dynamically adjusted simple average is similar to a simple 
moving average. However, in this case, the lag of this Instantaneous 
Trendline will always be half the period of the dominant cycle.

The EasyLanguage code to compute the Instantaneous Trendline is 
given in SideBar 1. You can save a lot of keystrokes if you cut and 
paste the dominant cycle period calculation from our first article 
of this series and simply add the code to compute and plot the 
simple average over the dominant cycle period. 

Trading strategy using the Instantaneous Trendline is easy to 
establish. In a cycle mode the price will alternate back and forth 
across the Instantaneous Trendline every half cycle. However, in a 
Trend Mode the price will be on one side of the Instantaneous 
Trendline for an extended period. Don't trade the trend until the 
price has crossed the Instantaneous Trendline more than the half 
dominant cycle (which you have measured) in history. Stop trading 
the Trend when the price again crosses the Instantaneous Trendline. 
In future articles we will develop filters to engage these rules 
with greater precision. 



************************************ SideBar 1 
**************************************************

EasyLanguage Code to Plot Instantaneous Trendline 



Inputs: Price((H+L)/2); 



Vars:  Imult (.635),

Qmult (.338),

InPhase(0),

Quadrature(0),

Phase(0),

DeltaPhase(0),

count(0),

InstPeriod(0),

Period(0),

Trendline(0); 



If CurrentBar > 5 then begin 



{Detrend Price}

Value3 = Price - Price[7]; 



{Compute InPhase and Quadrature components}

 Inphase = 1.25*(Value3[4] - Imult*Value3[2]) + Imult*InPhase[3];

Quadrature = Value3[2] - Qmult*Value3 + Qmult*Quadrature[2]; 



{Use ArcTangent to compute the current phase}

If AbsValue(InPhase +InPhase[1]) > 0 then Phase = ArcTangent(AbsValue
((Quadrature+Quadrature[1]) / (InPhase+InPhase[1]))); 



{Resolve the ArcTangent ambiguity}

If InPhase < 0 and Quadrature > 0 then Phase = 180 - Phase;

If InPhase < 0 and Quadrature < 0 then Phase = 180 + Phase;

If InPhase > 0 and Quadrature < 0 then Phase = 360 - Phase; 



{Compute a differential phase, resolve phase wraparound, and limit 
delta phase errors}

DeltaPhase = Phase[1] - Phase;

If Phase[1] < 90 and Phase > 270 then DeltaPhase = 360 + Phase[1] - 
Phase;

If DeltaPhase < 1 then DeltaPhase = 1;

If DeltaPhase > 60 then Deltaphase = 60; 



{Sum DeltaPhases to reach 360 degrees. The sum is the instantaneous 
period.}

InstPeriod = 0;

Value4 = 0;

For count = 0 to 40 begin

Value4 = Value4 + DeltaPhase[count];

If Value4 > 360 and InstPeriod = 0 then begin

InstPeriod = count;

end;

end; 



{Resolve Instantaneous Period errors and smooth}

If InstPeriod = 0 then InstPeriod = InstPeriod[1];

Value5 = .25*(InstPeriod) + .75*Period[1]; 



{Compute Trendline as simple average over the measured dominant 
cycle period}

Period = IntPortion(Value5);

Trendline = 0;

For count = 0 to Period - 1 begin

Trendline = Trendline + Price[count];

end;

If Period > 0 then Trendline = Trendline / Period; 



Plot1(Trendline, "TR");

end; 



*********************************************************************
******************************  



Cycle Mode Trading
Since Moving Averages, including the Instantaneous Trendline, lag 
the price action, a different technique is required to effectively 
trade the cycle mode. The usual approach is to use an oscillator 
such as a RSI or Stochastic in such trading conditions. Since we 
know the period of the dominant cycle3 there is a superior approach –
 the Sinewave Indicator. The Sinewave Indicator was first described 
in 19964, and now we have a means to dynamically adjust it to the 
measured dominant cycle. The Sinewave Indicator is obtained by 
taking the Sine of the measured phase of the dominant cycle. 



We measure the phase of the dominant cycle by establishing the 
average lengths of the two orthogonal components. This is done by 
correlating the data over one fully cycle period against the sine 
and cosine functions. Once the two orthogonal components are 
measured, the phase angle is established by taking the tangent of 
their ratio. A simple test is to assume the price function is a 
perfect sinewave, or Sin(q). The vertical component would be Sin2(q) 
= .5*(1-Cos(2q)) taken over the full cycle. The Cos(2q) term 
averages to zero, with the result that the correlation has an 
amplitude of Pi. The horizontal component is Sin(q)*Cos(q) = .5*Sin
(2q). This term averages to zero over the full cycle, with the 
result that there is no horizontal component. The ratio of the two 
components goes to infinity because we are dividing by zero, and the 
arctangent is therefore 90 degrees. This means the arrow is pointing 
straight up, right at the peak of the sinewave.

One additional step in our calculations is required to clear the 
ambiguity of the tangent function. In the first quadrant both the 
sine and cosine have positive polarity. In the second quadrant the 
sine is positive and the cosine is negative. In the third quadrant 
both are negative. Finally, in the fourth quadrant the sine is 
negative and the cosine is positive. The phase angle is obtained 
regardless of the amplitude of the cycle. Given that we know the 
dominant cycle, the BASIC program in the sidebar shows how we can 
compute he phase angle.

When the market is in a Cycle Mode the Sine of the measure phase 
looks very much like a sinewave. On the other hand, when the market 
is in a Trend Mode there is only an incidental rate change of phase 
of the phasor. A clear, unequivocal cycle mode indicator can be 
generated by plotting the Sine of the measured phase angle advanced 
by 45 degrees. This leading signal crosses the sinewave 1/8th of a 
cycle BEFORE the peaks and valleys of the cyclic turning points, 
enabling you to make your trading decision in time to profit from 
the entire amplitude swing of the cycle. A significant additional 
advantage is that the two indicator lines don't cross except at 
cyclic turning points, avoiding the false whipsaw signals of 
most "oscillators" when the market is in a Trend Mode. The two lines 
don't cross because the phase rate of change is nearly zero in a 
trend mode. Since the phase is not changing, the two lines separated 
by 45 degrees in phase never get the opportunity to cross.

The EasyLanguage code for the dynamically adjusted Sinewave 
Indicator is given in SideBar 2. Again, to save yourself some 
keystrokes, you can cut and paste from the code to calculate the 
dominant cycle from the first article of this series and then add in 
the code to compute the phase of the dominant cycle and the Sine and 
LeadSine values using that phase. 



********************************* SideBar 2 
***************************************************

EasyLanguage Code to Compute the Sinewave Indicator 



Inputs: Price((H+L)/2); 



Vars: Imult (.635),

Qmult (.338),

InPhase(0),

Quadrature(0),

Phase(0),

DeltaPhase(0),

count(0),

InstPeriod(0),

Period(0),

DCPhase(0),

RealPart(0),

ImagPart(0); 



If CurrentBar > 5 then begin 



{Detrend Price}

Value3 = Price - Price[7]; 



{Compute InPhase and Quadrature components}

 Inphase = 1.25*(Value3[4] - Imult*Value3[2]) + Imult*InPhase[3];

Quadrature = Value3[2] - Qmult*Value3 + Qmult*Quadrature[2]; 



{Use ArcTangent to compute the current phase}

If AbsValue(InPhase +InPhase[1]) > 0 then Phase = ArcTangent(AbsValue
((Quadrature+Quadrature[1]) / (InPhase+InPhase[1]))); 



{Resolve the ArcTangent ambiguity}

If InPhase < 0 and Quadrature > 0 then Phase = 180 - Phase;

If InPhase < 0 and Quadrature < 0 then Phase = 180 + Phase;

If InPhase > 0 and Quadrature < 0 then Phase = 360 - Phase; 



{Compute a differential phase, resolve phase wraparound, and limit 
delta phase errors}

DeltaPhase = Phase[1] - Phase;

If Phase[1] < 90 and Phase > 270 then DeltaPhase = 360 + Phase[1] - 
Phase;

If DeltaPhase < 1 then DeltaPhase = 1;

If DeltaPhase > 60 then Deltaphase = 60; 



{Sum DeltaPhases to reach 360 degrees. The sum is the instantaneous 
period.}

InstPeriod = 0;

Value4 = 0;

For count = 0 to 40 begin

Value4 = Value4 + DeltaPhase[count];

If Value4 > 360 and InstPeriod = 0 then begin

InstPeriod = count;

end;

end; 



{Resolve Instantaneous Period errors and smooth}

If InstPeriod = 0 then InstPeriod = InstPeriod[1];

Value5 = .25*InstPeriod + .75*Period[1]; 



{Compute Dominant Cycle Phase, Sine of the Phase Angle, and Leadsine}

 Period = IntPortion(Value5);

 RealPart = 0;

ImagPart = 0;

 For count = 0 To Period - 1 begin

  RealPart = RealPart + Sine(360 * count / Period) * (Price[count]);

  ImagPart = ImagPart + Cosine(360 * count / Period) * (Price
[count]);

end;

If AbsValue(ImagPart) > 0.001 then DCPhase = Arctangent(RealPart / 
ImagPart);

If AbsValue(ImagPart) <= 0.001 then DCPhase = 90 * Sign(RealPart); 

DCPhase = DCPhase + 90;

If ImagPart < 0 then DCPhase = DCPhase + 180; 



Plot1(Sine(DCPhase), "Sine");

Plot2(Sine(DCPhase + 45), "LeadSine"); 



end;

*********************************************************************
**************************** 



REAL WORLD EXAMPLES

This is where things really get interesting. We have plotted the 
Instantaneous Trendline over the price bars and the Sinewave 
Indicator in subgraph 2 in Figure 2. Note that the price (actually 
the average price for each day) stays above the Instantaneous 
Trendline from the latter part of August until mid December. The 
market is clearly in a Trend Mode during this period, and the 
correct strategy would be to buy and hold. Then, in mid December the 
market switched to a Cycle Mode, and stayed in a cycle mode almost 
to the end of the chart. During this period the best strategy would 
be to use a cycle mode technique – the Sinewave Indicator. The 
Sinewave Indicator correctly anticipated EVERY turning point.

It is important to note that the Leadsine Indicator did not cross 
the Sinewave signal during the Trend Mode period, although the two 
lines were wandering around. There were no distracting cycle mode 
signals from this oscillator when the market is in the trend mode.

 I can point out the features of these two indicators ad nauseum. 
However, it is far better for you to program these indicators and 
test them for yourself. This way, you will build confidence that 
they can work for you.  

 

 

 

 

 

 





 

 

 

 

 

 

 

 

 

 

 

 



Figure 1. Momentum can never precede the driving function and 
momentum is always more disjoint (noisy) than the driving function. 

 

 

 

 





 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



Figure 2. Trade the Instantaneous Trendline from the latter part of 
August to mid December. Trade the Sinewave Indicator almost all the 
rest of the chart. The Sinewave Indicator lines do not cross during 
the Trend Mode.




1 George H. Weiss, "Random Walks and Their Applications", American 
Scientist, Jan/Feb 1983, p65-71




2 John Ehlers, "Signal Analysis Concepts"




3 John Ehlers, "Signal Analysis Concepts", Ibid




4 John Ehlers, "Stay In Phase", Stocks & Commodities, Vol 14, #11, 
1996, p 483-



------------------------ Yahoo! Groups Sponsor ---------------------~-->
Buy Remanufactured Ink Cartridges & Refill Kits at MyInks.com for: HP $8-20. Epson $3-9, Canon $5-15, Lexmark $4-17. Free s/h over $50 (US & Canada).
http://www.c1tracking.com/l.asp?cid=6351
http://us.click.yahoo.com/0zJuRD/6CvGAA/qnsNAA/GHeqlB/TM
---------------------------------------------------------------------~->

Send BUG REPORTS to bugs@xxxxxxxxxxxxx
Send SUGGESTIONS to suggest@xxxxxxxxxxxxx
-----------------------------------------
Post AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx 
(Web page: http://groups.yahoo.com/group/amiquote/messages/)
--------------------------------------------
Check group FAQ at: http://groups.yahoo.com/group/amibroker/files/groupfaq.html 

Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/