Metastock
Formulas
 C
Click
here to go back to Metastock Formula
Index
IMPORTANT:
These formulas aren't my complete collection. For my complete
collection of instantly usable, profitable
and powerful MetaStock formulas Click
Here

Would
You Like To Use MetaStock To Its Full Potential? Discover the Amazingly
Simple Secret to Master Metastock StepByStep
 click
here
A  A 1  B  B 1  C  C 1  D  D 1  E  F  G  H  I  J  K  L  M  M 1  N  O  P  R  S  S 1  T  U  V  W  Z 
From
"Lyn Maine"
Here is the formula from this months TASC called Candle
code
this is only using 1 formula not like the one in TASC which
is broken up into several smaller ones.
CandleCode
Bdy:=Abs(OC);
Lshd:=If(C>=O,OL,CL);
Ushd:=If(C>=O,HC,HO);
ThBotB:=BBandBot(Bdy,55,E,0.5);
ThTopB:=BBandTop(Bdy,55,E,0.5);
ThBotL:=BBandBot(Lshd,55,E,0.5);
ThTopL:=BBandTop(Lshd,55,E,0.5);
ThBotU:=BBandBot(Ushd,55,E,0.5);
ThTopU:=BBandTop(Ushd,55,E,0.5);
CCode:=If(C=O,1,0)*If(Ushd>=Lshd,64,48)+If(C=O,0,1)*(If(C>O,1,0)*(If(Bdy<=ThBotB,80,0)
+If(Bdy>ThBotB
AND Bdy<=ThTopB,96,0)+ If(Bdy>ThTopB,112,0))+
If(C<O,1,0)*(If(Bdy<=ThBotB,32,0)+
If(Bdy>ThBotB AND Bdy<=ThTopB,16,0)))
+(If(Lshd=0,3,0)+
If(Lshd<ThBotL AND Lshd>0,2,0)+ If(Lshd>ThBotL
AND Lshd<=ThTopL AND Lshd>0,1,0))+(If(Ushd>0 AND
Ushd<=ThBotU,4,0)+ If(Ushd>ThbotU AND Ushd<=ThTopU,8,0)+
If(Ushd>ThTopU,12,0));
CCode;
CSI{Candle strength index}
Periods:=Input("Enter Periods",2,13,2);
Mov(Mov(Mov(Fml("Candlecode"),Periods,S),Periods,S),Periods,S)
(Go
Top) 
enter
long:
(Fml("Candle  Hammer")=1) AND
(CCI(11)<50)
close long:
((CCI(11)<80) AND
(Ref(CCI(11),1)>80)) OR
((CCI(11)<80) AND
Ref(CCI(11)>80,1))
enter short:
(Fml("Candle  Hanging Man'")=1) AND
(CCI(11)>50)
close short:
((CCI(11)>80) AND
(Ref(CCI(11),1)<80)) OR
((CCI(11)<80) AND
Ref(CCI(11)>80,1))
(Go
Top) 
This
is a custom  made Formula based on Candlesticks called
CANDLE SHADOW SUPPORT  RESISTANCE (by
John D. Kontessis) Based on extensive study of the following
books "Japanese Candlestick Charting Techniques", S.Nison,
1991 "Beyond Candlesticks" S.Nison, 1994 "Tehcical Analysis"
X.E. Kourouklis, METAPUBLICATIONS (in greek language only)
As we all know, one of the most important components of
a candlestick is its shadow. A candle's shadow tends to
get longer as prices get closer to supportresistance levels,
as well as when they reach points of change in Trend (e.g.
pullbacks or entry in ranging periods). As prices reach
a Support level (or when building a support) the candles'
lower shadows get longer. Consequently, as prices reach
a Resistance Level (or when building a resistance) the candles'
upper shadows get longer. The obvious problem that an analyst
faces is that such subtle changes are difficult to discern
and evaluate by naked eye only.
This
problem can be easily solved by using the following two
Formulas in Metastock's Indicator Builder. After Opening
the "Indicator Builder", choose "New" and name the Formula
: "CandleShadow Resistance ", enter the following :
ShadowResistance:=If(OPEN<CLOSE,(HIGHCLOSE),(HIGHOPEN));
Mov(ShadowResistance,3,S); {for not so shortterm results,
use:
Mov(ShadowResistance,10,w)}
and press "ok".
Now
let's build the second Formula: After Opening the "Indicator
Builder", choose "New" and name the Formula : "CandleShadow
Support", enter the following :
ShadowSupport:=If(CLOSE>OPEN,(OPENLOW),(CLOSELOW));
Mov(ShadowSupport,3,S); {for not so shortterm results,
use: Mov(ShadowSupport,10,w)} and press "ok".
So
far we have built two Formulas, who, after measuring the
shadows of the candles in our chart, they "draw" a 3Day
Mov.Average of the size of the shadows (or alternatively
a 10day weighted Mov.Average). The first Formula "CandleShadow
Resistance" measures the upper shadow and the second Formula
"CandleShadow Support" measures the lower shadow. You can
always experiment with the type of Mov.Averages (simple,
weighted, exponential etc) and the periods used so as to
achieve the best "optical" results. Now let's see these
Formulas at work. In an UPTREND : Higher Tops in "CandleShadow
Resistance " and simultaneously lower tops in "CandleShadow
Support" , state a weakness of the uptrend.(bearish signal).
Lower Tops in "CandleShadow Resistance " and simultaneously
higher tops in "CandleShadow Support" , state a strength
of the uptrend. (bullish signal). In a DOWNTREND : Higher
Tops in "CandleShadow Resistance " and simultaneously lower
tops in "CandleShadow Support" , state a strength of the
downtrend. (bearish signal). Lower Tops in "CandleShadow
Resistance " and simultaneously higher tops in "CandleShadow
Support" , state a weakness of the downtrend. (bullish signal).
At your disposal for any questions or comments. John D.
(Go
Top) 
{This
system uses the momentum Commodity Channel Index (CCI) indicator
to
find shortterm bottoms in the market. The CCI indicator
is extremely
volatile and is generally difficult to use when trading
the S&P 500 Index.
We, however, have turned this volatility into a trading
advantage by using
the spread or gap between the CCI index and its moving average
as a reversal
signal. Specifically if the gap is larger then a certain
percentage and CCI
indicator crosses above its moving average we buy the market.
The system
remains in the market for a short period of time, exiting
the trade as the
indicators cross to the downside. As designed, this system
only trades long
the market; it can however be altered to short the market.
It is best used
in choppy bullish markets similar to the 1995 bull market.}
{Trading Tactics: This shortterm bullish trading system
exploits over
extended markets. Futures, options, and mutual fund traders
should take full
advantage of this high probability trading system, either
by taking outright
positions or avoiding declining markets. The code for this
system can be
reversed to trade short positions. This system should be
used in place of
longerterm momentum systems in strong bullish choppy type
markets. This
system rarely exits at the market intermediate peak, so
other exiting
signals may be used in place of our indicator crossover
technique.}
{Enter long:}
Ref(CCI(13)/(Mov(CCI(13),3,S)),1)>1.5 AND
Cross(CCI(13),(Mov(CCI(13),3,S))) AND
Ref(CCI(13),1)<25
{Exit long:}
Cross((Mov(CCI(13),3,S)),CCI(13)) AND
Ref(CCI(13),1)>200
(Go
Top) 
rev.
01/06/97
In their book "The New Technical Trader," Chande & Kroll
introduce the r2
indicator. They state that
"the primary use of r2 is as a confirming indicator" and
that "it is a
lagging indicator that shows
the strength of the trend."
In MetaStock the r2 formula is:
Pwr(Corr(Cum( 1 ),C,14,0),2)
They also present a smoothed r2 which would be:
Mov(Pwr(Corr(Cum( 1 ),C,14,0),2)*100,14,S)
(Go
Top) 
rev.
01/06/97
In their book "The New Technical Trader," Chande & Kroll
introduce the r2
indicator. They state that
"the primary use of r2 is as a confirming indicator" and
that "it is a
lagging indicator that shows
the strength of the trend."
In MetaStock the r2 formula is:
Pwr(Corr(Cum( 1 ),C,14,0),2)
They also present a smoothed r2 which would be:
Mov(Pwr(Corr(Cum( 1 ),C,14,0),2)*100,14,S)
(Go
Top) 
Here
is the Fast Chandelier Exit in full as supplied to me. It
is part of an exit strategy which you can adjust to your
own trading style and comfort levels. from Ian Burgoyne
HHVDays:=Input("Days Since Trade Opened",1,300,1);
ATRDays:=Input("ATR Days",1,30,10);
ATRHighMult:=Input("ATR Multiplier From High",1,5,3.0);
ATRCloseMult:=Input("ATR Multiplier From Close",1,5,2.5);
HHVStop:= HHV(H,HHVDays)  ATRHighMult*ATR(ATRDays);
HighStop:= H  ATRHighMult*ATR(ATRDays);
CloseStop:= C  ATRCloseMult*ATR(ATRDays);
TodaysCalc:= If(HighStop > CloseStop, HighStop, CloseStop);
TodaysStop:= If(L <= PREV, TodaysCalc, If(HHVStop <
PREV, PREV,
If(HHVStop >
C,PREV,HHVStop)));
HHVDays:=Input("Days
Since Trade Opened",1,300,1);
ATRDays:=Input("ATR Days",1,30,10);
ATRHighMult:=Input("ATR Multiplier From High",1,5,3.0);
ATRCloseMult:=Input("ATR Multiplier From Close",1,5,2.5);
HHVStop:= HHV(H,HHVDays)  ATRHighMult*ATR(ATRDays);
HighStop:= H  ATRHighMult*ATR(ATRDays);
CloseStop:= C  ATRCloseMult*ATR(ATRDays);
TodaysCalc:= If(HighStop > CloseStop, HighStop, CloseStop);
TodaysStop:= If(L <= PREV, TodaysCalc, If(HHVStop <
PREV, PREV,
If(HHVStop >C,PREV,HHVStop)));
TodaysStop
(Go
Top) 
Below
is the MetaStock code I posted for the Chandelier exit back
in October, 1999. The trick is to define the entry date/price
as the point at which your system triggered the entry, not
by using the date functions. A side benefit is that you
can also use it to implement a fixed dollar, or money management,
stop.
The more time I spend with the Chandelier exit, the more
I admire its strength as an exit and its simplicity. Because
exits tend to be the weakest part of a system, I would urge
everyone to spend some time with it.
And Chuck LeBeau gets credit for the MetaStock code, not
me. I just took his framework and applied it to his exit.
{LONG EXIT}
LongEntry:= {this your entry system, eg. Cross(CLOSE, Mov(C,20,E))};
MoneyMgmtStop:= {this is your maximum loss, in points};
{DEFINE ENTRY PRICE, WITH EXIT BEING  ENTRY PRICE AND
NO TRADE BEING 0}
EntryPrice:= If(PREV <= 0,
{Trade entered today?}
If(LongEntry, CLOSE, 0),
{Trade entered before today. Stopped today?}
If(LOW <= PREV  MoneyMgmtStop, PREV,
If(LOW <= HighestSince(1,PREV=0, HIGH)  3 * ATR(10),
PREV,
If(LOW <= HighestSince(1,PREV=0, CLOSE)  2.5 * ATR(10),
PREV,
PREV))));
{EXIT IF ENTRY PRICE < 0 (MEANING EXIT)}
EntryPrice < 0
{SHORT EXIT}
ShortEntry:= {this your entry system, eg. Cross(Mov(C,20,E),
CLOSE)};
MoneyMgmtStop:= {this is your maximum loss, in points};
{DEFINE ENTRY PRICE, WITH EXIT BEING ENTRY PRICE AND NO
TRADE BEING 0}
EntryPrice:= If(PREV <= 0,
{Trade entered today?}
If(ShortEntry, CLOSE, 0),
{Trade entered before today. Stopped today?}
If(HIGH >= PREV + MoneyMgmtStop, PREV,
If(HIGH >= LowestSince(1,PREV=0, LOW) + 3 * ATR(10),
PREV,
If(HIGH >= LowestSince(1,PREV=0, CLOSE) + 2.5 * ATR(10),
PREV,
PREV))));
{EXIT IF ENTRY PRICE < 0 (MEANING EXIT)}
EntryPrice < 0
(Go
Top) 
This
is the calculation for the first formula (Todays Change):
Todays close  yesterdays close
This is the main formula, incorporating the first calculation:
If todays change (1st formula) is greater than a 7 day exponential
moving average of todays change and todays close is greater
than yesterdays close, write down todays close + todays
volume, otherwise,
If todays change is less than a 7 day exponential moving
average of todays change and todays close is less than yesterdays
close, write down the negative value of todays close + todays
volume, otherwise write down 0.
Then add up all the days values and keep a cumulative running
total for each new trading day.
Simple Interpretation:
Changing Ways Accumulation/Distribution can show divergences
against the instrument.
When compared against volume activity, it can show what
impact a day of high turnover had on the share price for
the coming periods. This is to say that if a day had high
volume and there was little movement in the indicator alongside
this, then you can suggest that all the volume for that
day was absorbed into the price and there is less likelihood
of buying/selling pressure in that day taking hold in the
market in future trading days.
Metastock code for Changing Ways Accumulation/Distribution:
Cum(If(Fml( "Todays Change" ) > Mov(Fml( "Todays Change"
),7,E) AND C > Ref(C,1),
C + V,
If(Fml( "Todays Change" ) < Mov(Fml( "Todays Change"
),7,E) AND C < Ref(C,1),
Neg(C + V) ,0)))
Where Fml( "Todays Change" ) = c  ref(c,1)
(Go
Top) 
As
people have mentioned before, it is difficult to design
exits in MetaStock because of the awkwardness of defining
your trade entry price. One exit system that requires your
trade entry price is the channel exit.
For those not familiar with it, the channel exit is quite
a straight forward trailing stop. Once you're in a trade
(let's say, long), you maintain your stops at the lowest
low of the past number of days (optimized, in the code below)
until you are taken out of the market. This method attempts
to let profits run in the direction of the trend, but takes
you out when price makes a significant reversal and you
risk giving back profits on a retracement or the end of
the trend.
Below is the code for a channel exit. It also includes a
money management stop to limit losses to an acceptable level
until the channel exit exceeds it. Work on variations of
this basic theme, such as moving the stop up faster where
the market makes rapid gains and your lowest low in, say,
10 or 20 days is just too far away to adequately protect
profits.
Glen Wallace
{LONG EXIT}
LongEntry:= {this your entry system, eg. Cross(CLOSE, Mov(C,20,E))};
MoneyMgmtStop:= {this is your maximum loss, in points};
{DEFINE ENTRY PRICE, WITH EXIT BEING ENTRY PRICE AND NO
TRADE BEING 0}
EntryPrice:= If(PREV <= 0,
{Trade entered today?}
If(LongEntry, CLOSE, 0),
{Trade entered before today. Stopped today?}
If(LOW <= Max(PREV  MoneyMgmtStop, Ref(LLV(LOW,opt1),1)),
PREV,
PREV));
{EXIT IF ENTRY PRICE < 0 (MEANING EXIT)}
EntryPrice < 0
{SHORT EXIT}
ShortEntry:= {this your entry system, eg. Cross(Mov(C,20,E),
CLOSE)};
MoneyMgmtStop:= {this is your maximum loss, in points};
{DEFINE ENTRY PRICE, WITH EXIT BEING ENTRY PRICE AND NO
TRADE BEING 0}
EntryPrice:= If(PREV <= 0,
{Trade entered today?}
If(ShortEntry, CLOSE, 0),
{Trade entered before today.Stopped today?}
If(HIGH >= Min(PREV + MoneyMgmtStop, Ref(HHV(HIGH,opt1),1)),
PREV,
PREV));
{EXIT IF ENTRY PRICE < 0 (MEANING EXIT)}
EntryPrice < 0
(Go
Top) 
A
fast method to clean out unwanted stocks from Metastock
and also save them for future viewing.
On your hard drive, create a series of folders and sub folders
like your present Metastock data system. In my case OLD_META_DATA/ALL01/A01,B01,C01
etc to Z01. (Be sure no more than 450 stocks go in each
folder when you do copy/deletions)
Open METASTOCK/Tools/DOWNLOADER and once in DOWNLOADER open
Tools/Copy .
Browse to the folder you wish to make deletions from.
In the "Copy Securities" window make sure you can read the
Last Date column with the Name column showing. If not,do
not use the scroll bar but place the cursor in the Name
box at its RH end almost in the Symbol box and when your
cursor turns into a cross hold down the LH button on the
mouse and drag it left thereby narrowing the Name column
till the Last Date column is visible.( This is also a good
tip when printing out Metastock reports that do not fit
on the width of an A4 page, just reduce the width of a column
or eliminate it completely if it is not wanted on the print
out.)
Hold down the Control key and highlight each Name you wish
to delete. I go on the Last Date column to find useless
stocks. If you use the scroll bar to go down the list be
sure not to let go of the control key as you will lose all
your previous selections.
When finished highlighting let go of control key and press
copy. Browse to the new folder you created, tick the "Delete
Source Security" box and press OK. Old securities gone out
of current data base and saved for future reference. You
can do hundreds in a matter of minutes. If you want to ever
see the old securities just alter the lead folders names
in explorer.
From Basil Holloway
(Go
Top) 
This
exploration is designed to find those stocks where the close
is above the median price over the past five days. It matches
the steps in Dels bvook The Strategic Electronic Day Trader.
col a = CLOSE  MP()
col b = (Ref(CLOSE,1))(Ref( MP() ,1))
Col c = (Ref(CLOSE,2))(Ref( MP() ,2))
col d = (Ref(CLOSE,3))(Ref( MP() ,3))
col e = (Ref(CLOSE,4))(Ref( MP() ,4))
filter = colA>=0 AND colB>=0 AND colC>=0 AND colD>=0
AND colE>=0
The filter in the exploration only shows
those stiocks that have the strongest bullish bias over
all 5 days. By removing the filter all stocks will be shown.
Ranking the first colum will then allow you to estaboish
the overall score for each stock.
(Go
Top) 
"1)
Sell the opening (long or short) Xnumber of days(?) after
the indicator above moves from below 100 to
above 100. (Is this on a closetoclose basis?)"
Specifically, sell the opening the day after the BB Histo
closes above 100.
"2) Buy or cover when the indicator goes from above 100
to below 100 or from above 0 to below 0 Xnumber
of days after that occurs."
Buy, when the BB Histo dips below zero (the following morning).
"a) how many days after the signal does one act;"
The following morning.
" b) Is this closetoclose or intraday?"
close to close
"c) Is this to initiate or to go short or add to a position?"
Add to positions if the indicator "repenetrates" these levels
... otherwise, reverse when it triggers
(Go
Top) 
If
yesterdays high is greater than the high of 2 days ago//
and the low 5 days ago is less than or equal to the high
4 days ago// and it is Wednesday
Try this:
Ref(H,1)>Ref(H,2) AND
Ref(L,5)<=Ref(H,4) AND
Dayofweek() = 3
(Go
Top) 
They
are contributed by Patrick who notes "my limited Spanish
suggests that they are simply a random collection made by
the web owner, who points out that there is as yet 'no Holy
Grail' in technical analysis! For the past few days I have
been using them by substituting the for 'number' given to
each formula, the complete formula that particular number
represents. In this way, each becomes independent." We have
included all 80 of them, complete with the orginal Spanish
cover note.
A continuaciуn se ofrecen una serie de fуrmulas que puede
utilizar con el programa Metastock recogidas de la red y
cuya utilidad Vd. debe valorar. Se ruega encarecidamente
a todos aquellos que tengan fуrmulas que puedan resultar
ъtiles las envнen a jomaba@interbook.net para su publicaciуn
en esta pбgina. Muchos dicen que el Santo Grial no existe.їY
si es mentira?
1 DAILY CLOSE VS HIGH AND LOW WAVE if((CL)/(HL),>,.66
,1, if((CL)/(HL),<,.38,1,0))
2 PRICE OSCILLATOR WAVE if(ref(oscp(3,15,S,%),1),<,0,1,0)
3 VOLUME OSCILLATOR WAVE if(oscv(1,50,S,%),>,50,1,0)
4 WEEKLY PRICE OSCILLATOR WAVE if(fml(#17),>,ref(fml(#17),1),1,
if(fml(#17),<,ref(fml(#17),1),1,0))
5 VOLATILITY WAVE if(ref(fml(#27),1),<,90,1,0)
6 LONG BINARY WAVE fml(#1) + fml(#2) + fml(#3) + fml(#9)
7 STOCHASTIC WAVE  LONG if(ref(stoch(14,3),1),=,llv(stoch(14,3),3),2,
if(stoch(14,3),=,llv(stoch(14,3),3),1,0))
8 STOCHASTIC WAVE  SHORT if(ref(stoch(14,3),1),=,hhv(stoch(14,3),3),2,
if(stoch(14,3),=,hhv(stoch(14,3),3),1,0))
9 VOLATILITY DIFFERENCE WAVE if(fml(#11),>=,1.00,1,0)
10 LONG BINARY II fml(#1) + fml(#3) + fml(#9) + fml(#24)
11 VOLATILITY DIFFERENCE mov(HL,1,S)/mov(HL,20,S)
12 HI LOW WAVE  DAILY if(H,>,ref(hhv(H,100),1),1,if(L,<,ref(llv(L,100),1),1,0))
13 WEEKLY HIGH LOW WAVE if(H,>,ref(hhv(H,40),1),1, if(L,<,ref(llv(L,40),1),
1,0))
14 PERCENT ABOVE\BELOW MOVING AVG (oscp(1,30,E,%))
15 WEEKLY PRICE OSCILLATOR mov(oscp(10,20,S,%),10,S)
16 MACD WAVE MACD/trigger Binary Wave if(macd(), >, mov(macd(),9,E),
{bullish} +1, {bearish} 1)
17 WEEKLY OSC SEGMENT mov(oscp(43,86,S,%),43,S)
18 HISTORICAL VOLATILITY (std(log(C / ref(C,1)),10)*sqr(365))
/(std(log(C / ref(C,1)),50)*sqr(365))
19 RELATIVE STRENGTH C/P
20 CLOSE REL TO HIGH LOW (CL)/(HL)
21 GAP IDENTIFICATION if(L,>,ref(H,1),1, if(H,<,ref(L,1),1,0))
22 AVG VOLUME mov(V,50,S)
23 MOVE WAVE 20unit m.a. Binary Wave if(C, >, mov(C,20,E),
{then bullish} +1, {else bearish} 1)
24 STOCHASTIC VALUE WAVE if(ref(stoch(14,3),1),<,65,1,
if(stoch(14,3),<,65,1,0))
25 ROC WAVE 12ROC price Binary Wave if(roc(C,12,%), >,
0, {then bullish} +1, {else bearish} 1)
26 STOCH WAVE 5 Stochastic Binary Wave if(stoch(5,3), >,
50, {then bullish} +1, {else bearish} 1)
27 ATR RATIO atr(10)/atr(50)/100
28 BINARY WAVE Composite Wave of above fml("MACD Wave")
+ fml("MOVE Wave") + fml("ROC Wave")+ fml("STOCH Wave")
29 WEEKLY OPEN CLOSE WAVE if(C,>,O,1,if(C,<,O,1,0))
30 SHORT BINARY WAVE fml(#31) + fml(#32) + fml(#33)
31 SHORT OPEN CLOSE WAVE if((CL)/(HL),<,.38,1,0)
32 SHORT PRICE OSCILLATOR WAVE if(ref(oscp(3,15,S,%),1),>,0,1,0)
33 SHORT VOLUME WAVE if(oscv(1,50,S,%),>,0, if(V,>,ref(V,1),1,0),0)
34 O.B.V. Good example of if() func cum( if( C, >, ref(C,1),
+V, if( C, <, ref(C,1), V, 0) ))
35 SINE WAVE 5unit standing sine wave sin( cum(5) )
36 STOCHASTIC Example of hhv() function ( sum( C  llv(L,5),
3 ) / sum( hhv(H,5)  llv(L,5), 3) ) * 100
37 Median price (hhv(H,10)C)(Cllv(L,10))/(hhv(H,10)llv(L,10))
38 Future MACDDr. Trieber (C(( 11.607*(mov(C,26,E)))(10.607*(mov(C,12,E)))
(12.536*(mov(macd(),9,E)))))
39 Fraction (32nd's) int(C)+((frac(C)/0.03125)/100)
40 Summation Noise Indicator (Adam White) (sum(abs(Cref(C,1)),14)sum(abs(mov(C,10,S)ref(mov(C,10,S),1)),14))/
sum(abs(Cref(C,1)),14)
41 Chaikin Money Flow sum(((((CL)(HC))/(HL))*V),21)/sum(V,21)
42 Linear Regression ((15*(sum(cum(1)*C,10))(sum(cum(1),10)*(sum(C,10))))
/((10*sum(pwr(cum(1),2 ),10))pwr(sum(cum(1),2),10))
pwr(sum(cum(1),10),2))
43 Smoothed Tick Momemtum LineTASC mov(roc(cum(if(C,>,ref(mov(C,10,E),1),+1,
if(C,<,ref(mov(C,10,E),1),1,0))),5,$),5,E)
44 Bull Power (for Elderray) Hmov(C,13,E)
45 Bear Power (for Elderray) Lmov(C,13,E)
46 13Period Moving Average (for Elderray) mov(C,13,E)
47 RSI Binary Wave (using 30/70 xover) if(rsi(10),>,30,if(ref(rsi(10),1),<,30,+1,if(rsi(10),<,70,if(ref(rsi(10),
1),>,70,1,0),0)),0)
48 Trendscore...Tushar Chande (TASC) if(C,>=,ref(C,11),1,1)+if(C,>=,ref(C,12),1,1)+if(C,>=,ref(C,13),1,1)+
if(C,>=,ref(C,14),1,1)+if(C,>=,ref(C,15),1,1)+if(C,>=,ref(C,16),1,1)+
if(C,>=,ref(C,17),1,1)+if(C,>=,ref(C,18),1,1)+if(C,>=,ref(C,19),1,1)+
if(C,>=,ref(C,20),1,1)
49 KSTMartin Pring (One formula) (mov(roc(C,10,%),10,S))+(2*(mov(roc(C,15,%),10,S)))+
(3*(mov(roc(C,20,%),10,S)))+(4*(mov(roc(C,30,%),15,S)))/10
50 Dual Oscillator BWave +1 buy, 1 sell if(fml("dual osc
1"),>,fml("dual osc 2"),if(ref(fml("dual osc 1"),1),<,
ref(fml("dual osc 2"),1),+1,if((fml("dual osc 1")),<,fml("dual
osc 2"),
if(ref(fml("dual osc 1"),1),>,ref(fml("dual osc 2"),1),1,0),0)),0)
51 Dual Osc 1 mov(C,2,S)mov(C,10,S)
52 Dual Osc 2 mov((H+L+C)/3,5,S)mov((H+L+C)/3,20,S)
53 R Squared pwr(corr(cum(1),C,5,0),2)
54 Slope of Linear Regression Line ((5*(sum(cum(1)*C,5)))(sum(cum(1),5)*(sum(C,5))))/
((5*sum(pwr(cum(1),2),5))pwr(sum(cum(1),5),2))
55 RWI for today's high (Href(L,16))/(mov((HL),16,S)*sqr(16))
56 RWI for today's low (ref(H,16)L)/(mov((HL),16,S)*sqr(16))
57 Momemtum roc(mov(C,10,E),10,%)
58 Volume Binary Wave if(V,>,ref(mov(V,20,E),1),1,if(V,<,ref(mov(V,10,E),1),1,0))
59 MACD w/SAR if(macd(),>,mov(macd(),9,E),{macd is above
trigger}if(sar(.02,.2),
<,C,{buy long}+2,{stop shorts}+1),{macd < trigger}if(sar(.02,.2),>,
C,{sell short}2, {stop longs}1))
60 Oscillating OBV mov(obv(),20,E)obv()
61 Overreaction Index if(ref(std(C,3),3),>,4,+1,0)+if(C,<,(sar(.015,.15)),1,+1)
62 Modified MACD tsf(C,12)tsf(C,26)
63 RVI w/simple moving average (TASC) 100*mov(if(C,>,ref(C,1),std(C,10),0),14,S)/(mov(if(C,>,ref(C,1),
std(C,10),0),14,S)+mov(if(C,<,ref(C,1),std(C,10),0),14,S))
64 Upper Bollinger Band mov(C,20,S)+(2*(std(C,20)))
65 Lower Bollinger Band mov(C,20,S)(2*(std(C,20)))
66 Middle Band mov(C,20,S)
67 %B (TASC) (C(mov(C,20,S)(2*(std(C,20)))))/(mov(C,20,S)+(2*(std(C,20)))
mov(C,20,S)(2*(std(C,20))))
68 Band Width (TASC) (mov(C,20,S)+(2*(std(C,20))))(mov(C,20,S)(2*(std(C,20))))/mov(C,20,S)
69 Volume % above/below 10 day MA (Vmov(V,10,S))/mov(V,10,S)
70 # of STD's of volume (Vmov(V,20,S))/std(V,20)
71 Morris' RSI w/volume (TASC) 100(100/(1+(mov(if(roc(C,1,$),>,0,roc(C,1,$)*V,0),14,S)/
mov(if(roc(C,1,$), <,0,roc(C,1,$)*V,0),14,S))))
72 Custom A/D Oscillator cum(if(C,>,ref(C,2),1,if(C,<,ref(C,2),1,0)))
73 Empty Candlestick if(C,>,o{then empty},+1,0)
74 Filled Candlestick if(C,<,o{then filled},+1,0)
75 Doji if(C,=,o{then doji},+1,0)
76 Bearish engulfing lines if(fml(#28),=,+1,if(ref(fml(#27),1),=,+1,if(C,<=,ref(O,1),if(O,>=,
ref(C,1),1,0),0),0),0)
77 Bullish engulfing lines if(fml(#27),=,+1,if(ref(fml(#28),1),=,+1,if(C,>=,ref(O,1),if(O,<=,
ref(C,1),+1,0),0),0),0)
78 Engulfing Line Binary wave fml(#30)+fml(#31)
79 Largest negative change in close llv(roc(C,1,$),40)
80 Choppiness Index (TASC) ((log(sum(atr(1),14)/(hhv(if(H,>=,ref(C,1),H,ref(C,1)),14)llv(if(L,<=,
ref(C,1),L,ref(C,1)),14)))/log(10))/(log(14)/log(10)))*100
(Go
Top) 
BAR
 3 Higher Highs
H>Ref(H,1) AND Ref(H,1)>Ref(H,2) AND Ref(H,2)>Ref(H,3)
BAR  3 Lower Lows & Reversal H
L>Ref(L,1) AND Ref(L,1)<Ref(L,2) AND Ref(L,2)<Ref(L,3)
AND
Ref(L,3)<Ref(L,4)
BAR  3 Lower Lows
L<Ref(L,1) AND Ref(L,1)<Ref(L,2) AND Ref(L,2)<Ref(L,3)
BAR  5 Lower Lows
L<Ref(L,1) AND Ref(L,1)<Ref(L,2) AND Ref(L,2)<Ref(L,3)
AND
Ref(L,3)<Ref(L,4) AND Ref(L,4)<Ref(L,5)
BAR  Expansion Buy
If(C > Ref(HHV(C,42),1) AND HL >= Ref(HHV((HL),9),1),1,0)
BAR  Expansion Sell
If(C < Ref(LLV(C,42),1) AND (HL) >= Ref(HHV((HL),9),1),1,0)
BAR  Fractaldown
If(LOW < Ref(LOW, 1),1,0) AND If(LOW < Ref(LOW, 2),1,0)
AND If(LOW <
Ref(LOW,+1),1,0) AND If(LOW < Ref(LOW,+2),1,0)
BAR  Fractalup
(If(HIGH > Ref(HIGH, 1),1,0) AND If(HIGH > Ref(HIGH,
2),1,0) AND If(HIGH
> Ref(HIGH, +1),1 ,0)AND If(HIGH > Ref(HIGH,+2),1,0))
BAR  Gap Down
GapDown()
BAR  Gap Up
GapUp()
BAR  H > Yesterday's H
H>Ref(H,1)
BAR  Highest Bars Ago
HighestBars(CLOSE)
BAR  Highest High Value Bars Ago
HHVBars(CLOSE,50)
BAR  Inside Day + Day 3
Ref(Fml("BAR  Inside Day"),3)
BAR  Inside Day
HIGH < Ref(HIGH,1) AND LOW > Ref(LOW,1)
BAR  Lizard Buy
If(O >= L + ((HL) * .75) AND C >= L + ((HL) * .75)
AND L <
Ref(LLV(L,9),1),1,0)
BAR  Lizard Sell
If(O <= L + ((HL) * .25) AND C <= L + ((HL) * .25)
AND H >
Ref(HHV(H,9),1),1,0)
BAR  Narrow Range 4
HIGH  LOW < Ref(LLV(HL,3),1)
BAR  Narrow Range 7
HIGH  LOW < Ref(LLV(HL,6),1)
BAR  O > Yesterday's C
O>Ref(C,1)
BAR  Outside Day & > C
Outside() AND C>Ref(C,1)
BAR  Outside Day
HIGH > Ref(HIGH,1) AND LOW < Ref(LOW,1)
BAR  Pivot Buy
If(HL > Ref(HHV((HL),9),1) AND ((L <= Mov(C,50,S))
OR Ref(L,1) <=
Ref(Mov(C,50,S),1))
AND C > Mov(C,50,S),1,0)
BAR  Pivot Sell
If(HL > Ref(HHV((HL),9),1) AND ((H >= Mov(C,50,S))
OR Ref(H,1) >=
Ref(Mov(C,50,S),1))
AND C < Mov(C,50,S),1,0)
BAR  Reaction Day with Volume
ReactionWithVol()
BAR  Reaction Day
Reaction()
BAR  Surprise Day Down
O<Ref(C,1) AND C>O AND C<Ref(C,1)
BAR  Surprise Day Up
O>Ref(C,1) AND C<O AND C>Ref(C,1)
BAR  Trough Value  5
Trough(1,CLOSE,5)
BAR  Typical Price
Typical()
(Go
Top) 
((HHV(C,80)LLV(C,80))/LLV(C,80))*100
Consolidation breakout (upside)
If(Ref(Fml("congestion index"),5),<,10, {and} If(Fml("congestion
index"),>=,10, {and} If(CLOSE,>,Ref(HHV(C,80),5),
{and} If(Mov(V,5,S),>=,1.5*(Ref(Mov(V,60,S),5)), +1,0),0),0),0)
Consolidation breakout (downside)
If(Ref(Fml("congestion index"),5),<,10{%},{and} If(Fml("congestion
index"),>=,10{%},
{and} If(CLOSE,<,Ref(LLV(C,80),5),{and} If(Mov(V,5,S),>=,1.5*(Ref(Mov(V,60,S),5)),+1,0),0),0),0)
(Go
Top) 
Here
is the Connors and Raschke's historical volatility system
exploration in August 1996 TASC Trader's Tips translated
for MetaStock.
COLUMN
FORMULAS
Column
A : Vol ratio
std(log(C/ref(C,1)),5)/std(log(C/ref(C,1)),99)
Column
B : NR4 day
if(HIGHLOW,<,ref(llv(HL,3),1),1,0)
Column
C : Inside
if(HIGH,<,ref(HIGH,1),if(LOW,>,ref(LOW,1),1,0),0)
Column
D : High
HIGH
Column
E : Low
LOW
FILTER
FORMULA
Formula:
when(colA,<,0.5)
AND (when(colB,=,1) OR when(colC,=,1))
(Go
Top) 
If(Ref(Fml("congestion
index"),5),<,10,
{and} If(Fml("congestion index"),>=,10,
{and} If(CLOSE,>,Ref(HHV(C,80),5),
{and} If(Mov(V,5,S),>=,1.5*(Ref(Mov(V,60,S),5)),
+1,0),0),0),0)
Stocks breaking out of consolidation (downside)
Col A: CLOSE
Filter: Fml("Consolidation breakout (downside)") = 1
Filter enabled: Yes
Here is the "consolidation breakout(downside)" formula:
If(Ref(Fml("congestion index"),5),<,10{%},
{and} If(Fml("congestion index"),>=,10{%},
{and} If(CLOSE,<,Ref(LLV(C,80),5),
{and} If(Mov(V,5,S),>=,1.5*(Ref(Mov(V,60,S),5)),
+1,0),0),0),0)
(Go
Top) 
Col
A: CLOSE
Filter: Fml("Consolidation breakout (upside)") = 1
Filter enabled: Yes
(Go
Top) 
Col
A: CLOSE
Filter Fml("congestion index") <= 10 AND BarsSince(Fml("congestion
index")>10) > 0
Filter enabled Yes
Here is the "congestion index" formula:
((HHV(C,80)LLV(C,80))/LLV(C,80))*100
(Go
Top) 
(Note.
This is very good, but the limitation is the lookback period.
The
calculation
point for the CBL line might be 5, 10, 15, 30 days away
from
todays
date.Also watch for the way 'gap' days are treated. Daryl
Guppy)
Copied
from StockCentral  Thanks Ken D
Well .... last weekend I replied to a post requesting a
MetaStock solution for calculating the Countback Line discussed
in Daryl Guppy's book "Share Trading: An Approach to Buying
and Selling". Subequently, about 30 requests for the formulas
I use were received. Not unexpectedly, a few defects were
found with the original offerings. This helped forge a somewhat
more robust solution, which is here given to the wider audience
of this Forum, so that further improvements may be forthcoming.
Alternatives of presentation style are many, according to
taste, but we are here requesting improvements in substance,
identification of possible flaws, or have real simplification
benefits  please provide solutions where possible.
ACKNOWLEDGEMENTS .... With thanks to the several people
who have commented, all constructively it is pleasing to
say, particular credit is warranted by the significant contributions
from Bryan Stanton and Siobhan Channon.
LIMITATIONS .... With MetaStock, there seems to be a need
for two different formulas to handle the issue:  one for
the CBL from a LOW (CBLlo),  the other for the CBL from
a HIGH (CBLhi). The formulas given below were generated
using v.6.52. Because of the use of PREV they won't work
in some earlier MetaStock versions it seems, though a bit
of thought should overcome this limitation  anyone able
to comment? As written they are based upon relative prices
over a DEFAULT cover of 13 days (but adjustable from 3 to
55 days)  this is one of the potential weaknesses which
commands individual interpretation for a particular equity
or contract, which may cycle more or less frequently and
require different timeframes. Other indicators and assessments
are, of course, needed to gauge the probability of a CBLindicated
countertrend holding. Also, for particularly choppy or
indecisive circumstances there may be a need to extend the
Ref(H or L, 5) to a greater number of comparison days by
appropriate copying and adjustments to the basically simple
pattern in these formulas  but if it came to this perhaps
the trade should be left alone anyway! Owing to price vagaries
it is not unusual for a CBLhi to be less than a CBLlo calculation,
or the converse, especially with lowgradient trends or
sideways price movements.
NOTE: With each formula below, copy exactly from "HighDays"
or "LowDays" down to "PREV )))))" into the Indicator Builder.
CBLhi:
HighDays := Input("Enter # days to cover last HIGH for CBL
calc'n:", 3, 55, 13);
If(HIGH < HHV(HIGH, HighDays), {then ...} PREV, {previous
CBLhi, else...} If(Ref(L,2) < Ref(L,1) AND Ref(L,2)
< L AND Ref(L,1) < L, {then ...} Ref(L,2), {2nd
day back low, else...} If((Ref(L,3)< Ref(L,2) AND Ref(L,3)
< Ref(L,1) AND Ref(L,3) < L) AND (Ref(L,2)<
L OR Ref(L,1) < L), {then ... } Ref(L,3), {3rd day
back low, else...} If((Ref(L,4)< Ref(L,3) AND Ref(L,4)
< Ref(L,2) AND Ref(L,4) < Ref(L,1) AND Ref(L,4)
< L) AND (Ref(L,3)< L OR Ref(L,2) < L OR Ref(L,1)
< L), {then... } Ref(L,4), {4th day back low, else...}
If((Ref(L,5)< Ref(L,4) AND Ref(L,5) < Ref(L,3)
AND Ref(L,5) < Ref(L,2) AND Ref(L,5) < Ref(L,1)
AND Ref(L,5) < L) AND (Ref(L,4)< L OR Ref(L,3)
< L OR Ref(L,2) < L OR Ref(L,1) < L), {then ...}
Ref(L,5), {5th day back low, else...} PREV )))))
and for the CBL from a LOW
CBLlo:
LowDays := Input("Enter # days to cover last LOW for CBL
calc'n:", 3, 55, 13);
If(LOW > LLV(LOW, LowDays), {then ...} PREV, {previous
CBLlo, else...} If(Ref(H,2) > Ref(H,1) AND Ref(H,2)
> H AND Ref(H,1) > H, {then ...} Ref(H,2), {2nd
day back high,else...} If((Ref(H,3)> Ref(H,2) AND Ref(H,3)
> Ref(H,1) AND Ref(H,3) > H) AND (Ref(H,2)>
H OR Ref(H,1) > H), {then ... } Ref(H,3), {3rd day
back high,else...} If((Ref(H,4)> Ref(H,3) AND Ref(H,4)
> Ref(H,2) AND Ref(H,4) > Ref(H,1) AND Ref(H,4)
> H) AND (Ref(H,3)> H OR Ref(H,2) > H OR Ref(H,1)
> H), {then... } Ref(H,4), {4th day back high,else...}
If((Ref(H,5)> Ref(H,4) AND Ref(H,5) > Ref(H,3)
AND Ref(H,5) > Ref(H,2) AND Ref(H,5) > Ref(H,1)
AND Ref(H,5) > H) AND (Ref(H,4)> H OR Ref(H,3)
> H OR Ref(H,2) > H OR Ref(H,1) > H), {then ...}
Ref(H,5), {5th day back high,else...} PREV )))))
Please advise of any problems or suggested improvements
in calculating the CBL. It is again emphasized that this
is by no means proposed as the best solution, but as ONE
solution which seems to work. Regards.
(Go
Top) 
Instructions
1. First create a new expert and name it whatever you want.
2a. under "trends" tab put this code for bullish:
ut:=FmlVar("GANNTrend","TDV");
uplot:=If(BarsSince(Ut=1)<
BarsSince(Ut=1),1,0);
uplot=1;
2b. and this for bearish:
dt:=FmlVar("GANNTrend","TDV");
dplot:=If(BarsSince(dt=1)>
BarsSince(dt=1),1,0);
dplot=1;
Then click on the "ribbon" option and turn off "Display
Vertical Lines", I also turn off the corner option.
3a. Under highlights tab create a new and call it "HiLo
Change", choose color, and enter this code:
HLd:=If(CLOSE>Ref(Mov(H,3,S),1),
{then}1,
{else}If(CLOSE<Ref(Mov(L,3,S),
1),
{then}1,
{else}0));
HLv:=ValueWhen(1,HLd<>0,HLd);
HLv<>Ref(HLv,1);
3b. Create new and call it "UpTrend", choose color, and
enter this code:
ut:=FmlVar("GANNTrend","TDV");
uplot:=If(BarsSince(Ut=1)<
BarsSince(Ut=1),1,0);
uplot=1;
3c. Create new and call it "DownTrend", choose color, and
enter this code:
dt:=FmlVar("GANNTrend","TDV");
dplot:=If(BarsSince(dt=1)>
BarsSince(dt=1),1,0);
dplot=1;
4a. Under "Symbols" tab create new and call it " UpSwing",
enter this code:
FmlVar("GANNSwing","SD2")=1;
then under graphic choose "Buy Arrow", choose color (Dark
Green), and small size, then pick "Above Price Plot".
4b. Create new and call it "DownSwing", enter this code:
FmlVar("GANNSwing","SD2")=1;
then under graphic choose "sell arrow", choose color (Dark
Red), and small size, then pick "Below Price Plot".
As for the HiLo ....just plot it as a regular indicator
and choose the last "style" option under "color/style" tab.
(Go
Top) 
from
Ken
These are dynamic moving vertical lines. Each new bar causes
the line to move orward one bar.
How to Create a Vertical Line in MetaStock
{Plot in Stoch window}
{...you can change the 100 and 0 to 80/20 or ?}
n:=Input("Bars Before LastLoadedBar", 0,1000,89);
LastLoadedBarNum:=LastValue(Cum(1));
If(Cum(1)=(LastLoadedBarNumn)+1,100,0)
....or
Create a new Expert.
Place the following in "Trends"/"Bullish".
n:=89;
LastLoadedBarNum:=LastValue(Cum(1));
Cum(1)=(LastLoadedBarNumn)+1
In "Corner", UNcheck "Display symbol in Expert corner".
In "Ribbon", check Display Ribbon, Display Vertical Line,
and "Ribbon's inner window".
Delete or rename the "Neutral" label.
Choose Bullish color.
Plot Stochastic on chart, attach Expert, then drag Expert
to Stochastic inner window
(Go
Top) 
Filter
(C>Mov(C,200,S) AND Ref(C,5)<Ref(Mov(C,200,S),5))
AND C>5 AND V>Mov(V,200,S)*2
(Go
Top) 
Filter
(C<Mov(C,200,S) AND Ref(C,5)>Ref(Mov(C,200,S),5))
AND C>5 AND V>Mov(V,200,S)*2
(Go
Top) 
The
formula I've adopted was put on the Silicon Investor web
site thread by
'bdog'. Basically, I just leave the Slowing Periods (mp3)
to 1, so it
really plays no part in things. However, if somebody presents
a good
argument for using other than 1 ... hey, I'm amenable.
Chande, the original inventor, didn't use a moving average
on the whole
thing. Chande's result was therefore sort of choppy. I guess
along the way
people decided to add the EMA Periods to smooth things out.
Here's the MSWin formula:
mp1:=Input("RSI Periods",1,377,13);
mp2:=Input("Stoch Periods",1,377,13);
mp3:=Input("Slowing Periods",1,377,1);
mp4:=Input("EMA Periods",1,377,5);
Mov(Sum((RSI(mp1)LLV(RSI(mp1),mp2)),mp3)/Sum((.0000001+(HHV(RSI(mp1),mp2)(
LLV(RSI(mp1),mp2)))),mp3),mp4,E)*100
Now, from various posts, etc., the following parameters
(mp1, mp2 and mp4)
*seem* to be the one's recommended. I'm trying to further
find consensus
among users of StochRSI on what really appears to work for
them.
StochRSI Set

5  5  3
8  8  5
13  13  13
21  15  13
21  21  13
34  34  13
55  55  21
89  13  34
89  89  21
233  233  34
(Go
Top) 
from
Ton Maas msirb@wxs.nl
"Trading Stocks With A Cyclical System" by Jeffrey Owen
Katz (TASCFeb1999).
(Translated for MetaStock 6.5 by Ton Maas The Netherlands
 June1999).

(The system's original Easy Language formulas+system were
derived from
theabove mentioned TASC article). My guess is that Equis
(Alan McNichol) was
not in the possession of them when he wrote the Equis version
of the system,
back in the Feb99 Trader's Tips section of TASC).

MetaStock 6.5 Indicator

Name:
Cyclical System  J O Katz
Formula:
{TASC Feb99}
thresh:= {omit whipsaw} 4;
k:= {roc comparison period} 3;
m:= {cycle period} 63;
hld:= {maximum period holding position} 10;
Value1:= {volatility}
Stdev(Mov(C,m,S)Mov(C,m+k,S),20);
Value2:= {roc, relative comparison ratio}
Mov(C,m,S)Mov(C,m+k,S);
tv1:= thresh*Value1;
EL:={Enter Long} Value2>tv1;
CL:={Close Long} Ref(Cross(Value2,tv1),hld);
ES:={Enter Short} Value2<tv1;
CS:={Close Short} Ref(Cross(tv1,Value2),hld);
JKcycl:=If((EL>0)=1,+10,
If((ES>0)=1,10,0));
JKcycl

MetaStock 6.5 System Tester

Name:
Jeffrey Owen Katz  Cyclical System
Notes:
{February 1999  TASCarticle (see also TRADERS' TIPS)}
Formulas:
{copyrepeat all that is printed below when applying for
the right rule}
thresh:= {omit whipsaw} 4;
k:= {roc comparison period} 3;
m:= {cycle period} 63;
hld:= {maximum period holding position} 10;
Value1:= {volatility}
Stdev(Mov(C,m,S)Mov(C,m+k,S),20);
Value2:= {roc, relative comparison ratio}
Mov(C,m,S)Mov(C,m+k,S);
tv1:= thresh*Value1;
Rules:
{Enter Long} Value2>tv1
{Close Long} Ref(Cross(Value2,tv1),hld)
{Enter Short} Value2<tv1
{Close Short} Ref(Cross(tv1,Value2),hld)
{After entering the formulas, click OK. Then click Options.
On the Testing
page, set the Trade Delay to zero, set Positions to "both",
and then set any
other desired options (apart from Optimizing, which is not
advisable; leave
the factory default settings). Click OK to save the changes,
and then open a
chart and run the system.}
(Go
Top) 
Periods:=Input("Enter
Periods",2,13,2);
Mov(Mov(Mov(Fml("Candlecode"),Periods,S),Periods,S),Periods,S)
(Go
Top) 
(((CMO(C,5))+(CMO(C,10))+(CMO(C,20)))/3)
(Go
Top) 
S1:=
Stdev( CMO(C,5),5);
S2:= Stdev(CMO(C,10),10);
S3:= Stdev(CMO(C,20),20);
CMOV:=(S1*CMO(C,5))+(S2*CMO(C,10))+(S3*CMO(C,20))/(S1+S2+S3);
CMOV;
(Go
Top) 
The
following are MetaStock formulas for Tuschar Chande's Momentum
Oscillator. For interpretation refer to the book The
New Technical Trader, by Tuschar Chande and Stanley
Kroll.
CMO_1
Sum( If( C ,> ,Ref( C, 1 ) , ( C  Ref( C ,1 ) ) ,0
) ,14 )
CMO_2
Sum( If( C ,< ,Ref( C ,1 ) , ( Ref( C ,1 )  C ) )
,0 ) ,14 )
CMO_Final
100 * ( ( Fml( "CMO_1" )  Fml( "CMO_2" ) ) / ( Fml( "CMO_1"
) + Fml( "CMO_2" ) ) )
You
could also combine the above three formulas into one formula.
The syntax would be:
100*((Sum(If(C,>,Ref(C,1),(CRef(C,1)),0),14))(Sum(If(C,<,REF(C,1),(REF(C,1)C),0),14)))
/((Sum(If(C,>,Ref(C,1),(CRef(C,1)),0),14)+(Sum(If(C,<,REF(C,1),(REF(C,1)C),0),14))))
***
These formulas were constructed using 14 time periods, you
can change this by replacing every occurrence of 14 with
your desired time period value.
(Go
Top) 
If(C>=Ref(C,11),1,1)+If(C>=Ref(C,12),1,1)+If(C>=Ref(C,13),1,1)+
If(C>=Ref(C,14),1,1)+If(C>=Ref(C,15),1,1)+If(C>=Ref(C,16),1,1)+
If(C>=Ref(C,17),1,1)+If(C>=Ref(C,18),1,1)+If(C>=Ref(C,19),1,1)+
If(C>=Ref(C,20),1,1)
(Go
Top) 
Comparative
Relative Strength charts can be useful in deciding which
security to buy, by helping to pinpoint the best performer.
They can also be useful in developing spreads, i.e., purchase
of the best performer "long", and selling the weaker issues
"short." Comparative Relative Strength can be applied in
MetaStock for Windows as follows:
Creation of a Template for Comparative Relative Strength
(For
this illustration, we assume an equity/stock is compared
to the S&P 500, both of which must first have been collected
from your vendor. Both data files should be in the same
periodicity.)

Load
the S&P 500.

Load
the equity, or whatever you wish to find the relative
strength for.

Drag
the S&P 500 plot into a new inner window of the
equity. (You may need to click Stack first.)

Close
the S&P 500 chart.

Create
a custom indicator: Div(close, p)

Drag
the custom indicator into the inner window containing
the S&P 500 plot, moving it over the plot until
the plot changes to a pink or lavender color, then release
your mouse button. (This is called dragging and dropping
an indicator on an indicator. The new indicator will
plot in the same window as the S&P 500 plot.) You
have two options here:

You
can change the color of the S&P 500 plot to
be the same as the chart background color, so that
it is effectively invisible. (Doubleclick the S&P
500 plot to get to its "properties", then choose
the color you need from the Colors list.)

You
can give both plots different colors so you can
tell which is which.

Save
this chart as a Template. (FileSave As, set "Save File
As Type" to Template, and give it a name, such as CMPRELST.MWT.)
Any
time you want to see Comparative Relative Strength of an
equity against the S&P 500, apply this template to the
equity's chart. Note: if you should move the data file against
which you are comparing, such as the S&P 500, this template
will no longer work, and would have to be recreated.
To
Run an Exploration Using Comparative Relative Strength

Load
the S&P 500 (or whatever you want to compare against).

Create
a custom indicator of the Close.

Drag
and drop this indicator on the S&P 500 (or whatever...).
(Note: the S&P 500 plot must change to pink/lavender
color before you drop it.) The indicator will plot.

Select
the indicator plot (by singleclicking with the left
mouse button on the line).

Do
an Exploration with DIV(Close,p) in column A, and specify
which directory to explore.

The
results are displayed in the Exploration report.
(P
is a special variable that points at the last indicator
plotted or selected.)
(Go
Top) 
(Sum(Mov(C
* (2.5/ Sqrt(50 * V)),10,S)
LLV(Mov(C * (2.5/ Sqrt(50 * V)),10,S),5), 3 ) /
Sum(HHV(Mov(C * (2.5/ Sqrt(50 * V)),10,S),5) 
LLV(Mov(C * (2.5/ Sqrt(50 * V)),10,S),5), 3) ) * 100
(Go
Top) 
The
Coppock Curve was developed by Edwin Sedgwick Coppock in
1962. It was featured in the November 94 issue of Technical
Analysis of Stocks & Commodities, in the article
"The Coppock Curve", written by Elliot Middleton.:
Taken
from Stocks & Commodities, V. 12:11 (459462): The Coppock
Curve by Elliott Middleton
"We
are creatures of habit. We judge the world relative to what
we have experienced. If we're shopping for a mortgage and
rates have been in the teens (as they were in the early
1980s) and then drop to 10%, we are elated. If, however,
they've been at 8% and then rise to 10%, we are disappointed.
It all depends on your perspective.
The
principle of adaptationlevel applies to how we judge our
income levels, stock prices and virtually every other variable
in our lives. Psychologically, relativity prevails..
SIMPLEST
FORMS
The
moving average is the simplest form of adaptationlevel.
Moving average crossover rules accurately signal the onset
of periods of returns outside the norm, whether positive
or negative. This makes moving average crossovers useful
to traders who want to get a boost on entering or exiting
stocks or funds.
The
oscillator is also based on adaptationlevel, although in
a slightly different way. Oscillators generally begin by
calculating a percentage change of current price from some
previous price, where the previous price is the adaptationlevel
or reference point. The mind is attuned to percentage changes
because they represent returns. If you bought Microsoft
Corp. stock (MSFT) at $50 and it goes to $80, you make 60%
before dividends. If you bought Berkshire Hathaway (BRK)
at $4,000 and it rises to $4,030, the same dollar gain,
you make 0.75% before dividends. It's the percentage change
that counts. Relativity again.
Coppock
reasoned that the market's emotional state could be determined
by adding up the percentage changes over the recent past
to get a sense of the market's momentum (and oscillators
are generally momentum indicators ). So if we compare
prices relative to a year ago  which happens to be the
most common interval  and we see that this month the market
is up 15% over a year ago, last month it was up 12.5% over
a year ago, and 10%, 7.5% and 5%, respectively, the months
before that, then we may judge that the market is gaining
momentum and, like a trader watching for the upward crossover
of the moving average, we may jump into the market."
The
MetaStock™ formula for the Coppock Curve is:
(MOV(ROC(MOV(C,22,S),250,%),150,E))/100
(Go
Top) 
If
you have Metastock formulas you would like to share,
Please email to
We look forward to hearing from you!
To learn
more about how to use Metastock and its formula click
here.
copyright
2003 MetaStock Website Home
Metastock®
is a registered trademark of Equis International.
