MACD Additions
MACD Crossover Buy Signal
MACD Crossover System test in MetaStock, an example of how to create
MACD Custom
MACD Histogram Divergence
MACD Offset
MACD Tops and Bottoms
Mark Brown Band2 Study
Market Pressure - Ultimate
McClellan Oscillator
McClellan Summation Index
Metastock % Bands Revised
Metastock Adjustable Trading Bands
Metastock Automatic Trendline Formula
Metastock Custom Indicator Moving Averages
Metastock Expert Commentary by Michael Arnoldi
Metastock SAR Exploration

Market Facilitation Index
Market Facilitation Index Expert Advisor
Market Thrust Oscillator
Martin Pring's KST Formulas
Mass Index

MACD Crossover System
Metastock-Stocks Closing Above 60 Day High
Mick's Breakout Exploration
Miesal Indicator
Mixed Balance Point Krause Update
Modified 50 Day Moving Average
Modified Williams %R Metastock Indicator
Money Flow Index
MovAvg Asymmetric Volatility Price Bands
Moving Average Channel
Moving Average Crossover---Bullish
Moving Average Crossovers
Moving Average Violated By %
MTF-Fixed Balance Point
MTF Tendency Update
Multipart Formulas
Mutated Variables, Volatility and a New Market Paradigm
My version of Tushar Chande's Vidya using the P variable

McGinley Dynamic
Modified VIX Indicator
Morris Double Momentum Indicator
Moving Average of Only One Day of the Week

 

MACD Additions

{These MetaStock MACD indicator formulas allow user input for parameters when run}

mp1:=Input("Short MA",1,377,13);
mp2:=Input("Long MA",1,377,34);
Mov(C ,mp1 ,E )- Mov(C ,mp2 ,E )
MACD signal line
mp1:=Input("Short MA",1,377,13);
mp2:=Input("Long MA",1,377,34);
mp3:=Input("Signal MA",1,377,89);
Mov( (Mov(C ,mp1 ,E )- Mov(C ,mp2 ,E )),mp3,E)

MACD - Signal Line
mp1:=Input("Short MA",1,377,13);
mp2:=Input("Long MA",1,377,34);
mp3:=Input("Signal MA",1,377,89);
(Mov(C,mp1,E)-Mov(C,mp2,E))-(Mov((Mov(C,mp1,E)-Mov(C,mp2,E)),mp3,E))

(Go Top)

MACD Crossover Buy Signal

Shows those stocks where an MACD crossover has been signalled.The search returns 1 for Ok and 0 for not ok.

  • CLOSE
  • MACD()
  • Ref(MACD(),-1)
  • Mov(MACD(),9,EXPONENTIAL)
  • Ref(Mov(MACD(),9,EXPONENTIAL),-1)
  • ((MACD() - Mov(MACD(),9,EXPONENTIAL)) /Mov(MACD(),9,EXPONENTIAL)) * 100
  • **Cross( MACD(), Mov(MACD(),9,EXPONENTIAL))

(Go Top)

MACD Crossover System test in MetaStock, an example of how to create

Enter Long:
Mov(C,5,E) > Mov(C,13,E)
AND Mov(C,13,E) > Mov(C,40,E)

Close Long:
Cross(Mov(C,13,E),Mov(C,5,E))

Now you can play with these combinations on both the enter long and close long side. For example,
keep the same Enter Long but change the Close Long to =

Cross(Mov(C,40,E) ,Mov(C,5,E) )

This will keep you in the trade longer. You may want to enter when the 5 crosses above the 13 and not wait for the 40 OR, you may just want to use the 5 cross above the 40 and forget about the 13.

(Go Top)

MACD Custom

The Input() Function(MSK-man. p.271-273) cannot be used directly in the Explorer (MSK-man. p.351). It is reserved to be used in a custom indicator. However, the custom indicator's default value can be used in an exploration.

Since you have created a {faulty} custom indicator, than just re-code it. By referencing the Input() Function using the fml() CALL Function
(MSK-man.p.226-227 and 208-209 and 212), you can still use its {by you at design time} assigned Default value.

Custom Indicator :
Name: MACDcustom
Formula:
MAprd:=Input( "Periods", 5 {Minimum}, 30 {Maximum}, 14 {Default} );
YourTrig:=Mov( MACD(), MAprd, E );
MACD();
YourTrig

When creating the exploration just click the function button and look under the Custom Indicators heading for both of the above custom indicator functions, and "Open" each of them one by one, to paste them into your column TABs (MSK-man. p.347-348) .

Exploration:
Name: MACD crosses my Trigger
Columns:
Cola:
Name: Close
Formula:
C
Colb:
Name: MACD
Formula:
FML( "MACDcustom , MACD" )
Colc:
Name: MACDTrigger
Formula:
FML( "MACDcustom , YourTrig" )
Filter:
Formula:
Colb > Colc
{or
FML( "MACDcustom , MACD" ) > FML( "MACDcustom , YourTrig" )
}

(Go Top)

MACD Histogram Divergence

This explorer looks for stocks exhibiting extreme divergence from the MACD Histogram.  In his book "Trading for a Living", Alexander Elder argues that divergence from the MACD Histogram gives the strongest signals in the whole of technical analysis.

ColA:

md := MACD();

mdhist := md - Mov(md,9,E);

Correl(((Sum(Cum(1)*( mdhist ),100))-(Sum(Cum(1),100)*

Sum(( mdhist ),100)/100))/((Sum(Power(Cum(1),2),100))-

(Power(Sum(Cum(1),100),2)/100)),((Sum(Cum(1)*C,100))-(Sum(Cum(1),100)*

Sum(C,100)/100))/((Sum(Power(Cum(1),2),100))-(Power(Sum(Cum(1),100),2)/100)

),12,0)

Filter Column:

colA and colA <-0.8

The above formula can also be combined with a volatility buy signal and a volume signal. The following addition is then made.

ColB: The volatility buy signal

H > Ref(C,-1) + 1.8 * Ref( ATR(10),-1)

ColC: Volume 10% above the average of the previous 10 days

V > 1.1 * Ref( Mov(V,10,E),-1)

Filter Column:

colA AND colB AND colC AND colA <-0.80

Initial tests with this system have been encouraging.

(Go Top)

MACD Offset

(MACD()*10 +50) {offset the MACD to 50}

(Go Top)

MACD Tops and Bottoms

QUESTION: As you know, MACD is always bottoming or topping before crossing its trigger line. However, the MACD signal comes always a bit late compared to price movement. Is there any way to calculate the MACD first derivative function to identify MACD tops/bottoms, that could be use by the Explorer or the System Tester?

ANSWER: One way to do what you want would be using the 'Rate of Change' function.

For example:

RocPeriods:=1; ROC(MACD(),RocPeriods,$)

or for the MACD histogram you would have

