Backdating Metastock Explorations
Barnes' Accelleration
Barnes' Adaptive Forecast
Barnes' Moving Average
BDPL Trend Filter
Bearish Engulfing Pattern
Bianchi Approach
Biggest Losers
Binary Wave System Test for Metastock
Body Momentum
Bollinger Band Confirmation
Bollinger Band Histogram Karnish
Bollinger Band Hook Up and Hook Down
Breadth Thrust
Bollinger Bands 2
Bollinger Bands Formula 7 Day
Bollinger Band Width
Bollinger Band Width 2
Bollinger Optimised Synergy System
Boomers Buy and Sell
Boomers Trading Signals
Bottom Reversal
BradCCI
Brown's Indicator
Bull Fear/ Bear Fear
Bull Fear/ Bear Fear with DX System
Building Metastock System Tests
Bullish Engulfing Pattern

 

Backdating Metastock Explorations

Perhaps the above is enough for many traders, but a few further MetaStock nuances can add to the value of the information you've uncovered. For example, wouldn't you like to know which stocks have met the chosen crossover criteria in the past, say, five days? And wouldn't it be handy to be able to sort your newly discovered stocks in order of price or volume? If so, read on for a few more simple tips.

1. Go back to the main Explorer tool section, highlight your "Moving Average Crossover" Exploration, and hit the "edit" key this time. You can now make alterations to your Exploration. Ignore the upper "Notes" section and click on Column A first. You will see a large white field for entry of formulas and a small field in the lower left, entitled "Col Name." Simply put a "c" in the large formula section and "Close" in the column name section. Repeat these actions for Column B, with "v" and "Volume" respectively. Now when your Exploration presents you with your data, you can easily sort by price (c) or volume (v).

2. Finally, click on the "Filter" tab again to slightly modify your Exploration formula. The way you have it set up initially tells MetaStock to find all stocks which meet the criteria today. You now want it to find all stocks that have met these criteria over the past five days. The answer is the MetaStock Alert function, which is written "Alert( A , Number ) where "A" is any formula you care to choose, and "Number" is the number of days. So now you put your original formula in the place of A. The result is: "Alert( Cross( Mov(C,3,E) , Mov(C,10,E) ) ,5)" without the quotation marks. Save your new Exploration with the "OK" button and you're ready to find all stocks whose 3 day moving average passed above the 10 day moving average in the past five trading days!

The above information should allow you to write further Explorations by simply changing the numbers. If you prefer to use Exponential Moving Averages instead of Simple Moving Averages, change "s" to "e" in the formulas. You can also open up the ready made Equis Explorations, investigate how they're written, and change them with the "Edit" command (then saving with a new name). A further step is to investigate the hundreds of formulas available here on this web site and modify them in the same way. This is the quick and easy way to learn how to program with MetaStock. Follow the examples given by all the kind and clever MetaStock users who have gone before you, and tweak, tweak, tweak.

(Go Top)

Barnes' Accelleration

The Barnes' Acceleration measures rate of price change as opposed to price
levels

If the Barnes' Acceleration sustains the value of -1 for many days then the
security may be ready to show strong trend or it may already be trending.
Examine the chart for prolonged values at -1. This may indicate an upcoming
stall or turnaround. The number of days needed may be different depending on
the type of issue. A utility stock may need to sustain the -1 level for 10
days whereas a highly volatile technology stock may need to sustain the -1
trend for as little as 5 days.