RocPeriods:=1; ROC(MACD() - Mov(MACD(),9,E),RocPeriods,$)

If that is to noisy, you could smooth it a bit with: RocPeriods := 1; MovAvePeriod :=1; ; Mov(3 * ROC(MACD(),RocPeriods,$) , MovAvePeriod,E) {the 3 just 'magnifies' the line on the plot but doesn't affect the calculation} or for the MACD histogram:

RocPeriods := 1; MovAvePeriod :=1; ; Mov(3 * ROC(MACD() - Mov(MACD(),9,E),RocPeriods,$) , MovAvePeriod,E)

Another way to do what you want would be to look for peaks and troughs using the 'Peak' and 'Trough' functions. I'm working on code to identify divergences using this method.

QUESTION: As you know, MACD is always bottoming or topping before crossing its trigger line. However, the MACD signal comes always a bit late compared to price movement. Is there any way to calculate the MACD first derivative function to identify MACD tops/bottoms, that could be use by the Explorer or the System Tester?

ANSWER: One way to do what you want would be using the 'Rate of Change' function.

For example:

RocPeriods:=1; ROC(MACD(),RocPeriods,$)

or for the MACD histogram you would have

RocPeriods:=1; ROC(MACD() - Mov(MACD(),9,E),RocPeriods,$)

If that is to noisy, you could smooth it a bit with:

RocPeriods := 1; MovAvePeriod :=1; ; Mov(3 * ROC(MACD(),RocPeriods,$) , MovAvePeriod,E) {the 3 just 'magnifies' the line on the plot but doesn't affect the calculation} or for the MACD histogram: RocPeriods := 1; MovAvePeriod :=1; ; Mov(3 * ROC(MACD() - Mov(MACD(),9,E),RocPeriods,$) , MovAvePeriod,E)

Another way to do what you want would be to look for peaks and troughs using the 'Peak' and 'Trough' functions. I'm working on code to identify divergences using this method.

(Go Top)

Mark Brown Band2 Study

{Name: %Bands}
Pds:= Input("EMA Periods?",1,1000,21);
Pct:= Input("Percentage Bands?",0.1,10,5);
MA:= Mov(C,Pds,E);
TBnd:= MA*(1+Pct/100);
LBnd:= MA*(1-Pct/100);
MA;TBnd;LBnd;

{Name: %BandsCount}
Pds:= Input("EMA Periods?",1,1000,21);
Pct:= Input("Percentage Bands?",0.1,10,5);
MA:= Mov(C,Pds,E);
TBnd:= MA*(1+Pct/100);
LBnd:= MA*(1-Pct/100);

IUp:= (H > TBnd) * Ref((H <= TBnd),-1);
CntUp:= IUp + BarsSince(IUp=1) * (H > TBnd);

IDn:= (L < LBnd) * Ref((L >= LBnd),-1);
CntDn:= IDn + BarsSince(IDn=1) * (L < LBnd);
CntUp; -CntDn;

EXPERT
{Name: %Bands}

Symbols tab.
{Name: %BandUp}
FmlVar("% BandsCount","CNTUP") >= 1
{Graphic: Dot, Small, Green, Above price plot}

Symbols tab.
{Name: %BandDn}
FmlVar("% BandsCount","CNTDN") >= 1
{Graphic: Dot, Small, Magenta, Below price plot}

(Go Top)

Market Pressure - Ultimate

This is the basic calculation:
If toadies close is greater than yesterdays close and toadies volume is greater than yesterdays volume, write down toadies volume * close, otherwise, If toadies close is less than yesterdays close and toadies volume is less than yesterdays volume, write down todays volume as a negative number * close, otherwise write down 0.

Then add up the past 7 days and * 4, add this to the past 14 days total and * 2, add this to the past 28 days total. Plot this grand total in your chart for each new trading day.

Simple Interpretation:
Market Pressure - Ultimate can show divergences with the instrument it is plotted against. It may show signs of support and resistance when the indicator hits areas of support/resistance on its own graph. Comparing rates of change/moving averages of the indicator against that of the instrument may reveal accumulation/distribution pressures.

Metastock code for Market Pressure - Ultimate:

Sum(If(C > Ref(C,-1)
AND V > Ref(V,-1),
V * C,
If(C < Ref(C,-1)
AND V < Ref(V,-1),
Neg(V) * C,0)),7) * 4 +

Sum(If(C > Ref(C,-1)
AND V > Ref(V,-1),
V * C,
If(C < Ref(C,-1)
AND V < Ref(V,-1),
Neg(V) * C,0)),14) * 2 +

Sum(If(C > Ref(C,-1)
AND V > Ref(V,-1),
V * C,
If(C < Ref(C,-1)
AND V < Ref(V,-1),
Neg(V) * C,0)),28)

(Go Top)

McClellan Oscillator

The McClellan Oscillator, developed by Sherman and Marian McClellan, is a market breadth indicator that is based on the smoothed difference between the number of advancing and declining issues on the New York Stock Exchange. The McClellan Oscillator is one of the most popular breadth indicators. Buy signals are typically generated when the McClellan Oscillator falls into the oversold area of -70 to -100 and turns up. Sell signals are generated when the oscillator rises into the overbought area of +70 to +100 and then turns down.
Extensive coverage of the McClellan Oscillator is provided in their book Patterns for Profit .

To plot the McClellan Oscillator, create a composite security in The DownLoader™ of Advancing Issues minus Declining Issues. Open a chart of the composite in MetaStock™ and plot this custom indicator.

Mov(CLOSE,19,EXPONENTIAL) - Mov(CLOSE,39,EXPONENTIAL)

(Go Top)

McClellan Summation Index

The McClellan Summation Index is a market breadth indicator developed by Sherman and Marian McClellan. It is a long-term version of the McClellan Oscillator and its interpretation is similar to that of the McClellan Oscillator except that it is more suited to major trend reversals.

For more extensive coverage of the index refer to the book Patterns for Profit, by Sherman and Marian McClellan.

McClellan suggests the following rules for use with the summation Index:

Look for major bottoms when the Summation Index falls below -1300.

Look for major tops to occur when a divergence with the market occurs above a Summation Index level of +1600.

The beginning of a significant bull market is indicated when the Summation Index crosses above +1900 after moving upward more than 3600 points from its prior low (e.g. the index moves from -1600 to +2000).

The summation index is plotted by adding the Cum function to the McCllellan Oscillator.

The formula is Cum(Mov(C,19,E) - Mov(C,39,E)).

(Go Top

Metastock % Bands Revised

I found a problem with the %Bands formulas posted yesterday. No matter what optional parameters are entered for EMA length or % bandwidth, the Expert appears to read only the default values. As a result, when using other than default parameters, the coloured dots appear in inappropriate places. If the coloured dots are considered unnecessary the Expert can simply be detached.

Alternatively, below is a hard-coded version. There is no screen to enter optional parameters. Instead, plot the %Bands formula,then right-click on one of the bands, select '%Bands Properties', then the 'Formula' tab, and change the parameters in the first two lines of the %Bands formula; click 'OK'. Or make the change in the Formula Editor. The values need to be entered only once, in the %Bands formula; the %BandsCount formula and the Expert will take their values from that. For regular use, get the display to your liking, then create a template.

{NAME: %Bands}

Pds:= 21; {ENTER EMA LENGTH}

Pct:= 2.5; {ENTER PERCENT BANDWIDTH}

MA:= Mov(C,Pds,E);
TBnd:= MA*(1+Pct/100);
LBnd:= MA*(1-Pct/100);
MA; TBnd; LBnd;

{NAME: %BandsCount}

{USE WITH %BANDS FORMULA}

TBnd:= FmlVar("%Bands","TBND");
IUp:= (H > TBnd) * Ref((H <= TBnd),-1);
CntUp:= IUp + BarsSince(IUp=1) * (H > TBnd);

LBnd:= FmlVar("%Bands","LBND");
IDn:= (L < LBnd) * Ref((L >= LBnd),-1);
CntDn:= IDn + BarsSince(IDn=1) * (L < LBnd);
CntUp; -CntDn;

EXPERT

{Name: %Bands}

Symbols tab.
{NAME: %BandUp}
FmlVar("%BandsCount","CNTUP") >= 1
Graphic tab: Dot, Small, Green, Above price plot

Symbols tab.
{NAME: %BandDn}
FmlVar("%BandsCount","CNTDN") >= 1
Graphic tab: Dot, Small, Magenta, Below price plot

(Go Top

Metastock Adjustable Trading Bands

Using the default values used in the formulas, I have found that these upper and lower bands provide effective risk control while trading. The upper band can be used as the extreme point to get rid of shorts and vice versa. In fact, prices tend to remain above both the bands while the market is in a strong uptrend, and prices remain below the bands in a downtrend. During short-term range-bound markets, they tend move between the bands. I have found this idea in Tushar Chande's "New Technical Trader". Since you have studied ATR so thoroughly, it would be be very nice if you could comment on them. Can be made into a template for easier usage.

Upper Band

Prd1:=Input("ATR Period",5,20,5);
Prd2:=Input("Period for Highest High Value",5,20,10);

(HHV(LLV(L,Prd1)+ATR(Prd1),Prd2))

Lower Band

Prd1:=Input("ATR Period",5,20,5);
Prd2:=Input("Period for Lowest Low Value",5,20,10);

(LLV(HHV(H,Prd1)-ATR(Prd1),Prd2))

(Go Top)

Metastock Automatic Trendline Formula

Trough(1,L,10)+

((((Trough(1,L,10)-Trough(2,L,10))

/

(TroughBars(2,L,10)-TroughBars(1,L,10)))

*TroughBars(1,L,10)))

This formula will draw a trendline from the most recent bottom. The L (low) can be changed to C (close) and the 10 can be changed to a different percent value. You will also need to change the line style to the last one in the drop down list.

Mike Helmacy www.techanalysis.com

Those who know me have found out I vacillate between the VERY complicated and the very simple. I have been following a few stocks (medium volatility, but good %% moves both up and down over a 2-5 week time frame) and tracking them with about 15 templates on which most of the formulas that I have acquired reside. I wanted to track those that did best and those that were not as effective. I also tracked those formulas that were late in showing turns in momentum vs those that caught the turn close on. In this regard, I was looking for finding stocks at intermediate term lows and highs, NOT for indicators that identified stocks that had begun their run in any direction and were destined to continue. As a result, I came up with a very simple indicator that showed a HIGH degree of accuracy in "turn-calling", but it did NOT give me indication of the strength or duration of the new move, only that it probably would occur. I believe that I have finally discovered that any signal of a change in momentum will NEVER give you a sense of strength or duration BY ITS VERY NATURE, and that only signals that identify stocks WITHIN a momentum trend (ie..already established) are able to do that. My momentum trend change indicator is derived from an intermediate trend indicator I've used for some time in MSWIN 6.0...

PDI(34) - MDI(34)

My new formula is...........

((PDI(8) - MDI(8)) - (PDI(21) - MDI(21))) + (PDI(13) - MDI(13))

Try it......I think you'll like it......and it's the same coding in WOW, I believe..........BW Chan I have posted an update to the RMTA and TOSC formula's, the first formulas had an "Absolute Value" that wasn't called for in the article ( I had mistaken the "[" "]" to mean "|" "|"). The new formulas seem to plot exactly as the old......but I wanted the code to match the math in the article. Thanks go out to William Golson for the help.

(Go Top)

Metastock Custom Indicator Moving Averages

periods1:=Input("Periods of ROC",2,50,12);

periods2:=Input("Smoothing Period",1,50,1);

Input("horizontal line 1",-50,50,5);

Input("horizontal line 2",-50,50,-5);

Mov(ROC(C,periods1,%),periods2,S);

(Go Top)

Metastock Expert Commentary by Michael Arnoldi

Review of : <symbol>
as of <date>
TODAY'S CLOSE WriteVal(CLOSE,2.3)
TOMORROW's
PROJECTED HIGH
WriteIf(C<O, "WRITEVAL(-L+ (H+2*L+C)/2,25.2)")
WriteIf(C>O, "WRITEVAL(-L+ (2*H+L+C)/2,25.2)")
WriteIf(C=O, "WRITEVAL(-L+ (H+L+2*C)/2,25.2)")
PROJECTED LOW
WriteIf(C<O, "WRITEVAL(-H+ (H+2*L+C)/2,25.2)")
WriteIf(C>O, "WRITEVAL(-H+ (2*H+L+C)/2,25.2)")
WriteIf(C=O, "WRITEVAL(-H+ (H+L+2*C)/2,25.2)")

BOLLINGER BANDS
CLOSING PRICE:WRITEVAL(C,2.3)
BOLLINGERBAND TOP:
WRITEVAL( BBandTop(C,21,E,2),13.3)
21 DAY MOVING AVERAGE:
WRITEVAL(MOV(C,21,E),13.3)
BOLLINGERBAND BOTTOM:
WRITEVAL( BBandBOT(C,21,E,2),13.3)

(Go Top)

Metastock SAR Exploration

{cola:BUY: this means: label column A as "BUY" and then enter the following formula:}

Cross(L,(SAR(.02,.2)))

{colb:SELL: this means: label colum B as "SELL" and then enter the following formula:}

Cross(SAR(.02,.2),H)

{enter the following in the filter section:}

cola=1 or colb=1

{where the AF=0.02 which you can change. try doing a sys test by replacing the numbers with opt1 & opt2}

(Go Top)

Metastock-Stocks Closing Above 60 Day High

To find the securities that have closed above their high today (the last trading day in the database) for the first time, I have written this MetaStock Explorer.

ColA: {Close) C
ColB: {Previous 60-day High} Ref(HHV(H,60), -1)
ColC: {Current 60-day High} HHV(H,60)
ColD: {Volume} V
Filter: (colA>colB) AND (Ref(C,-1)<Ref(HHV(H,60), -1)) AND
(H=HHV(H,60))

This formula does two things:

1) It lists only those securities which have met the required conditions only on the last trading day.
2) The new 60-day high must have taken place only on the last trading day.

from Rajat Bose

{Stocks Closing Above 60 Day Highs}


{closing above the 60-day high of the close}

close>ref(hhv(close,60),-1)


if you want those that are {closing above the 60-day intraday high}

close>ref(hhv(high,60),-1)

(Go Top)

Mick's Breakout Exploration

This is a MetaStock formula that I have had good success with. Copy and paste this into the Explorer filter.
C>Ref(C,-1) AND C>Ref(C,-2) AND C>Ref(C,-3) AND C>Ref(C,-4) AND
Ref(C,-1)<=Ref(C,-2) AND
Ref(C,-1)<=Ref(C,-3) AND
Ref(C,-1)<=Ref(C,-4) AND
Ref(C,-2)<=Ref(C,-3) AND

Ref(C,-2)<=Ref(C,-4) AND
Ref(C,-3)<=Ref(C,-4)

This formula will pick up all stocks that have closed up either the same as the previous day or below the previous day for 3 days, then on the 4th day closes up higher than the previous 3 days close. The reason that I specified that the first 3 days close was the same as or less than the previous days close was that it would pick up all stock in an up trend if it was just the 4th day closing higher than the 3 previous you would get hundreds of returns on the search. It will pick up stock that was in a trading range or consolidating, then breaking out of the range. The reason that I had the 4th day higher than the 3 previous was because it would otherwise pick stock in a downtrend with no significant increase in the close on day 4. Once I have a short list, I check it with Daryl's 3 day countback line and sometimes run a 10/30 moving average. If the stock breaches the previous day's close on the open, I will enter the trade and put a trailing stop loss into play.

(Go Top)

Miesal Indicator

"It's a short term timing tool. It's not worth using for long term investors. Some have also suggested using periods of 25 or 50 days, though I use only 10 days. Others have suggested it's very useful when used in conjunction with Welles Wilder's RSI."

Sum(If(C > Ref(C,-1), +1, If(C < Ref(C,-1), -1, 0)),10)

Entry/Exit signal
buy:
Fml("CCIF-P")>Ref(Fml("CCIF-P"),-1) AND
Cross(Fml("CCIF-P"),-100) OR
Cross(Fml("CCIF-P"),100)

sell:
Fml("CCIF-P")<Ref(Fml("CCIF-P"),-1) AND
Cross(100,Fml("CCIF-P")) OR
Cross(-100,Fml("CCIF-P"))
{horizontal lines @ -100 & +100}

where:
{"CCIF-P" is}
(CCI(8)+CCI(13)+CCI(21))/3

(Go Top)

Mixed Balance Point Krause Update

I have updated some of the code since my last post concerning the TASC articles written by Robert Krausz. The code now plots on the proper days (instead of 1 day ahead) and they should also be more efficient to calculate. These are named different so you should delete the old code after you have installed the new. I will
also post a follow up with a graphic to show how these plot. Note: the formulas on the Equis web page WILL NOT calculate for missing days (Holidays).

(Go Top)

Modified 50 Day Moving Average

N:=50;
TN:=Mov(C,N,S);
sOneA:=((n-1)/2)*C+
((n-3)/2)*Ref(C,-1)+
((n-5)/2)*Ref(C,-2)+
((n-7)/2)*Ref(C,-3)+
((n-9)/2)*Ref(C,-4)+
((n-11)/2)*Ref(C,-5)+
((n-13)/2)*Ref(C,-6)+
((n-15)/2)*Ref(C,-7)+
((n-17)/2)*Ref(C,-8)+
((n-19)/2)*Ref(C,-9);
sOneB:=((n-21)/2)*Ref(C,-10)+
((n-23)/2)*Ref(C,-11)+
((n-25)/2)*Ref(C,-12)+
((n-27)/2)*Ref(C,-13)+
((n-29)/2)*Ref(C,-14)+
((n-31)/2)*Ref(C,-15)+
((n-33)/2)*Ref(C,-16)+
((n-35)/2)*Ref(C,-17)+
((n-37)/2)*Ref(C,-18)+
((n-39)/2)*Ref(C,-19);
sOneC:=((n-41)/2)*Ref(C,-20)+
((n-43)/2)*Ref(C,-21)+
((n-45)/2)*Ref(C,-22)+
((n-47)/2)*Ref(C,-23)+
((n-49)/2)*Ref(C,-24)+
((n-51)/2)*Ref(C,-25)+
((n-53)/2)*Ref(C,-26)+
((n-55)/2)*Ref(C,-27)+
((n-57)/2)*Ref(C,-28)+
((n-59)/2)*Ref(C,-29);
sOneD:=((n-61)/2)*Ref(C,-30)+
((n-63)/2)*Ref(C,-31)+
((n-65)/2)*Ref(C,-32)+
((n-67)/2)*Ref(C,-33)+
((n-69)/2)*Ref(C,-34)+
((n-71)/2)*Ref(C,-35)+
((n-73)/2)*Ref(C,-36)+
((n-75)/2)*Ref(C,-37)+
((n-77)/2)*Ref(C,-38)+
((n-79)/2)*Ref(C,-39);
sOneE:=((n-81)/2)*Ref(C,-40)+
((n-83)/2)*Ref(C,-41)+
((n-85)/2)*Ref(C,-42)+
((n-87)/2)*Ref(C,-43)+
((n-89)/2)*Ref(C,-44)+
((n-91)/2)*Ref(C,-45)+
((n-93)/2)*Ref(C,-46)+
((n-95)/2)*Ref(C,-47)+
((n-97)/2)*Ref(C,-48)+
((n-99)/2)*Ref(C,-49);
sOne:=sOneA+sOneB+sOneC+sOneD+sOneE;
yTwo:=TN+(6*sOne)/((N+1)*N);
yTwo

(Go Top)

Modified Williams %R Metastock Indicator

by Rajat Bose

Periods := Input("Time Period", 3,50,5);
NumDev := Input("No. of Standard Deviations", 1,5,2);

(100*(C-BBandBot(C, Periods, S, NumDev))/((( BBandTop(C, Periods, S,
NumDev))-(BBandBot(C, Periods, S, NumDev)))))

{All I have done here is to substitute High and Low of any bar with that of Bollinger Band Top and Bollinger Band Bottom. I have tested it on various time periods (for Bollinger Bands) using 2 standard deviations. It sometimes gives an early indication of reversals than the Williams %R of the same period. Divergences have also been somewhat better. However, the structure shows that most of its properties are similar to those of the Williams %R or, for that matter, of any other overbought-oversold indicator.}

(Go Top)

Money Flow Index

The MFI (Money Flow Index) can be used in place of the OBV (On Balance Volume) and Chaikin Oscillator to confirm Bollinger Bands.

From Stocks & Commodities magazine, v. 12:8 (321-324): SIDEBAR: The Money Flow Index

"The money flow index (MFI) is a volume-weighted form of the relative strength index (RSI). Instead of using up closes versus down closes, the MFI compares today's average price to yesterday's average price and then weighs the average price by volume to calculate money flow (MF). The ratio of the summed positive and negative money flows are then normalized to be on a scale of zero to 100."

Here are the MetaStock formulas for the Money Flow Index:

Positive Money Flow:
sum ( if ( typ( ) ,> ,ref ( typ ( ) ,-1 ) ,V * typ ( ) ,0 ) , PERIODS)

Negative Money Flow:
sum ( if ( typ( ) ,< ,ref ( typ( ) ,-1) ,V * typ ( ) * -1 ,0 ) , PERIODS)

Money Flow Ratio:
fml ( "Positive Money Flow" ) / fml ( "Negative Money Flow" )

Money Flow Index:
100 - ( 100 / ( 1 + fml ( "Money Flow Ratio" ) ) )

NB:The time periods are controlled by PERIODS in the Positive & Negative Money Flow formulas. 

(Go Top

MovAvg Asymmetric Volatility Price Bands

SIGNAL FORMULAS

Enter Long:
Periods := 11;
UpperBand := BBandTop(CLOSE,Periods,S,1.7);

BuySignal1 := Sum(CLOSE > UpperBand,3) = 3;

BuySignal2 := CLOSE > UpperBand AND Ref(LOW,-1) > Ref(upperband,-1);

BuySignal3 := LOW > UpperBand AND Ref(CLOSE,-1) > Ref(upperband,-1);

BuySignal4 := CLOSE > UpperBand AND CLOSE > 1.4 * LLV(LOW,Periods + 1) AND Mov(VOLUME,3,S) > 2000 {assuming volume in 100's otherwise use 200000} AND Mov(HIGH,3,S) > UpperBand AND Mov(HIGH - LOW,3,S) > Mov(HIGH - LOW,Periods,S);

BuySignal1 OR BuySignal2 OR BuySignal3 OR BuySignal4

Close Long:
Periods := 11;
LowerBand := BBandBot(CLOSE,Periods,S,2);

SellSignal1 := Sum(CLOSE < LowerBand,3) = 3;

SellSignal2 := CLOSE < (1-.18) * HHV(HIGH,Periods + 1) AND Sum(CLOSE < LowerBand,2) = 2;

SellSignal3 := CLOSE < (1-.18) * HHV(HIGH,Periods + 1) AND HIGH < LowerBand;

SellSignal1 OR SellSignal2 OR SellSignal3

STOPS
Maximum Loss: LONG ONLY

10.00 Percent

(Go Top)

Moving Average Channel

"The MetaStock moving average function has an option for displacing the mov both vertically and horizontally. most of the time, I prefer to use a mov channel in place of Bollinger Bands."

from L. and G. Issen

"I use moving average, instead of Bollinger Bands, creating three indicators in the following way, and saving them in a template:

Mov(C, 28,S) displaced +10%

Mov(C, 28,S) displaced - 10%

Mov(C, 28,S)

28 days is the basic span of time. Like the 10% +/-, this should be adjusted for each security and for the particular condition you are waiting for (buy/sell). When I see a buying opportunity ahead, I just draw another trio of faster MAs (keeping the slow on the chart) and use them, with other indicators/oscillators, to time the entry. Same process to exit the market."

(Go Top)

Moving Average Crossover---Bullish

This is a10 and 30 day moving average crossover search. Results close to 0 pinpoint the crossover.

  • CLOSE
  • Mov(CLOSE,30,EXPONENTIAL)
  • ((CLOSE-Mov(CLOSE,30,EXPONENTIAL)) /Mov(CLOSE,30,EXPONENTIAL)) * 100
  • ((CLOSE-Mov(CLOSE,10,EXPONENTIAL)) /Mov(CLOSE,10,EXPONENTIAL)) * 100
  • **When(colA > colB)

(Go Top)

Moving Average Crossovers

What follows is a simple example using a moving average crossover system for MetaStock, employing 10 and 30 day exponential averages. These are just examples and profitability is dubious.

Custom indicator which gives 1 for longs and -1 for shorts--

Indicator Name: Position
MASwitch:=If(Mov(C,10,E)>Mov(C,30,E),1,If(Mov(C,10,E)<Mov(C,30,E),-1,0));
If(BarsSince(MASwitch=1) <BarsSince(MASwitch=-1),1,-1)

Custom indicator for cumulative open Equity curve without trading costs--

Indicator name: Equity
Cum(If(Ref(Fml("Position"),-1)=1,C-Ref(C,-1),Ref(C,-1)-C))

You can make several such equity lines and then just add them by using a yet another custom indicator, e.g.,

Indicator name: TotalEquity
Fml("Equity1")+Fml("Equity2")

(Go Top)

Moving Average Violated By %

200 dma violated by 100%
enter short
c>=(mov(c,200,s)*2)

200 dma violated by 50%
enter short
c>=(mov(c,200,s)*1.5)

200 dma w/i 1 pt
enter long
c>=mov(c,200,s)+1
exit long
((if ((c<=prev(llv(c,15)-.5, 1)),1,0)) + (if
((c<=.75*hhv(c,10)),1,0)))>=1
enter short
c<=mov(c,200,s)-1
exit short
c>=hhv(llv(c,15), 15)+.5

200 dma w/i 3pts
enter short
c<=mov(c,200,s)-3
exit short
c>=hhv(llv(c,15), 15)+.5

21 d reversal w di
enter long
c>prev(hhv(c,21),1) and adx(1)>adx(14) and
(pdi(9)>mdi(14))
exit long
c<prev(llv(c,21),1) and (pdi(14)<mdi(9))
enter short
c<prev(llv(c,21),1) and adx(1)>adx(14) and
(pdi(9)<mdi(14))
exit short
c>prev(hhv(c,21),1) and (pdi(9)>mdi(14))

(Go Top)

MTF-Fixed Balance Point

name: MTF-Fixed Balance Point

{Multiple Time Frame
"Fixed Balance Point" 4/23/99}

Dw:=If(DayOfWeek()<=Ref(DayOfWeek(),-1),1,0);
Wt:=If(Dw=1,
{then}(Ref(HighestSince(1,Dw=1,H),-1)+
Ref(LowestSince(1,Dw=1,L),-1) +
Ref(C,-1))/3,
{else}0);
DwP:=ValueWhen(1,Wt>0,Wt);
Dwp

name: MTF-Fixed Balance Point Step

{Multiple Time Frame
"Fixed Balance Point Step" 4/23/99}

Dw:=If(DayOfWeek()<=Ref(DayOfWeek(),-1),1,0);
Wt:=If(Dw=1,
{then}(Ref(HighestSince(1,Dw=1,H),-1)+
Ref(LowestSince(1,Dw=1,L),-1) +
Ref(C,-1))/3,
{else}0);
DwPs:=(ValueWhen(1,Wt>0,Wt)+
ValueWhen(2,Wt>0,Wt)+
ValueWhen(3,Wt>0,Wt)+
ValueWhen(4,Wt>0,Wt)+
ValueWhen(5,Wt>0,Wt))/5;
Dwps
------------------------------------------------
name: MTF-Dynamic Balance Point

{Multiple Time Frame
Dynamic Balance Point 4/23/99}
dt:=DayOfWeek();
dc:=If(Dt=1,BarsSince(Ref(dt,-1)=1)+1,
If(Dt=2,BarsSince(Ref(dt,-1)=2)+1,
If(Dt=3,BarsSince(Ref(dt,-1)=3)+1,
If(Dt=4,BarsSince(Ref(dt,-1)=4)+1,
BarsSince(Ref(dt,-1)=5)+1))));
DBC:=If(dc=5,
{then}(Ref(HighestSince(5,dt,H),-1)+
Ref(LowestSince(5,dt,L),-1)+
Ref(CLOSE,-1))/3,
{else}(Ref(HighestSince(4,dt,H),-1)+
Ref(LowestSince(4,dt,L),-1)+
Ref(CLOSE,-1))/3);
DBC
------------------------------------------------
name: MTF-Dynamic Balance Point Step

{Multiple Time Frame
Dynamic Balance Point Step 4/23/99}
Dr:= FmlVar("MTF-Dynamic Balance Point","DBC");
Dsc:=(ValueWhen(1,Dr,Dr)+
ValueWhen(5,Dr,Dr)+
ValueWhen(10,Dr,Dr)+
ValueWhen(15,Dr,Dr)+
ValueWhen(20,Dr,Dr))/5;
Dsc
--------------------------------------------------
name: MTF-S&R

{Multiple Time Frame
"Weekly Support & Resistance" 4/23/99}

Dw:=If(DayOfWeek()<=Ref(DayOfWeek(),-1),1,0);
Wt:=If(Dw=1,
{then}(Ref(HighestSince(1,Dw=1,H),-1)+
Ref(LowestSince(1,Dw=1,L),-1) +
Ref(C,-1))/3,
{else}0);
Wh:=If(Dw=1,
{then}Ref(HighestSince(1,Dw=1,H),-1),
{else}0);
Wl:=If(Dw=1,
{then}Ref(LowestSince(1,Dw=1,L),-1),
{else}0);
Wr:=ValueWhen(1,Wh>0,Wh)-ValueWhen(1,Wl>0,Wl);
DwP:=ValueWhen(1,Wt>0,Wt);
RR1:=DwP+(Wr*.5);
RR2:=DwP+(Wr*.618);
SR1:=DwP-(Wr*.5);
SR2:=DwP-(Wr*.618);
SR2;
SR1;
RR1;
RR2;
---------------------------------------
name: MTF-Tendency

Mt:=If(DayOfWeek()=1,
Ref(C,-1)- FmlVar("MTF-Fixed Balance Point","DWP"),
0);
If(Mt>0,1,If(Mt<0,-1,0))

(Go Top)

MTF Tendency Update

{Multiple Time Frame - Tendency 5/23/99}
{This will plot 1 for Bullish
-1 for Bearish}
dw:=DayOfWeek();
Fw:=If(dw<Ref(dw,-1),1,0);
Mt:=If(Fw=1 AND Ref(dw,-1)<>5,
{then}Ref(C,-1)- FmlVar("MTF-Fixed Balance Point","DWP"),
{else}If(dw=5,
{then}C-((HighestSince(1,Fw=1,H)+
LowestSince(1,Fw=1,L)+C)/3),
{else}0));
If(Mt>0,1,If(Mt<0,-1,0));

(Go Top)

Multipart Formulas

QUESTION:
I've got a specific question. I use WOW and MetaStock. Suppose I've got some indicator that ranges from 0 to 100 and I have a system that says "buy when the indicator goes above 90 and hold until it goes below 10 and then sell" or something. Notice that if the indicator is between 10 and 90 that you don't know whether that's a hold or a don't hold unless you know whether it last crossed 90 or 10. So far so good. Now suppose I want to combine the signal from this system with another indicator/system so that I can say something like "buy when system #2 says buy only if system #1 is in "hold the stock" mode." This may take the form of another indicator that is "1" when the system is in hold mode and "0" when it is in don't hold mode. This seems like a general problem that must come up often but it is not obvious to me how to code it. I'll bet other people could benefit from the answer as well.
Bob Anderton

ANSWER:
Thanks to all of you for the great help and input to the question of how to deal with combining the indicators in a system when one of them gives a signal by crossing. There were two responses, one can be seen in #3310 from Larry on the Yahoo! MetaStock board (thanks Mike) which is answering a slightly different question. That solution seems like what one would use if one wanted to look for system 2 signalling a buy the same day as system 1 signalling a buy by crossing a value. What I actually wanted to do was have a way of looking for system 2 signalling a buy during anytime that system 1 was saying hold because its last signal had been a buy.
This was addressed very nicely by Paul in message #3311. I took his idea to make the following indicator:
If(BarsSince(Cross(Fml("Indicator1"),90))<BarsSince(Cross(10,Fml("Indicator1"))),1,0)

This makes a new indicator that is 1 when the last signal is a buy and 0 when the last signal was a sell. Imagine that this is a really long term indicator. Now you can look for your short term indicator #2 to signal a sell and just AND it with this new indicator being = 1, meaning that the first indicator was in hold mode.

This is a big step forward for me. I'd never used this BARSSINCE function before(which is PERIODSSINCE for WOW) and this was key to being able to do this I think.

(Go Top)

Mutated Variables, Volatility and a New Market Paradigm

Mutated Variables, Volatility and a New Market Paradigm by Walter T. Downs, Ph.D.

In MetaStock for Windows 6.0 or higher, use the Expert Advisor to create highlights, which will show when contraction and expansion phases are present. First, choose Expert Advisor from the tools menu in MetaStock. Create a new Expert with the following highlights:

Expert name: New Market Paradigm

HIGHLIGHTS

Name: Contraction

Condition: BBandTop(CLOSE,28,SIMPLE,2)< Ref(BBandTop(CLOSE,28,SIMPLE,2),-1) AND

BBandBot(CLOSE,28,SIMPLE,2)>Ref(BBandBot(CLOSE,28,SIMPLE,2),-1)

Color: Blue

Name: Expansion

Condition: BBandTop(CLOSE,28,SIMPLE,2)> Ref(BBandTop(CLOSE,28,SIMPLE,2),-1) AND

BBandBot(CLOSE,28,SIMPLE,2)<Ref(BBandBot(CLOSE,28,SIMPLE,2),-1)

Color: Red

Click OK to save the changes to the Expert. Open a chart and then click your right-mouse button while pointing at the chart heading. Choose Expert Advisor and then choose Attach from the chart shortcut menu. Choose the New Market Paradigm Expert and then click the OK button. The price bars in the chart will be highlighted blue during a contraction phase and red in an expansion phase.

(Go Top)

My version of Tushar Chande's Vidya using the P variable

Vidya{P}
Periods:=Input("length of MA",5,100,20);
K:=Stdev(P,5)/Mov(Stdev(P,5),20,S);
A:=(2/(Periods+1));
Vidya:=A*K*(P)+(1-A*K)*Ref(P,-1);
Vidya;

Tar(SZ)an Long
C-(((462*Mov(C,34,E))-(420*Mov(C,13,E))+(490*(Mov(Mov(C,13,E)-Mov(C,34,E),89,E))))/42)

Tar(SZ)an Short
(C-(((325*Mov(C,26,E))-(297*Mov(C,12,E))+(351*Mov(Mov(C,13,E)-Mov(C,26,E),9,E))))/28)*2

(Go Top)

Market Facilitation Index

The following formulas were constructed using interpretation from Technical Analysis of Stocks & Commodities Magazine June 1994, article "The Market Facilitation Index", by Gary Hoover.

Taken from Stocks & Commodities, V. 12:6 (253-254): The Market Facilitation Index by Gary Hoover

"Applying technical analysis to developing trading signals begins with the investigation of price movement and often incorporates volume studies to improve trading accuracy. The Market Facilitation Index (MFI) is one indicator that synthesizes both price and volume analysis. The MFI is the ratio of the current bar's range (high-low) to the bar's volume.

The MFI is designed to gauge the efficiency of price movement. The efficiency is measured by comparing the current bar's MFI value to the previous bar's MFI value. If the MFI increased, then the market is facilitating trade and is more efficient, implying that the market is trending. If the MFI decreased, then the market is becoming less efficient, which may indicate a trading range is developing that may be a trend reversal…."

Range:
High-Low

MFI:
Fml("Range") / Volume

Efficiency:
If(Fml("MFI"),>,Ref(Fml("MFI"),-1),1, If(Fml("MFI"),<,Ref(Fml("MFI"),-1),-1, If(Fml("MFI"),=,Ref(Fml("MFI"),-1),0,0)))

Where:
+1 = increase
-1 = decrease
0 = unchanged

Market Facilitation Comparison:
If(V,>,Ref(V,-1),If(Fml("MFI"),>,Ref(Fml("MFI"),-1) ,1,If(Fml("MFI"),<,Ref(Fml("MFI"),-1),2,0)),If(V,< ,Ref(V,-1),If(Fml("MFI"),>,Ref(Fml("MFI"),-1),3,If( Fml("MFI"),<,Ref(Fml("MFI"),-1),4,0)),0))

Where:
1 = +,+
2 = +,-
3 = -,+
4 = -,-

(Go Top)

Market Facilitation Index Expert Advisor

In the August 1996 Stocks & Commodities, an article by Thom Hartle titled "The Market Facilitation Index" showed how to color bars to identify chart patterns based on changes in the market facilitation index and volume. Here is how to do this in MetaStock 6.0's new Expert Advisor.

The first step is to create a new expert by choosing Expert Advisor from MetaStock's Tool menu, and then choose New from the Expert Advisor. Name the expert "Market Facilitation Index", enter any notes you like and then click on the Highlights tab. Enter the following Highlights by choosing New, the color and then entering the following formulas:

Green Bar (Green Bar)
ROC((H-L)/V,1,$) > 0 AND ROC(V,1,$) > 0

Fade Bar (Blue Bar)
ROC((H-L)/V,1,$) < 0 AND ROC(V,1,$) < 0

Fake Bar (Dk Gray Bar)
ROC((H-L)/V,1,$) > 0 AND ROC(V,1,$) < 0

Squat Bar (Red Bar)
ROC((H-L)/V,1,$) < 0 AND ROC(V,1,$) > 0

After you have entered the four highlights click OK to finish editing the expert's properties. You can now right-click on the heading or background of any chart. Next select Expert Advisor and then Attach from the Chart shortcut menu. Attach the market facilitation index expert, and it will highlight the four market facilitation patterns that were discussed in Hartle's article. Note: You can save a chart as a template with this expert attached, and then any time you apply the template to a chart the market facilitation index expert will automatically attach to the chart.

 -- Allan J. McNichol, Equis International

(Go Top)

Market Thrust Oscillator

The following formulas were taken from the article, "The Cumulative Market Thrust Line", by Tushar Chande, in the December 1993 issue of Technical Analysis of Stocks & Commodities.

Taken from Stocks & Commodities, V. 11:12 (506-511): The Cumulative Market Thrust Line by Tushar S. Chande, PhD.

"STOCKS & COMMODITIES contributor Tushar Chande originally introduced the concept of market thrust in August 1992 as a method by which to overcome the limitations of the Arms index. Since then, variations have been suggested on the theme and here, Chande offers the variation of a cumulative market thrust line, in which market thrust is cumulated to calculate a volumetric advance-decline line by including the effect of up and down volume."

Composite securities are created from 4 separate files. Advances, Declines, Upvolume, Downvolume. The article side bar presupposes the user has these four files.

Reuters Trend Data (RTD) supplies this data in two files. The tickers are X.NYSE-A (Advances, number and volume) and X.NYSE-D (Declines, number and volume). To use these two files, you must utilize two different custom formulas and the indicator buffer in MetaStock™ for DOS.

CompuServe supplies this data in 4 files. The tickers are NYSEI (Advances); NYSEJ (declines); NYUP (Advance volume) and NYDN (decline volume).

Dial/Data supplies this data in two files. Advances, number and volume and Declines, number and volume. The tickers are @*NAZ_K and @*NDZ_K.

For the Windows versions of MetaStock:

For RTD and Dial Data:

#1: C * V
#2: 100 * ( ( P - ( C * V ) ) / ( ( P + ( C * V ) ) ) )To plot it:

  • Load advances, plot formula #1.

  • Load declines.

  • Drag the plotted formula #1 from the advances in to the declines chart.

  • Plot the thrust indicator formula (#2) directly on top of the plotted formula #1 in the declines chart.

For CompuServe data:

#1: C
#2: 100 * ( ( P - C ) / ( ( P + C ) ) )

To plot it:

  • Create a composite of the Advances * Up Volume

  • Create a composite if the Declines * Down Volume

  • Load advances composite , plot formula #1.

  • Load declines composite.

  • Drag the plotted formula #1 from the advances in to the declines chart.

  • Plot the thrust indicator formula (#2) directly on top of the plotted formula #1 in the declines chart.

** To create the cumulative thrust oscillator line perform the same steps as above except change formula #2 to:

Cum(100*(P-C)/(P+C)) for CompuServe data
Cum(100*(P-(C*V))/(P+(C*V))) for RTD and Dial Data

** To create the cumulative market thrust line, the formula is:

Cum(P-C) for CompuServe data
Cum(P-(C*V)) for RTD and Dial Data

You now have the thrust indicator plotted exactly as the article discusses.

(Go Top)

Martin Pring's KST Formulas

The KST indicator was developed by Martin J. Pring. The name KST comes from "Know Sure Thing". The KST is constructed by summing four smoothed rates of change. For more interpretation refer to Martin Pring's article "Summed Rate of Change (KST)" in the September 92 issue of TASC.

The following formulas are MetaStock formulas for the KST.

Daily KST Simple Moving Average

(Mov(Roc(C,10,%),10,S)*1) + (Mov(Roc(C,15,%),10,S)*2) + (Mov(Roc (C,20,%),10,S)*3) + (Mov(Roc(C,30,%),15,S)*4)

Long-Term Monthly KST Simple Moving Average

( (Mov(Roc(C,9,%),6,S)*1) + (Mov(Roc(C,12,%),6,S)*2) + (Mov(Roc(C ,18,%),6,S)*3) + (Mov(Roc(C,24,%),9,S)*4) ) / 4

Intermediate KST Simple Moving Average

(Mov(Roc(C,10,%),10,S)*1) + (Mov(Roc(C,13,%),13,S)*2) + (Mov(Roc (C,15,%),15,S)*3) + (Mov(Roc(C,20,%),20,S)*4)

Intermediate KST Exponential Moving Average

(Mov(Roc(C,10,%),10,E)*1) + (Mov(Roc(C,13,%),13,E)*2) + (Mov(Roc (C,15,%),15,E)*3) + (Mov(Roc(C,20,%),20,E)*4)

Long-Term KST Exponential Moving Average

(Mov(Roc(C,39,%),26,E)*1) + (Mov(Roc(C,52,%),26,E)*2) + (Mov(Roc (C,78,%),26,E)*3) + (Mov(Roc(C,109,%),39,E)*4)

Short-Term KST Weekly Exponential Moving Average

(Mov(Roc(C,3,%),3, E)*1) + (Mov(Roc(C,4,%),4, E)*2) + (Mov(Roc(C,6,%),6, E)*3) + (Mov(Roc(C,10,%),8, E)*4)

(Go Top)

Mass Index

The Mass Index was designed to identify trend reversals by measuring the narrowing and widening of the range between the high and low prices. As the range widens the Mass Index increases; as the range narrows the Mass Index decreases.

The MASS Index appeared in the June 92 Technical Analysis of Stocks & Commodities article "The Mass Index", by Donald Dorsey.

Taken from Stocks & Commodities, V. 10:6 (265-267): The Mass Index by Donald Dorsey

"Range oscillation, not often covered by students of technical analysis, delves into repetitive market patterns during which the daily trading range narrows and widens. Examining this pattern, Donald Dorsey explains, allows the technician to forecast market reversals that other indicators may miss. Dorsey proposes the use of range oscillators in his mass index."

The following is the MetaStock formula for

Sum(Mov( ( H - L ) ,9 ,E) / Mov(Mov( ( H - L ) ,9 ,E) ,9 ,E ) ,25 )

(Go Top)

McGinley Dynamic

Ref(Mov(C,12,E),-1)+((C-(Ref(Mov(C,12,E),-1))) / (C/(Ref(Mov(C,12,E),-1))*125))

(Go Top)

Modified VIX Indicator

The interpretation for the Modified Volatility Index was taken from the article Modifying The Volatility Index, by S. Jack Karczewski, in the April 1995 issue of TASC. The Volatility Index (VIX) is the implied volatility of a group of Standard & Poors 100 index options. It is updated by the CBOE.

This formula assumes you can get the VIX information downloaded from some data vendor, such as Dial Data, Telescan, or DBC Signal.

The custom formula you should create is the Modified VIX:

( ( ( P - Mov( P ,15 ,E ) ) / Mov( P ,15 ,E ) ) * ( 100 * 33 * 2 ) ) * ( Sqrt( 252 ) / Sqrt( 15 ) / C )

The steps to get the actual charts are:

For the Windows versions of MetaStock:

1 - Open the chart of the OEX
2 - Open the chart of the VIX.
3 - Drag the plot of the OEX into the chart of the VIX.
4 - Plot the formula for the Modified VIX directly on top of the OEX plot.

You now have a plot of the Modified VIX.

**For interpretation of the Modified VIX refer to Mr. Karczewski's article.

(Go Top)

Morris Double Momentum Indicator

Mov(((ROC(C,12.8,%))+(ROC(C,19.2,%))),10,W)

(Go Top)

Moving Average of Only One Day of the Week

Frequently we get requests for a formula that would take only one day of the week and average them for several weeks. For example construct a moving average of only the Fridays. This can be done in MetaStock™ for Windows by using the following formula.

The following MetaStock formula is for a moving average of the Friday of every week, if you want it calculated on any other day you would substitute a 1 for Monday, 2 for Tuesday, 3 for Wednesday, and 4 for Thursday. The number of day you wanted would replace the two 5's already in the formula. This moving average is currently a 6 week or 6 Friday moving average. If you wanted to change it to another periodicity you would change the 30 to the number of weeks or specific days multiplied by 5. In other words if you wanted a 4 day moving average of Friday you would change the 30 to 4*5 or 20.

Mov(If(DayOfWeek( )=5,C,Peak(1,If(DayOfWeek( )=5,C,0),1)),30,S)

(Go Top)

MACD Crossover System

To create the 2/20-Day EMA Breakout System by David Landry in MetaStock for Windows, choose System Tester from the Tools menu. Now choose new and enter the following system test rules and options:

Signal Formulas
Enter Long:
Mov(C,5,E) > Mov(C,13,E)
AND Mov(C,13,E) > Mov(C,40,E)
Close Long:
Cross(Mov(C,13,E),Mov(C,5,E))

Now you can play with these combinations on both the enter long and close long side. For example, keep the same Enter Long but change the Close Long to:

Cross(Mov(C,40,E) ,Mov(C,5,E) )

This will keep you in the trade longer. You may want to enter when the 5 crosses above the 13 and not wait for the 40 OR, you may just want to use the 5 cross above the 40 and forget about the 13.

(Go Top)