From the 1981 Technical Commodity Yearbook, Robert M. Barnes
formula 1: if(mov(fml("Barnes' acceleration",2) - ref(fml("Barnes'
acceleration",2),-1),20,e)>0.0001,1, if(mov(fml("Barnes' acceleration",2) -
ref(fml("Barnes'
acceleration",2),-1),20,e)<-0.0001,-1,0))
formula 2: mov((c-ref(c,-1))/ref(c,-1),daysm,e)

(Go Top)

Barnes' Adaptive Forecast

Based on the premise that closing price may be predictable based on previous
closes

See (1981 Technical Commodity Yearbook Robert M. Barnes Van Nostrand
Reinhold 1981) for theory and applications.

formula 1: if(fml("Barnes' adaptive forecast",2)>0.05,1,if(fml("Barnes'
adaptive forecast",2)<-0.05,-1,0))
formula 2: mov(c,dayf,e) - ref(mov(c,dayf,e),-1)

(Go Top)

Barnes' Moving Average

See (1981 Technical Commodity Yearbook Robert M. Barnes Van Nostrand
Reinhold 1981) for theory and applications.

if (c - mov( c, dayf, e) > pf,
{ Then Action } 1,
{ Else Action } if ( mov( c, dayf, e) - c > pf, { Then } -1, { Else } 0))

{ Notice that comments may be placed within braces }

(Go Top)

BDPL Trend Filter

cum ((if ((mov((C-ref(C,-1)),21,s))>0,1,-1) * pwr(((mov((pwr(C-ref(C,-1),2)),21,s))+1),.5)) + ((pwr(((pwr(C-ref(C,-1),2))+1),.5))) * if ((C>ref(C,-1)),1,-1))

(fml(" BPDL Trend Filter") - (ref((fml(" BPDL Trend Filter")),-21))) / ((hhv(fml(" BPDL Trend Filter"),21)) - (llv(fml("BPDL Trend Filter"),21)))

BUY -1 SELL 1

(Go Top)

Bearish Engulfing Pattern

Col A: CLOSE

Filter BarsSince(EngulfingBull())<=5 AND BarsSince(ROC(C,60,%)<-15)<=5 ANDBarsSince(Stoch(9,1)<10)<=5

Filter enabled Yes

Periodicity Daily

Records required 1300

(Go Top)

Bianchi Approach

enter long

When(Mov( Mid(C, opt1) ,opt1,E),>,Mov(Mid(C, opt1),opt2,E))AND When(Ref(Mov(Mid(C,opt1),opt1,E),-1), <= ,(Ref(Mov((Mid(C,opt1)),opt2,E),-1)))AND When(Mov(Abs((Mo(opt3))),opt4,E),>,Ref(Mov(Abs((Mo(opt3))),opt4,E),-1))


enter short

When(Mov( Mid(C, opt1) ,opt1,E),<,Mov(Mid(C, opt1),opt2,E))AND When(Ref(Mov(Mid(C,opt1),opt1,E),-1), >= ,(Ref(Mov((Mid(C,opt1)),opt2,E),-1)))AND When(Mov(Abs((Mo(opt3))),opt4,E),>,Ref(Mov(Abs((Mo(opt3))),opt4,E),-1))

OPT 1: 5 to 20 step 1
OPT 2:10 to 16 step1
OPT3:5 to 15 step 1
OPT4:20 to 29 step 1
but you are free to change any value of OPT!

(Go Top)

Biggest Losers

Col A: CLOSE

Col B: ROC(C,5,%)

Filter: (ROC(C,5,%)>10 OR ROC(C,5,%)<-10) AND C>5

Filter enabled: Yes

(Go Top)

Binary Wave System Test for Metastock

{created by Jim Greening}

The basic idea behind a MetaStock binary wave is to use "if" statements on several MetaStock indicators and have them return plus one for a bullish indication, minus one for a bearish indication, and zero for a neutral condition. Then you add them all up for your binary wave indicator. I decided to format all my indicators so they could be plotted as a histogram. For these indicators plotting as histograms, positive is bullish and negative is bearish. To cut down on whipsaws, I decided that over +5 would be bullish, under -13 would be bearish and anything in between would be neutral. Therefore my binary wave formulas are:
BW2 Demand Index
If(Tema(DI(),21) > 5,+1,If(Tema(DI(),21) < -13,-1,0))
BW3 Linear Regression Slope
If(Tema(10000*LinRegSlope(C,34)/C,34) > 5,+1,
If(Tema(10000*LinRegSlope(C,34)/C,34) < -13,-1,0))
BW4 CCI
If(Tema(CCI(21),21) > 5,+1, If(Tema(CCI(21),21) < -13,-
1,0))
BW5 ROC
If(Tema(ROC(C,21,%),21) > 2,+1,If(Tema(ROC(C,21,%),21) <
-2,-1,0))
BW6 Money Flow
If(Tema(MFI(21),21)-50 > 5,+1,If(Tema(MFI(21),21)-50
< -5,-1,0))
BW7 CMO
If(Tema(CMO(C,21),21) > 5,+1,If(Tema(CMO(C,21),21)
< -5,-1,0))
BW8 VAR ma
If(Mov(C,21,VAR) > Mov(C,55,VAR) AND
HHV(Mov(C,233,VAR),5) =
HHV(Mov(C,233,VAR),13),+1,If(Mov(C,21,VAR) <
Mov(C,55,VAR) AND LLV(Mov(C,233,VAR),5) =
LLV(Mov(C,233,VAR),13),-1,0))
The next formula just adds up the binary wave.
BW Add
Fml("BW2") + Fml("BW3") + Fml("BW4") + Fml("BW5") +
Fml("BW6") + Fml("BW7") + Fml("BW8")
Next, I decided to do something a little different. Since the whole purpose of this test is to catch a trending stock, I decided to add an amplifier that would get larger as the trend got stronger. Since I like Fibonacci numbers, I decided to use Rsquared as a measure of trend strength and base my amplifier on Fibonacci numbers. The formula I finally came up with after a lot of tinkering follows.
BW Amplifier
If(RSquared(C,21) > 0.8,5,If(RSquared(C,21) >
0.6,3,If(RSquared(C,21) > 0.4,2,
If(RSquared(C,21)>0.2,1,0.5))))
The last step in constructing the binary wave was to decide on the smoothing and put it all together. Of course, I used tema smoothing.
Tema Binary Wave Composite
Periods := Input("Enter Tema Smoothing
Periods",8,233,21);
Tema(Fml("BW Add")*Fml("BW Amplifier"),Periods)

The final step is to come up with a system test for the Tema Binary Wave Composite. Remember, the binary wave is just made up of a bunch of technical indicators that I give a +1 value when bullish, 0 when neutral, and -1 when bearish. Then they are summed and smoothed. So in general a positive value is bullish and a negative value is bearish. Also a rising number is bullish and a falling number is bearish. Therefore you could use a zero crossover to the upside as a buy signal and a crossover to the downside as a sell signal. If you had a good algorithm, you could also use a rise from a negative peak (or trough) as a buy signal and a fall from a positive peak as a sell signal. I decided to use a 8 day moving average of the BW with a crossover of the BW for my algorithm in an attempt to get an early signal on a rise from a negative peak. It does have the disadvantage of finding way too many peaks so I only use it as an Alert. For confirmation I use the QStick function and a variable moving average function.
QStick was developed by Chande as a way to quantify candlesticks. Since the difference between the open and close prices lies at the heart of candlestick charting, QStick is simply a moving average of that difference. Negative values of QStick correlate to black candlesticks, positive values to white candlesticks. Since in general black candles are bearish and white candles are bullish, this indicator can also be plotted as a histogram and interpreted the same was as the Binary Wave. The formula is:
Periods := Input("Enter Periods",1,233,34);
Tema(Qstick(Periods),Periods)
Now to get my open long signal I use the ALERT signal with an 8 day vma BW crossover of the BW. Then to actually get the signal, I have to have both the QStick rising and the 21 day vma greater then the 55 day vma.

Therefore my buy signal became:
Enter Long
Alert(Cross(Fml("Tema Binary Wave Comp"),
Mov(Fml("Tema Binary Wave Comp"),8,S)),21) AND
HHV(Tema(Qstick(34),34),5) = HHV(Tema(Qstick(34),34),13) AND
Mov(H,21,VAR) > Mov(H,55,VAR)

Since the market has an upward bias, I wanted my sell signal to be more restrictive. Therefore instead of trying to catch a fall from a positive peak as my sell alert, I wanted a crossover of an optimized negative number. I still used QStick and vma to confirm and also added that the close should be lower than yesterdays low.

Therefore, my sell signal became:
Enter Short
Alert(Cross(-opt2,Fml("Tema Binary Wave Comp")),8) AND
Tema(Qstick(34),34) < -0.1 AND
C < Ref(L,-1) AND
Mov(L,21,VAR) < Mov(L,55,VAR)

Then I wanted exit conditions that were less then full signal reversals. I decided that the BW being less than a negative number would be my primary close long signal, but I also wanted confirmation from other indicators. After a lot of trial and error I used the following:

Close Long
Fml("Tema Binary Wave Comp") < -opt1 AND
Tema(Qstick(34),34) < 0 AND
LLV(Mov(L,21,VAR),5) = LLV(Mov(L,21,VAR),13)

Close Short
Fml("Tema Binary Wave Comp") > 0 AND
Tema(Qstick(34),34) > 0.08

Finally I also used Fibonacci numbers for my optimization:
Opt 1: Min 3, Max 13, Step 5
Opt 2: Min 3, Max 13, Step 5

(Go Top)

Body Momentum

{I was reading in Perry Kaufman's latest book and he described a little
oscillator he called "Body Momentum". This simply calculates the momentum of
the closes above the opens versus the closes below the opens. The theory is
that as prices move up, closing prices will be higher than opening prices
and vice-versa for down. If this oscillator is above 70 then the whites
(Candle-sticks) dominate and below 30 the blacks are dominant.}

{I also added a 3 day moving average to the calculation (for smoothing).}

{Here is the code:}

Lb:=Input("Look-Back Period?",3,60,14);
B:=CLOSE - OPEN;
Bup:= Sum(B > 0, Lb);
Bdn:= Sum(B < 0, Lb);
BM:=(Bup/(Bup+Bdn))*100;
Mov(Bm,3,S)

(Go Top)

Bollinger Band Confirmation

From: Ton Maas

According to most analysts, the Chaikin Oscillator, a diverse accumulation/distribution line, is a very good alternative to the OBV (On Balance Volume) indicator. Chaikin Oscillator basics are that a healthy trend will be confirmed by a healthy, positive volume development in the trend direction. The MFI (Money Flow Index) can also substitute for the Chaikin Oscillator.

Chaikin Oscillator formula:

Mov(cum(((C-L)-(H-C)/(H-L))*V),3,E)-Mov(cum(((C-L)-(H-C)/(H-L))*V),10,E)

(Go Top)

Bollinger Band Histogram Karnish

Recently, the "group" was able to supply me with the formula for making a Histogram out of the "bands". I find this the most useful application of Bollinger's formula. The following is the picture I draw:

((C+2*Std(C,20) - Mov(C,20,S)) / (4*Std(C,20)))*4 - 2

Under "properties", I then drop in +2 and -2 (because I'm not bright enough to program them in permanently). I think this is a much better view of the bands. As the price moves up and down as a % of the band width, all the classic applications of other "oscillator type" indicators work well (divergence, support/resistance, and overbought/oversold conditions when the price exceeds the Standard Dev. of +/-2).

This is just one of ten indicators that I use ... but, for traders trying to understand Bollinger's "envelopes", I think this reconfiguration gives a simpler, cleaner view which allows the technician to analyse the underlying issue without the "squiggles".

(Go Top)

Bollinger Bank Hook Up and Hook Down

I use the following indicators to show the price reversal of Bollinger Band penetration:

Name: Upper BB Hookdown
Formula:

UpperBB:= Mov(C,20,S) +(2*(Std(C,20)));
C < UpperBB AND Ref(C,-1) > Ref(UpperBB,-1);


Name: Lower BB Hookup
Formula:

LowerBB:= Mov(C,20,S) -(2*(Std(C,20)));
C > LowerBB AND Ref(C,-1) < Ref(LowerBB,-1);

(Go Top)

Bollinger Bands 2

I am sure Steve has done something better, but here is a simple (MetaStock) formula allowing you to draw Bollinger Bands as an oscillator:

100*(C-Mov(C,20,S)+2*Stdev(C,20))/(4*Stdev(C,20))

(Go Top)

Bollinger Bands Formula 7 Day

enter long
high>(mov(Close,20,S)-std(Close,20,2)) and
ref(low,-7)<ref((mov(Close,20,S)-std(Close,20,2)),-7)
exit long
close<(mov(Close,20,S)+std(Close,20,2)) and
ref(close,-7)>ref((mov(Close,20,S)+std(Close,20,2)),-7)
and
Mov((RSI(14)- LLV(RSI(14),14))
/(HHV(RSI(14),14)-(LLV(RSI(14),14))),14,E)*100<70 and
ref((Mov((RSI(14)- LLV(RSI(14),14))
/(HHV(RSI(14),14)-(LLV(RSI(14),14))),14,E)*100),-3)>70
and
(mov(Close,20,S)+std(Close,20,2))>(mov(c,89,s)+(.062*(mov(c,89,s))))

(Go Top)

Bollinger Band Width

John Bollinger describes BWI (Band Width Indicator) as the width of the bands divided by the average of the price:

4*(std(C,20))/mov(C,20,S)

I don't know if adding the moving average changes the usefulness of the prospecting; anyway, this is what Bollinger is suggesting.

I have written a MetaStock exploration to spot stocks whose BWI has reached extreme low readings. This shows when the BWI is at lower than its highest level for the last 250 days, divided by 3:

hhv(4*(std(C,20))/mov(C,20,S),250)/3

The stocks that pass this screening are usually in a non-trending mood, or rather in an
horizontal trend where the Bollinger Bands normally represent support and resistance levels. Otherwise, there are cases where the stock is just pausing before resuming a trend. In this second case the BWI doesn't remain under the trigger level for a long time.

A further remark is that when the stock enters a low-BWI period, it is often retesting a
previous support or resistance level.

Although I think BWI extreme lows are an interesting way to find low risk / low volatility stocks, they don't give any clue as of the direction of the following move.

(Go Top)

Bollinger Band Width 2

From: Philip Schmitz

MetaStock v6 does not appear to provide an indicator which shows the width of Bollinger
Bands, so I have concocted a simple one to suit my own needs:

"Band Width" = BBandTop(C, 70, E , 2) - BBandBot(C, 70, E , 2)

As a next step, I would like to devise an indicator which tells me how the current value of
"Band Width" relates to the overall range of Band Widths for a specified period, or, since my interest is commodities, the life of the contract -- in other words all data loaded. Where, on a percentage basis, does it fall?

(Go Top)

Bollinger Optimised Synergy System

BOSS -- Synergy with Bollinger by John Lowe (March 1998 issue of TAM, a Dutch
TA mag)

In this article John Bollinger gets mentioned as insisting on using a Price/Close
indicator in conjunction with a combined Price/Volume indicator. For example, Price
as a moving or exponential average, the Typical Price(High+Low+Close/3) or one of
the other on this theme of existing varieties. Bollinger strives for synergy, which has
to be confirmed by two of three indicators based on:

Closing-price, price and volume, the Bollinger Optimised Synergy System (BOSS):

1st criteria -- Bollinger Bands are best used in conjunction with Wilders' RSI(9 or 14),
an indicator based on closing price.

2nd criteria -- Price and volume, combined in the Chaikin Oscillator, are the other part
of the BOSS.

According to most analysts, the Chaikin Oscillator, a diverse
accumulation/distribution line, is a very good alternative to the OBV indicator.
Chaikin Oscillators' basics are that a healthy trend will be confirmed by a healthy,
positive volume-development in the trend-direction. The Chaikin Oscillator can be
substituted for with the Money Flow Index (MFI).

Chaikin Oscillator formula:

Mov(cum(((C-L)-(H-C)/(H-L))*V),3,E)-Mov(cum(((C-L)-(H-C)/(H-L))*V),10,E)

(Go Top)

Boomers Buy and Sell

A:Close
B:{Signal Buy=-1,Sell=1}
If(ADX(14)>30 and PDI(14)>MDI(14),-1,If(ADX(14)>30
and PDI(14)<MDI(14),1,0))
C:{setup}Ref(H,-2)>=Ref(H,-1) and Ref(H,-1)>=H and
Ref(L,-2)<=Ref(L,-1) and Ref(L,-1)<=L
D:{Entry}If(ADX(14)>30 and PDI(14)>MDI(14) and
Ref(H,-2)>=Ref(H,-1) and Ref(H,-1)>=H and
Ref(L,-2)<=Ref(L,-1) and
Ref(L,-1)<=L,HHV(H,3)+.125,IF(ADX(14)>30 and
PDI(14)<MDI(14) and Ref(H,-2)>=Ref(H,-1) and
Ref(H,-1)>=H and Ref(L,-2)<=Ref(L,-1) and
Ref(L,-1)<=L,LLV(L,3)-.125,0))
E:{Stop}If(ADX(14)>30 and PDI(14)>MDI(14) and
Ref(H,-2)>=Ref(H,-1) and Ref(H,-1)>=H and
Ref(L,-2)<=Ref(L,-1) and
Ref(L,-1)<=L,LLV(L,3)-.125,IF(ADX(14)>30 and
PDI(14)<MDI(14) and Ref(H,-2)>=Ref(H,-1) and
Ref(H,-1)>=H and Ref(L,-2)<=Ref(L,-1) and
Ref(L,-1)<=L,HHV(H,3)+.125,0))
F:ADX(14){Higher the better}
Filter:ColB and ColC

(Go Top)

Boomers Trading Signals

Boomers buysig

enter long
((adx(14)+adx(27))/2)>30 and pdi(27)>mdi(27)
exit long
c<=prev(llv(c,15)-.5, 1) or c<=.75*hhv(c,10)

Boomers watchsig**

enter long
prev(h,1)<=prev(h,2) and prev(l,1)>=prev(l,2) and
BullHarami()
exit long
c<=prev(llv(c,15)-.5, 1) or c<=.75*hhv(c,10)

Boomers watchsig 2**

(Ref not prev)
enter long
ref(h,-1)<=ref(h,-2) and ref(l,-1)>=ref(l,-2) and
BullHarami()
exit long
c<=ref(llv(c,15)-.5,-1) or c<=.75*hhv(c,10)

(Go Top)

Bottom Reversal

These are a collection of bottom signals. The search returns 1 for Ok and 0 for not ok.

  • CLOSE
  • EngulfingBull()
  • MorningDojiStar()
  • MorningStar()
  • WhiteSoldiers()

(Go Top)

BradCCI

BradCCI: From Bill S.

Plot 1: BradCCI Line 1: (((H+L+C)/3)-Mov(C,28,S))/(.015*Std(C,28))

Plot 2: BradCCI Line 2: Std(((h+l+c)/3),28)

To Line 1, you can also add trend lines, if you wish:

Plot 1:

1. BradCCI Line 1: (((H+L+C)/3)-Mov(C,28,S))/(.015*Std(C,28))
2. trend(100,100)
3. trend(-100,-100)
4. trend(0,0)

(Go Top)

Brown's Indicator

Name: RSI derivative index (EL) - C. Brown {EasyLanguage}

Formula:
Base:=Mov(RSI(14),6,S);
ATRcustom:=HHV(
ValueWhen(1,RSI(14)>Ref(RSI(14),-1),ATR(1))OR
ValueWhen(2,RSI(14)>Ref(RSI(14),-1),ATR(1))OR
ValueWhen(3,RSI(14)>Ref(RSI(14),-1),ATR(1)),14);
Part1:=
{up coefficient is a factor 2.3 and added}
(2.3*(Mov(ATRcustom, 15,S)));
Part2:=
{down coefficient is factor 2.1 and subtracted}
(2.1*(Mov(ATRcustom, 15,S)));
{Part3=if RSI closes up or equal to, than part1,
else, if RSI closes down, part2}
If( Base>=Ref(Base,-1),
{RSI up=TRUE, then} Base+Part1,{else}
{RSI up=FALSE,then} Base-Part2)

(Go Top)

Bull Fear/ Bear Fear

The system is a trend follower that appears to get you in at the early in a trend. If the trend breaks down for any reason, the system seems to take you out with relatively little pain, and there is a relatively high
percentage of losing trades (usually around 50%). Therefore, the system seems to perform best on issues that are prone to make prolonged moves. The trick is to find those issues. I do admit that the system is not perfect;
for instance, it is my belief that the exit could be improved on winners to preserve more profit. However, I've been unable to develop an alternative exit that improves the system return.

I've been trading this system myself for about a year and have had good results. Even in the April-September period when everything seemed to stall and move sideways, I was, at least able to hold my own and maintain my capital until the October break-always started to occur. For awhile, until I got bored with it, I phantom traded this system in the Yahoo Investment Challenge. I typically made about 20% a month using the system in that venue.


Buy
n :=opt2{Time periods};
BullFear := (HHV(HIGH,n) - LLV(HIGH,n))/2 + LLV(HIGH,n);
Cross(CLOSE,bullfear) AND
DX(10) > opt1

Sell
n :=opt2{Time periods};
BearFear := (HHV(LOW,n) - LLV(LOW,n))/2 + LLV(LOW,n);
CLOSE < bearfear

Optimize the time periods from 10 to 50 in increments of 1 while testing the DX from 5 to 30 in increments of 5 (you can do it in increments of 1 but it takes longer). Once the Optimal time period is determined in this manner,
then retest with the determined optimal time period and the DX in increments of 1. Note that this system is intended to be a stop and reverse system and you can use it to go short as well if you'd like to.

(Go Top)

Bull Fear/ Bear Fear with DX System

enter long:
n :=opt2{Time periods};
BullFear := (HHV(HIGH,n) - LLV(HIGH,n))/2 + LLV(HIGH,n);
Cross(CLOSE,bullfear) AND
DX(10) > opt1

close long:
n :=opt2{Time periods};
BearFear := (HHV(LOW,n) - LLV(LOW,n))/2 + LLV(LOW,n);
CLOSE < bearfear

(Go Top)

Building Metastock System Tests

Here's an excellent short article from Jim Greening, showing how MetaStock system tests can be built up . . .

This week I'm going to discuss my third MetaStock Profit System Test - 03_Tema PDI - MDI, ADX (Vol Required). This test is based on Wilder's directional movement indicators. As the MetaStock manual indicates, Wilder says a buy signal occurs when PDI - MDI moves above zero and a sell signal occurs when PDI-MDI falls below zero. I started with that thought and experimented a little. Wilder used 14 day periods to calculate his PDI and MDI functions. Since I like Fibonacci numbers, I used 13 days instead. Also I like to smooth my indicators so I used Tema smoothing. My custom PDI - MDI formula then became:

Tema PDI - MDI
Periods := Input("Enter Tema Smoothing Periods",8,55,13);
Tema(PDI(13) - MDI(13),Periods)

I started with the idea that I would take the PDI-MDI crossover of an optimized number as my basic buy and sell trigger. However, this number did not have to be zero and did not have to be the same for entering long and entering short. After a lot of trial an error I decide -1, -3, or -5 would be my enter long number and -5, -13, or -21 would be my enter short number. This makes sense since the market is biased to the up side, so entering a little under zero would get us in a little earlier. Also down moves tend to be fast an extreme and this would only let us in short for larger, faster down moves which is what I wanted. Finally I wanted some way to reduce the number of false signals and I wanted to do that with directional movement indicators only so this test would be completely uncorrelated with my other tests.
For long positions, I notice that most up moves started when adx was low and that adx climbed during the move to a max and then started to fall at the end of the move. Therefore, I thought an adx max and min for a buy signal would help reduce false signals. After some experimenting, I set the min at 8 and the max at 21. I also noticed that most good buy points occurred when MDI and ADX were close together so I decided that the difference between the two should be small. After more experimenting, I decided on the following for my open long signal:

Open Long:
Alert(Cross(Fml("Tema PDI - MDI"),opt1),13) AND
MDI(13) - ADX(13) <= 4 AND
MDI(13) - ADX(13) >= -2 AND
ADX(13) >= 8 AND
ADX(13) <= 21

To close my open long position I wanted the PDI-MDI to be less than opt1. When a stock starts to drop, the MDI starts to rise, so I wanted the MDI to be greater than a certain number to close a position. Finally, since markets are biased upwards, I also wanted the 55 day variable moving average to be dropping before I closed the position. Therefore, the close long became:

Close Long:
Fml("Tema PDI - MDI") < opt1 AND
MDI(13) > 21 AND
LLV(Mov(L,55,VAR),5) = LLV(Mov(L,55,VAR),13)

To open a short position, I wanted the PDI-MDI to cross below a fairly high negative number. I wanted confirmation in that the adx was still fairly high when that happened. The answer was:

Open Short:
Alert(Cross(opt2,Fml("Tema PDI - MDI")),8) AND
ADX(13) > 34

To close the short position, I only wanted PDI-MDI to be greater than a certain positive number. I don't like a lot of confirmations for closing shorts. With the bias being up, you need to close shorts fast. My close Short and optimization became:
Close Short:
Fml("Tema PDI - MDI") > 13

Optimization:
Opt1: Min = -1 Max = -5 Step = 2
Opt2: Min = -21 Max = -5 Step = 8

That's it. Any comments or questions?

(Go Top)

Bullish Engulfing Pattern

ColA: CLOSE

Filter BarsSince(EngulfingBear())<=5 AND BarsSince(ROC(C,60,%)>15)<=5 AND BarsSince(Stoch(9,1)>90)<=5

Filter enabled Yes

Periodicity Daily

Records required 1300

(Go Top)

Breadth Thrust

The Breadth Thrust indicator is a market momentum indicator developed by Dr. Martin Zweig. The Breadth Thrust is calculated by taking a 10-day exponential moving average of the advancing issues divided by the advancing plus declining issues.

According to Dr. Zweig a Breadth Thrust occurs when, during a 10-day period, the Breadth Thrust indicator rises from below 40 percent to above 61.5 percent. A "Thrust" indicates that the stock market has rapidly changed from an oversold condition to one of strength, but has not yet become overbought.

Dr. Zweig also points out that there have only been 14 Breadth Thrusts since 1945. The average gain following these 14 Thrusts was 24.6 percent in an average time frame of 11 months. Dr. Zweig also points out that most bull markets begin with a Breadth Thrust.

To plot the Market Breadth in MetaStock™ for Windows you will need to:

  • Create a composite security of the Advancing Issues + Declining Issues in The DownLoader™.

  • In MetaStock open a chart of the composite and a chart of the Advancing Issues.

  • Tile the charts so you can see both of them on the screen.

  • Drag the plot of the composite into the chart of the Advancing Issues.

  • Create the custom indicator: mov( C / P, 10, E ), then plot it on top of the plot of the composite (the composite's plot will turn a purplish color ). If you get a flat line then it was not plotted directly on top of the composite's plot.

  • You can then right-click on the Breadth Thrust, select Breadth Thrust Properties, go to the Horizontal Lines page and add horizontal lines at 40 and 60.

(Go Top)