metastock formulae

298
Metastock Formulas 1-2-3 High or Low LOW Mx:=Mov(L,4,S); L > Ref(L,-1) AND L>Mx AND Ref(L,-1) < Ref(Mx,-1) AND LLV(L,4 ) > LLV(L,10 ) AND RSI(14)<50 HIGH Mx:=Mov(H,4,S); H < Ref(H,-1) AND H < Mx AND Ref(H,-1) > Ref(Mx,-1) AND HHV(H,4 ) < HHV(H,10) AND RSI(14)>50 1 2 3 Ross Hook Col A: Peak(1,H,10)<=1.1*Peak(2,H,10) AND Peak(1,H,10)>=0.9*Peak(2,H,10) AND Trough(1,L,10)>=1.1*Trough(2,H,10) AND Trough(1,L,10)<=0.9*Trough(2,H,10) AND LLV(L,25) Col B: Peak(1,H,5)<=1.1*Peak(2,H,5) AND Peak(1,H,5)>=0.9*Peak(2,H,5) AND Trough(1,L,5)>=1.1*Trough(2,H,5) AND Trough(1,L,5)<=0.9*Trough(2,H,5) AND LLV(L,25) Col C: Peak(1,H,1)<=1.1*Peak(2,H,1) AND Peak(1,H,1)>=0.9*Peak(2,H,1) AND Trough(1,L,1)>=1.1*Trough(2,H,1) AND Trough(1,L,1)<=0.9*Trough(2,H,1) AND LLV(L,25) Filter colA=1 OR colB=1 OR colC=1 1234's Sell A:Close B:ADX(14){The higher the better} C: PDI(14)<MDI(14) D:If(H>Ref(H,-1) and Ref(H,-1)>Ref(H,-2) and Ref(H,-2)>Ref(H,-3),1,0) E:{Entry}LLV(L,3)-.125 F:{stop}HHV(H,3) Filter:ColB>30 and ColC and ColD=1 2 Day Hammer Exploration

Upload: aggelos-kotsokolos

Post on 28-Jan-2016

1.750 views

Category:

Documents


206 download

DESCRIPTION

Metastock Formulae

TRANSCRIPT

Page 1: Metastock Formulae

 Metastock Formulas 

  1-2-3 High or Low LOWMx:=Mov(L,4,S);L > Ref(L,-1) AND L>Mx ANDRef(L,-1) < Ref(Mx,-1) ANDLLV(L,4 ) > LLV(L,10 ) ANDRSI(14)<50HIGHMx:=Mov(H,4,S);H < Ref(H,-1) AND H < Mx ANDRef(H,-1) > Ref(Mx,-1) ANDHHV(H,4 ) < HHV(H,10) ANDRSI(14)>50

1 2 3 Ross HookCol A: Peak(1,H,10)<=1.1*Peak(2,H,10)AND Peak(1,H,10)>=0.9*Peak(2,H,10)AND Trough(1,L,10)>=1.1*Trough(2,H,10)AND Trough(1,L,10)<=0.9*Trough(2,H,10)AND LLV(L,25) Col B: Peak(1,H,5)<=1.1*Peak(2,H,5) AND Peak(1,H,5)>=0.9*Peak(2,H,5) AND Trough(1,L,5)>=1.1*Trough(2,H,5) AND Trough(1,L,5)<=0.9*Trough(2,H,5) AND LLV(L,25) Col C: Peak(1,H,1)<=1.1*Peak(2,H,1) AND Peak(1,H,1)>=0.9*Peak(2,H,1) AND Trough(1,L,1)>=1.1*Trough(2,H,1) AND Trough(1,L,1)<=0.9*Trough(2,H,1) AND LLV(L,25) Filter colA=1 OR colB=1 OR colC=1

1234's SellA:CloseB:ADX(14){The higher the better}C: PDI(14)<MDI(14)D:If(H>Ref(H,-1) and Ref(H,-1)>Ref(H,-2) andRef(H,-2)>Ref(H,-3),1,0)E:{Entry}LLV(L,3)-.125F:{stop}HHV(H,3)Filter:ColB>30 and ColC and ColD=1 

2 Day Hammer ExplorationHere is an exploration that pattern traders may find useful. It tends to pick up two patterns: a two day hammer, that is if you combined the open for day 1 and close for day 2, the resulting bar would be a hammer, and a pattern similar to a Ross Hook, as I understand a Ross Hook. 

Page 2: Metastock Formulae

Ref((C-L)/(H-L),-1)<=.30 AND ((C-L)/(H-L)) >= .70 ANDRef(ATR(1),-1) >ATR(10) AND ATR(1) >= ATR(10) 

21 Day TriggerLook at these two oscillators in MSWIN, and compare them to Dahl. Put a 21 day EMA on each, think of the 21 day ema as a trigger. See what they tell you -- Dahl is long term, Ian is shortest term. 

Raschke Oscillator = Mov(Fml( "Raschke 3-10" ),16,E)where "Raschke 3-10" = Mov(C,3,S) - Mov(C,10,S) Ian Oscillator = (Mov(C,4,S)-Mov(C,9,S)) + (Mov(C,9,S)-Mov(C,17,S))

3 Minute Bar Breakout {Functions used in Middle Screen}MiddleScreenBlue := Mov( Close, 34, E )MiddleScreenYell := Mov( Open, 13, E ){Functions used in Lower Screen}StochRed := Stoch( 9, 7 )StochLagging : = Mov( StochRed, 7, S ){ Main analysis section }{BULLISH}Cross( StochRed, StochLagging ) AND ( MiddleScreenYell > MiddleScreenBlue ){BEARISH}Cross( StochLagging, StochRed ) AND ( MiddleScreenYell < MiddleScreenBlue ){ Breakout Notifier }UpperSupportNow := Mov( OPEN, 10, E )LowerSupportNow := Mov( CLOSE, 8, E )PrevUpperSupport := Ref( Mov( OPEN, 10, E ), -1 )PrevLowerSupportNow := ref( Mov( CLOSE, 8, E ), - 1 )TRUE := 1FALSE := 0SignalledHigh := FALSESignalledLow :=FALSE{ BULLISH }IF ( ( L > UpperSupportNow ) AND ( Ref( L, -1 ) > PrevUpperSupport ) ANDSignalledHigh = FALSE )THEN SignalledHigh := TRUEIF ( SignalledHigh = TRUE )THENSignalledLow :=FALSE{BEARISH}IF ( ( H < LowerSupportNow ) AND ( Ref( H, -1 ) > PrevLowerSupport ) ANDSignalledLow = FALSE )THENSignalledLow := TRUEIF ( SignalledLow = TRUE )THENSignalledHigh := FALSE

Page 3: Metastock Formulae

5 Day High{"Today must make a five-day high and today the close must be below the open."}

{Place the following in the MetaStock Explorer filter section.} 

HIGH > Ref(HHV(HIGH,4),-1) AND CLOSE < OPEN 

{or you can write it this way too ...} 

HIGH > Ref(HIGH,-4)AND HIGH > Ref(HIGH,-3)AND HIGH > Ref(HIGH,-2)AND HIGH > Ref(HIGH,-1)AND CLOSE < OPEN 

52 Week Hi-Lo ExplorationColA: {Close}C;ColB: {52-week High} HighestSince(1, (DayOfMonth()=08 AND Month()=05AND Year()=1998), H);ColC: {52-week Low} LowestSince(1, (DayOfMonth()=08 AND Month()=05 ANDYear()=1998), L);

{Choose one of these filters}{Filter 1:} ColA >= (0.9*(ColB)){Filter 2:} ColB >= 2*ColC

{If you want both the conditions to be satisfied in the same query, justjoin the two filters by the AND operator:}

Filter: (ColA >= (0.9*(ColB)) AND ColB >= ColC)

{One problem with the 52-wk High and 52-wk Low formula--every day you've gotto change the values for dayofmonth(), Month() and Year() functions. Theformula given above assumes that you would be running the query on May 07,1998. Change the values of the above functions accordingly.}

7 Day Rate Of Change Ported From Super Charts((C-Ref(CLOSE,-7))/Ref(CLOSE,-7)*100)

Adaptive Moving Average by Perry Kauffman This is a Metastock for Windows version 6.5 formula.Periods := Input("Time Periods",1,1000, 10);Direction := CLOSE - Ref(Close,-periods);Volatility := Sum(Abs(ROC(CLOSE,1,$)),periods);ER := Abs(Direction/Volatility);FastSC := 2/(2 + 1);SlowSC := 2/(30 + 1);SSC := ER * (FastSC - SlowSC) + SlowSC;Constant := Pwr(SSC,2);AMA := If(Cum(1) = periods +1, ref(Close,-1) + constant * (CLOSE - ref(Close,-1)),

Page 4: Metastock Formulae

Prev + constant * (CLOSE - PREV));

ADX And Trendlinesif you want to identify directional movement by expressing that the ADX "is rising" the most basic way to do it would be:

ADX(14) > Ref(ADX(14),-1) -- Today's ADX is greater than yesterday's ADX.

There is another aspect to the ADX that bears investigation, though; namely the level of the ADX. There seems to be a general consensus that an ADX over, say, 30 indicates a stronger trend than lower ADX readings. So you could either write ADX(14) > 30 -- or not, depending on your objectives. You can stipulate that both conditions are true by joining them with the word "and."

Also, I have found the following helpful: try using the custom ADX formula posted on the MetaStock website. Wilder wrote the original ADX in such a fashion that it rounds the readings out to the nearest whole number. The "regular" canned MetaStock ADX does this, while the custom ADX does not. The non-rounded readings are just a shade more sensitive, which can be helpful.

ADX Raw{MetaStock code written by Equis and published in the Oct99 TASC} 

Periods:= Input("Enter time periods",1,100,14);

PlusDM:= If(HIGH>Ref(HIGH,-1) ANDLOW>=Ref(LOW,-1), HIGH-Ref(HIGH,-1),If(HIGH>Ref(HIGH,-1) AND LOW<Ref(LOW,-1)AND HIGH-Ref(HIGH,-1)>Ref(LOW,-1)-LOW,HIGH-Ref(HIGH,-1), 0));DIPlus:= 100 * Wilders(PlusDM,Periods) /ATR(Periods);

MinusDM:= If(LOW<Ref(LOW,-1) ANDHIGH<=Ref(HIGH,-1), Ref(LOW,-1)-LOW,If(HIGH>Ref(HIGH,-1) AND LOW<Ref(LOW,-1)AND HIGH-Ref(HIGH,-1)<Ref(LOW,-1)-LOW,Ref(LOW,-1)-LOW, 0));DIMinus:= 100 * Wilders(MinusDM,Periods) /ATR(Periods);

DIDif:= Abs(DIPlus - DIMinus);DISum:= DIPlus + DIMinus;ADXRaw:= 100 * Wilders(DIDif/DISum, Periods);

ADXRaw

ADX with Stochastic SignalsMetastock users can reproduce the trend bars and entry signals shown on the CWO chart using the Expert Advisor. Create a new expert and under Symbols add a new entry with the following condition :

Page 5: Metastock Formulae

ADX(14) > 20 AND ( Mov(C,15,S) > Mov(C,30,S)) AND ( Mov(C,5,S) > Mov(C,30,S)) AND Stoch(5,3) < 30 AND Ref(Stoch(5,3) ,-1)> =30

Under Trends add the Bullish formula :

ADX(14) > 20 AND ( Mov(C,15,S) > Mov(C,30,S)) AND ( Mov(C,5,S) > Mov(C,30,S))

and the Bearish formula :

ADX(14) > 20 AND ( Mov(C,15,S) < Mov(C,30,S)) AND ( Mov(C,5,S) < Mov(C,30,S))

Alligator Indicators Following are the Bill William's Alligator indicators I put together. Please read his book "Trading Chaos" and pick up a demo of his "Investor's Dream" software from his web site to see how they are used.

Hope you find them useful. 

originally from Gary Randall -- Brunswick, Maine, U.S.A.----------------------------------------------

Chaos Blue BL{Alligator Blue Balance Line - Jaw }{13 bar smoothed average offset 8 bars }

Ref(Wilders(MP(),13),-8);

----------------------------------------------

Chaos Red BL{Alligator Red Balance Line - Teeth }{8 bar smoothed average offset 5 bars }

Ref(Wilders(MP(),8),-5);

----------------------------------------------

Chaos Green BL{Alligator Green Balance Line - Lip }{5 bar smoothed average offset 3 bars }

Ref(Wilders(MP(),5),-3);

----------------------------------------------

Chaos Gator{ Chaos Alligator }{ Plot as histogram }

green := Fml("Chaos Green");

Page 6: Metastock Formulae

red := Fml("Chaos Red");blue := Fml("Chaos Blue");

If(green > red AND red > blue, green - blue,If(blue > red AND red > green, green - blue,0));

----------------------------------------------

Chaos AO{ Chaos Awsome Oscillator - measures momentum }( A very close approximation of MFI }{ Plot as histogram }

Mov(MP(),5,S) - Mov(MP(),34,S);

----------------------------------------------

Chaos AO Signal Line{ Chaos Awsome Oscillator Signal Line }{ Plot as line over AO histogram }

Mov(Mov(MP(),5,S) - Mov(MP(),34,S),5,S)

----------------------------------------------

Chaos AC{ Chaos Accelerator/Decelerator Oscillator }{ Measures acceleration }{ Plot as histogram }

Fml("Chaos AO") - Mov(Fml("Chaos AO"),5,S);

----------------------------------------------

Chaos Fractal{ Chaos Fractal (simple version +1=Up, -1=Dn) }

High1 := Ref(HIGH,-2);High2 := Ref(HIGH,-1);High3 := Ref(HIGH,0);High4 := Ref(HIGH,1);High5 := Ref(HIGH,2);Low1 := Ref(LOW,-2);Low2 := Ref(LOW,-1);Low3 := Ref(LOW,0);Low4 := Ref(LOW,1);Low5 := Ref(LOW,2);Fractal := If((High3 > High1) AND (High3 > High2) AND (High3 > High4) AND (High3 > High5), +1,0);

Page 7: Metastock Formulae

Fractal :=If((Low3 < Low1) AND (Low3 < Low2) AND(Low3 < Low4) AND (Low3 < Low5), If(Fractal > 0, 0, -1), Fractal);

Fractal;

Alligator System Modificationsfrom Murray Richards . . .

Drag this to the chart and change it to a histogram and plot green

AO oscillator GreenIf( Mov(( H+L)/2, 5, S)- Mov(( H+L)/2, 34, S),>,Ref(Mov( ( H+L)/2, 5, S)- Mov(( H+L)/2, 34, S),-1),( Mov(( H+L)/2, 5, S)-Mov(( H+L)/2, 34, S )),0)

Put in the same window and plot it red as a histogramA Oscillator redIf( Mov( ( H+L)/2, 5, S)- Mov( ( H+L)/2, 34, S),<,Ref(Mov( ( H+L)/2, 5, S)- Mov( ( H+L)/2, 34, S),-1), Mov( ( H+L)/2, 5,S)- Mov( ( H+L)/2, 34, S),0)

AccMov(( H+L)/2, 5, S)- Mov(( H+L)/2, 34, S)-Mov(Mov(( H+L)/2, 5, S)- Mov(( H+L)/2, 34, S) , 5, S)

Put in its on window as a histogram and plot redAC RedIf( Fml( "Acc" )<Ref( Fml( "Acc" ),-1) ,Fml( "Acc" ),0 )

Put in the same window and plot green

AC greenIf( Fml( "Acc" )<Ref( Fml( "Acc" ),-1) ,Fml( "Acc" ),0 )

Start a new expert and chose highlightscolor red

Fml( "AC RED" )AND Fml( "A Oscillator red" )

Color green

Fml( "AC Green" ) AND Fml( "A Oscillator Green " )

Save as a template

Anti Trigger- LB Raschke (For Metastock v6.5)Original formula based on L.B. Raschke's "Street Smarts"book's Quick Indicator Articles. Re-written by Ton Maas.

Page 8: Metastock Formulae

{FUNCTIONS-IND-REFERENCE-INDEX:FF=FASTLINE,SS=SLOWLINE,SETBARS=3DAYMOVAVE,ENTRYADD=+1,EXITADD=+1}{FUNCTIONS-VAR-REFERENCE-INDEX:BBUY=(VAR),SSELL(VAR),CBUY(VAR),CSELL(VAR),FF(VAR),SS(VAR),LXSTOP(VAR),SXSTOP(99999),MP(VAR)}{FUNCTIONS-MISC-REFERENCE-INDEX:AT0BBUY =BULLLONGAT0SSELL =BEARSHORTAT0CSELL =CLOSEBEARSHORTAT0CBUY =CLOSEBULLLONGAT0MP =MARKETPOSITION (-1=LONG,+1 SHORT)AT0LXSTOP=CLOSELONGEXITLEVEL(STOPLOSS)AT0SXSTOP=CLOSESHORTEXITLEVEL(STOPLOSS)}

{INDICATOR NAME : ANTI TRIGGER}

{THE FORMULA (+REQUIRED FUNCTIONS) FOR THE ANTI TRIGGER INDICATOR}AT0SETBARS:=3;AT0FF:=Stoch(7,AT0SETBARS);AT0SS:=Mov(Stoch(7,AT0SETBARS),10,E);AT0ENTRYADD:=+1;AT0EXITADD:=+1;AT0CSELL:={use in expadv or systest}{for RT del the REF-function}If(AT0FF>Ref(AT0FF,-1) AND AT0SS<Ref(AT0SS,-1),C+1,0);AT0CBUY:={use in expadv or systest}{for RT del the REF-function}If(AT0FF<Ref(AT0FF,-1) AND AT0SS>Ref(AT0SS,-1),C+1,0);AT0BBUY:={use in expadv or systest}{for RT del the REF-function}If(AT0CBUY>AT0SETBARS,H+AT0ENTRYADD,99999);AT0SSELL:={use in expadv or systest}{for RT del the REF-function}If(AT0CSELL>AT0SETBARS,L-AT0ENTRYADD,0);AT0MP:={use in expadv or systest}If(AT0BBUY<99999, -1,If(AT0SSELL>0,1,0));{AT0LXSTOP:=}{use in expadv or systest}{for RT del the REF-function}{IF(REF(AT0MP,-1)<1 OR (REF(AT0BBUY,-1)<99999 ANDH>REF(AT0BBUY,-1)), L-AT0EXITADD,0);}{AT0SXSTOP:=}{use in expadv or systest}{for RT del the REF-function}{IF(REF(AT0MP,-1)>-1 OR (REF(AT0SSELL,-1)>0 ANDL<REF(AT0SSELL,-1)), H+AT0EXITADD,0);}AT0MP

Are There Weekly Patterns in the Stock Market? Do price pressures build up over the weekend that cause predictable distortions in the stock market on Monday? If the market is up or down a certain number of days in a row, what are the chances it will follow the trend the next day? Is the trend on Monday reversed on Tuesday? To find out, we loaded our S&P 500 data back to 1980, and ran a test. The results were this - the trend on Monday (either up or down) was reversed 55% of the time, a fairly significant result. This might tell us that the weekend causes an emotional buildup that moves the market an excessive amount on Monday, which is then corrected by Tuesday. Larger stocks, as represented by the Dow Jones Industrial Average, reversed slightly less - 

Page 9: Metastock Formulae

54% of the time. Small stocks, as represented by the Russell 2000 (data back to 1990) showed the opposite pattern, going with the trend 60% of the time.

In the futures markets, the US dollar (data back to 1990) reversed 54% of the time, and the 30 year treasury bond (data back to 1987) reversed 53% of the time. 

In recent years, the pattern has been less pronounced. In fact, if you study just the last two years, you get reversals of 53% in the Dow, 52% in the S&P 100, a continuation in the trend 50.5% of the time in the S&P 500 and a continuation 54% of the time in the Russell 2000 . The US dollar has reversed 58% of the time in the last two years, the CRB index 54% of the time, while other futures have shown continuation trends - 55% for gold, 54% for treasury bonds, and 55% for crude oil.

Next, we studied every possible price trend for the five day period. A nice Thursday trend emerged - if Monday and Tuesday went one direction, and then Wednesday reversed this trend, there was a 62% chance that Thursday would continue this reversal (we’ll represent this as XXOO, where X just means one direction, not necessarily up or down, and O means the other direction). If the first four days of the week all moved in the same direction (XXXX), Friday had a 61% chance of doing the same (XXXXX). And if Tuesday reversed Monday, but was then reversed by Wednesday, and the trend continued Thursday, there was a 63% chance that Friday would continue the trend set Wednesday (XOXXX). 

The MetaStock formulas for the Tuesday calculation are included below. Formulas for the remaining days of the week build on these formulas, and are too extensive to include here (you need 2 formulas for Tuesday, 4 for Wednesday, 8 for Thursday, and 16 for Friday). 

To build an exploration that looks for stocks with a high incidence of Tuesday reversal, simply put the formula "Tuesday % occurrence. of XX vs. XO" in a column in the Explorer, run an exploration on all of your securities, then sort by the aforementioned formula.

======================Formula "Tuesday XX Pattern" 

{ Looks for XX pattern, returns +1 if it finds it }If(Ref(DayOfWeek(),-2) = 5 {2 days ago was Fri} AND Ref(DayOfWeek(),-1) = 1 {Yesterday was Mon}ANDDayOfWeek() = 2 {Today is Tuesday}AND { Either both days were up or down }((Ref(CLOSE,-2) > Ref(CLOSE,-1) ANDRef(CLOSE,-1) > CLOSE ) OR(Ref(CLOSE,-2) < Ref(CLOSE,-1) ANDRef(CLOSE,-1) < CLOSE )) ,+1, { +1 if XX pattern }0) { Otherwise 0 } 

======================Formula "Tuesday XO Pattern" 

{ Looks for XO pattern, returns +1 if it finds it }If(Ref(DayOfWeek(),-2) = 5 {2 days ago was Fri} AND 

Page 10: Metastock Formulae

Ref(DayOfWeek(),-1) = 1 {Yesterday was Mon}ANDDayOfWeek() = 2 {Today is Tuesday}AND { Tuesday is opposite direction of Monday }((Ref(CLOSE,-2) > Ref(CLOSE,-1) ANDRef(CLOSE,-1) < CLOSE ) OR(Ref(CLOSE,-2) < Ref(CLOSE,-1) ANDRef(CLOSE,-1) > CLOSE )) ,+1, { +1 if XO pattern }0) { Otherwise 0 } 

======================Formula "Tuesday % occurrence. of XX vs. XO"{ Gives the % occurrence of XX (that Tuesday goes the same direction as Monday) } 

Cum(Fml("Tuesday XX pattern"))/(Cum(Fml("Tuesday XX pattern")) + Cum(Fml("Tuesday XO pattern")) ) * 100 

====================== 

Note that unchanged days, either Monday or Tuesday, are ignored in the calculations. 

by John DeBry 

ATR Custom Indicatorperiods:=Input("ATR Periods?",1,100,10);TH:=If(Ref(C,-1) > H,Ref(C,-1),H);TL:=If(Ref(C,-1) < L,Ref(C,-1),L);TR:=TH-TL;Mov(TR,periods,S)

ATR Modifiedprd1:=input("enter ATR period",1,9999,7);prd2:=(prd1*2)-1;{max (absolute) of yesterday's close to today's high or today's low}myatr1:=Max(Abs(Ref(C,-1)-H),Abs(Ref(C,-1)-L));{max of yesterday's close to today's high or today's low or today's range}myatr2:=Max(myatr1,H-L);

ATR Trailing Stop LossFor Long:HHV(H - 2.5*ATR(5),10)

For Short:LLV(L + 2.5*ATR(5),10)

Furthermore, it may be beneficial to dynamically adjust the number of lookback periods in the HHV() or the LLV() function.

Automatic Support and Resistance 

Page 11: Metastock Formulae

Copied from Technical Analysis of Stocks and Commodities Magazine. This is in regards to an article on page 51 of the May 1998 issue.In my article "Automatic support and resistance" in this issue, I present a computerized approach to finding support and resistance levels on a chart. To recreate the indicators and system described in my article using MetaStock for Windows, enter the following formulas:Indicators: S1: IF(Ref(LOW,-4)=LLV(LOW,9),Ref(LOW,-4),PREVIOUS) S2: IF(Fml("S1")=Ref(Fml("S1"),-1),PREVIOUS,Ref(Fml("S1"),-1)) S3: IF(Fml("S1")=Ref(Fml("S1"),-1),PREVIOUS,Ref(Fml("S2"),-1)) S4: IF(Fml("S1")=Ref(Fml("S1"),-1),PREVIOUS,Ref(Fml("S3"),-1)) S5: IF(Fml("S1")=Ref(Fml("S1"),-1),PREVIOUS,Ref(Fml("S4"),-1)) S6: IF(Fml("S1")=Ref(Fml("S1"),-1),PREVIOUS,Ref(Fml("S5"),-1))WSO: 100*(1¬(Int(Fml("S1")/CLOSE)+Int(Fml("S2")/CLOSE)+Int(Fml("S3")/CLOSE)+Int(Fml("S4")/CLOSE) +Int(Fml("S5")/CLOSE)+Int(Fml("S6")/CLOSE))/6)R1: IF(Ref(HIGH,-4)=HHV(HIGH,9),Ref(HIGH,-4),PREVIOUS) R2: IF(Fml("R1")=Ref(Fml("R1"),-1),PREVIOUS,Ref(Fml("R1"),-1)) R3: IF(Fml("R1")=Ref(Fml("R1"),-1),PREVIOUS,Ref(Fml("R2"),-1)) R4: IF(Fml("R1")=Ref(Fml("R1"),-1),PREVIOUS,Ref(Fml("R3"),-1)) R5: IF(Fml("R1")=Ref(Fml("R1"),-1),PREVIOUS,Ref(Fml("R4"),-1)) R6: IF(Fml("R1")=Ref(Fml("R1"),-1),PREVIOUS,Ref(Fml("R5"),-1))WRO: 100*(1¬(Int(Fml("R1")/CLOSE)+Int(Fml("R2")/CLOSE) +Int(Fml("R3")/CLOSE)+Int(Fml("R4")/CLOSE) +Int(Fml("R5")/CLOSE)+Int(Fml("R6")/CLOSE))/6)The indicators S1 through S6 and R1 through R6 should be plotted as points and not as a continuous line.Trading System Formulas and Parameters: Enter long positions on either building support or sustained uptrend and exit position using stops. No short positions.Enter Long: Fml("WSO") > Mov( Fml("WSO") , 4 , S ) OR Mov( Fml("WRO") , 30 , S ) > 95Stop Out: Breakeven stop: Floor level at 2% Trailing stop: Profit risk of 10 Percent, ignoring 10 periods Maximum loss stop: Maximum loss of 7%Other Conditions: Initial equity = 1000, Long positions only, Trade price = close, Trade delay = 0, Entry commission = 0%, Exit commission = 0%, , Interest rate = 5%, Margin req. 100%

Average Dollar Price Volatility Exploration-DeelThis exploration is designed to provide the average dollar price volatility figure in column F. This will find this figure for all stocks scanned. It is most useful to apply this just to an exploration of a small group of stocks. It matches the steps in Deels book The Strategic Electronic Day Trader.                    Col A: day 1    HIGH - LOW    Col B: day 2    Ref((HIGH-LOW),-1)    Col C:     Ref((HIGH-LOW),-2)    Col D:     Ref((HIGH-LOW),-3)    Col E:     Ref((HIGH-LOW),-4)    Col F:     (H - L + (Ref(H,-1) - Ref(L,-1)) + (Ref(H,-2) - Ref(L,-2))+(Ref(H,-3) - Ref(L,-3)) + (Ref(H,-4) - Ref(L,-4))) / 5

Average Dollar Price Volatility Indicator-Deel

Page 12: Metastock Formulae

This indicator plots the value on the chart display. It is useful only as a quick method of attaching the volatility value to the stock. Apply this with caution and make sure that the new scale display is also included. (H - L + (Ref(H,-1) - Ref(L,-1)) + (Ref(H,-2) - Ref(L,-2))+(Ref(H,-3) - Ref(L,-3)) + (Ref(H,-4) - Ref(L,-4))) / 5

Average-Modified Method From The New Commodity Trading Systems and Methods, by Perry J. Kaufman Chapter 4 - Moving Averages, pg. 60.This formula is for version 6.5 of MetaStock for Windows 95& NT only and cannot be written in previous version.This is a modified simple moving average.The formula will prompt you for input for the number of time periods to use in the moving average.Day:=Cum(1)+1;Z:=Input("Periods",2,1000,5);MV:=(1/Z);If(Day<(Z+2),C,If(day=(Z+2),Mov(C,LastValue(Z),S),PREV+(MV*(C-PREV))))

5 35 5 MACDThe 5,35,5 MACD is a variation of the standard 12,26,9 MACD and was made popular by Chris Manning, who uses it to identify major market divergence points:((Mov( CLOSE, 5, E) - Mov( CLOSE, 35, E))-(Mov((Mov( CLOSE, 5, E) - Mov( CLOSE, 35, E)),5,E))) When first plotted on a chart, the 5,35,5 MACD will appear as a solid line with no horizontal line at the value of zero. After applying the 5 35 5 MACD indicator to your chart, use the following steps to create a histogram with vertical line at zero.1.            Double click the indicator to open the properties dialogue box.2.            Select the Color\Style tab and using the Style drop-down list, select the histogram setting (second from the bottom).3.            Select the Horizontal Lines tab and enter a value of zero (0) for the horizontal line value. Click Add.4.            Click OK

Absolute Breadth IndexThe Absolute Breadth Index (ABI) is a market momentum indicator that was developed by Norman G. Fosback. The ABI shows how much activity, volatility, and change is taking place on the New York Stock Exchange while ignoring the direction prices are headed. You can think of the ABI as an "activity index". High readings indicate market activity and change, while low readings indicate lack of change. In Mr. Fosback's book, Stock Market Logic, he indicates that historically, high values typically lead to higher prices three to twelve months later.The MetaStock™ formula for the Absolute Breadth Index is:ABS ( Advancing Issues - Declining Issues )To plot it: •             Create a composite security of the Advancing Issues - Declining Issues. In Windows versions use The DownLoader™ to create the composite or in the DOS versions use MetaStock's File Maintenance to create the composite. •             In MetaStock open the composite and plot the custom formula ABS( C ) on it. 

Advance Decline Line with Negative Volume

Page 13: Metastock Formulae

There is a way to get the negative volume on an advance-decline line chart in MetaStock™ for Windows™.The requirement is: Each security must have both the number of issues and the volume in the file. Advancing issues with advancing volume in one security and declining issues with declining volume in one security file. These files may be obtained from Reuters Trend Data by way of The DownLoader for Windows. You will also need to create a composite security of the Advance-Decline line, which is the advances - declines.The following steps will get you an advance-decline line with negative volume where applicable. Follow these steps once and save as a CHART. When you want to use it simply load the chart and the program will calculate the new volume plot using the new data. •             Create a NEW chart of the advancing issues. •             Create a NEW chart of the declining issues. •             Create a NEW chart of the advance-decline composite. •             Create a NEW INNER WINDOW on the declining issues chart. •             Delete the volume plot on the advance-decline composite chart. •             Copy the volume from the advancing issues chart and paste it into the new inner window on the declining issues chart. •             Drop the custom formula, P-V on the advancing volume plot in the declining issues chart, creating a new scale. •             Copy that plot to the empty inner window (where the volume was) of the advance-decline composite. •             Save that chart as the adv-decl chart (perhaps advdecl.mwc). This will be the chart you load to do your study of the advance-decline line with negative volume. 

ADX / ADXR Custom (without Rounding)Here are custom ADX and ADXR formulas that will plot the decimals after the calculation. The built-in indicators plot exactly as Welles Wilder plots them in his book, New Concepts in Technical Trading Systems. These custom indicators calculate the same way except they do not round as Wilder does.ADX CustomPeriods:=Input("Time Periods",1,100,14);PlusDM:=If(H>Ref(H,-1) AND L>=Ref(L,-1), H-Ref(H,-1),If(H >Ref(H,-1) AND L<Ref(L,-1)AND H-Ref(H,-1)> Ref(L,-1)-L, H-Ref(H,-1),0));PlusDI:=100*Wilders(PlusDM,Periods)/ATR(Periods);MinusDM:=If(L<Ref(L,-1) AND H<=Ref(H,-1), Ref(L,-1)-L,If(H>Ref(H,-1) AND L<Ref(L,-1)AND H-Ref(H,-1)<Ref(L,-1)-L, Ref(L,-1)-L,0));MinusDI:=100*Wilders(MinusDM,Periods)/ATR(Periods) ;DIDif:=Abs(PlusDI-MinusDI);DISum:=PlusDI+MinusDI;ADXFinal:=100*Wilders(DIDif/DISum,Periods);ADXFinalADXR CustomPeriods:=Input("Time Periods",1,100,14);PlusDM:=If(H>Ref(H,-1) AND L<=Ref(L,-1), H-Ref(H,-1),If(H>Ref(H,-1) AND L<Ref(L,-1)AND H-Ref(H,-1)>Ref(L,-1)-L, H-Ref(H,-1),0));PlusDI:=100*Wilders(PlusDM,Periods)/ATR(Periods);MinusDM:=If(L<Ref(L,-1) AND H<=Ref(H,-1), Ref(L,-1)-L,If(H>Ref(H,-1) AND L<Ref(L,-1)AND H-Ref(H,-1)<Ref(L,-1)-L, Ref(L,-1)-L,0));MinusDI:=100*Wilders(MinusDM,Periods)/ATR(Periods) ;DIDif:=Abs(PlusDI-MinusDI);

Page 14: Metastock Formulae

DISum:=PlusDI+MinusDI;ADXFinal:=100*Wilders(DIDif/DISum,Periods);ADXRCustom:= (ADXFinal+Ref(ADXFinal,LastValue(1-periods)))/2;ADXRCustom

Arms Index (TRIN)The Arms Index, also known as TRIN, is a market indicator that shows the relationship between the number of stocks that increase or decrease in price (advancing/declining issues) and the volume associated with stocks that increase or decrease in price (advancing/declining volume). The Arms Index was developed by Richard W. Arms, Jr. in 1967.The Arms Index is primarily a short term trading tool. The Index shows whether volume is flowing into advancing or declining stocks. If more volume is associated with advancing stocks than declining stocks, the Arms Index will be less than 1.0; if more volume is associated with declining stocks, the Index will be greater than 1.0.The formula for the Arms Index is:(Advancing Issues / Declining Issues) / (Advancing Volume / Declining Volume)To calculate the Arms Index in MetaStock™ for Windows you will need to first collect the four pieces of data. •             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). •             Dial/Data also supplies this data in two files. Advances, number and volume and Declines, number and volume. The tickers are @*NAZ_K and @*NDZ_K. •             CompuServe supplies this data in 4 files. The tickers are NYSEI (Advances)use the cusip 00000157 rather than the symbol; NYSEJ (declines); NYUP (Advance volume) and NYDN (decline volume).

After the data has been collected follow these steps:For data from RTD or Dial Data •             In the DownLoader™ create a composite security of the Advances / Declines. •             In MetaStock open the composite. •             Create and plot the custom formula: C/V •             This gives you the Arms Index (TRIN). For data from CompuServe •             In the DownLoader create the two composites. o             Advancing Issues / Declining Issues o             Advancing Volume / Declining Volume •             In MetaStock open both composites. •             Tile the charts so they can both be viewed. •             Drag the plot of the Adv. Volume/Dec. Volume composite into an inner window in the Adv. Issues/Dec. Issues chart. •             Create the custom formula: C/P •             Plot this formula on top of the Adv. Volume/Dec. Volume plot (the Adv. Volume/Dec. Volume plot will turn a purplish color to signify the formula will be plotted on it). You will know have the Arms Index (TRIN) plotted. You can drag it to its own inner window if you prefer.For interpretation refer to Mr. Arms book, The Arms Index. 

Aroon Indicators, by Tushar Chande

Page 15: Metastock Formulae

For interpretation of the Aroon indicators refer to Tushar Chande's article "Time Price Oscillator" in the September, 95 Technical Analysis of Stocks & Commodities magazine.The Aroon down:100* (14 - (( If (Ref (L,-1) = LLV( L ,14 ) ,1 , If ( Ref (L ,-2 ) = LLV ( L,14 ) ,2 , If ( Ref (L ,- 3 ) = LLV( L,14 ) ,3 ,If ( Ref (L ,-4 ) = LLV ( L ,14 ) ,4 ,If (Ref ( L ,-5 ) = LLV ( L ,14 ) ,5 ,If (Ref (L ,-6 ) =LLV( L,14 ) ,6 ,If ( Ref (L ,-7 ) = LLV ( L,14 ) ,7 ,If (Ref ( L ,-8 ) = LLV ( L ,14 ) ,8 ,If (Ref( L ,-9 ) =LLV( L,14 ) ,9 ,If ( Ref (L,-10) = LLV (L,14 ) ,10 ,If (Ref (L ,-11) = LLV( L,14 ) ,11 ,If (Ref(L,-12 ) =LLV(L ,14) ,12,If ( Ref (L,-13) = LLV (L ,14 ) ,13 ,If ( Ref ( L,-14) = LLV( L,14 ) ,14 ,0) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) / 14 The Aroon up:100 * ( 14 - ( ( If (Ref (H ,-1) = HHV(H ,14 ) ,1 ,If (Ref (H ,-2 ) = HHV (H ,14 ) ,2 ,If (Ref (H ,- 3 ) = HHV(H ,14 ) ,3, If (Ref (H ,-4 ) = HHV(H ,14 ) ,4 ,If (Ref (H ,-5 ) = HHV(H ,14 ) ,5 ,If (Ref (H ,-6 ) =HHV(H ,14 ) ,6 ,If (Ref (H,-7 ) = HHV(H ,14 ) ,7 ,If (Ref (H ,-8 ) = HHV(H ,14) ,8 , If (Ref (H ,-9 ) =HHV(H ,14) ,9 ,If (Ref (H ,-10 ) = HHV(H ,14 ) ,10 ,If (Ref (H ,-11 ) = HHV(H ,14) ,11 ,If (Ref (H ,-12 ) =HHV(H ,14) ,12 ,If (Ref(H ,-13) = HHV(H ,14 ) ,13 ,If (Ref (H ,-14 ) = HHV(H ,14 ) ,14 ,0 ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) / 14 The Aroon Oscillator = Aroon up - Aroon down.** The UP and DOWN Aroon indicators are to be plotted in the same inner-window.** These are constructed using 14 time periods, you can alter this by replacing every entry of 14 with the desired time period.Note: The Aroon indicators are built in indicators, in MetaStock 6.0 for Windows. 2/20 Day EMA Breakout SystemTo 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 FormulasEnter LongAlert(Cross(Sum(L > Mov(C,20,E),2) = 2,.5),10) AND HIGH> = Peak(1,Cross(Sum(L > Mov(C,20,E),2) = 2,.5) *HHV(H,2),1) + .001{10 ticks} AND BarsSince(Cross(Sum(L > Mov(C,20,E),2) = 2,.5)) <BarsSince(LOW <= Mov(C,20,E))Close LongLOW <= Mov(C,20,E)Enter ShortAlert(Cross(Sum(H < Mov(C,20,E),2) = 2,.5),10) AND LOW< = Peak(1,Cross(Sum(H < Mov(C,20,E),2) = 2,.5) *LLV(L,2),1) - .001{10 ticks} AND BarsSince(Cross(Sum(H < Mov(C,20,E),2) = 2,.5)) < BarsSince(HIGH >= Mov(C,20,E))Close ShortHIGH >= Mov(C,20,E)

•             Initial equity Points Only •             Positions Long and short •             Trade price Close •             Trade delay 0 Please note the {10 ticks} comment in the system rules. The value used in these rules is for most currencies. You should change this value based upon the commodity your testing.Alan Hull's Rate of Return Indicator, translated from TradeStation codeMetaStock -> Tools -> Indicator Builder -> NewCopy and paste all formulae below.  Plot only last formula.

Page 16: Metastock Formulae

RorPlot1

If(Round((6.854*LinearReg(C,13)+4.236*LinearReg(LinearReg(C,13),11)+2.618*LinearReg(LinearReg(LinearReg(C,13),11),7)+1.618*LinearReg(LinearReg(LinearReg(LinearReg(C,13),11),7),5)+LinearReg(LinearReg(LinearReg(LinearReg(LinearReg(C,13),11),7),5),3))/16.326*100)/100 > PREV,If(Round((6.854*LinearReg(C,13)+4.236*LinearReg(LinearReg(C,13),11)+2.618*LinearReg(LinearReg(LinearReg(C,13),11),7)+1.618*LinearReg(LinearReg(LinearReg(LinearReg(C,13),11),7),5)+LinearReg(LinearReg(LinearReg(LinearReg(LinearReg(C,13),11),7),5),3))/16.326*100)/100 - (2.5*ATR(13)) > PREV,Round((6.854*LinearReg(C,13)+4.236*LinearReg(LinearReg(C,13),11)+2.618*LinearReg(LinearReg(LinearReg(C,13),11),7)+1.618*LinearReg(LinearReg(LinearReg(LinearReg(C,13),11),7),5)+LinearReg(LinearReg(LinearReg(LinearReg(LinearReg(C,13),11),7),5),3))/16.326*100)/100 - (2.5*ATR(13)),PREV),LinearReg(C,13))

RorPlot2

Tperiod:=13;CFlow:=100000;

If(Sum(WC()*V,13) > CFlowAND (LinearReg(WC(),13)+LinearReg(LinearReg(WC(),8),13)+LinearReg(LinearReg(LinearReg(WC(),5),8),13)+LinearReg(LinearReg(LinearReg(LinearReg(WC(),3),5),8),13)+LinearReg(LinearReg(LinearReg(LinearReg(LinearReg(WC(),2),3),5),8),13))/5> (LinearReg(Ref(WC(),-1),13)+LinearReg(LinearReg(Ref(WC(),-1),8),13)+LinearReg(LinearReg(LinearReg(Ref(WC(),-1),5),8),13)+LinearReg(LinearReg(LinearReg(LinearReg(Ref(WC(),-1),3),5),8),13)+LinearReg(LinearReg(LinearReg(LinearReg(LinearReg(Ref(WC(),-1),2),3),5),8),13))/5AND LLVBars(WC(),Tperiod) = Tperiod-1AND PREV = 0AND Mov(WC(),13,S) > Mov(WC(),21,S),Tperiod-1,If(PREV > Tperiod-2AND Mov(WC(),13,S) > Mov(WC(),21,S){AND Ref(Fml("RorPlot3"),-1) > 24} {Invalid circular reference!}

Page 17: Metastock Formulae

AND Fml("RorPlot1") >= Ref(Fml("RorPlot1"),-1),PREV+1,If(Mov(WC(),21,S) >= Mov(WC(),13,S)OR Sum(WC()*V,13) > CFlowOR Ref(Fml("RorPlot1"),-1) > Fml("RorPlot1"){OR Ref(Fml("RorPlot3"),-1) < 25} {Invalid circular reference!},0,PREV)))

RorPlot3

Round(If(Fml("RorPlot2")>0,If(Fml("RorPlot2")<52,(5200/(Fml("RorPlot2")+1))*((LinearReg(WC(),13){-Ref(WC(),-Fml("RorPlot2")) <--MS cannot handle variables in Ref function!}-Ref(WC(),-20)) {<-- replaced with 20 period Ref function!}/LinearReg(WC(),13)),100*((LinearReg(WC(),13)-LinearReg(Ref(WC(),-51),13))/LinearReg(WC(),13))),0))ATR - True & Reverse{ True, Reverse & MetaStock ATR v3.0 }{ ©Copyright 2004 Jose Silva }{ [email protected] }

{ Reverse True Range is the the *smallest*  of the following for each period:  * The distance from today's High  to today's Low;  * The distance from yesterday's Close to today's High;  * The distance from yesterday's Close to today's Low.}

{ user input }plot:=Input("[1]True ATR,  [2]Reverse ATR,  [3]Both,  [4]MS-ATR",1,4,1);pds:=Input("Average True Range periods",1,252,10);pdsN:=Input("normalizing periods (1=none)",1,2520,1);smooth:=Input("Sine-weighted smoothing?  [1]Yes,  [0]No",0,1,0);

{ define True Range }x1:=ValueWhen(2,1,C);TrueRange:=Max(H-L,Max(Abs(x1-H),Abs(x1-L)));RevTrueRange:=Min(H-L,Min(Abs(x1-H),Abs(x1-L)));

{ average True Range }ATRtrue:=Mov(TrueRange,pds,E);ATRrev:=Mov(RevTrueRange,pds,E);ATRmeta:=Mov(TrueRange,pds*2-1,E);

{ normalize ATR }ATRraw:=If(plot=1,ATRtrue,If(plot=2,ATRrev,If(plot=4,ATRmeta,ATRtrue)));ATRnorm:=100*(ATRraw-LLV(ATRraw,pdsN))/(HHV(ATRraw,pdsN)-LLV(ATRraw,pdsN)+.000001);ATRplot:=If(pdsN<2,ATRraw,ATRnorm);rATRnorm:=100*(ATRrev-LLV(ATRrev,pdsN))/(HHV(ATRrev,pdsN)-LLV(ATRrev,pdsN)+.000001);rATRplot:=If(pdsN<2,RevTrueRange,rATRnorm);

Page 18: Metastock Formulae

{ optional sine-weighted smoothing }ATRplot:=If(smooth=1,(Sin(30)*ATRplot +Sin(60)*Ref(ATRplot,-1) +Sin(90)*Ref(ATRplot,-2) +Sin(60)*Ref(ATRplot,-3) +Sin(30)*Ref(ATRplot,-4))/(Sin(30)*2+Sin(60)*2+Sin(90)),ATRplot);rATRplot:=If(smooth=1,(Sin(30)*rATRplot +Sin(60)*Ref(rATRplot,-1) +Sin(90)*Ref(rATRplot,-2) +Sin(60)*Ref(rATRplot,-3) +Sin(30)*Ref(rATRplot,-4))/(Sin(30)*2+Sin(60)*2+Sin(90)),rATRplot);

{ plot ATR }If(plot=3,rATRplot,ATRplot);ATRplot2-point plot{ 2-point plot, coding example v2.5 }{ Trendline choice 1: last High/Low in month }{ Trendline choice 2: lows at Jan/June 2004 }{ ©Copyright 2003-2004 Jose Silva }{ [email protected] }

plot:=Input("choose event trend [1~2]",1,2,1);choose:=Input("plot: trendline [1],  event points [2]",1,2,1);

{define events}time1:=C=HHV(C,21);time2:=C=LLV(C,21);time2:=time2 AND time2<>time1;

{alternative events}dateA:=Year()=2004 AND Month()=1;dateA:=If(LastValue(Cum(dateA))=0, Year()=LastValue(Year())-1 AND Month()=LastValue(Month()),dateA);LoValA:=Lowest(ValueWhen(1,dateA,L));timeA:=dateA AND L=LastValue(LoValA);

dateB:=Year()=2004 AND Month()=6;dateB:=If(LastValue(Cum(dateB))=0, Year()=LastValue(Year()) AND Month()=LastValue(Month()),dateB);LoValB:=Lowest(ValueWhen(1,dateB,L));timeB:=dateB AND L=LastValue(LoValB);timeB:=timeB AND timeB<>timeA;

{choose events}time1:=If(plot=1,time1,timeA);time2:=If(plot=1,time2,timeB);price1:=If(plot=1,C,L);

Page 19: Metastock Formulae

price2:=If(plot=1,C,L);

{restrict to last events}time1:=time1 AND Cum(time1)=LastValue(Cum(time1));time2:=time2 AND Cum(time2)=LastValue(Cum(time2));

{sort events}t1pds:=LastValue(BarsSince(time1));t2pds:=LastValue(BarsSince(time2));x1:=If(t1pds>=t2pds,time1,time2);x2:=If(t1pds>=t2pds,time2,time1);y1:=If(t1pds>=t2pds,price1,price2);y2:=If(t1pds>=t2pds,price2,price1);

{fix coordinates}y1:=ValueWhen(1,x1,y1);y2:=LastValue(ValueWhen(1,x2,y2));b1:=LastValue(BarsSince(x1));b2:=LastValue(BarsSince(x2));

{trendline definition}plot:=y1+BarsSince(x1)*(y2-y1)/(b1-b2+.000001);plot:=Ref(Ref(plot,-b2),b2);{rem to extend plot}

If(choose=1,plot,time1+time2)

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!

Page 20: Metastock Formulae

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.

Barnes' AccellerationThe Barnes' Acceleration measures rate of price change as opposed to pricelevels

If the Barnes' Acceleration sustains the value of -1 for many days then thesecurity 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 upcomingstall or turnaround. The number of days needed may be different depending onthe type of issue. A utility stock may need to sustain the -1 level for 10days whereas a highly volatile technology stock may need to sustain the -1trend for as little as 5 days.

From the 1981 Technical Commodity Yearbook, Robert M. Barnesformula 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)

Barnes' Adaptive ForecastBased on the premise that closing price may be predictable based on previouscloses

See (1981 Technical Commodity Yearbook Robert M. Barnes Van NostrandReinhold 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)

Barnes' Moving AverageSee (1981 Technical Commodity Yearbook Robert M. Barnes Van NostrandReinhold 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 }

BDPL Trend Filter

Page 21: Metastock Formulae

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

Bearish Engulfing PatternCol 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 

Bianchi Approachenter 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 1OPT 2:10 to 16 step1OPT3:5 to 15 step 1OPT4:20 to 29 step 1but you are free to change any value of OPT!

Biggest LosersCol A: CLOSE

Col B: ROC(C,5,%)

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

Filter enabled: Yes

Binary Wave System Test for Metastock{created by Jim Greening}

Page 22: Metastock Formulae

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 IndexIf(Tema(DI(),21) > 5,+1,If(Tema(DI(),21) < -13,-1,0))BW3 Linear Regression SlopeIf(Tema(10000*LinRegSlope(C,34)/C,34) > 5,+1,If(Tema(10000*LinRegSlope(C,34)/C,34) < -13,-1,0))BW4 CCIIf(Tema(CCI(21),21) > 5,+1, If(Tema(CCI(21),21) < -13,- 1,0))BW5 ROCIf(Tema(ROC(C,21,%),21) > 2,+1,If(Tema(ROC(C,21,%),21)< -2,-1,0))BW6 Money FlowIf(Tema(MFI(21),21)-50 > 5,+1,If(Tema(MFI(21),21)-50< -5,-1,0))BW7 CMOIf(Tema(CMO(C,21),21) > 5,+1,If(Tema(CMO(C,21),21)< -5,-1,0))BW8 VAR maIf(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 AddFml("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 AmplifierIf(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 CompositePeriods := Input("Enter Tema Smoothing Periods",8,233,21);Tema(Fml("BW Add")*Fml("BW Amplifier"),Periods) 

Page 23: Metastock Formulae

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 LongAlert(Cross(Fml("Tema Binary Wave Comp"), Mov(Fml("Tema Binary Wave Comp"),8,S)),21) ANDHHV(Tema(Qstick(34),34),5) = HHV(Tema(Qstick(34),34),13) ANDMov(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 ShortAlert(Cross(-opt2,Fml("Tema Binary Wave Comp")),8) ANDTema(Qstick(34),34) < -0.1 ANDC < Ref(L,-1) ANDMov(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 LongFml("Tema Binary Wave Comp") < -opt1 ANDTema(Qstick(34),34) < 0 ANDLLV(Mov(L,21,VAR),5) = LLV(Mov(L,21,VAR),13)

Page 24: Metastock Formulae

Close ShortFml("Tema Binary Wave Comp") > 0 ANDTema(Qstick(34),34) > 0.08

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

Body Momentum{I was reading in Perry Kaufman's latest book and he described a littleoscillator he called "Body Momentum". This simply calculates the momentum ofthe closes above the opens versus the closes below the opens. The theory isthat as prices move up, closing prices will be higher than opening pricesand 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)

Bollinger Band ConfirmationFrom: 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)

Bollinger Band Histogram KarnishRecently, 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" 

Page 25: Metastock Formulae

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".

Bollinger Bank Hook Up and Hook DownI use the following indicators to show the price reversal of Bollinger Band penetration:

Name: Upper BB HookdownFormula:

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

Name: Lower BB HookupFormula:

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

Bollinger Bands 2I 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))

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

Bollinger Band WidthJohn 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)

Page 26: Metastock Formulae

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 anhorizontal 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 aprevious 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.

Bollinger Band Width 2From: Philip Schmitz

MetaStock v6 does not appear to provide an indicator which shows the width of BollingerBands, 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?

Bollinger Optimised Synergy SystemBOSS -- Synergy with Bollinger by John Lowe (March 1998 issue of TAM, a DutchTA mag)

In this article John Bollinger gets mentioned as insisting on using a Price/Closeindicator in conjunction with a combined Price/Volume indicator. For example, Priceas a moving or exponential average, the Typical Price(High+Low+Close/3) or one ofthe other on this theme of existing varieties. Bollinger strives for synergy, which hasto 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 partof the BOSS.

Page 27: Metastock Formulae

According to most analysts, the Chaikin Oscillator, a diverseaccumulation/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 besubstituted 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)

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

Boomers Trading SignalsBoomers buysig

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

Boomers watchsig**

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

Boomers watchsig 2**

Page 28: Metastock Formulae

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

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() BradCCIBradCCI: 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)

Brown's IndicatorName: 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))ORValueWhen(2,RSI(14)>Ref(RSI(14),-1),ATR(1))ORValueWhen(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)

Page 29: Metastock Formulae

Bull Fear/ Bear FearThe 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 highpercentage 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.

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

Selln :=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.

Bull Fear/ Bear Fear with DX Systementer long:n :=opt2{Time periods};BullFear := (HHV(HIGH,n) - LLV(HIGH,n))/2 + LLV(HIGH,n);Cross(CLOSE,bullfear) ANDDX(10) > opt1

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

Building Metastock System Tests

Page 30: Metastock Formulae

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 - MDIPeriods := 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) ANDMDI(13) - ADX(13) <= 4 ANDMDI(13) - ADX(13) >= -2 ANDADX(13) >= 8 ANDADX(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 ANDMDI(13) > 21 ANDLLV(Mov(L,55,VAR),5) = LLV(Mov(L,55,VAR),13)

Page 31: Metastock Formulae

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) ANDADX(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 = 2Opt2: Min = -21 Max = -5 Step = 8

That's it. Any comments or questions?

Bullish Engulfing PatternColA: 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 

Breadth ThrustThe 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. 

Page 32: Metastock Formulae

•             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. ________________________________________

Better Bollinger BandsIn an article in Futures Magazine, October 1998, Dennis McNicholl describes the use of Bollinger Bands and provides a means of making them tighter when markets are trending. He calls them Better Bollinger Bands.

Here is the formula for MetaStock 6.5 or higher.pds:=Input("Periods",2,200,20);sd:=Input("Standard Deviations",.01,10,2);alpha:=2/(pds+1);mt:=alpha*C+(1-alpha)*(If(Cum(1)<pds,C,PREV));ut:=alpha*mt+(1-alpha)*(If(Cum(1)<pds,C,PREV));dt:=((2-alpha)*mt-ut)/(1-alpha);mt2:=alpha*Abs(C-dt)+(1-alpha)*PREV;ut2:=alpha*mt2+(1-alpha)*PREV;dt2:=((2-alpha)*mt2-ut2)/(1-alpha);but:=dt+sd*dt2;blt:=dt-sd*dt2;dt;but;blt(Go Top...)Breaking out of Price ChannelsBreaking out of Price Channels, by Gerald Marisch, "Technical Analysis of Stocks & Commodities", January 1998, page 93.

"Here's a technique based upon Tushar Chande's variable-length moving average. The indicator is more responsive to market price movements than a conventional simple or exponential moving average, and can be used for position trading."

The following formula will match the authors slight modification to the variable moving average:VIDYA 21,5 Indicator Length:=Input("Length",1,200,21);Smooth:=Input("Smoothing",1,200,5);AbsCMO:=(Abs(CMO(C,Length)))/100;SC:=2/(Smooth+1);VIDYA:=If(Cum(1)<=(Length+1),C,(SC*AbsCMO*CLOSE)+(1-(SC*AbsCMO))*PREV);VIDYAThe following Expert highlights will show you when the price has undergone trend changes as discussed in the article. Enter each section as a separate highlight in an Expert Advisor. To do this, create a new Expert and select Highlights from the tab dialog. Then select New and name it Bull. Paste the Bull trend formula into the condition box within the editor and set the colour to green. Do this for the Bear and the Pause conditions as well, selecting the 

Page 33: Metastock Formulae

matching colours, Attach this Expert to your chart and if the conditions are met, the price bars will be displayed in the proper colours.Green Bars (Bull trend)Length:=21; Smooth:=5;AbsCMO:=(Abs(CMO(C,Length)))/100;SC:=2/(Smooth+1);VIDYA:=If(Cum(1)<=(Length+1),C,(SC*AbsCMO*CLOSE)+(1-(SC*AbsCMO))*PREV);C>(Vidya*1.01) 

Red Bars (Bear trend)Length:=21; Smooth:=5;AbsCMO:=(Abs(CMO(C,Length)))/100;SC:=2/(Smooth+1);VIDYA:=If(Cum(1)<=(Length+1),C,(SC*AbsCMO*CLOSE)+(1-(SC*AbsCMO))*PREV);C<(VIDYA*.99)

Yellow Bars (Pause or pending reversal of the trend)Length:=21; Smooth:=5;AbsCMO:=(Abs(CMO(C,Length)))/100;SC:=2/(Smooth+1);VIDYA:=If(Cum(1)<=(Length+1),C,(SC*AbsCMO*CLOSE)+(1-(SC*AbsCMO))*PREV);C>(VIDYA*.99) AND C<(VIDYA*1.01) 

(Go Top...)Bang For The BuckThis indicator shows the possible dollar return (on a $10,000 account) for a security on any given period. This is calculated by dividing a $10,000 account by the closing price. This number is then multiplied by the average range of the security for the last 200 periods. The interpretation is such that the higher the value, the higher the profit potential.

((10000/C)* (Mov(ATR(1),200,S))/100)(Go Top...)Breakout signals{ Plots breakout long/short signals [email protected] With thanks to Roy Larsen for Init idea }

pds1:=Input("HHV (long) breakout periods",1,252,21);pds2:=Input("LLV (short) breakout periods",1,252,10);display:=Input("display:  signals=1,  in-trade binary=2",1,2,1);x:=Input("use Open=1 High=2 Low=3 Close=4 Volume=5 P=6",1,6,4);delay:=Input("Entry and Exit delay",0,3,0);

x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,If(x=6,P,C)))));In:=x>Ref(HHV(x,pds1),-1);Out:=x<Ref(LLV(x,pds2),-1);

Page 34: Metastock Formulae

Init:=Cum(In+Out>-1)=1;InInit:=Cum(In)=1;Flag:=BarsSince(Init OR In) < BarsSince(Init OR Out)+InInit;In1:=Cum(Cum(In))=1;Out1:=Cum(Cum(Out))=1;

If(display=1,Ref(Cum(Cum(In))=1,-delay),0);If(display=1,-Ref(Out1 AND BarsSince(In1)>=BarsSince(Out1),-delay),0);If(display=1,Ref((InInit AND Alert(InInit=0,2) OR Flag AND Alert(Flag=0,2))-(Flag=0 AND Alert(Flag,2)),-delay),Flag)

Breakout signalsSignals a Buy Long on price breakout

Exploration filter

pds1:=21; {HHV (long) breakout periods}pds2:=10; {LLV (short) breakout periods}x:=4;   {use Open=1 High=2 Low=3 Close=4 Vol=5}

x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,C))));In:=x>Ref(HHV(x,pds1),-1);Out:=x<Ref(LLV(x,pds2),-1);

Init:=Cum(In+Out>-1)=1;InInit:=Cum(In)=1;Flag:=BarsSince(Init OR In) < BarsSince(Init OR Out)+InInit;BuyLong:=InInit AND Alert(InInit=0,2) OR Flag AND Alert(Flag=0,2);

BuyLong

Breakin signalsSignals a Sell Long on price collapse

Exploration filter

pds1:=21; {HHV (long) breakout periods}pds2:=10; {LLV (short) breakout periods}x:=4;   {use Open=1 High=2 Low=3 Close=4 Vol=5}

x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,C))));In:=x>Ref(HHV(x,pds1),-1);Out:=x<Ref(LLV(x,pds2),-1);

Init:=Cum(In+Out>-1)=1;InInit:=Cum(In)=1;Flag:=BarsSince(Init OR In) < BarsSince(Init OR Out)+InInit;SellLong:=Flag=0 AND Alert(Flag,2);

SellLongCandle Code

Page 35: Metastock Formulae

From "Lyn Maine"Here is the formula from this months TASC called Candle codethis is only using 1 formula not like the one in TASC which is broken up into several smaller ones.

CandleCodeBdy:=Abs(O-C);Lshd:=If(C>=O,O-L,C-L);Ushd:=If(C>=O,H-C,H-O);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)Candle - Hanging Man/Hammer and CCI Trading Systementer long:(Fml("Candle - Hammer")=1) AND(CCI(11)<-50)

close long:((CCI(11)<80) AND (Ref(CCI(11),-1)>80)) OR((CCI(11)<-80) ANDRef(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) ANDRef(CCI(11)>80,-1)) (Go Top)Candle Shadow Support 

Page 36: Metastock Formulae

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 support-resistance 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,(HIGH-CLOSE),(HIGH-OPEN));Mov(ShadowResistance,3,S); {for not so short-term 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,(OPEN-LOW),(CLOSE-LOW)); Mov(ShadowSupport,3,S); {for not so short-term 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 3-Day 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)CCI Spike Trading System{This system uses the momentum Commodity Channel Index (CCI) indicator tofind short-term bottoms in the market. The CCI indicator is extremelyvolatile and is generally difficult to use when trading the S&P 500 Index.We, however, have turned this volatility into a trading advantage by usingthe spread or gap between the CCI index and its moving average as a reversalsignal. Specifically if the gap is larger then a certain percentage and CCIindicator crosses above its moving average we buy the market. The systemremains in the market for a short period of time, exiting the trade as theindicators cross to the downside. As designed, this system only trades longthe market; it can however be altered to short the market. It is best usedin choppy bullish markets similar to the 1995 bull market.}

Page 37: Metastock Formulae

{Trading Tactics: This short-term bullish trading system exploits overextended markets. Futures, options, and mutual fund traders should take fulladvantage of this high probability trading system, either by taking outrightpositions or avoiding declining markets. The code for this system can bereversed to trade short positions. This system should be used in place oflonger-term momentum systems in strong bullish choppy type markets. Thissystem rarely exits at the market intermediate peak, so other exitingsignals may be used in place of our indicator crossover technique.}

{Enter long:}

Ref(CCI(13)/(Mov(CCI(13),3,S)),-1)>1.5 ANDCross(CCI(13),(Mov(CCI(13),3,S))) ANDRef(CCI(13),-1)<-25

{Exit long:}

Cross((Mov(CCI(13),3,S)),CCI(13)) ANDRef(CCI(13),-1)>200 (Go Top)Chande and Kroll's R2 Indicatorrev. 01/06/97

In their book "The New Technical Trader," Chande& Kroll introduce the r2indicator. They state that"the primary use of r2 is as a confirming indicator" and that "it is alagging indicator that showsthe 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)Chande and Kroll's R2 Indicatorrev. 01/06/97

In their book "The New Technical Trader," Chande& Kroll introduce the r2indicator. They state that"the primary use of r2 is as a confirming indicator" and that "it is alagging indicator that showsthe strength of the trend."

In MetaStock the r2 formula is:

Pwr(Corr(Cum( 1 ),C,14,0),2)

Page 38: Metastock Formulae

They also present a smoothed r2 which would be:

Mov(Pwr(Corr(Cum( 1 ),C,14,0),2)*100,14,S) (Go Top)Chandelier Exit 2 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)Chandeleir Exit, version IIBelow 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.

Page 39: Metastock Formulae

{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)Changing Ways Accumulation/DistributionThis 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.

Page 40: Metastock Formulae

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)Channel Exit with Stop LossAs 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

Page 41: Metastock Formulae

{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)Cleaning out unwanted stocks from MetastockA 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)Close Above Median PriceThis 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))

Page 42: Metastock Formulae

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)CMA"1) Sell the opening (long or short) X-number of days(?) after the indicator above moves from below 100 toabove 100. (Is this on a close-to-close 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 X-numberof 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 close-to-close or intra-day?"

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)Coding ExampleIf 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) ANDRef(L,-5)<=Ref(H,-4) ANDDayofweek() = 3 (Go Top)Collection from a Spanish Source 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 [email protected] para su publicaciуn en esta pбgina. Muchos dicen que el Santo Grial no existe.Ñ—Y si es mentira?

Page 43: Metastock Formulae

1 DAILY CLOSE VS HIGH AND LOW WAVE if((C-L)/(H-L),>,.66 ,1, if((C-L)/(H-L),<,.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(H-L,1,S)/mov(H-L,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 (C-L)/(H-L) 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 20-unit 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 12-ROC 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((C-L)/(H-L),<,.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 5-unit 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)-(C-llv(L,10))/(hhv(H,10)-llv(L,10)) 38 Future MACD---Dr. 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) 

Page 44: Metastock Formulae

40 Summation Noise Indicator (Adam White) (sum(abs(C-ref(C,-1)),14)-sum(abs(mov(C,10,S)-ref(mov(C,10,S),-1)),14))/ sum(abs(C-ref(C,-1)),14) 41 Chaikin Money Flow sum(((((C-L)-(H-C))/(H-L))*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 Line-TASC 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) H-mov(C,13,E) 45 Bear Power (for Elderray) L-mov(C,13,E) 46 13-Period 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 KST-Martin 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 B-Wave +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 (H-ref(L,-16))/(mov((H-L),16,S)*sqr(16)) 56 RWI for today's low (ref(H,-16)-L)/(mov((H-L),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 (V-mov(V,10,S))/mov(V,10,S) 

Page 45: Metastock Formulae

70 # of STD's of volume (V-mov(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)Common Metastock Bar PatternsBAR - 3 Higher HighsH>Ref(H,-1) AND Ref(H,-1)>Ref(H,-2) AND Ref(H,-2)>Ref(H,-3)

BAR - 3 Lower Lows & Reversal HL>Ref(L,-1) AND Ref(L,-1)<Ref(L,-2) AND Ref(L,-2)<Ref(L,-3) ANDRef(L,-3)<Ref(L,-4)

BAR - 3 Lower LowsL<Ref(L,-1) AND Ref(L,-1)<Ref(L,-2) AND Ref(L,-2)<Ref(L,-3)

BAR - 5 Lower LowsL<Ref(L,-1) AND Ref(L,-1)<Ref(L,-2) AND Ref(L,-2)<Ref(L,-3) ANDRef(L,-3)<Ref(L,-4) AND Ref(L,-4)<Ref(L,-5)

BAR - Expansion BuyIf(C > Ref(HHV(C,42),-1) AND H-L >= Ref(HHV((H-L),9),-1),1,0)

BAR - Expansion SellIf(C < Ref(LLV(C,42),-1) AND (H-L) >= Ref(HHV((H-L),9),-1),1,0)

BAR - Fractal-downIf(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 - Fractal-up(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 DownGapDown()

BAR - Gap UpGapUp()

Page 46: Metastock Formulae

BAR - H > Yesterday's HH>Ref(H,-1)

BAR - Highest Bars AgoHighestBars(CLOSE)

BAR - Highest High Value Bars AgoHHVBars(CLOSE,50)

BAR - Inside Day + Day 3Ref(Fml("BAR - Inside Day"),-3)

BAR - Inside DayHIGH < Ref(HIGH,-1) AND LOW > Ref(LOW,-1)

BAR - Lizard BuyIf(O >= L + ((H-L) * .75) AND C >= L + ((H-L) * .75) AND L <Ref(LLV(L,9),-1),1,0)

BAR - Lizard SellIf(O <= L + ((H-L) * .25) AND C <= L + ((H-L) * .25) AND H >Ref(HHV(H,9),-1),1,0)

BAR - Narrow Range 4HIGH - LOW < Ref(LLV(H-L,3),-1)

BAR - Narrow Range 7HIGH - LOW < Ref(LLV(H-L,6),-1)

BAR - O > Yesterday's CO>Ref(C,-1)

BAR - Outside Day & > COutside() AND C>Ref(C,-1)

BAR - Outside DayHIGH > Ref(HIGH,-1) AND LOW < Ref(LOW,-1)

BAR - Pivot BuyIf(H-L > Ref(HHV((H-L),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 SellIf(H-L > Ref(HHV((H-L),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 VolumeReactionWithVol()

Page 47: Metastock Formulae

BAR - Reaction DayReaction()

BAR - Surprise Day DownO<Ref(C,-1) AND C>O AND C<Ref(C,-1)

BAR - Surprise Day UpO>Ref(C,-1) AND C<O AND C>Ref(C,-1)

BAR - Trough Value - 5Trough(1,CLOSE,5)

BAR - Typical PriceTypical() (Go Top)Congestion Index((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)Connors & Raschke's Historical Volatility System Here is the Connors and Raschke's historical volatility system exploration in August 1996 TASC Trader's Tips translated for MetaStock. COLUMN FORMULASColumn A : Vol ratiostd(log(C/ref(C,-1)),5)/std(log(C/ref(C,-1)),99)Column B : NR4 dayif(HIGH-LOW,<,ref(llv(H-L,3),-1),1,0)Column C : Insideif(HIGH,<,ref(HIGH,-1),if(LOW,>,ref(LOW,-1),1,0),0)Column D : HighHIGHColumn E : LowLOWFILTER FORMULAFormula:when(colA,<,0.5) AND (when(colB,=,1) OR when(colC,=,1))(Go Top)Consolidation Breakout, DownsideIf(Ref(Fml("congestion index"),-5),<,10,

Page 48: Metastock Formulae

{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)Consolidation Breakout, UpsideCol A: CLOSE

Filter: Fml("Consolidation breakout (upside)") = 1

Filter enabled: Yes (Go Top)Consolidation Over 16 WeeksCol 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)Countback line for Metastock (Note. This is very good, but the limitation is the lookback period. The 

Page 49: Metastock Formulae

calculation point for the CBL line might be 5, 10, 15, 30 days away fromtodays 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 CBL-indicated counter-trend 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 low-gradient 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 

Page 50: Metastock Formulae

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)Create a Gann Swing ExpertInstructions

1. First create a new expert and name it whatever you want.

2a. under "trends" tab put this code for bullish:

ut:=FmlVar("GANN-Trend","TDV");uplot:=If(BarsSince(Ut=1)<BarsSince(Ut=-1),1,0);uplot=1;

2b. and this for bearish:

dt:=FmlVar("GANN-Trend","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);

Page 51: Metastock Formulae

HLv<>Ref(HLv,-1);

3b. Create new and call it "Up-Trend", choose color, and enter this code:

ut:=FmlVar("GANN-Trend","TDV");uplot:=If(BarsSince(Ut=1)<BarsSince(Ut=-1),1,0);uplot=1;

3c. Create new and call it "Down-Trend", choose color, and enter this code:

dt:=FmlVar("GANN-Trend","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("GANN-Swing","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("GANN-Swing","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)Creating Dynamic Vertical Linesfrom 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)=(LastLoadedBarNum-n)+1,100,0)....or

Create a new Expert.Place the following in "Trends"/"Bullish".

n:=89;

Page 52: Metastock Formulae

LastLoadedBarNum:=LastValue(Cum(1));Cum(1)=(LastLoadedBarNum-n)+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)Cross Above 200 MA on Twice Average VolumeFilter (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)Crossing Below 200 Day MA on Double Average Volume 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)Customisable StochRSI from Nicholas KormanikThe 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 itreally plays no part in things. However, if somebody presents a goodargument for using other than 1 ... hey, I'm amenable.

Chande, the original inventor, didn't use a moving average on the wholething. Chande's result was therefore sort of choppy. I guess along the waypeople 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 consensusamong users of StochRSI on what really appears to work for them.

StochRSI Set--------------------5 -- 5 -- 38 -- 8 -- 513 -- 13 -- 1321 -- 15 -- 13

Page 53: Metastock Formulae

21 -- 21 -- 1334 -- 34 -- 1355 -- 55 -- 2189 -- 13 -- 3489 -- 89 -- 21233 -- 233 -- 34(Go Top)Cyclical Systemfrom Ton Maas [email protected]

"Trading Stocks With A Cyclical System" by Jeffrey Owen Katz (TASC-Feb1999).(Translated for MetaStock 6.5 by Ton Maas -The Netherlands - June1999).----------------------------------------------------------------------------(The system's original Easy Language formulas+system were derived fromtheabove mentioned TASC article). My guess is that Equis (Alan McNichol) wasnot 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 SystemNotes:{February 1999 - TASC-article (see also TRADERS' TIPS)}

Page 54: Metastock Formulae

Formulas:{copy-repeat 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 Testingpage, set the Trade Delay to zero, set Positions to "both", and then set anyother desired options (apart from Optimizing, which is not advisable; leavethe factory default settings). Click OK to save the changes, and then open achart and run the system.}(Go Top)Candle Strength IndexPeriods:=Input("Enter Periods",2,13,2);Mov(Mov(Mov(Fml("Candlecode"),Periods,S),Periods,S),Periods,S)(Go Top)Chande Momentum Oscillator Composite Average(((CMO(C,5))+(CMO(C,10))+(CMO(C,20)))/3)(Go Top)Chande Momentum Oscillator VolatilityS1:= 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)Chande's Momentum OscillatorThe 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_1Sum( If( C ,> ,Ref( C, -1 ) , ( C - Ref( C ,-1 ) ) ,0 ) ,14 ) CMO_2Sum( If( C ,< ,Ref( C ,-1 ) , ( Ref( C ,-1 ) - C ) ) ,0 ) ,14 )CMO_Final100 * ( ( 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),(C-Ref(C,-1)),0),14))-(Sum(If(C,<,REF(C,-1),(REF(C,-1)-C),0),14))) /((Sum(If(C,>,Ref(C,-1),(C-Ref(C,-1)),0),14)+(Sum(If(C,<,REF(C,-1),(REF(C,-1)-C),0),14))))

Page 55: Metastock Formulae

*** 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)Chande's TrendscoreIf(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)Comparitive Relative Strength in MetaStock™ for WindowsComparative 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.) 1.            Load the S&P 500. 2.            Load the equity, or whatever you wish to find the relative strength for. 3.            Drag the S&P 500 plot into a new inner window of the equity. (You may need to click Stack first.) 4.            Close the S&P 500 chart. 5.            Create a custom indicator: Div(close, p) 6.            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: o             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. (Double-click the S&P 500 plot to get to its "properties", then choose the color you need from the Colors list.) o             You can give both plots different colors so you can tell which is which. 7.            Save this chart as a Template. (File|Save 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 1.            Load the S&P 500 (or whatever you want to compare against). 2.            Create a custom indicator of the Close. 3.            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. 4.            Select the indicator plot (by single-clicking with the left mouse button on the line). 5.            Do an Exploration with DIV(Close,p) in column A, and specify which directory to explore. 6.            The results are displayed in the Exploration report. (P is a special variable that points at the last indicator plotted or selected.)

Page 56: Metastock Formulae

Confidence %(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

Coppock CurveThe 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 (459-462): 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 adaptation-level applies to how we judge our income levels, stock prices and virtually every other variable in our lives. Psychologically, relativity prevails..SIMPLEST FORMSThe moving average is the simplest form of adaptation-level. 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 adaptation-level, 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 adaptation-level 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))/100Channel AnalysisChannel Analysis, beginning on page 18 of the July 1998 Technical Analysis of Stocks & Commodities Magazine It's quite easy to create the Trend Channels discussed in Thom Hartle's Channel Analysis article in MetaStock for Windows.

After opening a chart, you may want to zoom in a little to make it easier to draw the Trend Channels more precisely. You can do this by clicking on the "+" button located on the Chart Toolbar at the bottom of the chart. Next you may want to identify the bars for the support or resistant points by drawing circles on the bars as Mr. Hartle did in the article, or you can use symbols from the symbol palette.

Page 57: Metastock Formulae

Both can be chosen from the Drawing Toolbar which is on left side of the chart. After identifying the points to draw the trendline, click on the Trendline button, also located on the Drawing Toolbar, and draw the trendline between the closing prices of the two bars. If you are using MetaStock 6.5, you may want to right-click on the trendline, choose properties, and then check the Snap to Price checkbox. This will make the trendline line up exactly with the closing prices.

To create the second trendline of the Trend Channel, right-click on the first trendline and choose Create Parallel Line. Drag this parallel line so it aligns with the highest high between the two support points or the lowest low between two resistance points. If desired, you can go to the properties of each of these trendlines and choose to extend the lines to the right. (Go Top...)Combining Statistical and Pattern Analysis, Shark – 32In MetaStock for Windows you can use the Expert Advisor to recreate the "Shark – 32" signals on your charts as discussed in Walter T. Down's article "Combining Statistical and Pattern Analysis".

First, choose Expert Advisor from the Tools menu in MetaStock 6.5. Next, choose New and enter the following formulas:Name:Click the Name tab and enter "Shark – 32" in the Name field.

Trends:Click the Trends tab and enter the following formulas in the Bullish and Bearish fields.Bullish: Mov(C,5,S)>Mov(C,20,S);Bearish: Mov(C,5,S)<Mov(C,20,S);Highlights:Click the Highlights tab, choose New, and enter "3rd Bar" in the Name field. Now change the color in the Color field to Blue. Finally, enter the following formula in the Condition field, and then choose OK.Symmetry:=.28; Apex:=(H+L)/2;WB:=Ref(H,-2)-Ref(L,-2);Shark:=If((H<Ref(H,-1) AND L>Ref(L,-1) AND Ref(H,-1)<Ref(H,-2) AND Ref(L,-1)>Ref(L,-2))=1,If(Apex <= (Ref(H,-2)-(WB*Symmetry)) AND Apex> = (Ref(L,-2)+(WB*Symmetry)) ,1,0),0);Shark;Using the same method as above, enter the following 2 highlight formulas.Name: 2nd BarColor: BlueCondition:Symmetry:=.28;Apex:=(H+L)/2;WB:=Ref(H,-2)-Ref(L,-2);Shark:=If((H<Ref(H,-1) AND L>Ref(L,-1) AND Ref(H,-1)<Ref(H,-2) AND Ref(L,-1)>Ref(L,-2))=1,If(Apex <= (Ref(H,-2)-(WB*Symmetry)) AND Apex >= (Ref(L,-2)+(WB*Symmetry)) ,1,0),0);Ref(Shark,+1)=1;

Name: 1st Bar

Page 58: Metastock Formulae

Color: BlueCondition:Symmetry:=.28;Apex:=(H+L)/2;WB:=Ref(H,-2)-Ref(L,-2);Shark:=If((H<Ref(H,-1) AND L>Ref(L,-1) AND Ref(H,-1)<Ref(H,-2) AND Ref(L,-1)>Ref(L,-2))=1,If(Apex <= (Ref(H,-2)-(WB*Symmetry)) AND Apex >= (Ref(L,-2)+(WB*Symmetry)) ,1,0),0);Ref(Shark,+2)=1;Symbols:Click the Symbols tab, choose New and enter "Shark Buy" in the Name field. Now enter the following formula in the Condition field.Symmetry:=.28; Apex:=(H+L)/2;WB:=Ref(H,-2)-Ref(L,-2);Shark:=If((H<Ref(H,-1) AND L>Ref(L,-1) AND Ref(H,-1)<Ref(H,-2) AND Ref(L,-1)>Ref(L,-2))=1,If(apex <= (Ref(H,-2)-(WB*Symmetry)) AND Apex> = (Ref(L,-2)+(WB*Symmetry)) ,1,0),0);Buyok:=Cross(C,ValueWhen(1,Shark=1,Ref(H,-2)));Chk:=Cum(Buyok)-ValueWhen(1,Shark=1,Cum(Buyok));ValidChk:=Alert(Shark=1,25);{Note* The above ValidChk variable makes the Shark signal valid for 25 periods. If the price does not cross above the High value of the base within 25 periods, you will not receive a signal. You can change the number of periods by changing 25 to the number of periods you desire. *}Buy:= Buyok=1 AND Ref(Chk,-1)=0 AND ValidChk=1; Buy;Click the Graphic tab. Change the symbol in the Graphic field to Buy Arrow. Now change the color in the Color field to Green. Finally, type "Buy" in the Label field, and then choose OK.

Using the Same method as above, enter the following Symbol formula.Name: Shark SellCondition:Symmetry:=.28;Apex:=(H+L)/2;WB:=Ref(H,-2)-Ref(L,-2);Shark:=If((H<Ref(H,-1) AND L>Ref(L,-1) AND Ref(H,-1)<Ref(H,-2) AND Ref(L,-1)>Ref(L,-2))=1,If(apex <= (Ref(H,-2)-(WB*Symmetry)) AND Apex >= (Ref(L,-2)+(WB*Symmetry)) ,1,0),0);Sellok:=Cross(ValueWhen(1,Shark=1,Ref(L,-2)),C);Chk:=Cum(Sellok)-ValueWhen(1,Shark=1,Cum(Sellok));ValidChk:=Alert(Shark=1,25);{Note* The above ValidChk variable makes the Shark signal valid for 25 periods. If the price does not cross below the Low value of the base within 25 periods, you will not receive a signal. You can change the number of periods by changing 25 to the number of periods you desire. *}Sell:= Sellok=1 AND Ref(Chk,-1)=0 AND ValidChk=1; Sell;Symbol: Sell ArrowColor: RedLabel: Sell

Page 59: Metastock Formulae

After you have finished creating the Symbol formulas, you can attach the Expert to your chart by choosing Expert Advisor from the Tools Menu. Select the Expert called "Shark – 32" from your list of Experts, choose Attach, and then Close.(Go Top...)CCI Moving Average Crossover TestSystem Explanation:  Buy when the Moving Average crosses up through the CCI and sell on the reverse condition.Signal FormulasEnter LongWhen( CCI( opt1 ) ,< ,Mov( CCI( opt1 ) ,opt2 ,E ) ) AND When( Ref( CCI(opt1) ,-1) ,>= ,Ref( Mov( CCI( opt1 ) ,opt2 ,E ) ,-1 ) )Enter ShortWhen( CCI( opt1 ) ,> ,Mov( CCI( opt1 ) ,opt2 ,E ) ) AND When( Ref( CCI(opt1) ,-1) ,<= ,Ref( Mov( CCI( opt1 ) ,opt2 ,E ) ,-1 ) )

Optimization VariablesOpt1: Min = 5 Max = 40 Step = 1 Opt2: Min = 5 Max = 40 Step = 1

(Go Top...)Combining Trend and Oscillator SignalsThe information for this test was published in the December 1996 issue of Technical Analysis of Stocks and Commodities. The test appears in the article "Combining Trend and Oscillator Signals" by Jeremy G. Konstenius. Mr. Konstenius describes a trading system that combines Linear Regression and Moving averages to generate trades.To create this test in MetaStock do the following:•             Run MetaStock version 6.0 or higher •             Click Tools | System Tester | New •             Type a name for the test in the Name column •             Enter the following System Test rules and options.  Signal FormulasEnter LongC>Mov(C,OPT1,S) AND LinRegSlope(C,OPT2)>LinearReg(LinRegSlope(C ,OPT3),50) Close LongC<Mov(C,OPT1,S) OR LinRegSlope(C,OPT2)<LinearReg(LinRegSlope(C ,OPT3),50)Enter ShortC<Mov(C,OPT1,S) AND LinRegSlope(C,OPT2)<LinearReg(LinRegSlope(C ,OPT3),50)Close ShortC>Mov(C,OPT1,S) OR LinRegSlope(C,OPT2)>LinearReg(LinRegSlope(C ,OPT3),50)

OptimizeOPT1: Minimum 5 Maximum 50 Step 5OPT2: Minimum 5 Maximum 50 Step 5OPT3: Minimum 5 Maximum 50 Step 5

•             Initial Equity: Any amount •             Positions: Long and Short 

Page 60: Metastock Formulae

•             Trade Price: Close •             Trade delay: 0 The author uses weekly data and a $50 round turn commission. You can modify this test by changing the distance from Minimum to Maximum or the Step used in each OPT variable.(Go Top...)Commodity Channel Index Buy and Sell SignalsThis system generates buy and sell signals based on the criteria using the Commodity Channel Index indicator. It enters a long position when yesterday's 14 period CCI is greater than -250 and today's 14 period CCI is less than -250. It will close long according to the criteria you specify in close long. It enters a short position when yesterday's 14 period CCI is less than 250 and today's 14 period CCI is greater than 250 and closes short according to the criteria you specify in close short.Signal FormulasEnter LongWhen( Ref(CCI( 14 ) ,-1 ) ,> ,-250 ) AND When(CCI( 14 ) ,< ,-250 )Close LongWhen( enter your criteria here )Enter ShortWhen( Ref(CCI( 14 ) ,-1 ) ,< ,250 ) AND When(CCI( 14 ) ,> ,250 )Close ShortWhen( enter your criteria here )

** You can change to a different periodicity other than 14 by changing every occurrence of 14 with the desired periodicity.(Go Top...)Calendar Day counter{ Day counter from 1/1/0001, Gregorian calendar }{ Count is independent of any missing chart data }{ ©Copyright 2003-2004 Jose Silva }{ [email protected] }

limit:=Input("count calendar days from year",1,2100,2000);

LimLeap:=Frac(limit/4)=0 AND Frac(limit/100)<>0 OR Frac(limit/400)=0;NoCount:=limit*365+Int(limit/4) -Int(limit/100)+Int(limit/400)-LimLeap;leap:=Frac(Year()/4)=0 AND Frac(Year()/100)<>0 OR Frac(Year()/400)=0;y:=Year()*365+Int(Year()/4) -Int(Year()/100)+Int(Year()/400)-NoCount;m:= If(Month()=2,31-leap, If(Month()=3,59, If(Month()=4,90, If(Month()=5,120, If(Month()=6,151, If(Month()=7,181, If(Month()=8,212, If(Month()=9,243, If(Month()=10,273, If(Month()=11,304, If(Month()=12,334, -leap)))))))))));DayNr:=y+m+DayOfMonth();

Page 61: Metastock Formulae

DayNr(Go Top...)Calendar Day of Year{ Calendar Day of Year counter }{ count is independent of any missing chart data }{ ©Copyright 2003 Jose Silva }{ [email protected] }

leap:=Frac(Year()/4)=0 AND Frac(Year()/100)<>0 OR Frac(Year()/400)=0;m:=leap+ If(Month()=2,31-leap, If(Month()=3,59, If(Month()=4,90, If(Month()=5,120, If(Month()=6,151, If(Month()=7,181, If(Month()=8,212, If(Month()=9,243, If(Month()=10,273, If(Month()=11,304, If(Month()=12,334, -leap)))))))))));Day:=m+DayOfMonth();

Day(Go Top...)Calendar Weekday counter{ Weekday (Mon~Fri) counter from 1960 }{ Count is independent of any missing chart data }{ ©Copyright 2003 Jose Silva }{ [email protected] }

limit:=1960;  {do not change limit year}LimLeap:=Frac(limit/4)=0 AND Frac(limit/100)<>0 OR Frac(limit/400)=0;NoCount:=limit*365+Int(limit/4)-Int(limit/100)+Int(limit/400)-LimLeap;leap:=Frac(Year()/4)=0 AND Frac(Year()/100)<>0 OR Frac(Year()/400)=0;y:=Year()*365+Int(Year()/4) -Int(Year()/100)+Int(Year()/400)-NoCount;m:= If(Month()=2,31-leap, If(Month()=3,59, If(Month()=4,90, If(Month()=5,120, If(Month()=6,151, If(Month()=7,181, If(Month()=8,212, If(Month()=9,243, If(Month()=10,273, If(Month()=11,304, If(Month()=12,334, -leap)))))))))));DayNr:=y+m+DayOfMonth();WkDayCount:= Int((DayNr+3)/7)+   {Mon} Int((DayNr+2)/7)+   {Tue} Int((DayNr+1)/7)+   {Wed}

Page 62: Metastock Formulae

 Int((DayNr)/7)+     {Thu} Int((DayNr-1)/7);   {Fri}

WkDayCount

Missing trading days

{Plots missing daily (weekday) bars count}{©Copyright 2003-2004 Jose Silva}{[email protected]}

ChkVol:=Input("Zero-volume days = missing data days?  Yes=1, No=0",0,1,1);VolMissing:=If(ChkVol,V=0,0);

limit:=1960;  {do not change limit year}LimLeap:=Frac(limit/4)=0 AND Frac(limit/100)<>0 OR Frac(limit/400)=0;NoCount:=limit*365+Int(limit/4) -Int(limit/100)+Int(limit/400)-LimLeap;leap:=Frac(Year()/4)=0 AND Frac(Year()/100)<>0 OR Frac(Year()/400)=0;y:=Year()*365+Int(Year()/4) -Int(Year()/100)+Int(Year()/400)-NoCount;m:= If(Month()=2,31-leap, If(Month()=3,59, If(Month()=4,90, If(Month()=5,120, If(Month()=6,151, If(Month()=7,181, If(Month()=8,212, If(Month()=9,243, If(Month()=10,273, If(Month()=11,304, If(Month()=12,334, -leap)))))))))));DayNr:=y+m+DayOfMonth();WkDayCount:= Int((DayNr+3)/7)+   {Mon} Int((DayNr+2)/7)+   {Tue} Int((DayNr+1)/7)+   {Wed} Int((DayNr)/7)+     {Thu} Int((DayNr-1)/7);   {Fri}

WkDayCount-ValueWhen(2,1,WkDayCount)-1 +VolMissing(Go Top...)Calendar Week counter{ Week counter v2.0, Gregorian calendar }{ Count is independent of any missing chart data }{ ©Copyright 2003-2004 Jose Silva }{ [email protected] }

Page 63: Metastock Formulae

limit:=2000;  {do not change limit year}LimLeap:=Frac(limit/4)=0 AND Frac(limit/100)<>0 OR Frac(limit/400)=0;NoCount:=limit*365+Int(limit/4) -Int(limit/100)+Int(limit/400)-LimLeap;leap:=Frac(Year()/4)=0 AND Frac(Year()/100)<>0 OR Frac(Year()/400)=0;y:=Year()*365+Int(Year()/4) -Int(Year()/100)+Int(Year()/400)-NoCount;m:= If(Month()=2,31-leap, If(Month()=3,59, If(Month()=4,90, If(Month()=5,120, If(Month()=6,151, If(Month()=7,181, If(Month()=8,212, If(Month()=9,243, If(Month()=10,273, If(Month()=11,304, If(Month()=12,334, -leap)))))))))));DayNr:=y+m+DayOfMonth();WkCount:=Int((DayNr-1)/7)+(Year()>=limit);

WkCount(Go Top...)Calendar Week of Year{ Calendar Week of year counter v2.1 }{ count is independent of any missing chart data }{ ©Copyright 2003 Jose Silva }{ [email protected] }

leap:=Frac(Year()/4)=0 AND Frac(Year()/100)<>0 OR Frac(Year()/400)=0;y:=Year()*365-715870 {count from 1960} +Int(Year()/4)-Int(Year()/100)+Int(Year()/400);m:=leap+ If(Month()=2,31-leap, If(Month()=3,59, If(Month()=4,90, If(Month()=5,120, If(Month()=6,151, If(Month()=7,181, If(Month()=8,212, If(Month()=9,243, If(Month()=10,273, If(Month()=11,304, If(Month()=12,334, -leap)))))))))));d:=m+DayOfMonth();

{1st day of week in year}fdy:=Int(Frac((y+.5-leap)/7)*7)+1;

Page 64: Metastock Formulae

{offset necessary for week start sync}offset:=If(fdy=3,2,If(fdy=4,3,If(fdy=5,-3, If(fdy=6,-2,If(fdy=7,-1,1)))));

Week:=Int(Frac((d+.5+offset)/(374+offset)) *(374+offset)/7)+1;

Week(Go Top...)Calendar ASX non-Friday end-of-week(1){ ASX non-Friday end-of-week dates, 01/01/1980~31/12/1999 }

Year()=1980 AND Month()=04 AND DayOfMonth()=03ORYear()=1981 AND Month()=04 AND DayOfMonth()=16ORYear()=1982 AND Month()=04 AND DayOfMonth()=08ORYear()=1983 AND Month()=03 AND DayOfMonth()=31ORYear()=1984 AND Month()=04 AND DayOfMonth()=19ORYear()=1985 AND Month()=04 AND DayOfMonth()=04ORYear()=1986 AND Month()=03 AND DayOfMonth()=27ORYear()=1986 AND Month()=04 AND DayOfMonth()=24ORYear()=1986 AND Month()=12 AND DayOfMonth()=24ORYear()=1987 AND Month()=04 AND DayOfMonth()=16ORYear()=1987 AND Month()=12 AND DayOfMonth()=24ORYear()=1987 AND Month()=12 AND DayOfMonth()=31ORYear()=1988 AND Month()=03 AND DayOfMonth()=31ORYear()=1989 AND Month()=03 AND DayOfMonth()=23ORYear()=1990 AND Month()=01 AND DayOfMonth()=25ORYear()=1990 AND Month()=04 AND DayOfMonth()=12ORYear()=1991 AND Month()=03 AND DayOfMonth()=28ORYear()=1992 AND Month()=04 AND DayOfMonth()=16ORYear()=1992 AND Month()=12 AND DayOfMonth()=24OR

Page 65: Metastock Formulae

Year()=1992 AND Month()=12 AND DayOfMonth()=31ORYear()=1993 AND Month()=04 AND DayOfMonth()=08ORYear()=1994 AND Month()=03 AND DayOfMonth()=31ORYear()=1995 AND Month()=04 AND DayOfMonth()=13ORYear()=1996 AND Month()=01 AND DayOfMonth()=25ORYear()=1996 AND Month()=04 AND DayOfMonth()=04ORYear()=1997 AND Month()=03 AND DayOfMonth()=27ORYear()=1997 AND Month()=04 AND DayOfMonth()=24ORYear()=1997 AND Month()=12 AND DayOfMonth()=24ORYear()=1998 AND Month()=04 AND DayOfMonth()=09ORYear()=1998 AND Month()=12 AND DayOfMonth()=24ORYear()=1998 AND Month()=12 AND DayOfMonth()=31ORYear()=1999 AND Month()=04 AND DayOfMonth()=01ORYear()=1999 AND Month()=12 AND DayOfMonth()=30

Calendar ASX non-Friday end-of-week(2)

{ ASX non-Friday end-of-week dates, since 01/01/2000 }

Year()=2000 AND Month()=04 AND DayOfMonth()=20ORYear()=2001 AND Month()=01 AND DayOfMonth()=25ORYear()=2001 AND Month()=04 AND DayOfMonth()=12ORYear()=2002 AND Month()=03 AND DayOfMonth()=28ORYear()=2003 AND Month()=04 AND DayOfMonth()=17ORYear()=2003 AND Month()=04 AND DayOfMonth()=24

{ future Thursday Easter dates }ORYear()=2004 AND Month()=04 AND DayOfMonth()=08ORYear()=2005 AND Month()=03 AND DayOfMonth()=24ORYear()=2006 AND Month()=04 AND DayOfMonth()=13

Page 66: Metastock Formulae

ORYear()=2007 AND Month()=04 AND DayOfMonth()=05ORYear()=2008 AND Month()=03 AND DayOfMonth()=20ORYear()=2009 AND Month()=04 AND DayOfMonth()=09ORYear()=2010 AND Month()=04 AND DayOfMonth()=01

Calendar ASX true end-of-week

{ Plots correct end-of-week signals for ASX stocks, including ASX non-Friday end-of-week dates since 01/01/1980 }{ [email protected] }

Fml("Calendar ASX non-Friday end-of-week(1)")+Fml("Calendar ASX non-Friday end-of-week(2)") OR DayOfWeek()=5(Go Top...)Calendar Weekday of Month{ Calendar-absolute, Weekday-of-Month signals }{ Plot on separate window below chart }{ ©Copyright 2004 Jose Silva }{ [email protected] }

dayChosen:=Input("day:  [1]Mon,  [2]Tue,  [3]Wed,  [4]Thu,  [5]Fri",1,7,5);weekChosen:=Input("[1]st  [2]nd  [3]rd  [4]th  [5]th  week in month",1,5,1);plot:=Input("plot:  [1]Weekday signals,  [2]Weekday count",1,2,1);

day:=DayOfWeek()=dayChosen;d:=DayOfMonth();signalCount:= If(day AND d<=7,1, If(day AND d>7 AND d<=14,2, If(day AND d>14 AND d<=21,3, If(day AND d>21 AND d<=28,4, If(day AND d>28,5,0)))));signal:=weekChosen=signalCount;

If(plot=1,signal,signalCount)(Go Top...)Calendar Week of Month{ Calendar-absolute Week-of-Month signals }{ Plot on own window below chart }{ ©Copyright 2004 Jose Silva }{ [email protected] }

WeekOfMonth:=Input("[1]st  [2]nd  [3]rd  [4]th  [5]th  week in month",1,5,1);plot:=Input("[1]Week signals,  [2]Week count",1,2,1);

d:=DayOfMonth();weekNr:=If(d<=7,1, If(d>7 AND d<=14,2, If(d>14 AND d<=21,3, If(d>21 AND d<=28,4,5))));signal:=weekNr=WeekOfMonth;

Page 67: Metastock Formulae

If(plot=1,signal,WeekNr)

(Go Top...)Cycle Length{ Price peak/trough cycle length v4.0 }{ Warning: last peak/trough is dynamic!}{ Plot in own window below price chart }

{ 6/4/2004 ASX 1152 active stocks exploration, 3.25% ZigZag cycle lengths, mean price cycles: 3.7 trade days for positive price cycles; 4.5 trade days for negative price cycles; 8.2 trade days complete price cycles.}

{ ©Copyright 2004 Jose Silva }{ [email protected] }

zzper:=Input("ZigZag reversal %",.001,100,3.25);pds:=Input("avg StdDev periods",2,2520,7);plot:=Input("[1]Cycles, [2]Cycle Avg, [3]Avg StdDev, [4]ZigZag",1,4,1);

pk:=PeakBars(1,C,zzper)=0;tr:=TroughBars(1,C,zzper)=0;lastBar:=Cum(1)=LastValue(Cum(1));lastLeg:=lastBar*LastValue(BarsSince(pk OR tr));

CycleUp:=pk*BarsSince(tr);CycleUpAvg:= Cum(CycleUp)/(Cum(CycleUp>0)+.000001);CycleUpStdDev:=Stdev(CycleUp,pds);CycleUpStdDevAvg:=Cum(CycleUpStdDev) /(Cum(CycleUpStdDev>0)+.000001);

CycleDw:=tr*BarsSince(pk);CycleDwAvg:= Cum(CycleDw)/(Cum(CycleDw>0)+.000001);CycleDwStdDev:=Stdev(CycleDw,pds);CycleDwStdDevAvg:=Cum(CycleDwStdDev) /(Cum(CycleDwStdDev>0)+.000001);

statCycle:=CycleUp-CycleDw;lastLeg:=If(ValueWhen(1,pk OR tr,statCycle)<0, lastleg,-lastleg)*lastBar;cycle:=statCycle+lastLeg;zz:=Zig(cycle,zzper,%);

plotUp:=If(plot=1,0, If(plot=2,CycleUpAvg, If(plot=3,CycleUpStdDevAvg,0)));plotDw:=If(plot=1,cycle, If(plot=2,-CycleDwAvg, If(plot=3,-CycleDwStdDevAvg,zz)));

plotUp;plotDw

Page 68: Metastock Formulae

Market Cycle Explorations

MetaStock -> Tools -> The Explorer -> NewCopy and paste formulae below.

Zig Zag price cycles

 *Input today's data date in filter section!*

Last (dynamic) and previous (static) cycles, based on default values in indicator "ZigZag Cycle Length".

6/4/2004 ASX 1152 active stocks exploration, 3.25% ZigZag cycle lengths, last price cycles:  4 trade days for positive price cycles;  5 trade days for negative price cycles;  9 trade days complete price cycles.

©Copyright 2004 Jose Silva 

Column A: + cycle

{ last positive dynamic cycle }x:=Fml("ZigZag Cycle Length");If(x>0,x,0)

Column B: - cycle

{ last negative dynamic cycle }x:=Fml("ZigZag Cycle Length");If(x<0,x,0)

Column C: AbsCycle

{ absolute last cycle }Abs(Fml("ZigZag Cycle Length"))

Column D: + prev

{ previous complete (static) positive cycle }x:=FmlVar("ZigZag Cycle Length","CYCLEUP");ValueWhen(1,x<>0,x)

Column E: - prev

{ previous complete (static) negative cycle }x:=FmlVar("ZigZag Cycle Length","CYCLEDW");-ValueWhen(1,x<>0,x)

Column F: TotalPrv

{ total last complete (static) full cycle }

Page 69: Metastock Formulae

x:=FmlVar("ZigZag Cycle Length","CYCLEUP");y:=FmlVar("ZigZag Cycle Length","CYCLEDW");ValueWhen(1,x<>0,x)+ValueWhen(1,y<>0,y)

Filter:

{ Today's data date, user-input section }

day:=  6;     { current day of month (1~31) }mth:=  4;     { current month (1~12)        }yr:= 2004;    { current year, eg 2004       }

{ *********************************** }

DayOfMonth()=dayAND Month()=mthAND Year()=yrAND V>0

Zig Zag price cycle averages

 *Input today's data date in filter section!*

Historical Average & StdDev of static cycles, based on default values in indicator "ZigZag Cycle Length".

6/4/2004 ASX 1152 active stocks exploration, 3.25% ZigZag cycle lengths, mean price cycles: 3.7 trade days for positive price cycles; 4.5 trade days for negative price cycles; 8.2 trade days complete price cycles.

©Copyright 2004 Jose Silva

Column A: + avg

{ historical positive static cycle average }FmlVar("ZigZag Cycle Length","CYCLEUPAVG")

Column B: - avg

{ historical negative static cycle average }-FmlVar("ZigZag Cycle Length","CYCLEDWAVG")

Column C: TotalAvg

{ historical full static cycle average }FmlVar("ZigZag Cycle Length","CYCLEUPAVG")+Abs(FmlVar("ZigZag Cycle Length","CYCLEDWAVG"))

Column D: + StdDev

{ Standard Deviation of positive static cycles}

Page 70: Metastock Formulae

FmlVar("ZigZag Cycle Length","CYCLEUPSTDDEVAVG")

Column E: - StdDev

{ Standard Deviation of nagative static cycles}-FmlVar("ZigZag Cycle Length","CYCLEDWSTDDEVAVG")

Column F: TotStdDv

{ Standard Deviation of full static cycles }(FmlVar("ZigZag Cycle Length","CYCLEUPSTDDEVAVG")+FmlVar("ZigZag Cycle Length","CYCLEDWSTDDEVAVG"))/2

Filter:

{ Today's data date, user-input section }

day:=  6;     { current day of month (1~31) }mth:=  4;     { current month (1~12)        }yr:= 2004;    { current year, eg 2004       }

{ *********************************** }

DayOfMonth()=dayAND Month()=mthAND Year()=yrAND V>0Dahl Oscillator

I came up with the following to put Dahl into an oscillator format. It is the STOCHRSI formula, replacing RSI with a 55 day Dahl. Does this reflect your thinking on the indicator? It seems to lead changes in Dahl by a period or two, but doesn't seem as fast as the STOCHRSI indicator. Checking a few stocks in my database, there are very few times that it goes below zero, but it will 'peg out' at 100 for significant periods. Perhaps the 14 day smoothing is too short in relation to the 55 period primary indicator. A longer MA period seems to smooth it out significantly, which would seem to defeat the purpose of using an oscillator. 

Mov((mov(c,55,simp) - ref(mov(c,55,simp),-15)- LLV(mov(c,55,simp) - ref(mov(c,55,simp),-15),14))/(HHV(mov(c,55,simp) - ref(mov(c,55,simp),-15),14)-(LLV(mov(c,55,simp) - ref(mov(c,55,simp),-15),14))),14,E)*100(Go Top)Dahl Variations

Dahl Volume TrendMov(C,55,VOL)-Ref(Mov(C,55,VOL),-15) 

PVT Dahl Trend:

Page 71: Metastock Formulae

Mov((PVT()-Ref( PVT(),-15)),55,E) 

Smoothed OBV Vol 88:Mov((OBV()-Mov(OBV(),88,VOL)),55,E) 

OBV Dahl Trend:Mov((OBV()-Ref(OBV(),-15)),55,E) 

Compare each to ordinary Dahl or some other trend indicator. Remember, I put a 21 EMA trigger on each. (Go Top)Dave's New System (DNS) Is a binary consisting of 8 indicators.}

If(SAR(.02,.2)<C,1,0) +If((Mov(C,5,E)>Mov(C,13,E)),1,0) +If((Mov(C,13,E)>Mov(C,40,E)),1,0) +If((Mov(C,8,E)-Mov(C,17,E))> (Mov(Mov(C,8,E)-Mov(C,17,E),9,E)),1,0)+ If(Mov(C,50,SIMPLE) - Ref(Mov(C,50,SIMPLE),-15) > 0,1,0)+If((Mov(ROC(C,12,%),3,E)>=-6 OR ROC(C,12,%)>0),1,0)+If(OBV()>Mov(OBV(),40,S),1,0)+If(V>Mov(V,120,S),1,0)(Go Top)Days Since Crossover

{place formula in filter section of explorer, making sure that formulaswithin quotes are valid indicators}

BarsSince(Cross(45, Fml( "Stochrsi (14)" )))>BarsSince(Cross(Fml( "Stochrsi (7,3)" ),72)) ANDRef(BarsSince(Cross(45,Fml( "StochRSI (14)" )))< BarsSince(Fml( "staters (7,3)")>72), -1)(Go Top)Denvelope In the Oct issue of "Futures" there is an article written by Dennis McNicholl called "Better Bollinger Bands". In his article he describes how in a trending market the center band of the B.B. will shift away from the "mean" value ofthe price, and that the two outer bands will shift outward to such an extent that the envelope loses its utility as avolatility gauge (these are his words... not mine).  As usual "Futures" only posted the TradeStation code,so this is my conversion from it. He called the Indicator "Denvelope", and it runs the bands much closer.....similar to "Standard Error Bands".{Denvelope}{Better Bollinger Bands}Lb:=Input("Look-Back Period ?",3,100,20);De:=Input("Band Deviation ?",.5,3,2);Alp:=2/(Lb+1);Mt:=Alp*CLOSE+(1-Alp)*PREV;

Page 72: Metastock Formulae

Ut:=Alp*Mt+(1-Alp)*PREV;Dt:=((2-Alp)*Mt-Ut)/(1-Alp);mt2:=Alp*Abs(C-Dt)+(1-Alp)*PREV;ut2:=Alp*mt2+(1-alp)*PREV;dt2:=((2-Alp)*mt2-ut2)/(1-Alp);But:=Dt+de*dt2;Blt:=Dt-de*dt2;But;Dt;Blt;(Go Top)Denvelope (RSI)

pds:=Input("Periods",2,200,14);sd:=Input("Standard Deviations",.01,10,2);D1:= RSI(pds);alpha:=2/(pds+1);mt:=alpha*D1+(1-alpha)*(If(Cum(1)<pds,D1,PREV));ut:=alpha*mt+(1-alpha)*(If(Cum(1)<pds,D1,PREV));dt:=((2-alpha)*mt-ut)/(1-alpha);mt2:=alpha*Abs(D1-dt)+(1-alpha)*PREV;ut2:=alpha*mt2+(1-alpha)*PREV;dt2:=((2-alpha)*mt2-ut2)/(1-alpha);but:=dt+sd*dt2;blt:=dt-sd*dt2;blt;dt;but;(Go Top)DEVSTOP

Here's what I think a DEVSTOP is in MetaStock language, described in Kase's"Trading with the Odds", and better described in Kaufman's "Trading Systemsand Methods". It uses a 2-day range, calculates an average range and SD ofthe range, and then draws 4 lines below the high, at 1 range and 0,1,2, and3 SD's. "2.2" and "3.6" are corrections for skew of the distribution.

AVTR:=Mov(HHV(H,2) - LLV(L,2),20, S);SD:=Stdev(HHV(H,2) - LLV(L,2),20);HHV(H-AVTR-3.6*SD, 20);HHV(H-AVTR-2.2*SD,20);HHV(H-AVTR-SD,20);HHV(H-AVTR,20);(Go Top)Displace Indicator Forward To displace an indicator forward, you use Ref(myInd,-p). The median and typical prices are built-in functions -- MP() is (H+L)/2 and typ() is (H+L+C)/3.

For MP, use

Period:= Input("What Period",1,250,10);

Page 73: Metastock Formulae

Disp:= Input("Forward Displacement",0,250,10);EMA1:= Mov(MP(),Period,E);EMA2:= Mov(EMA1,Period,E);Difference:= EMA1 - EMA2;ZeroLagEMA:= EMA1 + Difference;Ref(ZeroLagEMA,-Disp)(Go Top)Divergence Between Close and Indicator

Divergence between the Close and an Indicator (Rev. 03/18/97 from Equis Support) The following formula will calculate the correlation of the Close and the MACD. It is written using a "long form" MACD so that the time periods used by the MACD may be changed. This indicator shows "divergence" between the close and the indicator: In the Windows versions of MetaStock the formula is: Correl(((Sum(Cum(1)*(Mov(C,12,E)-Mov(C,26,E)),100))-(Sum(Cum(1),100)* Sum((Mov(C,12,E)-Mov(C,26,E)),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) The interpretation of the indicator output is as follows: - .08 (80%) and lower is divergence between the Close and the MACD. - 1 is very strong divergence. + 1 is very strong correlation. The formula was constructed this way so that most other indicators may be used in place of the MACD. For example, here is the same indicator using the RSI(14): Correl(((Sum(Cum(1)*(RSI(14)),100))-(Sum(Cum(1),100)* Sum((RSI(14)),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) (Go Top)Double Inside Day

{For today is an inside day}H < Ref(H,-1) andL > Ref(L,-1) and{For yesterday was an inside day}Ref(H,-1) < Ref(H,-2) andRef(L,-1) > Ref(L,-2)(Go Top)Double Tops and Double Bottoms In the February 1998 issue of Technical Analysis of Stocks& Commodities magazine, Thomas Bulkowski discusses the use of Double Bottoms as a means of finding profitable trades.In MetaStock for Windows, you can find both Double Tops and Double Bottoms with these formulas. There is a caveat however. In the article, Mr. Bulkowski utilizes the High-Low range in finding Double Bottoms. These formulas use only the close value, so a few of the lower priced issues will not produce signals in MetaStock. Overall, however, these formulas produce most of the major signals he discusses.Double TopsPK:=Zig(C,10,%)<Ref(Zig(C,10,%),-1) AND Ref(Zig(C,10,%),-1)>Ref(Zig(C,10,%),-2);TR:=Zig(C,10,%)>Ref(Zig(C,10,%),-1) AND Ref(Zig(C,10,%),-1)<Ref(Zig(C,10,%),-2);PK1:=PeakBars(1,C,10);PK2:=PeakBars(2,C,10);

Page 74: Metastock Formulae

(ValueWhen(1,PK,Ref(C,-1))/ValueWhen(2,PK,Ref(C,-1))>.96 AND ValueWhen(1,PK,Ref(C,-1)) / ValueWhen(2,PK,Ref(C,-1))<1.04) AND PK2-PK1>=10 AND Cross(ValueWhen(1,TR,Ref(C,-1)),C)Double BottomsPK:=Zig(C,10,%)<Ref(Zig(C,10,%),-1) AND Ref(Zig(C,10,%),-1)>Ref(Zig(C,10,%),-2);TR:=Zig(C,10,%)>Ref(Zig(C,10,%),-1) AND Ref(Zig(C,10,%),-1)<Ref(Zig(C,10,%),-2);TR1:=TroughBars(1,C,10);TR2:=TroughBars(2,C,10);(ValueWhen(1,TR,Ref(C,-1))/ValueWhen(2,TR,Ref(C,-1))>.96 AND ValueWhen(1,TR,Ref(C,-1)) / ValueWhen(2,TR,Ref(C,-1))<1.04) AND TR2-TR1>=10 AND Cross(C,ValueWhen(1,PK,Ref(C,-1)))(Go Top)Down 20% on Double Average Volume

Col A: CLOSE 

Col B: ROC(C,5,%) 

Filter ROC(C,5,%)<=-20 AND Mov(V,5,S)>=(2*Ref(Mov(V,60,S),-5)) 

Filter enabled Yes 

Periodicity Daily 

Records required 1300 (Go Top)DMTF Trading System

I know I'm a little slow, but I've just gotten around to working on the Dynamic Multiple Time Frame indicators given by Robert Krausz in the 1999 Bonus Issue of TASC. 

The code for the actual indicators can be found at the Equis website (www.equis.com) so I won't post them again here. I've been testing a system based on these indicators on Best Buy (a stock that seems to be quite amenable to system trading) and getting very good results. The system is currently for long trades only; I'll work on shorting later. Here's what I've got so far

Enter Long:day:=DayOfWeek();Fml("dynamic balance")>Fml("dynamik balance point steps") AND Fml("fixed balance point")>Ref(Fml("fixed balance Point"),-5)OR Fml("tendency")>0 AND day=5Close LongCross(Fml("dynamik balance point steps"),Fml("dynamic balance"))AND Fml("fixed balance point")<Ref(Fml("fixed balance Point"),-5)

The problem is that the close is not defined, meaning that the two events which initiate the close do not have to happen. The DBPS can cross the DB without the 2nd condition occuring. Then, when later, the 2nd condition does occur, sell is not triggered because the cross over has not happened simultaneously with the 2nd condition. Theoretically, if we follow the system strictly, this can lead to a complete loss. I understand that I can set arbitrary stops, 

Page 75: Metastock Formulae

but I prefer to let the system do the work. Simply reversing the entry signal and other tries, such as support breakthoughs, drastically reduce the result.(Go Top)Dunnigan Trend

{Ask to use 1 day or 2 day Swing type}St:=Input("Short Term Swing Type, 1 or 2 ?",1,2,2);{Call Swing Type Formula}Sd:=If(Round(St)=1,{then} FmlVar("Dunn-Type1","TD1"),{else} FmlVar("Dunn-Type2","TD1"));{Number Of Periods Since Swing Started Up}Hc:=BarsSince(SD=-1);{Number Of Periods Since Swing Started Down}Lc:=BarsSince(SD=1);{Find Highest Value Of Up Swing}Hv:=If(Hc>Lc AND H>Ref(H,-1),{then}HighestSince(1,Hc=1,H),{else}0);{Find Lowest Value Of Down Swing}Lv:=If(Hc<Lc AND L<Ref(L,-1),{then}LowestSince(1,Lc=1,L),{else}0);{Find The Low Of The Highest High}Hlv:=ValueWhen(1,H=Hv,L);{Find The High Of The Lowest Low}Lhv:=ValueWhen(1,L=Lv,H);{Calculate And Plot Trend Direction,Note: 1= Uptrend,-1= Downtrend}TD2:=If(Sd=1 AND H>Lhv,{then}1,{else}If(Sd=-1 AND L<Hlv,{then}-1,{else}0));TD3:=ValueWhen(1,TD2<>0,TD2);TD3

{These formulas simply plot a 1 if market is up or -1 if down. I really didn't code this to be used as an indicator, but to be used as a subroutine, or possibly in an "Expert Adviser".Best wishes, Adam Hefner.}(Go Top)Dunn-Type 1

{Market swing is defined as:Up = higher highs and higher lows,Down = lower highs and lower lows.}

TD1:=If(BarsSince(H>Ref(H,-1) AND L>Ref(L,-1)) <BarsSince(L<Ref(L,-1) AND H<Ref(H,-1)),

Page 76: Metastock Formulae

{then}1,{else}-1);TD1(Go Top)Dunn-Type 2

{Market swing is defined as:Up = 2 higher highs and 2 higher lows,Down = 2 lower highs and 2 lower lows.}TD1:=If(BarsSince((H>Ref(H,-1) AND L>Ref(L,-1))AND (Ref(H,-1)>Ref(H,-2)AND Ref(L,-1)>Ref(L,-2))) <BarsSince((L<Ref(L,-1) AND H<Ref(H,-1))AND (Ref(L,-1)<Ref(L,-2)AND Ref(H,-1)<Ref(H,-2))),{then}1,{else}-1);TD1(Go Top)Dynamic Multiple Time Frame Indicator Explanation of the Dynamic Multiple Time Frame Indicator by the author, Adam Hefner:

"The Fixed Balance Point is calculated every Friday bytaking the weekly (high+low+close)/3. It really doesn't need to be plotted, but is mostly used to base the otherindicators from. 

The Fixed Balance Point Step, is a 5 week average of the Fixed Balance Point.

The Dynamic Balance Point is the daily update of theFixed Balance Point.

The Dynamic Balance Point Step is the daily updateof the Fixed Balance Point Step.

Robert Krausz teaches that by watching the balance point calculations of the longer (weekly) time, you have the marketdirection (trend) for the shorter (daily) time. He also revealedthat the when the Dynamic Balance Point is above the DynamicBalance Point Step, then the trend is up, and opposite is true for down trend. I have found that these act in much the same way as a 5/25 moving average cross-over system.

I like the Fibonacci Support & Resistance best of all, seems (IMHO)that these support/resistance areas are very easy to visualize usingthis formula."(Go Top)Dynamic Zones

Page 77: Metastock Formulae

{Zamansky&Stendahl's Dynamic Zones for MS6.5 (From the TASC July1997 article). First, for the Lookback Periods plot a 9-day RSI along with StDev adjusted rolling 70-day SMAs; e.g., as can be seen in the article's S&P500-example}

PR:=Input("Enter Periods for RSI",1,100,9);PB:=Input("Enter Periods for BUY",1,100,70);PS:=Input("Enter Periods for SELL",1,100,70);UpZone:=Mov(RSI(PR),PS,S)+(1.3185 *Stdev(RSI(PR),PS));LwZone:=Mov(RSI(PR),PB,S)-(1.3185 *Stdev(RSI(PR),PB));UpZone;LwZone;

Most indicators use a fixed zone for buy and sell signals. Here's a concept based on zones that are responsive to past levels of the indicator. 

One approach to active investing employs the use of oscillators to exploit tradable market trends. This investing style follows a very simple form of logic: Enter the market only when an oscillator has moved far above or below traditional trading levels. However, these oscillator-driven systems lack the ability to evolve with the market because they use fixed buy and sell zones. Traders typically use one set of buy and sell zones for a bull market and substantially different zones for a bear market. And therein lies the problem.

Once traders begin introducing their market opinions into trading equations, by changing the zones, they negate the system's mechanical nature. The objective is to have a system automatically define its own buy and sell zones and thereby profitably trade in any market -- bull or bear. Dynamic zones offer a solution to the problem of fixed buy and sell zones for any oscillator-driven system.

The algorithm for the dynamic zones is a series of steps. First, decide the value of the lookback period t. Next, decide the value of the probability Pbuy for buy zone and value of the probability Psell for the sell zone.

The area above and below the dynamic zones constitute the upper and lower 10% boundaries. The zones appear to evolve with the market because they use a rolling 70-day period of indicator values in their construction. (Go Top)Daily Close vs. High and Low Closeif((C-L)/(H-L),>,.66 ,1, if((C-L)/(H-L),<,.38,-1,0))(Go Top)Detrended Price OscillatorThe Detrended Price Oscillator (DPO) is an indicator that attempts to eliminate the trend in prices. Detrended prices allow you to more easily identify cycles and overbought/oversold levels. Here is the MetaStock custom formula for the DPO:Close-Ref( Mov(Close, X, Simple ), T)***where X is the number of Time Periods for the Oscillator and T = X / 2 + 1.For example, a 20 period DPO would be:X = 20T = (20/2 + 1) = 11Close-Ref( Mov(Close, 20, Simple),11)(Go Top)Disparity Index

Page 78: Metastock Formulae

Steve Nison refers to the his Disparity Index "as a percentage display of the latest close to a chosen moving average". This can be defined in MetaStock using the formula:( ( C - Mov( C ,X ,? ) ) / Mov( C ,X ,? ) ) * 100** where X is the number of time periods and ? is the calculation type of the moving average.For example:( ( C - Mov( C ,13,E ) ) / Mov( C ,13 ,E ) ) * 100** where X = 13 time periods and ? = Exponential moving average.

For interpretation on the Disparity Index refer to Steve Nison's book Beyond Candlesticks which is available from the Equis Direct catalogue.(Go Top)Displaying the Price of a Security in 32nds and 64thsAll versions of MetaStock prior to our Windows software would need this formula.You can display your security's prices in 32nds and 64ths, by using the following custom formulas. Once plotted these values will be displayed in the indicator window.

For 32nds:INT( C ) + ( ( FRAC( C ) / .03125 ) / 100 )For 64ths:INT( C ) + ( ( FRAC( C ) / .015625 ) / 100 )**Where C is for the security's closing price and can be replaced with O, H, or L for the open, high, or low price instead. (Go Top)Divergence Between the Close and an IndicatorThe following formula will calculate the correlation of the Close and the MACD. It is written using a "long form" MACD so that the time periods used by the MACD may be changed. This indicator shows "divergence" between the close and the indicator:In the Windows versions of MetaStock the formula is:Correl(((Sum(Cum(1)*(Mov(C,12,E)-Mov(C,26,E)),100))-(Sum(Cum(1),100)*Sum((Mov(C,12,E)-Mov(C,26,E)),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)The interpretation of the indicator output is as follows: - .08 (80%) and lower is divergence between the Close and the MACD.- 1 is very strong divergence.+ 1 is very strong correlation. The formula was constructed this way so that most other indicators may be used in place of the MACD.For example here is the same indicator using the RSI(14)Correl(((Sum(Cum(1)*(RSI(14)),100))-(Sum(Cum(1),100)*Sum((RSI(14)),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)(Go Top)Dynamic Momentum OscillatorIn July 1996 Futures magazine, E. Marshall Wall introduces the Dynamic Momentum Oscillator (Dynamo). Please refer to this article for interpretation.He describes the Dynamo Oscillator to be:Dynamo = Mc - ( MAo - O ) where

Page 79: Metastock Formulae

Mc = the midpoint of the oscillatorMAo = a moving average of the oscillatorO = the oscillatorThis concept can be applied to most any oscillator to improve its results.For example:Applying the Dynamo Oscillator to a 5-period %K slowed 3 periods Stochastic Oscillator would give:50-(Mov(Stoch(5,3),21,S)-Stoch(5,3))where:Mc = Stochastic Oscillator's midpoint = 50MAo = Moving average of the Stochastic = Mov(Stoch(5,3),21,SO = Stochastic Oscillator = Stoch(5,3)This example applies it to an RSI oscillator:50-(Mov(RSI(14),21,S)-RSI(14))where:Mc = RSI's midpoint = 50MAo = Moving average of the RSI = Mov(RSI(14),21,SO= RSI Oscillator = RSI(14)(Go Top)Derivative Moving Average The information for this test was published in the June 1996 issue of "Technical Analysis of Stocks and Commodities". The test appears in the article "The Derivative Moving Average" by Adam White, page 18. Mr. White describes this test as using a variation of the "tried-and-true simple moving average for entry signals and the "trend analysis index" for exit signals. Note, first you need to create a new indicator called TAI, using the TAI formula below - then create the new system test.Signal FormulasEnter Long:When(Ref(Mov(C,28,S),-1),=,LLV(Mov(C,28,S),4))Close Long:When(Fml("TAI"),<,0.4) AND When(Ref(Fml("TAI"),-1),>=,0.4)

TAI Formula((HHV(Mov(C,28,S),5)-LLV(Mov(C,28,S),5))/C)*100

Darvis Box - Based on "How I made 2 million on the stockmarket"Jason Prestwidge

Periods:=Input("periods",1,260,260); Topbox:=If(Ref(H,-3)>=Ref(HHV(H,Periods),-4) AND Ref(H,-2)<Ref(H,-3) AND Ref(H,-1)<Ref(H,-3) AND H< Ref(H,-3),Ref(H,-3),PREVIOUS);Botbox:=If(Ref(H,-3)>=Ref(HHV(H,Periods),-4) AND Ref(H,-2)<Ref(H,-3) AND Ref(H,-1)<Ref(H,-3) AND H< Ref(H,-3),LLV(L,4),PREVIOUS);Topbox;Botbox;(Go Top...)Dr Elder's Force Index - Metastock Indicator FormulaFI:=(C-Ref(C,-1))*V;Mov(FI,13,E){Smoothed by 13 period exponential moving average}

Page 80: Metastock Formulae

Dr Elder also refers to a 2 period Force Index in which case, you would change the ‘13’ above to ‘2’. (The following explanatory notes are taken from ‘Trading for a Living’ by Dr. Alexander Elder, Published by John Wiley & Sons, Inc, 1993)“Force Index is an oscillator developed by this author. It measures the force of bulls behind every rally and of bears behind every decline.Force Index combines three essential pieces of market information – the direction of price change, its extent, and trading volume. It provides a new, practical way of using volume to make trading decisions.Force Index can be used raw, but it works better if you smooth it with a moving average. Force Index smoothed with a short MA helps pinpoint entry and exit points. Force Index smoothed with a long MA reveals major changes in the force of bulls and bears.A 2-day EMA of Force Index provides a minimal degree of smoothing. It is useful for finding entry points into the markets. It pays to buy when the 2-day EMA is negative and sell when it is positive, as long as you trade in the direction of the 13-day EMA of prices.A 13-day EMA of Force Index tracks longer term changes in the force of bulls and bears. When it crosses above its centerline, it shows the bulls are in control. When it turns negative, it shows that bears are in control. Divergences between 13-day EMA of Force Index and prices identify important turning points.”(Go Top...) Date filter{ Date filter }{ Plots +1 signal within user-input date period }{ [email protected] }

StDay:=Input("start Day",1,31,1);StMnth:=Input("start Month",1,12,1);StYear:=Input("start Year",1800,2200,2003);EnDay:=Input("end Day",1,31,31);EnMnth:=Input("end Month",1,12,12);EnYear:=Input("end Year",1800,2200,2003);

start:=Year()>StYear OR (Year()=StYear AND (Month()>StMnth  OR Month()=StMnth AND DayOfMonth()>=StDay));end:=Year()<EnYear OR (Year()=EnYear AND (Month()<EnMnth  OR Month()=EnMnth AND DayOfMonth()<=EnDay));

start AND (end OR (start AND Alert(start=0,2)))(Go Top...) Divergences - Class A{ Class A price/indicator divergence v3 }{ +1 signal = bullish trough divergences }{ -1 signal = bearish peak divergences }{ ©Copyright 2003 Jose Silva }{ [email protected] }

ind:=Input("MACD=1,  RSI=2,  DMI=3,  Mom=4",1,4,1);pds:=Input("indicator periods",2,2520,10);f:=Input("price field: Close=1, High/Low=2",1,2,1);Ch:=Input("peak/trough depth minimum (0-100%)",0,100,0)/100;shift:=Input("shift signals back to match divergences=1",0,1,0);

Page 81: Metastock Formulae

{y:=insert any indicator or Fml("formula name")}y:=If(ind=1,MACD(),If(ind=2,RSI(C,pds), If(ind=3,DMI(C),Mo(C,pds))));

xu:=If(f=1,C,H);xd:=If(f=1,C,L);Pkx:=xu<Ref(xu,-1) AND Ref(xu,-1)>Ref(xu,-2) AND Ref(xu,-1)>=(xu+Ref(xu,-2))/2*(1+Ch);Pkx1:=ValueWhen(1,Pkx,Ref(xu,-1));Pkx2:=ValueWhen(2,Pkx,Ref(xu,-1));Trx:=xd>Ref(xd,-1) AND Ref(xd,-1)<Ref(xd,-2) AND Ref(xd,-1)<=(xd+Ref(xd,-2))/2*(1-Ch);Trx1:=ValueWhen(1,Trx,Ref(xd,-1));Trx2:=ValueWhen(2,Trx,Ref(xd,-1));

Pky:=y<Ref(y,-1) AND Ref(y,-1)>Ref(y,-2) AND Ref(y,-1)>=(y+Ref(y,-2))/2*(1+Ch);Pky1:=ValueWhen(1,Pky,Ref(y,-1));Pky2:=ValueWhen(2,Pky,Ref(y,-1));Try:=y>Ref(y,-1) AND Ref(y,-1)<Ref(y,-2) AND Ref(y,-1)<=(y+Ref(y,-2))/2*(1-Ch);Try1:=ValueWhen(1,Try,Ref(y,-1));Try2:=ValueWhen(2,Try,Ref(y,-1));

0;Ref(Trx AND Try AND Trx1<Trx2 AND Try1>Try2,shift)-Ref((Pkx AND Pky AND Pkx1>Pkx2 AND Pky1<Pky2),shift)ECO - R KrauzThe Robert Krauz article I read described the ECO as "a double smoothed ratio of the difference between the close(C) and open(O) of each bar, and the difference between the high(H) and low(L) prices for each bar" originally created by William Blau.

FWI my interpretation is:

{ECO[Ergodic Candlestick Oscillator]}(MOV(MOV(C-O,5,E))26,E)/MOV(MOV(H-L,5,E))26,E))*100(Go Top)Elliot OscillatorMov((H+L)/2,5,S)-Mov((H+L)/2,34,S)(Go Top)Elliot OscillatorMov(C,5,S)-Mov(C,35,S) 

{from Jan Robert Wolansky}

{TIMESERIES TRIX - by Joe Luisi}

{published in S&C - TASC article "Playing Trix" by Joe Luisi (June 1997) andto be used on weekly data}

Page 82: Metastock Formulae

CLA:=TRIX(3);CLB:=Ref(TRIX(3),-1);CLC:=Mov(TRIX(3),8,TIMESERIES);CLD:=Ref(Mov(TRIX(3),8,TIMESERIES),-1);SHORT:=When(CLA,>,CLC) AND When(CLB,<,CLD) ANDWhen(CLA,<,0)AND When(CLA,>,-2);LONG:=When(CLA,<,CLC) AND When(CLB,>,CLD) ANDWhen(CLA,>,0)AND When(CLA,<,+2);If(LONG>0,+1,If(SHORT>0,-1,PREVIOUS))(Go Top)Elliot Wave IdentificationAs far as using MetaStock for identifying waves, use a 5/34 histogram forfinding wave 4, the end of wave 3 and for help with identifying wave 1/2,which apparently Advanced Get uses extensively. You can write MetaStockexplorations/templates/experts, etc., with this indicator; e.g.,explorations to find the peaks and troughs of the 5/34 histogram.

The version of the indicator I use in MetaStock v6.52 is:

Mov(OscP(5,34,E,$),5,S)

-150 days minimum of data.

The peaks of the histogram help identify waves 1, 3 and 5 and troughs forwaves 2 and 4. Use MetaStock line studies (both trendlines, channels andfib retracements) for additional wave identification/analysis. Of course,you can label the waves with the text box.(Go Top)EMA Cross Systemavoid using when the market has no clear direction -- enter longmov(c,5,e)>mov(c,21,e) andref(mov(c,5,e),-1)<=ref(mov(c,21,e),-1)exit long mov(c,5,e)<mov(c,21,e) andref(mov(c,5,e),-1)>=ref(mov(c,21,e),-1)(Go Top)End Point Moving Average{The End Point Moving Average was introduced in the October 95 issue ofTechnical Analysis of Stocks & Commodities in the article "The End PointMoving Average", by Patrick E. Lafferty. The exact formula for the End PointMoving average is as follows:}

( 14 * Sum( Cum( 1 ) * C,14 ) - Sum( Cum( 1 ),14) * Sum( C,14) ) / (14* Sum( Pwr( Cum( 1 ),2),14 ) - Pwr( Sum( Cum( 1 ),14 ),2 ) ) * Cum( 1 )+ (Mov(C,14,S) - Mov( Cum( 1 ),14,S) * (14 * Sum( Cum( 1 ) * C,14) -Sum( Cum( 1 ),14 ) * Sum( C,14) ) / (14 * Sum( Pwr( Cum( 1 ),2 ),14) -Pwr( Sum( Cum( 1 ),14 ),2 ) ) )

Page 83: Metastock Formulae

{The above formula plots the last value of a linear regression line of theprevious 14 periods. The Time Series Forecast (TSF) takes this value and theslope of the regression line to forecast the next day and then plots thisforecasted price as today's value. from Equis.}(Go Top)Enter 20 Days after MOV SignalI am trying to use the MetaStock Explorer to find all stocks with the following:

1. c - mov(c,60,s)<02. Above condition should be in place for 20 days/

I use c - Mov(c,60,s)<0 but how do I write the Exploration?

from wsb

Use (C - Mov(C,60,S))<0 AND Ref((C - Mov(C,60,S))<0),-1) AND ... Ref((C -Mov(C,60,S))<0),-19)

where ... stands for all Ref( x,-i) with i between 2 and 18.(Go Top)Equivalent to Wilders TRWilders(TR,periods) = Mov(TR,2*periods-1,E)(Go Top)Excel Confidence %This is the calculation:

Take todays volume * 50 and find the square root of that number. Then divide 2.5 by your result. Then take the result of dividing by 2.5 and * todays close. Write this figure down.Then plot a 10 day moving average of this figure. This is the fundamental calculation which we shall call a.

Take the value for a and take it away from the lowest value of itself over the past 5 days. Add up these results for the past 3 days. This number is called b.

Now take the highest value for a over the past 5 days and subtract the lowest value for a, also over the past 5 days. Call this number c.

Finally, divide b by c and multiply the answer by 100. (phew!)

Simple Interpretation:Excel Confidence % should oscillate between 0 and 100, usually at the extreme ends of the scale. A value of 0 indicates no confidence in the market going up, whilst 100 indicates perfect confidence in the market going up. Although this obviously isn't the holy grail of indicators, it does offer some insight into what the market is thinking and how one can measure investor sentiment.You might like to add a slower version of this (just increase the 3 day and 5 day calculations to something you believe to be appropriate - try 7 & 15) and trade the crossovers, as with stochastics.You can also just trade the values ie 90 or higher, buy, 10 or lower, sell.

Page 84: Metastock Formulae

Metastock code for Excel Confidence %:

(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)Expansion Pivots BuyA:=CloseB:{Breakout}(H-L)>ATR(9)C:{Signal}Ref(C,-2)<=Mov(C,50,S) andRef(C,-1)>Mov(C,50,S) OR Ref(C,-1)<=Mov(C,50,S) andC>Mov(C,50,S)D:{entry}HHV(H,2)+.125E:{Stop}If(Ref(C,-2)<=Mov(C,50,S) andRef(C,-1)>Mov(C,50,S),Ref(C,-1)-1,If(Ref(C,-1)<=Mov(C,50,S)and C>Mov(C,50,S),C-1,0))Filter:ColB and ColC(Go Top)Expansion Pivots SellA:=CloseB:{Breakout}(H-L)>ATR(9)C:{Signal}Ref(C,-2)>=Mov(C,50,S) andRef(C,-1)<Mov(C,50,S) OR Ref(C,-1)>=Mov(C,50,S) andC<Mov(C,50,S)D:{entry}LLV(L,2)-.125E:{Stop}If(Ref(C,-2)>=Mov(C,50,S) andRef(C,-1)<Mov(C,50,S),Ref(C,-1)-1,If(Ref(C,-1)>=Mov(C,50,S)and C<Mov(C,50,S),C-1,0))Filter:ColB and ColC(Go Top)Experimental Williams Trading SystemA trading system based on work of Bill Williams

Enter Long:Cross(C,Fml("chaos green bl")) AND Fml("chaos green bl") > Fml("chaos blue bl")Close Long:Cross(Fml("chaos green bl"),C) AND Fml("chaos blue bl") > Fml("chaos green bl")

I tested this on several different stocks and it shows potential. I reallyhaven't spent too much time on it yet so I'm not yet sure of thesignificance of the other indicators. The above was just what I could throw together based upon what my eyes on the chart with the indicators showed me. (Go Top)End Points of a Linear Regression with Standard DeviationsIn MetaStock 5.x for Windows there is a way to plot the end points of a linear regression linewith channels +/- 2 Standard Deviations.Here are the three formulas: *Linear Regression (14):

Page 85: Metastock Formulae

(14 * Sum(Cum(1) * C,14) - Sum(Cum(1),14)* Sum(C,14)) /(14 * Sum(Pwr(Cum(1),2),14)- Pwr(Sum(Cum(1),14),2)) * Cum(1) + (Mov(C,14,S) - Mov(Cum(1),14,S) * (14 * Sum(Cum(1) * C,14) - Sum(Cum(1),14) * Sum(C,14))/(14 * Sum(Pwr(Cum(1),2),14)- Pwr(Sum(Cum(1),14),2)))*Linear Regression Lower Band:Fml( "*Linear Regression (14)" ) - 2* Stdev( Fml( "*Linear Regression (14)" ) ,14)*Linear Regression Upper:Fml( "*Linear Regression (14)" ) + 2* Stdev( Fml( "*Linear Regression (14)" ) ,14)(Go Top)EMA{ Exponential Moving Average v2.2 }{ EMA periodicity shortens on low bar count }{ ©Copyright 2003-2004 Jose Silva }{ [email protected] }

pds:=Input("EMA periods",1,2520,21);x:=Input("use Open=1 High=2 Low=3 Close=4 WClose=5 P=6",1,6,4);shift:=Input("EMA vertical shift %", -100,100,0)/100+1;plot:=Input("[1]EMA,  [2]Crossover signals", 1,2,1);

x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,WC(),If(x=6,P,C)))));pds:=If(pds>Cum(IsDefined(x)), Cum(IsDefined(x)),pds);Ema:=x*2/(pds+1)+PREV*(1-2/(pds+1));Ema:=Ema*shift;signals:=Cross(x,Ema)-Cross(Ema,x);

If(plot=2,signals,Ema)(Go Top)EMA - ATR volatility adjusted{ ATR volatility-adjusted, dyn-period EMA v2.1 }

{ Positive sensitivity:  EMA periodicity shortens on high ATR volatility - increases on low ATR volatility }{ Negative sensitivity:  EMA periodicity shortens on low ATR volatility - increases on high ATR volatility }

{ [1]EMA:         ATR volatility-adjusted EMA }{ [2]Dyn periods: EMA periodicity used }{ [3]ATR vlty:    ATR volatility 0~100% }{ [4]Signals:     EMA/price crossover signals }

{ ©Copyright 2004 Jose Silva }{ [email protected] }

pds:=Input("EMA avg periods",1,2520,21);sens:=Input("ATR volatility sensitivity (+100 to -100)%",-100,100,100)/100;pdsVlty:=Input("ATR volatility sampling periods",2,2520,126);pdsATR:=Input("ATR periods",1,2520,10);x:=Input("[1]Open  [2]High  [3]Low  [4]Close  [5]Vol  [6]P",1,6,4);plot:=Input("[1]EMA,  [2]Dyn periods,  [3]ATR vlty,  [4]Signals",1,4,1);

x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,If(x=6,P,C)))));ATRvlty:=(ATR(pdsATR)-LLV(ATR(pdsATR),pdsVlty)) /(HHV(ATR(pdsATR),pdsVlty)-LLV(ATR(pdsATR),pdsVlty)+.000001);

Page 86: Metastock Formulae

multi:=If(ATRvlty<=.5,10*Power(ATRvlty,3.4739)+.1,10*Power(ATRvlty,3.32)+.000001);multi:=If(sens>0,1/multi,multi);multi:=If(multi<1,1-(1-multi)*Abs(sens),(multi-1)*Abs(sens)+1);pds:=pds*multi;pds:=If(pds>Cum(IsDefined(x))-(pdsVlty+pdsATR),Cum(IsDefined(x))-(pdsVlty+pdsATR),pds);pds:=If(pds<1,1,pds);ATREma:=x*2/(pds+1)+PREV*(1-2/(pds+1));signals:=Cross(x,ATREma)-Cross(ATREma,x);

If(plot=2,pds,If(plot=3,ATRvlty*100, If(plot=4,signals,ATREma)))(Go Top)EMA - BB volatility adjusted{ Bollinger Band volatility-adjusted, dynamic-period EMA v1.1 }

{ Positive sensitivity: EMA periodicity shortens on high BB volatility - increases on low BB volatility }{ Negative sensitivity: EMA periodicity shortens on low BB volatility - increases on high BB volatility }

{ [1]EMA:         BB volatility-adjusted EMA }{ [2]Dyn periods: EMA periodicity used }{ [3]BB vlty:     BB volatility 0~100% }{ [4]Signals:     EMA/price crossover signals }

{ ©Copyright 2004 Jose Silva }{ http://users.bigpond.com/prominex/pegasus.htm }

pds:=Input("EMA avg periods",1,2520,21);sens:=Input("BB volatility sensitivity (+100 to -100)%",-100,100,75)/100;pdsVlty:=Input("BB volatility sampling periods",2,2520,126);pdsBB:=Input("Bollinger Band periods",2,2520,10);x:=Input("[1]Open  [2]High  [3]Low  [4]Close  [5]Vol  [6]P",1,6,4);plot:=Input("[1]EMA,  [2]Dyn periods,  [3]BB vlty,  [4]Signals",1,4,1);

x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,If(x=6,P,C)))));y:=(BBandTop(x,pdsBB,S,2)-BBandBot(x,pdsBB,S,2))/Mov(x,pdsBB,S);BBvlty:=(y-LLV(y,pdsVlty))/(HHV(y,pdsVlty)-LLV(y,pdsVlty)+.000001);multi:=If(BBvlty<=.5,10*Power(BBvlty,3.4739)+.1,10*Power(BBvlty,3.32)+.000001);multi:=If(sens>0,1/multi,multi);multi:=If(multi<1,1-(1-multi)*Abs(sens),(multi-1)*Abs(sens)+1);pds:=pds*multi;pds:=If(pds>Cum(IsDefined(x))-(pdsVlty+pdsBB),Cum(IsDefined(x))-(pdsVlty+pdsBB),pds);pds:=If(pds<1,1,pds);BBema:=x*2/(pds+1)+PREV*(1-2/(pds+1));signals:=Cross(x,BBema)-Cross(BBema,x);

If(plot=2,pds,If(plot=3,BBvlty*100,If(plot=4,signals,BBema)))(Go Top)EMA, cycle-adaptive

Page 87: Metastock Formulae

{ Cycle-adaptive Exponential Moving Avg v1.1 }{ EMA periodicity determined by historical price cycle based on ZigZag cycles }{ ©Copyright 2004 Jose Silva }{ [email protected] }

pr:=Input("ZigZag cycle reversal %",0,100,5);choose:=Input("EMA periods based on:  [1]Cycle,  [2]Cycle Avg",1,2,1);multi:=Input("EMA periodicity:  Cycle/Avg length x",.1,100,2);x:=Input("use Open=1 High=2 Low=3 Close=4 Volume=5 P=6",1,6,6);shift:=1+Input("EMA vertical shift %",-100,100,0)/100;plot:=Input("[1]EMA [2]Signals [3]Cycle [4]CyAvg [5]CyStdDev",1,6,1);

x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,If(x=6,P,C)))));zz:=Zig(x,pr,%);zzpk:=Ref(zz,-1)>zz AND Ref(zz,-1)>Ref(zz,-2);zztr:=Ref(zz,-1)<zz AND Ref(zz,-1)<Ref(zz,-2);PkTr:=zzpk OR zztr;CycleLen:=PkTr*(Ref(BarsSince(PkTr),-1)+1);CycleCount:=Cum(PkTr)-1;CycleCount:=If(CycleCount=0,.000001,CycleCount);CycleLenAvg:=Cum(CycleLen)/CycleCount;

pds:=If(choose=1,ValueWhen(1,CycleLen>0 AND CycleCount>0,CycleLen),CycleLenAvg)*multi;Init:=CycleCount=1 AND Alert(CycleCount<1,2);pds:= If(pds>BarsSince(Init),BarsSince(Init),pds);pds:=If(pds<1,1,pds);Ema:=x*2/(pds+1)+PREV*(1-2/(pds+1));Ema:=Ema*shift;signals:=Cross(x,Ema)-Cross(Ema,x);

If(plot=1,Ema,If(plot=2,signals, If(plot=3,CycleLen, If(plot=4,CycleLenAvg, If(plot=5,Stdev(CycleLen,21),pds)))))(Go Top)EMA - %PriceChange-filtered{ Filtered Exponential Moving Average v1.1 }{ EMA ignores prices outside min/max % zone }{ EMA periodicity shortens on low bar count }{ ©Copyright 2004 Jose Silva }{ [email protected] }

{ User inputs }pds:=Input("EMA periods",1,2520,21);minCh:=Input("Minimum % price change", 0,100,2)/100;maxCh:=Input("Maximum % price change", 0,100,5)/100;x:=Input("use Open=1 High=2 Low=3 Close=4 WClose=5 P=6",1,6,4);shift:=Input("EMA vertical shift %", -100,100,0)/100+1;plot:=Input("[1]EMA,  [2]Crossover signals", 1,2,1);

{ Price field selection }x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,WC(),If(x=6,P,C)))));

{ Price filter }

Page 88: Metastock Formulae

change:=Abs(x/Ref(x,-1)-1);filter:=change>=minCh AND change<=maxCh;x:=ValueWhen(1,filter,x);

{ Reduce periodicity on low bar count }pds:=If(pds>Cum(IsDefined(x)), Cum(IsDefined(x)),pds);

{ EMA formula }Ema:=x*2/(pds+1)+PREV*(1-2/(pds+1));

{ EMA shift }Ema:=Ema*shift;

{ EMA crossover signals }signals:=Cross(x,Ema)-Cross(Ema,x);

{ Plot EMA on price chart }If(plot=2,signals,Ema)(Go Top)EMA - pivotal{ Pivotal Exponential Moving Average v1.0 }{ EMA based on trough/peak support/resistance }{ Options:   [1] Composite EMA: (Upper+Lower)/2;   [2] Upper EMA band based on peaks;       Lower EMA band based on troughs;   [3] EMA shifts to Upper/Lower on crossovers }

{ ©Copyright 2004 Jose Silva }{ [email protected] }

pds:=Input("EMA periods",1,2520,21)/2;plot:=Input("EMA: [1]Composite,  [2]Upper/Lower,  [3]Long/Short",1,3,1);spread:=Input("Upper/Lower EMA bands shift %", 0,100,2)/200;x:=Input("use:  [1]Close,  [2]High/Low,  [3]P", 1,3,1);

xpk:=If(x=1,C,If(x=2,H,P));pk:=xpk<Ref(xpk,-1) AND Ref(xpk,-1)>Ref(xpk,-2);pkVal:=ValueWhen(1,pk,Ref(xpk,-1));xtr:=If(x=1,C,If(x=2,L,P));tr:=xtr>Ref(xtr,-1) AND Ref(xtr,-1)<Ref(xtr,-2);trVal:=ValueWhen(1,tr,Ref(xtr,-1));

pkpds:=If(pds>Cum(pk),Cum(pk),pds);pkpds:=If(pkpds<1,1,pkpds);pkEma:=pkVal*2/(pkpds+1)+PREV*(1-2/(pkpds+1));pkEma:=pkEma*(1+spread);

trpds:=If(pds>Cum(tr),Cum(tr),pds);trpds:=If(trpds<1,1,trpds);trEma:=trVal*2/(trpds+1)+PREV*(1-2/(trpds+1));trEma:=trEma*(1-spread);

Page 89: Metastock Formulae

Ema:=(pkEma+trEma)/2;LngShtEma:=If(C>=Ema,trEma,pkEma);

If(plot=1,Ema,If(plot=2,trEma,LngShtEma));If(plot=1,Ema,If(plot=2,pkEma,LngShtEma))(Go Top)EMA - RSI volatility adjusted{RSI-volatility adjusted, dynamic-period EMA v2}{ Tightens EMA on RSI over-bought/sold levels, increases EMA periods on low RSI volatility }{ ©Copyright 2003-2004 Jose Silva }{ [email protected] }

pds:=Input("EMA periods",1,2520,21);pdsRs:=Input("RSI periods",2,252,21);x:=Input("use Open=1 High=2 Low=3 Close=4 Volume=5 P=6",1,6,4);shift:= 1+Input("vertical shift %",-100,100,0)/100;plot:=Input("EMA=1, dyn EMA pds=2, RSI volatility=3, signals=4",1,4,1);

x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,If(x=6,P,C)))));RSvoltl:=Abs(RSI({x,}pdsRs)-50)+1;multi:=(5+100/pdsRs) /(.06+.92*RSvoltl+.02*Power(RSvoltl,2));pds:=pds*multi;pds:=If(pds>Cum(IsDefined(x))-pdsRS, Cum(IsDefined(x))-pdsRS,pds);pds:=If(pds<1,1,pds);RsVEma:=x*2/(pds+1)+PREV*(1-2/(pds+1));signals:=Cross(x,RsVEma)-Cross(RsVEma,x);

If(plot=2,pds,If(plot=3,(RSvoltl-1)*2, If(plot=4,signals,RsVEma*shift)))(Go Top)EMA - slope %{ EMA slope % v2.0, +/- 0~100% }{ ©Copyright 2003 Jose Silva }{ [email protected] }

pds:=Input("EMA periods",2,2520,21);x:=Input("use Open=1 High=2 Low=3 Close=4 Volume=5 P=6",1,6,4);

x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,If(x=6,P,C)))));EMA:=Mov(x,pds,E);EMAprev:=Ref(EMA,-1);

y:=Min(EMA,EMAprev)/Max(EMA,EMAprev);EMAratio:=(If(EMA>EMAprev,2-y,y)-1)*100;EMAper:=If(EMAratio<0,Atan(EMAratio,1)-360, Atan(EMAratio,1))*10/9;signal:=Mov(EMAper,pds,E);

0;signal;EMAper(Go Top)EMA - Volatility adjusted{ Volatility-adjusted, dynamic-period EMA v2.4 }{ EMA periodicity shortens on high volatility, increases on low volatility }{ ©Copyright 2003-2004 Jose Silva }{ [email protected] }

pds:=Input("EMA periods",1,2520,21);

Page 90: Metastock Formulae

x:=Input("use Open=1 High=2 Low=3 Close=4 Volume=5 P=6",1,6,4);shift:=1+Input("EMA vertical shift %", -100,100,0)/100;plot:=Input("EMA=1, Volatility=2, Dyn EMA pds=3, Crossovers=4",1,4,1);

x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,If(x=6,P,C)))));Vt:=Stdev(x,5)/Mov(Stdev(x,5),10,S);pds:=pds*.75/(Vt+.1);pds:=If(pds>Cum(IsDefined(x))-13, Cum(IsDefined(x))-13,pds);pds:=If(pds<1,1,pds);VtEma:=x*2/(pds+1)+PREV*(1-2/(pds+1));VtEma:=VtEma*shift;signals:=Cross(x,VtEma)-Cross(VtEma,x);

If(plot=2,Vt*10,If(plot=3,pds, If(plot=4,signals,VtEma)))(Go Top)EMA - Volume adjusted{ Volume adjusted, dynamic-period EMA v2.3 }{ EMA periodicity shortens on high volume, increases on low volume }{ ©Copyright 2003-2004 Jose Silva }{ [email protected] }

pds:=Input("EMA periods",1,2520,21);VAvgPds:=Input("Volume sample periods",2,252,21);x:=Input("use Open=1 High=2 Low=3 Close=4 Volume=5 P=6",1,6,4);shift:=1+Input("EMA vertical shift %", -100,100,0)/100;plot:=Input("EMA=1, Dyn EMA pds=2, Vol avg=3, Crossovers=4",1,4,1);

x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,If(x=6,P,C)))));MovVol:=Mov(V,VAvgPds,E);VolRatio:=Min(V,MovVol)/Max(V,MovVol);VolAvg:=If(V>MovVol,2-VolRatio,VolRatio);multi:=.75/(.1+.32*VolAvg+.58*Power(VolAvg,4));pds:=pds*multi;pds:=If(pds>Cum(IsDefined(x))-VAvgPds, Cum(IsDefined(x))-VAvgPds,pds);pds:=If(pds<1,1,pds);VlEma:=x*2/(pds+1)+PREV*(1-2/(pds+1));VlEma:=VlEma*shift;signals:=Cross(x,VlEma)-Cross(VlEma,x);

If(plot=2,pds,If(plot=3,VolAvg*50, If(plot=4,signals,VlEma)))(Go Top)EMA Close - weekly{ True weekly Close Exponential Mov Avg v4.0 }{ Plot on Daily or Weekly charts }{ References indicator "Calendar Week counter" }{ Plot is independent of any missing chart data }{ ©Copyright 2003-2004 Jose Silva }{ [email protected] }

pds:=Input("Weekly EMA periods",1,520,4);shift:=1+Input("EMA vertical shift %", -100,100,0)/100;plot:=Input("plot:  [1] EMA,  [2] Crossover signals",1,2,1);

y:=Fml("Calendar Week counter");Wkchart:=LastValue(Cum(y=ValueWhen(2,1,y)))=0;

Page 91: Metastock Formulae

NuWk:=y>ValueWhen(2,1,y);pds:=If(pds>Cum(NuWk),Cum(NuWk),pds);WkCl:=ValueWhen(1,NuWk,ValueWhen(2-Wkchart,1,C));WkEma:=ValueWhen(1,NuWk,PREV)*(1-2/(pds+1))+WkCl*2/(pds+1);WkEma:=WkEma*shift;signals:=Cross(C,WkEma)-Cross(WkEma,C);

If(plot=2,signals,WkEma)(Go Top)EMA - triple crossover signals{ Triggers Long (+1) & Short (-1) signals at crossover of triple EMAs within x periods }{ [email protected] }

pdsLong:=Input("Long crossover within x periods",1,252,2);pdsShort:=Input("Short crossover within x periods",1,252,3);short:=Input("short EMA periods",1,252,5);medium:=Input("medium EMA periods",2,1008,10);long:=Input("long EMA periods",3,2520,20);x:=Input("use Open=1 High=2 Low=3 Close=4 Volume=5 P=6",1,6,4);

x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,If(x=6,P,C)))));

goLong:= Alert(Cross(Mov(x,short,E), Mov(x,medium,E)),pdsLong) AND Alert(Cross(Mov(x,medium,E), Mov(x,long,E)),pdsLong);

goShort:= Alert(Cross(Mov(x,medium,E), Mov(x,short,E)),pdsShort) AND Alert(Cross(Mov(x,long,E), Mov(x,medium,E)),pdsShort);

goLong-goShort(Go Top)Elder's AutoEnvelope - provided by www.metastocktools.com{Dr A. Elder's AutoEnvelope interpretation v1.0 coded by metastocktools.com}

{ User inputs }pds:=Input("EMA periods",1,252,21);pdsBak:=Input("lookback periods",1,252,42);x:=Input("use: Open=1, High=2, Low=3, Close=4, WClose=5",1,5,4);plot:=Input("[1]AutoEnvelope, [2]Long signals, [3]All signals",1,3,1);delay:=Input("Entry/Exit signals delay",0,5,0);

{ Price field }x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,WC(),C))));

Page 92: Metastock Formulae

{ Envelope bands }Avg:=Mov(x,pds,E);hiAvg:=HHV(H,pdsBak);loAvg:=LLV(L,pdsBak);shift:= Mov(If(hiAvg>Avg,hiAvg-Avg,Avg-loAvg),pds,E);UpperBand:=Avg+shift;LowerBand:=Avg-shift;

{ Envelope signals }In:=Cross(x,LowerBand);Out:=Cross(x,UpperBand);Init:=Cum(In+Out>-1)=1;InInit:=Cum(In)=1;flag:=BarsSince(Init OR In) <BarsSince(Init OR Out)+InInit;signals:=Ref((InInit AND Alert(InInit=0,2)  OR flag AND Alert(flag=0,2))   -(flag=0 AND Alert(flag,2)),-delay);

{ Plot envelope on price chart }If(plot=1,UpperBand,If(plot=2,signals,In-Out));If(plot=1,Avg,If(plot=2,0,0));If(plot=1,LowerBand,If(plot=2,signals,In-Out))(Go Top)Elder's Impulse system - provided by www.metastocktools.com{ Dr Elder's Impulse system interpretation v1.1 coded by metastocktools.com}{ Plot signals on own window below daily chart }

{ Variables user-input }pdsNoEntry:=Input("No entry x periods from last exit",0,21,5);pdsW:=Input("Weekly EMA periods",1,520,13)*5;pdsD:=Input("Daily EMA periods",1,252,13);pdsShort:=Input("Shorter MACD periods", 1,252,12);pdsLong:=Input("Longer MACD periods",2,2520,26);pdsSignal:=Input("MACD trigger signal periods", 2,252,9);tradeDelay:=0;

{ Indicators }EmaW:=Mov(C,pdsW,E);EmaD:=Mov(C,pdsD,E);Mac:=Mov(C,pdsShort,E)-Mov(C,pdsLong,E);MacTrig:=Mov(Mac,pdsSignal,E);Hist:=Mac-MacTrig;

{ System logic }Out:={EmaW<Ref(EmaW,-1) AND }EmaD<Ref(EmaD,-1) AND Hist<Ref(Hist,-1);

Page 93: Metastock Formulae

In1:=EmaW>Ref(EmaW,-1) AND EmaD>Ref(EmaD,-1) AND Hist>Ref(Hist,-1);In:=In1 AND BarsSince(Out)>pdsNoEntry;

{ System signals }Init:=Cum(In+Out>-1)=1;InInit:=Cum(In)=1;flag:=Ref(BarsSince(Init OR In) <BarsSince(Init OR Out)+InInit,-tradeDelay);signals:=(InInit AND Alert(InInit=0,2)  OR flag AND Alert(flag=0,2))   -(flag=0 AND Alert(flag,2));

{ Plot }0;signals(Go Top)Exploration for highest percentage rise in share prices, stocks traded for any length of time{ ©Copyright 2001 Jose Silva }Column A: +% incrs

TtlDays:=LastValue(Cum(1));FirstDay:=If(TtlDays>252,TtlDays-252,1);FirstCl:=ValueWhen(1,Cum(1)=FirstDay,C);Int((C/FirstCl-1)*10000)/100

Column B: today

Close

Column C: 52w back

TtlDays:=LastValue(Cum(1));FirstDay:=If(TtlDays>252,TtlDays-252,1);ValueWhen(1,Cum(1)=FirstDay,C)

Column D: $ t/over

Int(WC()*V)

Column E: months

Int(LastValue(Cum(1)/21))

Column F: weeks

Int((LastValue(Cum(1))-Int(LastValue(Cum(1)/21))*21)/5)

Filter:

Page 94: Metastock Formulae

colA > 0AND colD > 10000FibboGattoFG1:((c+ref(c,-1)+ref(c,-2)+ref(c,-3)+ref(c,-5)+ref(c,-8)+ref(c,-13)+ref(c,-21)+ref(c,-34)+ref(c,-55)+ref(c,-89)+ref(c,-144))/c)*-1 

{{{adding closing price only on fib days 1,2,3,5,8,13,21,34,55,89 and 144 and then dividing by today's close}}} 

FG2:mov(((c+ref(c,-1)+ref(c,-2)+ref(c,-3)+ref(c,-5)+ref(c,-8)+ref(c,-13)+ref(c,-21)+ref(c,-34)+ref(c,-55)+ref(c,-89)+ref(c,-144))/c)*-1,34,e) 

{{{ 34 period mov avg of above indicator}}} 

Look for crosses of the two indicators for positive or negatives. 

Now, there are many whipsaws. I don't recommend this as a *system* at all, just as an indicator. It really highlights some big moves but measuring it with the system test is useless. You must use this as ONE of the tools -- not THE tool. (Go Top)Fibonacci Ratios and Momentum In MetaStock for Windows, you can establish Fibonacci Retracement levels as outlined in the November 1997 TASC article "Using Fibonacci Ratios and Momentum" by Thom Hartle by first creating an Expert in the Expert Advisor. To do this, choose Expert Advisor from the Tools menu and then choose New. Enter the following Expert Highlights and Expert Symbols into your Expert.Fibonacci Ratios and MomentumHighlightsName: RSI > 50Condition: RSI(14) > 50Color: Dk GreenName: RSI < 50Condition: RSI(14) < 50Color: RedSymbolsName: Isolated LowCondition: LOW < Ref(LOW,-1) ANDLOW < Ref(LOW,1)Graphic: Buy ArrowColor: BlackLabel: Isolated LowName: Isolated HighCondition: HIGH > Ref(HIGH,-1) ANDHIGH > Ref(HIGH,1)Graphic: Sell ArrowColor: BlackLabel: Isolated HighNote: If the Symbol labels make the chart too busy you may want to shorten the label (e.g. change Isolated High to IH).

Page 95: Metastock Formulae

Next, close the Expert Advisor, open any chart, and then click the right-mouse button on the chart’s heading. Choose Expert Advisor and then Attach from the Chart Shortcut Menu. You can now choose Fibonacci Retracement from the Insert menu, and then drag from one isolated extreme to another. In MetaStock 6.5 you should right-click on the Fibonacci Retracement lines and choose properties. Check the Snap to Price checkbox so the Retracement lines will automatically snap to the high and low prices.(Go Top)Fibonacci Trader- Dynamic Balance PointDynamic Balance Point Calculationdt:=DayOfWeek();DBC:=(HighestSince(5,DayOfWeek()=dt,H)+LowestSince(5,DayOfWeek()=dt,L)+CLOSE)/3;DBC(Go Top)Fibonacci Trader-Dynamic Balance Point StepDPS:=(ValueWhen(1,FmlVar("FT-DBP","DBC"),FmlVar("FT-DBP","DBC"))+ValueWhen(5,FmlVar("FT-DBP","DBC"),FmlVar("FT-DBP","DBC"))+ValueWhen(10,FmlVar("FT-DBP","DBC"),FmlVar("FT-DBP","DBC"))+ValueWhen(15,FmlVar("FT-DBP","DBC"),FmlVar("FT-DBP","DBC"))+ValueWhen(20,FmlVar("FT-DBP","DBC"),FmlVar("FT-DBP","DBC")))/5;DPS;(Go Top){Fibonacci Trader - Fixed Balance Point}{NOTE: under Color/Style options, changeplot to last "style" option}

{Fixed Balance Point Calculation}FBC:=If(DayOfWeek()=1 AND Ref(DayOfWeek(),-1)<5,{then}(HighestSince(2,DayOfWeek()=1,H)+LowestSince(1,DayOfWeek()=1,L)+CLOSE)/3,{else}If(DayOfWeek()=5,{then}(HighestSince(1,DayOfWeek()=1,H)+LowestSince(1,DayOfWeek()=1,L)+CLOSE)/3,{else}0));{Fixed Balance Point Plot}FBP:=ValueWhen(1,FBC>0,FBC);FBP(Go Top)Fibonacci Trader- Fixed Balance Point- REVISED{NOTE: under Color/Style options, changeplot to last "style" option}

{revised 1 Jan 99}

Page 96: Metastock Formulae

Mc1:=BarsSince(DayOfWeek()=1);Fc1:=BarsSince(DayOfWeek()=5);Fc2:=Ref(BarsSince(DayOfWeek()=5),-1)-1;{Fixed Balance Point Calculation}FBC:=If(Mc1=0 AND Fc1>2,{then}(Ref(HHV(H,LastValue(mc1)),-1)+Ref(LLV(L,LastValue(Mc1)),-1)+Ref(C,-1))/3,{else}If(Fc1=0 AND Mc1>5,{then}(HHV(H,LastValue(Fc2))+LLV(L,LastValue(Fc2))+C)/3,{else}If(Fc1=0,{then}(HHV(H,LastValue(Mc1))+LLV(L,LastValue(Mc1))+C)/3,{else}0)));{Fixed Balance Point Plot}FBP:=ValueWhen(1,FBC>0,FBC);FBP;(Go Top)Fibonacci Trader- Fixed Balance Point StepFPS:=(ValueWhen(1,FmlVar("FT-FBP","FBC")>0,FmlVar("FT-FBP","FBC")) +ValueWhen(2,FmlVar("FT-FBP","FBC")>0,FmlVar("FT-FBP","FBC")) +ValueWhen(3,FmlVar("FT-FBP","FBC")>0,FmlVar("FT-FBP","FBC")) +ValueWhen(4,FmlVar("FT-FBP","FBC")>0,FmlVar("FT-FBP","FBC")) +ValueWhen(5,FmlVar("FT-FBP","FBC")>0,FmlVar("FT-FBP","FBC")))/5;FPS(Go Top)Fibonacci Trader- Support and Resistance{NOTE: under Color/Style options, changeplot to last "style" option}

{Weekly Price Range Calculation}Mc1:=BarsSince(DayOfWeek()=1);Fc1:=BarsSince(DayOfWeek()=5);Fc2:=Ref(BarsSince(DayOfWeek()=5),-1)-1;WRC:=If(Mc1=0 AND Fc1>2,{then}Ref(HHV(H,LastValue(mc1)),-1)-Ref(LLV(L,LastValue(Mc1)),-1),{else}If(Fc1=0 AND Mc1>5,{then}HHV(H,LastValue(Fc2))-LLV(L,LastValue(Fc2)),{else}If(Fc1=0,{then}HHV(H,LastValue(Mc1))-LLV(L,LastValue(Mc1)),{else}0)));

Page 97: Metastock Formulae

WRP:=ValueWhen(1,WRC>0,WRC);{Resistance Range}RR1:= FmlVar("FT-FBP","FBP")+(WRP*.5);RR2:= FmlVar("FT-FBP","FBP")+(WRP*.618);{Support Range}SR1:= FmlVar("FT-FBP","FBP")-(WRP*.5);SR2:= FmlVar("FT-FBP","FBP")-(WRP*.618);{Plot Ranges}RR1;RR2;SR1;SR2;(Go Top)Final Plot {from Richard Estes}Fml ( "Final Plot" ) = 

If (BarsSince ( Fml ( "Downtrend" )) < BarsSince ( Fml ( "Uptrend" )),{ then } Ref ( HHV (H,4), -1 ), { else } Ref (LLV (L,4) ,-1 )) 

where........ 

Fml ( "Downtrend" ) = 

Peak(1, If (L<Ref(LLV(L,4),-1) , Ref(HHV(H,4),-1), 0), 1)<> Ref(Peak(1, If (L<Ref(LLV(L,4),-1) , Ref(HHV(H,4), -1), 0), 1) 

and...... 

Fml ( "Uptrend" ) = 

Peak(1, If (H>Ref(HHV(H,4),-1), Ref(LLV(L,4), -1), 0), 1)<> Ref(Peak(1, If (H>Ref(HHV(H,4),-1), Ref(LLV(L,4), -1), 0), 1)(Go Top)Finding TrendinessA remark by Chuck LeBeau about trading with the trend has stayed with me. He speaks of the actual strength of a trend as opposed to merely its direction. Entry strategies (pullbacks in his view) should be tailored to both direction and strength, he says. This makes perfect sense to me.

Here are some initial thoughts. Perhaps you can help me to arrive at some kind of "hierarchy" of trendiness, or call it a classification, or a taxonomy,consisting of both direction and strength. For convenience, I'll describe only long trades.

I. General direction, long term:EMA(21) > EMA(55)

II. Trend picks up steam:EMA(13) > EMA(21) > EMA(55)

III. Strong:

Page 98: Metastock Formulae

EMA(8) >EMA(13) > EMA(21) > EMA(55)

IV. Somewhere between II. and III. the ADX(13/14) usually starts rising. From what I've seen, a rising ADX at any level generally means business:ADX(13) > Ref(ADX(13),-1)

V. Very strong trend: (this is where Linda Bradford's "Holy Grail" and such kick in)ADX(13) > Ref(ADX(13) andADX(13) > 30

Almost forgot . . . very little direction (but don't fall asleep at the wheel):ADX(13) < say, 12-15 and has been bumbling along down there for a while (hard to quantify for me to date)(Go Top)Forecast OscillatorMany moons ago, I posted a little linear regression system that featured the Forecast Oscillator. The response was surprising (lots of it) and today, I still communicate with many of the original respondents. I've continued to use the same "framework" for my testing. In an earlier post today (a private email that made it to the list...I'm a little dingy tonight...had to get up a 5 am to trade cocoa), I alluded to using the CMO. I've used many indicators in these tests (i.e., Forecast Oscillator, a modified Time Series Forecast, MACD Histogram, Bollinger Band Histogram, CMO, & others). 

Before I explain the method to my madness, please read the following sentences carefully. Backtesting systems is very dangerous. The act of backtesting is not the dangerous part...believing that the results can be duplicated in the future is very dangerous. Let's face it, we are "best fitting" circumstances to static prices etched in stone. So please, I'd prefer not to hear the lectures about the folly I pursue. I've been system testing since 1975 and I've made a bazillion mistakes (and a little chump change) over the years. I'm still looking for the holy grail. So, here's the outline:

1. The basic formula:

Enter Long:Cross(opt1,ForecastOsc(CLOSE,opt3))

Close Long:Cross(ForecastOsc(CLOSE,opt3),opt2)

Enter Short:Cross(ForecastOsc(CLOSE,opt3),opt2)

Close Short:Cross(opt1,ForecastOsc(CLOSE,opt3))

You can substitute any standard formula for the ForecastOsc or you can put in a custom formula (just remember that custom formulae need to look like:fml("Karnack's SuperSecret") It's in your manual.

2. opt3:

Page 99: Metastock Formulae

In this search "opt3" represents the number of days inserted into the forecast oscillator. I usually use three (3) to ten (10) for the forecast oscillator, but if I'm using a custom formula, sometimes I don't even need opt3, because I using a fixed set of parameters within the custom formula.

3. opt1:

Opt1 is the numeric value below a zero basis line that will trigger a long position and close out the short. Yes Virginia, in my secular little world, I prefer stop and reverse trading. The parameters for this option depends on the commodity (and yes, it does work on stocks) you're trading.  One must eyeball the forecast oscillator to see how far it swings above and below zero. For the forecast oscillator, I usually use 0 to -3. 

4. opt2: 

Opt2 is the numeric value above a zero basis line that will trigger a short sale. Zero to 3 seems to work for this formula. 

5. Steps:

I step opt3 using whole numbers to represent days. With Opt1 and Opt2, I use: .1 steps.

6. Other indicators:

When substituting the CMO (or any indicator) for the Forecast Oscillator, one must be aware of the terrain the indicator travels over. It would be ridiculous to us zero to 3 (as the optimizing numbers) if the mid point is 50 and the indicator traverses between +10 (on the downside) and +90 (on the upside). 

The overall theory behind this test is that many indicator oscillate from positive to negative and back again (duh). The trick is not to trigger action when the indicator turns in a new direction (if you're interested, I've been down that road and I'm still wearing a neck brace from the whiplash). The theory is that once an indicator extends to a certain level, the market is either overbought or oversold. 

In downtrending markets (can you spell deflation?), the short sale trigger (opt2) is going to be closer to the zero basis line than opt1. Please see the attachment. What will happen when the grains, cocoa, crude, and damn near everything else starts to go up? Good question Steve! The system will not perform as well if you continue to use the same parameters. In a perfectly sideways market, one would assume that the trigger points would be equal distance from zero. As in many markets, this system works better when things trend indefinitely.

I hope this post will help others who have inquired about the linear regression system. Attached is the original system, using the Forecast Oscillator, for March Crude Oil. In this example, opt3 is set to 8 (number of days in the forecast oscillator); opt2 is .1 (sell signal); opt1 is -2.3 (buy signal).

To quote R.N. Elliot: "Even though we many not understand the cause underlying a particular phenomenon, we can, by observation, predict the phenomenon's recurrence."

Page 100: Metastock Formulae

To qoute Karnack (my alter ego): "I got knocked down seven times and got up eight".

Finally, from a trader on the realtraders forum: "Futures trading involves financial risk, lots of it".(Go Top)Forecast Oscillator SystemEnter long:Cross(ForecastOsc(C,21),Mov(C,3,E)) AND Cross(ForecastOsc(C,21),0)

Exit long:Cross(Mov(C,3,E),ForecastOsc(C,21)) ANDCross(6,Mov(C,3,E))(Go Top)Forecast Oscillator System AlternativeEnter long:Cross(ForecastOsc(C,21),Mov(ForecastOsc(C,21),3,E)) ANDCross(ForecastOsc(C,21),0)

Exit long:Cross(Mov(ForecastOsc(C,21),3,E),ForecastOsc(C,21)) ANDCross(6,ForecastOsc(C,21))

{You can use alert() function on either if you don't require both conditionsto fire on the same day.}(Go Top)Front Weighted 36 Day Moving AverageThis indicator requires 3 sub calculations and then the totalling of all 3 to get the final indicator:

This is the basic calculation:Take the closing prices of your instrument 34 days ago - 26 days ago (inclusive), multiply each daily value by 0.01 and write each value down.Then take the closing prices of your instrument 25 days ago - 18 days ago (inclusive), multiply each daily value by 0.02 and write each value down.Then take the closing prices of your instrument 25 days ago - 18 days ago (inclusive), multiply each daily value by 0.02 and write each value down.Then take the closing price of your instrument 17 days ago and multiply by 0.03 ad write the value down.Then take the closing price of your instrument 16 days ago - 8 days ago (inclusive), multiply by 0.031 and write each value down.Then take the closing price of your instrument 7 days ago - 6 days ago (inclusive), multiply by 0.006 and write each value down.Then take the closing price of your instrument 5 days ago - 1 day ago (inclusive), multiply by 0.07 and write each value down.Then take the closing price of your instrument today, multiply by 0.079 and write this value down.

Finally, add up all the values that you wrote down and plot the value on the chart, repeat this for every new trading day.

Page 101: Metastock Formulae

Simple Interpretation:Front Weighted 36 Day Moving Average is similar to all other moving averages. The interpretation is just as with all others, the trend is up when prices are above the moving average and the trend is down when prices are below the moving averages. This particular variation attempts to weight the data at the front more than that at the back, with a sliding scale for each trading days value.

Metastock code for Front Weighted 36 Day Moving Average:

Fml( "1FrontWeighted36BarMA1" ) +Fml( "2FrontWeighted36BarMA2" ) +Fml( "3FrontWeighted36BarMA3" )

Where Fml( "1FrontWeighted36BarMA1" ) =0.01 * Ref(P,-34) +0.01 * Ref(P,-33) +0.01 * Ref(P,-32) +0.01 * Ref(P,-31) +0.01 * Ref(P,-30) +0.01 * Ref(P,-29) +0.01 * Ref(P,-28) +0.01 * Ref(P,-27) +0.01 * Ref(P,-26) +0.02 * Ref(P,-25) +0.02 * Ref(P,-24) +0.02 * Ref(P,-23) +0.02 * Ref(P,-22) +0.02 * Ref(P,-21) +0.02 * Ref(P,-20) +0.02 * Ref(P,-19) +0.02 * Ref(P,-18)

Where Fml( "2FrontWeighted36BarMA2" ) =0.03 * Ref(P,-17) +0.031 * Ref(P,-16) +0.031 * Ref(P,-15) +0.031 * Ref(P,-14) +0.031 * Ref(P,-13) +0.031 * Ref(P,-12) +0.031 * Ref(P,-11) +0.031 * Ref(P,-10) +0.031 * Ref(P,-9) +0.031 * Ref(P,-8) +0.006 * Ref(P,-7) +0.006 * Ref(P,-6) +0.07 * Ref(P,-5) +0.07 * Ref(P,-4) +0.07 * Ref(P,-3) +0.07 * Ref(P,-2)

Where Fml( "3FrontWeighted36BarMA3" ) =

Page 102: Metastock Formulae

0.07 * Ref(P,-1) +0.079 * P(Go Top)Full Formula for RSI{The following is copied from the Formula Field of my *RSI canonical_12_day_for_P_I indicator. Change m if you choose another # of periods n for rsi.}

{I wrote my own "canonical" RSI(12) which coincides with MetaStock's RSI(12) if m=2*n-1 where m is used below in Mov( ,m,E); n - a number of periods in rsi(n). Mind that since I didn't use those particular tricks from the standard rsi(n) to shorten the initial transitional period, this function and standard rsi(n) differ for about month or so from the day 1. It was not that important for me, so I used this shortcut.}

100 - 100/(1.+ If(Mov(If(P-Ref(P,-1)<0,-(P-Ref(P,-1)),0),23,E)=0,1000000,

Mov(If(P-Ref(P,-1)>0, P-Ref(P,-1), 0),23,E)/Mov(If(P-Ref(P,-1)<0,-(P-Ref(P,-1)),0),23,E)))(Go Top)Freeburg Precious Metal Switch Fund SystemTo create the Freeburg Precious Metal Switch Fund system in MetaStock for Windows, you must first create the K ratio as a composite security. To do this, launch The Downloader from MetaStock, and choose New and then Composite from The Downloader's File menu. Make sure the directory specified is the directory where your weekly GMI and Handy and Harman data are located. Name the composite the K ratio, then choose the Barron's Gold Mining Index as the Primary symbol and Handy and Harman prices as the secondary symbol. Next, choose Divide as the Operator and the click the OK button to add the composite. Open the K ratio chart in MetaStock, Plot the Bollinger Bands Indicator and enter 46 for the number of periods and 2.3 for the standard deviations. Plot Bollinger Bands again and enter 4 for the periods and 1.6 for the Standard Deviations.

The data necessary for this chart/indicator, is extremely difficult to obtain. The only source we are aware of on diskette is the author of the article. The data is in a Lotus spreadsheet. It must be output to ASCII and then converted to MetaStock data files. He will make a small charge for this data.

To keep the GMI data updated, it is only available from Barrons magazine and must be manually input. The Handy & Harman data must also be manually updated. This may be obtained from the Wall Street Journal as well. (Go Top)From Terms to Technical ToolsIn Walter Downs’ article "From Terms To Technical Tools" he introduces the Point of Balance Oscillator, two conditions to colour bars and two system tests. All of these can be created quite easily in MetaStock 6.5. To create the Point of Balance Oscillator, choose Indicator Builder from the Tools menu, click on the New button, and enter the following formula:Point of Balance Oscillatorn := Input("Time Periods",1,100,12)/2; POBC1 := (HHV(CLOSE, n) + LLV(CLOSE,n))/2;POBC2 := (HHV(POBC1, n) + LLV(POBC1,n))/2;POBC3 := (HHV(POBC2, n) + LLV(POBC2,n))/2;

Page 103: Metastock Formulae

POBC4 := (HHV(POBC3, n) + LLV(POBC3,n))/2;POBC5 := (HHV(POBC4, n) + LLV(POBC4,n))/2;POBC6 := (HHV(POBC5, n) + LLV(POBC5,n))/2;POBC7 := (HHV(POBC6, n) + LLV(POBC6,n))/2;POBC8 := (HHV(POBC7, n) + LLV(POBC7,n))/2;POBC9 := (HHV(POBC8, n) + LLV(POBC8,n))/2;POBC10 := (HHV(POBC9, n) + LLV(POBC9,n))/2;AV := (POBC1 + POBC2 + POBC3 + POBC4 + POBC5 + POBC6 + POBC7 + POBC8 + POBC9 + POBC10) / 10;POBCOsc := 100 * ((CLOSE - AV) / (HHV(CLOSE, 10)-LLV(CLOSE, 10)));POBCOscTo highlight bars based on the Bull Fear and Bear Fear conditions discussed in the article, choose Expert Advisor from the Tools menu, click on the New button and enter the following expert:

Bull Fear and Bear Fear Expert - HighlightsName: Bull Fear<Condition:n := 12 {Time periods};BullFear := (HHV(HIGH,n) - LLV(HIGH,n))/2 + LLV(HIGH,n);CLOSE > BullFearColor: BlueName: Bear FearCondition:n := 12 {Time periods};BearFear := (HHV(LOW,n) - LLV(LOW,n))/2 + LLV(LOW,n);CLOSE < BearFearColor: RedTo test the two systems discussed in the article, choose System Tester from the Tools menu and enter both of the following systems:Bull and Bear Fear System Test - Signal FormulasEnter Long:n := 12 {Time periods};BullFear := (HHV(HIGH,n) - LLV(HIGH,n))/2 + LLV(HIGH,n);Cross(CLOSE,BullFear)Enter Short:n := 12 {Time periods};BearFear := (HHV(LOW,n) - LLV(LOW,n))/2 + LLV(LOW,n);Cross(BearFear,CLOSE)

Four-Bar Fear System Test - Signal FormulasEnter Long: n := 12 {Time periods};BullFear := (HHV(HIGH,n) - LLV(HIGH,n))/2 + LLV(HIGH,n);BearFear := (HHV(LOW,n) - LLV(LOW,n))/2 + LLV(LOW,n);Cross(CLOSE,BullFear) AND Ref(Sum(CLOSE < BullFear AND CLOSE > BearFear,4),-1) = 4Close Long:LOW < Ref(LLV(LOW,3),-1)Enter Short:n := 12 {Time periods};BullFear := (HHV(HIGH,n) - LLV(HIGH,n))/2 + LLV(HIGH,n);

Page 104: Metastock Formulae

BearFear := (HHV(LOW,n) - LLV(LOW,n))/2 + LLV(LOW,n);Cross(BearFear,CLOSE) AND Ref(Sum(CLOSE < BullFear AND CLOSE > BearFear,4),-1) = 4Close Short:HIGH > Ref(HHV(HIGH,3),-1)

After entering the systems click on the Options button in the System Tester dialog, go to the Testing tab and change the Trade Price to Open and set the Trade delay to one.

Following is the formula for the moving averages discussed in the article, but not contained in the Traders Tip published in TASC. Please note, this formula will plot all three moving averages, but will not plot them in three different colours.Moving Averages Formula for MetaStockTP:=Input("Time Periods",1,100,12); BLF:=((HHV(H,TP)+LLV(H,TP))/2);BRF:=((HHV(L,TP)+LLV(L,TP))/2);POB:=((BLF-BRF)/2)+BRF;BLF;BRF;POB

Gain By %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)Gann High Low{name: GANN-HiLo}

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);HiLo:=If(HLv=-1,{then}Mov(H,3,S),{else}Mov(L,3,S));HiLo;(Go Top)Gann Hi-LocolABUYBarsSince(C< Fml("GANN-HiLo"))

colBSELLBarsSince(C> Fml("GANN-HiLo"))

Page 105: Metastock Formulae

filtercolA=1 OR colB=1(Go Top)Gann-Swing{Market swing is defined as:Up = 2 higher highs,Down = 2 lower highs.}Us:=BarsSince((H > Ref(H,-1)) AND (Ref(H,-1) > Ref(H,-2)));Ds:=BarsSince((L < Ref(L,-1)) AND (Ref(L,-1) < Ref(L,-2)));Sd1:=If(Us=0,{then}If(Ref(L,-1)<>LowestSince(1,Ds=0,L),{then}1,{else}0),{else}If(Ds=0,{then}If(Ref(H,-1)<>HighestSince(1,Us=0,H),{then}-1,{else}0),{else}0));Sd2:=If(Sd1=1,{then} If(Ref(BarsSince(Sd1=1),-1) >Ref(BarsSince(Sd1=-1),-1),{then}1,{else}0),{else} If(Sd1=-1,{then}If(Ref(BarsSince(Sd1=1),-1) <Ref(BarsSince(Sd1=-1),-1),{then}-1,{else}0),{else}0));TD1:=ValueWhen(1,Sd2<>0,Sd2);Td1;(Go Top)Gann Swing UpdateThis is an update to Gann-Swing indicators I had posted several monthsback. Most of the code has been improved and I have modified the swingdefinition slightly.

Gann Weekly Expert Instructions

1. First create a new expert and name it whatever you want.2a. under "trends" tab put this code for bullish:ut:=FmlVar("GANN-Trend","TDV");uplot:=If(BarsSince(Ut=1)<BarsSince(Ut=-1),1,0);uplot=1;2b. and this for bearish:dt:=FmlVar("GANN-Trend","TDV");

Page 106: Metastock Formulae

dplot:=If(BarsSince(dt=1)>BarsSince(dt=-1),1,0);dplot=1;Then click on the "ribbon" option and turn off "Display Vertical Lines", Ialso turn offthe corner option.3a. Under highlights tab create a new and call it "HiLo Change", choosecolor, 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 "Up-Trend", choose color, and enter this code:ut:=FmlVar("GANN-Trend","TD");uplot:=If(BarsSince(Ut=1)<BarsSince(Ut=-1),1,0);uplot=1;3c. Create new and call it "Down-Trend", choose color, and enter this code:dt:=FmlVar("GANN-Trend","TD");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("GANN-Swing","SD2")=1;then under graphic choose "Buy Arrow", choose color (Dark Green), and smallsize, then pick "Above Price Plot".4b. Create new and call it "DownSwing", enter this code:FmlVar("GANN-Swing","SD2")=-1;then under graphic choose "sell arrow", choose color (Dark Red), and smallsize, 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.

Note: For daily bar charts ribbon use these formulas:

2a. ut:= FmlVar("GaW-Trend","TDV") ;uplot:=If(BarsSince(Ut=1)<BarsSince(Ut=-1),1,0);uplot=1;

2b. dt:= FmlVar("GaW-Trend","TDV") ;dplot:=If(BarsSince(dt=1)>BarsSince(dt=-1),1,0);dplot=1;(Go Top)Gann-Trend{Swing Direction}Sd:= FmlVar("GANN-Swing","TD1") ;

Page 107: Metastock Formulae

{Swing Change High}Sch:=If(Sd=1 AND Ref(sd,-1)=-1,{then}1,{else}0);{Swing Change Low}Scl:=If(Sd=-1 AND Ref(Sd,-1)=1,{then}1,{else}0);{Peak Value}Pv:=If(Scl=1,{then}HighestSince(1,Sch=1,H),{else}0);{Trough Value}Tv:=If(Sch=1,{then}LowestSince(1,Scl=1,L),{else}0);{Trend Direction}Td:=If(H>ValueWhen(1,Pv>0,Pv),{then}1,{else}If(L<ValueWhen(1,Tv>0,Tv),{then}-1,{else}0));{UpTrend=1 DownTrend =-1}Tdv:=ValueWhen(1,Td<>0,Td);Tdv;(Go Top)Gap 1 System{BUY}L>Ref(H,-1) ORCum(1)=LastValue(Cum(1))

{SELL}H<Ref(L,-1) ORCum(1)=LastValue(Cum(1))(Go Top)Gap 2 System{BUY}N1:=5;L>Ref(HHV(H,N1),-1) ORCum(1)=LastValue(Cum(1))

{SELL}N1:=5;H<Ref(LLV(L,N1),-1) ORCum(1)=LastValue(Cum(1))(Go Top)Gap 3 System{Enter Long}N1:=5;L>Ref(HHV(H,N1),-1) OR Cum(1)=LastValue(Cum(1))

Page 108: Metastock Formulae

{Exit Long}N2:=3;C<Ref(LLV(L,N2),-1) OR Cum(1)=LastValue(Cum(1))

{Enter Short}N1:=5;H<Ref(LLV(L,N1),-1) OR Cum(1)=LastValue(Cum(1))

{Exit Short}N2:=3;C>Ref(HHV(H,N2),-1) OR Cum(1)=LastValue(Cum(1))(Go Top)Gap Days Shows stocks which have gapped up or down on the open compared to yesterdays price. The search returns 1 for Ok and 0 for not ok.•             GapUp() (Go Top)Gap TradingHere is the gap-trading system code for use in Equis International's MetaStock software. For practical reasons, the system has been defined as an indicator rather than a system, showing the cumulated profit. 

dn:= 1.0;up:= 1.0;gap:= 100*(OPEN - Ref(CLOSE, -1))/Ref(CLOSE, -1);prf:= If(gap>=up, OPEN-CLOSE, If(gap<=-dn, CLOSE-OPEN,0));Cum(prf);(Go Top)Gap Up FormulasThe MetaStock formulas to calculate these percentages are shown below. Thefirst input is the minimum gap (e.g., 1%), and the second input is the gapincrement (e.g., 1%, which would give you a range of 1-2%). To calculategaps down, change the percentage to a negative.

Formula to determine whether the closing price is equal to or exceeds theopening price on a gap day:

MinGap := Input("Minimum gap to consider (%)",-10000,10000,1);GapIncrement := Input("Gap Increment (%)",0,100,1);

LookingForGapUp := MinGap >= 0; LookingForGapDown := MinGap < 0;

{ Gap percentage }Gap := (OPEN - Ref(CLOSE,-1))/Ref(CLOSE,-1)*100;

NumGaps := If(LookingForGapUp, Cum(Gap >= MinGap AND Gap< MinGap +GapIncrement), If(LookingForGapDown, Cum(Gap <= MinGap AND Gap > MinGap -

Page 109: Metastock Formulae

GapIncrement),0));

If(LookingForGapUp, Cum(If(Gap >= MinGap AND Gap < MinGap + GapIncrement,If(CLOSE >= OPEN, +1,0),0)),

If(LookingForGapDown, Cum(If(Gap <= MinGap AND Gap > MinGap - GapIncrement,If(CLOSE <= OPEN, +1, 0),0)), 0))/NumGaps*100;

Formula to determine whether the daily range crosses the previous day’sclose on a gap day:

MinGap := Input("Minimum gap to consider (%)",-10000,10000,1);GapIncrement := Input("Gap Increment (%)",0,100,1);

LookingForGapUp := MinGap >= 0; LookingForGapDown := MinGap < 0;

{ Gap percentage }Gap := (OPEN - Ref(CLOSE,-1))/Ref(CLOSE,-1)*100;

NumGaps := If(LookingForGapUp, Cum(Gap >= MinGap AND Gap< MinGap +GapIncrement), If(LookingForGapDown, Cum(Gap <= MinGap AND Gap > MinGap -GapIncrement),0));

If(LookingForGapUp, Cum(If(Gap >= MinGap AND Gap < MinGap + GapIncrement,If(LOW <= Ref(CLOSE,-1), +1,0),0)),

If(LookingForGapDown, Cum(If(Gap <= MinGap AND Gap > MinGap - GapIncrement,If(HIGH >= Ref(CLOSE,-1), +1, 0),0)), 0))/NumGaps*100;

Formula to determine whether the following day’s open continues the gaptrend:

MinGap := Input("Minimum gap to consider (%)",-10000,10000,1);GapIncrement := Input("Gap Increment (%)",0,100,1);

LookingForGapUp := MinGap >= 0; LookingForGapDown := MinGap < 0;

GapYesterday := (Ref(OPEN,-1) - Ref(CLOSE,-2))/Ref(CLOSE,-2)*100;

NumGapsthruYesterday := If(LookingForGapUp, Cum(GapYesterday> = MinGap ANDGapYesterday < MinGap + GapIncrement), If(LookingForGapDown,Cum(GapYesterday <= MinGap AND GapYesterday > MinGap - GapIncrement),0));

If(LookingForGapUp, Cum(If(GapYesterday >= MinGap AND GapYesterday < MinGap+ GapIncrement, If(OPEN > Ref(CLOSE,-1), +1,0),0)),

If(LookingForGapDown, Cum(If(GapYesterday <= MinGap AND GapYesterday >MinGap - GapIncrement, If(OPEN < Ref(CLOSE,-1), +1, 0),0)),0))/NumGapsthruYesterday*100;(Go Top)Gap Up System with Delayed Exit

Page 110: Metastock Formulae

Enter long GapUp()

Close long Ref(GapUp(),-5)

Initial equity 10000Positions Long and shortTrade price OpenTrade delay 1Entry commission 0%Exit commission 0%Interest rate 0%Margin req. 100%(Go Top)Gilligan's Island BuyA:CloseB:GapDown()<=Ref(LLV(L,40),-1) and C>=O and C>=((H-L)*.50)+LC:{entry}H+.125D:{stop}H+.125-1 Filter: GapDown()<=Ref(LLV(L,40),-1) and C>=O andC>=((H-L)*.50)+L (Go Top)Gilligan's Island SellA:CloseB:GapUp()>=Ref(HHV(H,40),-1) and C<=O and C<=((H-L)*.50)+LC:{entry}L-.125D:{stop}L-.125+1 Filter: GapUp()>=Ref(HHV(H,40),-1) and C<=O and C<=((H-L)*.50)+L(Go Top)Guppy MMA Exploration from Trading Tactics, part 2NOTE This EXPLORATION uses the results of several INDICATOR FORMULAS. You must create the INDICATORS first before running the exploration. Also, depending on your system you may have some problems importing this into early versions of Metastock 7.

Ref(C,-1)

Ref(C,-2)

Fml("mma 3/30") +Fml("mma 5/35") +Fml("mma 8/40") + Fml("mma 10/45")+Fml("mma 12/50")+Fml("mma 15/60")

Ref(Fml("mma 3/30") +Fml("mma 5/35") +Fml("mma 8/40") + Fml("mma 10/45")+Fml("mma 12/50")+Fml("mma 15/60"),-1)

Ref(Fml("mma 3/30") +Fml("mma 5/35") +Fml("mma 8/40") + Fml("mma 10/45")+Fml("mma 12/50")+Fml("mma 15/60"),-2)

When(colD,>,0) AND When(colE,<=,0)

Page 111: Metastock Formulae

(Go Top)Guppy MMA Indicators(Note this is not the same as the formula given in Trading Tactics. Daryl Guppy)

Try MMA (Multiple Moving Averages). The shorter ones are closer to theaction and the longer ones tell you about the trend. I use two indicatorslike this:

Name: MMA Long Term--------Mov(C,40,E);Mov(C,45,E);Mov(C,50,E);Mov(C,55,E);

Name: MMA Short Term--------Mov(C,5,E);Mov(C,8,E);Mov(C,11,E);Mov(C,14,E);

In the current market I like taking short momentum trades where the MMAShort is bouncing up off a slowly rising MMA Long Term. The exit at the topof the bubble is indicated by MMA Short turning down after a good separationfrom the underlying MMA Long.

from Jeff Lederman.

{Suggestion: Create a single TEMPLATE with all the above indicators, givingSHORT and LONG MMAs separate colours; e.g., RED for the SHORTs and BLUE forthe LONGs.}(Go Top)Guppy's MMA Long{long-term}Mov(C,30,E);Mov(C,35,E);Mov(C,40,E);Mov(C,45,E);Mov(C,50,E);Mov(C,60,E)(Go Top)Guppy's MMA Short{short-term}Mov(C,3,E);Mov(C,5,E);Mov(C,7,E);Mov(C,10,E);Mov(C,12,E);Mov(C,15,E);(Go Top)Guppy MMA Oscillator by Leon Wilson((Mov(CLOSE,3,E)+Mov(CLOSE,5,E)+Mov(CLOSE,8,E)+Mov(CLOSE,10,E)+Mov(CLOSE,12,E)+Mov(CLOSE,15,E))-(Mov(CLOSE,30,E)+Mov(CLOSE,35,E)+

Page 112: Metastock Formulae

Mov(CLOSE,40,E)+Mov(CLOSE,45,E)+Mov(CLOSE,50,E)+Mov(CLOSE,60,E)))*10;(Mov((Mov(CLOSE,3,E)+Mov(CLOSE,5,E)+Mov(CLOSE,8,E)+Mov(CLOSE,10,E)+Mov(CLOSE,12,E)+Mov(CLOSE,15,E))-(Mov(CLOSE,30,E)+Mov(CLOSE,35,E)+Mov(CLOSE,40,E)+Mov(CLOSE,45,E)+Mov(CLOSE,50,E)+Mov(CLOSE,60,E)),13,E))*10;0;(Go Top)Gap Identificationif(L,>,ref(H,-1),1, if(H,<,ref(L,-1),-1,0))(Go Top)GRIIF1 Identification OscillatorGRIIF1 Momentum Oscillatortsf(C,9)-ref(tsf(C,9),-1)

GRIIF2 Momentum Oscillator(ref(tsf(C,9),-1)-(ref(tsf(C,9),-2)))

GRIIF3 Momentum Oscillator(ref(tsf(C,9),-2)-(ref(tsf(C,9),-3)))

GRII4 Momentum Oscillator(tsf(C,9)-ref(tsf(C,9),-1))+((ref(tsf(C,9),-1)-ref(tsf(C,9),-2)))+((ref(tsf (C,9),-2)-(ref(tsf(C,9),-3))))(Go Top)Genesis of a Simple Futures Trading SystemIt’s quite easy to use MetaStock for Windows to duplicate the Genesis of a Simple Futures Trading system which is presented in the TASC May 97 issue's interview of Jay Kaeppel. In MetaStock for Windows, choose System Tester from the Tools menu. Click on the New button and enter in the following rules:Signal FormulasEnter LongCross( Mov( Close,9,S), Mov( Close,50,S)) And Close > Mov( Close,80,S)Close LongCross( Mov( Close,50,S), Mov( Close,9,S)) And Close > Mov( Close,80,S)Enter ShortCross( Mov( Close,50,S), Mov( Close,9,S)) And Close < Mov( Close,80,S)Close ShortCross( Mov( Close,9,S), Mov( Close,50,S)) And Close < Mov( Close,80,S)

When testing futures in MetaStock it’s best to use a "points only" test. To do this, choose Options from the System Tester dialog and then Points Only Test from the Testing page.

To use The Explorer to screen for futures generating a recent signal with this system, choose The Explorer from the Tools dialog and enter in the following rules:Column FormulasColumn A: Buy SignCross( Mov( Close,9,S), Mov( Close,50,S)) And Close > Mov( Close,80,S)Column B: Shrt SigCross( Mov( Close,50,S), Mov( Close,9,S)) And Close < Mov( Close,80,S)

Page 113: Metastock Formulae

Filter SourceFilter Enabled: YesFormula: colA = 1 OR colB = 1

Next choose Explore and The Explorer will search for and then display any futures, which have generated new signals.Higher Closes Shows stocks which have closed higher on successive days.•             CLOSE •             CLOSE -1 •             CLOSE -2 •             **When(colA,>,colB) AND When(colB,>,colC) (Go Top)Higher Volume ExplorationRequired: today's volume to be greater than the highest high over the past 21 days.

MetaStock Explorer filter: 

V>Ref(HHV(V,21),-1)(Go Top)Highest High Since Buy SignalAnyone know how to keep track of, for example, the highest high since a buy signal was triggered? I want to  add this into a system test that I am trying to run.

HighestSince(1, {Buy Signal-->}Cross(C,Mov(C,20,E)),H)(Go Top)High LowLen:=Input("Periods",1,400,89);(Mov((H - L + Abs(H - Ref(C,-1)) + Abs(L - Ref(C,-1)) ),len,E))/2(Go Top)High Volume Displays those where volume is above the 100 day moving average. The search returns 1 for Ok and 0 for not ok. •             VOLUME •             Mov(VOLUME,100,EXPONENTIAL) •             ((VOLUME - Mov(VOLUME,100,EXPONENTIAL)) •             /Mov(VOLUME,100,EXPONENTIAL)) * 100 •             When(colA,>,colB) (Go Top)Historical Trendlines and Breakouts, by D. Tsokakis, Oct2003x = Cum(1);per = 3;// CALIBRATE THE ZIG() SENSITIVITY s1=L;s11=H;pS = TroughBars( s1, per, 1 ) == 0;endt=SelectedValue(ValueWhen( pS, x ,1));startt=SelectedValue(ValueWhen( pS, x ,2));dtS =endt-startt;endS = SelectedValue((ValueWhen( pS, s1,1) ));startS = SelectedValue(( ValueWhen( pS, s1 ,2)));aS = (endS-startS)/dtS;bS = endS;

Page 114: Metastock Formulae

trendlineS = aS * ( x -endt ) + bS;//SUPPORT LINE pR = PeakBars( s11, per, 1 ) == 0;endt1= SelectedValue(ValueWhen( pR, x, 1));startt1=SelectedValue(ValueWhen( pR, x, 2 ));dtR =endt1-startt1;endR = SelectedValue(ValueWhen( pR, s11, 1 ) );startR = SelectedValue( ValueWhen( pR, s11, 2 ));aR = (endR-startR)/dtR;bR = endR;trendlineR = aR * ( x -endt1 ) + bR;//RESISTANCE LINE first=Min(startt,startt1);Last=Max(endt,endt1);d=10;// INCREASE d TO EXTEND THE LINESbullishbreakout=x>endt1 AND x<last+d AND Cross(C,trendlineR);bearishbreakout=x>endt AND x<last+d AND Cross(trendlineS,C);Plot(C,"Close",IIf(bullishbreakout,colorBrightGreen,IIf (bearishbreakout,colorRed,colorBlack)),64);Plot(IIf(x>=first -d AND x<=Last+d,trendlineS,- 1e10),"Support",colorBrightGreen,1);Plot(IIf(x>=first-d AND x<=Last+d,trendlineR,-1e10),"Resistance",colorRed,1);(Go Top)Hi Low Wave Dailyif(H,>,ref(hhv(H,100),-1),1,if(L,<,ref(llv(L,100),-1),-1,0))(Go Top)Historical Volatility DailyWith MetaStock™ for Windows, you can easily plot the 10 and 100 day Historical Volatility. First use the Indicator Builder to enter the following Custom indicators:Historical Volatility 10 dayStd(Log(C/Ref(C,-1)),10)*Sqrt(365)*100Historical Volatility 100 dayStd(Log(C/Ref(C,-1)),100)*Sqrt(365)*100Next plot both indicators in the same inner window. If the Scaling Options dialog appears, choose the Merge with Scale on Right (or left) option.I find it easier to see the Historical Volatility signals by combining the 10 and 100 day indicators into the following indicator.Historical Volatility IndicatorStd(Log(C/Ref(C,-1)),10)/Std(Log(C/Ref(C,-1)),100)Plot this indicator in MetaStock for Windows, then click your mouse button on the indicator. Choose Historical Volatility Indicator Properties and then choose the Horizontal Lines page. Add a horizontal line at .5 and then choose the OK button. You now know the 10 period volatility is less than half the 100 period volatility anytime this indicator crosses below its horizontal line.To test trading systems using this indicator it would he helpful to use the alert function along with a trend following indicator, such as the following example:Enter Long: Cross(CLOSE,Mov(C,20,E)) AND Alert(Fml("Historical Volatility Indicator")<=5,10)Enter Short: Cross(Mov(C,20,E),CLOSE) AND Alert(Fml("Historical Volatility Indicator")<=5,10)This system will enter a long trade when the close has crossed above its 20 day moving average, and when Historical Volatility Indicator was .5 or lower within the last 10 days. The system will sell when the close crosses below its 20 day moving average, and when Historical Volatility Indicator was .5 or lower within the last 10 days. Use any indicator you would like, this just provides a basic example of how to use this indicator in a system test. (Go Top)Historical Volatility Weekly

Page 115: Metastock Formulae

With MetaStock™ for Windows, you can easily plot the 10 and 100 week Historical Volatility. First use the Indicator Builder to enter the following Custom indicators:Historical Volatility 10 weekStd(Log(C/Ref(C,-1)),10)*Sqrt(365/7)*100Historical Volatility 100 weekStd(Log(C/Ref(C,-l)),100)*Sqrt(365/7)*100Next plot both indicators in the same inner window. If the Scaling Options dialog appears, choose the Merge with Scale on Right (or left) option.I find it easier to see the Historical Volatility signals by combining the 10 and 100 week indicators into the following indicator.Historical Volatility IndicatorStd(Log(C/Ref(C,-1)),10)/Std(Log(C/Ref(C,-1)),100)Plot this indicator in MetaStock for Windows, then click your mouse button on the indicator. Choose Historical Volatility Indicator Properties and then choose the Horizontal Lines page. Add a horizontal line at .5 and then choose the OK button. You now know the 10 period volatility is less than half the 100 period volatility anytime this indicator crosses below its horizontal line.To test trading systems using this indicator it would he helpful to use the alert function along with a trend following indicator, such as the following example:Enter Long: Cross(CLOSE,Mov(C,20,E)) AND Alert(FmI("Historical Volatility Indicator")<=5,10)Enter Short: Cross(Mov(C,20,E),CLOSE) AND Alert(Fml("Historical Volatility Indicator")<=5,10)This system will enter a long trade when the close has crossed above its 20 week moving average, and when Historical Volatility Indicator was .5 or lower within the last 10 weeks. The system will sell when the close crosses below its 20 week moving average, and when Historical Volatility Indicator was .5 or lower within the last 10 weeks. Use any indicator you would like, this just provides a basic example of how to use this indicator in a system test. Improved Chandeleir Exit

A few weeks ago when the Chandelier Exit was posted to on our board board, I asked if there was a faster version of it. On my (slowpoke) 200 Mhz PC at home, it took about 1 to 2 minutes to calculate the formula on a single stock.

Anyway, I did not hear of any feasible solutions. Last night, upon reading about the 25X25 system on this site , it struck me that the original Chandelier Exit (see below) had a whole bunch of PREV statements in it. I'm sure everyone knows where I'm going with this by now.

Anyway, here is how the code (at least this iteration) should be modified to speed up the calculation by a factor of 5. Basically, we move PREV into a variable vPREV prior to using it (so that it is only calculate once) in the long and short exits. Here is the code for the long exit. I tested it with the sample Entry Rule and receive the same results in 1/5th the time. Just modify the SHORT exit in the same way. Hope this helps everyone using it.

{DEFINE ENTRY PRICE, WITH EXIT BEING -- ENTRY PRICE AND NO TRADE BEING 0}{Move PREV into a variable to speed things up - DB 2/17/00}vPREV:=PREV;EntryPrice:= If(vPREV <= 0,{Trade entered today?}

Page 116: Metastock Formulae

If(LongEntry, CLOSE, 0),{Trade entered before today. Stopped today?}If(LOW <= vPREV - MoneyMgmtStop, -vPREV,If(LOW <= HighestSince(1,vPREV=0, HIGH) - 3 * ATR(10), -vPREV,If(LOW <= HighestSince(1,vPREV=0, CLOSE) - 2.5 * ATR(10), -vPREV,vPREV))));(Go Top)Instantaneous Trendline & Sinewave Indicator as described by John Ehlers

Here are a few formula's that I picked up from amailing from George Angell

LSS 5 day Osc X:=HHV(H,5)-Ref(O,-5);Y:=C-LLV(L,5);LSS:=100*(X+Y)/(HHV(H,5)-LLV(L,5))*2;LSS;

LLS 5 DAY Osc Diff from 3 day oscX:=HHV(H,5)-Ref(O,-5);Y:=C-LLV(L,5);LSS:=100*(X+Y)/(HHV(H,5)-LLV(L,5))*2;Diff:=LSS-Ref(LSS,-3);Diff;

LLS Strength Index(1 day)100*(Ref(C,-1)-Ref(L,-1))/(Ref(H,-1)-Ref(L,-1))

LLS Pivot Breakout Buy NumberX:=(H+L+C)/3;BBN:=2*X-L;BSN:=2*X-H;BBN;BSN;(Go Top)Instantaneous Trendline and Sinewave Indicatorby John Ehlers 

Here is the MetaStock 6.52 or higher formula code for the Instantaneous Trendline and Sinewave Indicator as described by John Ehlers in his article “At Last! A Trend-Friendly Oscillator”. To implement them the following formulas must be created in MetaStock’s Indicator Builder. Each formula must be created separately and must be named exactly as it appears below. Only the last two formulas are plotted, so you may wish to prevent the others from being displayed in the Indicator QuickList by unchecking the “Display In QuickList” option when creating the formula. 

To download and install the formulas use the following steps 

Download the MS65FORM.DTA file into a temp folder 

To Download the file for this formula click MS65FORM.DTA 

Page 117: Metastock Formulae

Use the following instructions to Import the MS65FORM.DTA file from the temp file it was downloaded to. 

1. Run MetaStock. 

2. Choose Indicator Builder from the Tools menu. 

3. Click the Organize button to launch the Formula Organizer Wizard. 

4. Follow the on-screen instructions. 

Name: H cycle count 1a 

value:= Fml("Hilbert cycle period - 1a"); 

If(Sum(value,6)>=360 AND Sum(value,5)<360 ,6,0) + 

If(Sum(value,7)>=360 AND Sum(value,6)<360 ,7,0) + 

If(Sum(value,8)>=360 AND Sum(value,7)<360 ,8,0) + 

If(Sum(value,9)>=360 AND Sum(value,8)<360 ,9,0) + 

If(Sum(value,10)>=360 AND Sum(value,9)<360 ,10,0) + 

If(Sum(value,11)>=360 AND Sum(value,10)<360 ,11,0) + 

If(Sum(value,12)>=360 AND Sum(value,11)<360 ,12,0) + 

If(Sum(value,13)>=360 AND Sum(value,12)<360 ,13,0) + 

If(Sum(value,14)>=360 AND Sum(value,13)<360 ,14,0) + 

If(Sum(value,15)>=360 AND Sum(value,14)<360 ,15,0) 

Name: H cycle count 2a 

value:= Fml("Hilbert cycle period - 1a"); 

If(Sum(value,16)>=360 AND Sum(value,15)<360 ,16,0) + 

If(Sum(value,17)>=360 AND Sum(value,16)<360 ,17,0) + 

If(Sum(value,18)>=360 AND Sum(value,17)<360 ,18,0) + 

If(Sum(value,19)>=360 AND Sum(value,18)<360 ,19,0) + 

Page 118: Metastock Formulae

If(Sum(value,20)>=360 AND Sum(value,19)<360 ,20,0) + 

If(Sum(value,21)>=360 AND Sum(value,20)<360 ,21,0) + 

If(Sum(value,22)>=360 AND Sum(value,21)<360 ,22,0) + 

If(Sum(value,23)>=360 AND Sum(value,22)<360 ,23,0) + 

If(Sum(value,24)>=360 AND Sum(value,23)<360 ,24,0) + 

If(Sum(value,25)>=360 AND Sum(value,24)<360 ,25,0) 

Name: H cycle count 3a 

value:= Fml("Hilbert cycle period - 1a"); 

If(Sum(value,26)>=360 AND Sum(value,25)<360 ,26,0) + 

If(Sum(value,27)>=360 AND Sum(value,26)<360 ,27,0) + 

If(Sum(value,28)>=360 AND Sum(value,27)<360 ,28,0) + 

If(Sum(value,29)>=360 AND Sum(value,28)<360 ,29,0) + 

If(Sum(value,30)>=360 AND Sum(value,29)<360 ,30,0) + 

If(Sum(value,31)>=360 AND Sum(value,30)<360 ,31,0) + 

If(Sum(value,32)>=360 AND Sum(value,31)<360 ,32,0) + 

If(Sum(value,33)>=360 AND Sum(value,32)<360 ,33,0) + 

If(Sum(value,34)>=360 AND Sum(value,33)<360 ,34,0) + 

If(Sum(value,35)>=360 AND Sum(value,34)<360 ,35,0) 

Name: H ip sum 1 

pd:=Int(Fml("Hilbert cycle period - final-a")); 

pr:=(H+L)/2; 

(Cos(0)*pr)+ 

(Cos(360*(1/pd))*Ref(pr,-1))+ 

(Cos(360*(2/pd))*Ref(pr,-2))+ 

Page 119: Metastock Formulae

(Cos(360*(3/pd))*Ref(pr,-3))+ 

(Cos(360*(4/pd))*Ref(pr,-4))+ 

(Cos(360*(5/pd))*Ref(pr,-5))+ 

If(pd>6, Cos(360*(6/pd))*Ref(pr,-6), 0)+ 

If(pd>7, Cos(360*(7/pd))*Ref(pr,-7), 0)+ 

If(pd>8, Cos(360*(8/pd))*Ref(pr,-8), 0)+ 

If(pd>9, Cos(360*(9/pd))*Ref(pr,-9), 0)+ 

If(pd>10, Cos(360*(10/pd))*Ref(pr,-10), 0)+ 

If(pd>11, Cos(360*(11/pd))*Ref(pr,-11), 0)+ 

If(pd>12, Cos(360*(12/pd))*Ref(pr,-12), 0)+ 

If(pd>13, Cos(360*(13/pd))*Ref(pr,-13), 0)+ 

If(pd>14, Cos(360*(14/pd))*Ref(pr,-14), 0) 

Name: H ip sum 2 

pd:=Int(Fml("Hilbert cycle period - final-a")); 

pr:=(H+L)/2; 

If(pd>15, Cos(360*(15/pd))*Ref(pr,-15), 0)+ 

If(pd>16, Cos(360*(16/pd))*Ref(pr,-16), 0)+ 

If(pd>17, Cos(360*(17/pd))*Ref(pr,-17), 0)+ 

If(pd>18, Cos(360*(18/pd))*Ref(pr,-18), 0)+ 

If(pd>19, Cos(360*(19/pd))*Ref(pr,-19), 0)+ 

If(pd>20, Cos(360*(20/pd))*Ref(pr,-20), 0)+ 

If(pd>21, Cos(360*(21/pd))*Ref(pr,-21), 0)+ 

If(pd>22, Cos(360*(22/pd))*Ref(pr,-22), 0)+ 

If(pd>23, Cos(360*(23/pd))*Ref(pr,-23), 0)+ 

Page 120: Metastock Formulae

If(pd>24, Cos(360*(24/pd))*Ref(pr,-24), 0) 

Name: H ip sum 3 

pd:=Int(Fml("Hilbert cycle period - final-a")); 

pr:=(H+L)/2; 

If(pd>25, Cos(360*(25/pd))*Ref(pr,-25), 0)+ 

If(pd>26, Cos(360*(26/pd))*Ref(pr,-26), 0)+ 

If(pd>27, Cos(360*(27/pd))*Ref(pr,-27), 0)+ 

If(pd>28, Cos(360*(28/pd))*Ref(pr,-28), 0)+ 

If(pd>29, Cos(360*(29/pd))*Ref(pr,-29), 0)+ 

If(pd>30, Cos(360*(30/pd))*Ref(pr,-30), 0)+ 

If(pd>31, Cos(360*(31/pd))*Ref(pr,-31), 0)+ 

If(pd>32, Cos(360*(32/pd))*Ref(pr,-32), 0)+ 

If(pd>33, Cos(360*(33/pd))*Ref(pr,-33), 0)+ 

If(pd>34, Cos(360*(34/pd))*Ref(pr,-34), 0) 

Name: H rp sum 1 

pd:=Int(Fml("Hilbert cycle period - final-a")); 

pr:=(H+L)/2; 

(Sin(0)*pr)+ 

(Sin(360*(1/pd))*Ref(pr,-1))+ 

(Sin(360*(2/pd))*Ref(pr,-2))+ 

(Sin(360*(3/pd))*Ref(pr,-3))+ 

(Sin(360*(4/pd))*Ref(pr,-4))+ 

(Sin(360*(5/pd))*Ref(pr,-5))+ 

If(pd>6, Sin(360*(6/pd))*Ref(pr,-6), 0)+ 

Page 121: Metastock Formulae

If(pd>7, Sin(360*(7/pd))*Ref(pr,-7), 0)+ 

If(pd>8, Sin(360*(8/pd))*Ref(pr,-8), 0)+ 

If(pd>9, Sin(360*(9/pd))*Ref(pr,-9), 0)+ 

If(pd>10, Sin(360*(10/pd))*Ref(pr,-10), 0)+ 

If(pd>11, Sin(360*(11/pd))*Ref(pr,-11), 0)+ 

If(pd>12, Sin(360*(12/pd))*Ref(pr,-12), 0)+ 

If(pd>13, Sin(360*(13/pd))*Ref(pr,-13), 0)+ 

If(pd>14, Sin(360*(14/pd))*Ref(pr,-14), 0) 

Name: H rp sum 2 

pd:=Int(Fml("Hilbert cycle period - final-a")); 

pr:=(H+L)/2; 

If(pd>15, Sin(360*(15/pd))*Ref(pr,-15), 0)+ 

If(pd>16, Sin(360*(16/pd))*Ref(pr,-16), 0)+ 

If(pd>17, Sin(360*(17/pd))*Ref(pr,-17), 0)+ 

If(pd>18, Sin(360*(18/pd))*Ref(pr,-18), 0)+ 

If(pd>19, Sin(360*(19/pd))*Ref(pr,-19), 0)+ 

If(pd>20, Sin(360*(20/pd))*Ref(pr,-20), 0)+ 

If(pd>21, Sin(360*(21/pd))*Ref(pr,-21), 0)+ 

If(pd>22, Sin(360*(22/pd))*Ref(pr,-22), 0)+ 

If(pd>23, Sin(360*(23/pd))*Ref(pr,-23), 0)+ 

If(pd>24, Sin(360*(24/pd))*Ref(pr,-24), 0) 

Name: H rp sum 3 

pd:=Int(Fml("Hilbert cycle period - final-a")); 

Page 122: Metastock Formulae

pr:=(H+L)/2; 

If(pd>25, Sin(360*(25/pd))*Ref(pr,-25), 0)+ 

If(pd>26, Sin(360*(26/pd))*Ref(pr,-26), 0)+ 

If(pd>27, Sin(360*(27/pd))*Ref(pr,-27), 0)+ 

If(pd>28, Sin(360*(28/pd))*Ref(pr,-28), 0)+ 

If(pd>29, Sin(360*(29/pd))*Ref(pr,-29), 0)+ 

If(pd>30, Sin(360*(30/pd))*Ref(pr,-30), 0)+ 

If(pd>31, Sin(360*(31/pd))*Ref(pr,-31), 0)+ 

If(pd>32, Sin(360*(32/pd))*Ref(pr,-32), 0)+ 

If(pd>33, Sin(360*(33/pd))*Ref(pr,-33), 0)+ 

If(pd>34, Sin(360*(34/pd))*Ref(pr,-34), 0) 

Name: H TL sum 1 

value:=Int(Fml("Hilbert cycle period - final-a")); 

If(value=6, Mov((H+L)/2,8,S),0) + 

If(value=7, Mov((H+L)/2,9,S),0) + 

If(value=8, Mov((H+L)/2,10,S),0) + 

If(value=9, Mov((H+L)/2,11,S),0) + 

If(value=10, Mov((H+L)/2,12,S),0) + 

If(value=11, Mov((H+L)/2,13,S),0) + 

If(value=12, Mov((H+L)/2,14,S),0) + 

If(value=13, Mov((H+L)/2,15,S),0) + 

If(value=14, Mov((H+L)/2,16,S),0) + 

If(value=15, Mov((H+L)/2,17,S),0) 

Name: H TL sum 2 

Page 123: Metastock Formulae

value:=Int(Fml("Hilbert cycle period - final-a")); 

If(value=16, Mov((H+L)/2,18,S),0) + 

If(value=17, Mov((H+L)/2,19,S),0) + 

If(value=18, Mov((H+L)/2,20,S),0) + 

If(value=19, Mov((H+L)/2,21,S),0) + 

If(value=20, Mov((H+L)/2,22,S),0) + 

If(value=21, Mov((H+L)/2,23,S),0) + 

If(value=22, Mov((H+L)/2,24,S),0) + 

If(value=23, Mov((H+L)/2,25,S),0) + 

If(value=24, Mov((H+L)/2,26,S),0) + 

If(value=25, Mov((H+L)/2,27,S),0) 

Name: H TL sum 3 

value:=Int(Fml("Hilbert cycle period - final-a")); 

If(value=26, Mov((H+L)/2,28,S),0) + 

If(value=27, Mov((H+L)/2,29,S),0) + 

If(value=28, Mov((H+L)/2,30,S),0) + 

If(value=29, Mov((H+L)/2,31,S),0) + 

If(value=30, Mov((H+L)/2,32,S),0) + 

If(value=31, Mov((H+L)/2,33,S),0) + 

If(value=32, Mov((H+L)/2,34,S),0) + 

If(value=33, Mov((H+L)/2,35,S),0) + 

If(value=34, Mov((H+L)/2,36,S),0) + 

If(value=35, Mov((H+L)/2,37,S),0) 

Page 124: Metastock Formulae

Name: Hilbert cycle period - 1a 

value1:=((H+L)/2) - Ref(((H+L)/2),-6); 

value2:= Ref(value1,-3); 

value3:=0.75*(value1-Ref(value1,-6)) + 0.25*(Ref(value1,-2)-Ref(value1,-4)); 

inphase:= 0.33 * value2 + (0.67 * PREV); 

quad:= 0.2 * value3 + ( 0.8 * PREV); 

p1:=Atan(Abs(quad+Ref(quad,-1)),Abs(inphase+Ref(inphase,-1))); 

phase:=If(inphase<0 AND quad>0, 180-p1, 

If(inphase<0 AND quad<0, 180+p1, 

If(inphase>0 AND quad<0, 360-p1,p1))); 

dp:=If(Ref(phase,-1)<90 AND phase>270, 360+Ref(phase,-1)-phase,Ref(phase,-1)-phase); 

dp2:=If(dp < 1, 1, 

If(dp > 60, 60, dp)); 

dp2 

Name: Hilbert cycle period - final-a 

c1:= Fml( "H cycle count 1a") + Fml( "H cycle count 2a") + Fml( "H cycle count 3a") ; 

c2:=If(c1=0,PREV,c1); 

(0.25*c2) + (0.75*PREV) 

Name: Instantaneous Trend Line 

pr:=(H+L)/2; 

Page 125: Metastock Formulae

(Fml("H TL sum 1") + Fml("H TL sum 2") + Fml("H TL sum 3")); 

0.33*(pr + (0.5*(pr-Ref(pr,-3)))) + (0.67*PREV) 

Name: Sinewave Indicator 

pd:=Int(Fml("Hilbert cycle period - final-a")); 

cp:=Fml("Hilbert cycle period - final-a"); 

ip:=Fml( "H ip sum 1") + Fml( "H ip sum 2") + 

Fml( "H ip sum 3"); 

rp:=Fml( "H rp sum 1") + Fml( "H rp sum 2") + 

Fml( "H rp sum 3"); 

dc1:=If(Abs(ip)>0.001, Atan(rp/ip,1), 90*If(rp>=0,1,-1)); 

dc2:=If(pd<30 AND cp>0,dc1+((6.818/cp - 0.227)*360),dc1); 

dc3:=If(ip<0, dc2+270, dc2+90); 

dcp:=If(dc3>315, dc3-360, dc3); 

Sin(dcp); 

Sin(dcp+45) (Go Top)INSYNC Index

The formula from Equis: Insync Index (rev. 01/06/97)

The interpretation for the following formulas came from the article "The Insync Index", by Norm North, in Technical Analysis of Stocks & Commodities Jan 1995. 

All of these formulas are necessary for the last one, Insync Index to run properly. They are listed in the order in which they should be copied and pasted into the MetaStock Formula Builder

BOLInSLB Mov( C ,20 ,S ) - 2 * ( Std( C ,20 ) )

BOLInSUB Mov( C ,20 ,S ) + 2 * ( Std( C ,20 ) )

Page 126: Metastock Formulae

BOLInS2 ( C - Fml( "BOLInSLB" ) ) / ( Fml( "BOLInSUB" ) - Fml( "BOLInSLB" ) )

BOLInSLL If( Fml( "BOLInS2" ) ,< , .05 ,-5 ,If( Fml( "BOLInS2" ) ,> ,.95 ,5 ,0 ) )

CCIInS If( CCI(14 ) ,> ,100 ,5 ,If ( CCI(14 ) ,< ,-100 ,-5 ,0 ) )

EMVInS2 EMV(10 ,S ) - Mov( EMV(10 ,S) ,10 ,S )

EMVInSB If( Fml( "EMVInS2" ) ,< ,0 ,If( Mov( EMV(10 ,S ) ,10 ,S ) ,< ,0 ,-5 ,0 ) ,0 )

EMVInSS If( Fml( "EMVInS2" ) ,> ,0 ,If( Mov( EMV(10 ,S ) ,10 ,S ) ,> ,0 ,5 ,0 ) ,0 )

MACDInS2 MACD( ) - Mov( MACD( ) ,10 ,S )

MACDinSB If( Fml( "MACDInS2" ) ,< ,0 ,If( Mov( MACD( ) ,10 ,S ) ,< ,0 ,-5 ,0 ) ,0 )

MACDInSS If( Fml( "MACDInS2" ) ,> ,0 ,If( Mov( MACD( ) ,10 ,S) ,> ,0 ,5 ,0 ) ,0 )

MFIInS If( MFI( 20 ) ,> ,80 ,5 , If( MFI( 20 ) ,< ,20 ,-5 ,0 ) )

PDOInS2 DPO( 18 ) - Mov( DPO( 18 ) ,10 ,S )

PDOInSB If( Fml( "PDOInS2" ) ,< ,0 ,If( Mov( DPO( 18 ) ,10 , S) ,< ,0 ,-5 ,0 ) ,0 )

PDOInSS If( Fml( "PDOInS2" ) ,> ,0 ,If( Mov( DPO ( 18 ) ,10 ,S) ,> ,0 ,5 ,0 ) ,0 )

ROCInS2 ROC( C ,10 ,$ ) - Mov( ROC( C ,10 ,$ ) ,10 ,S )

ROCInSB If( Fml( "ROCInS2" ) ,< ,0 ,If( Mov( ROC( C ,10 ,$ ) ,10 ,S ) ,< ,0 ,-5 ,0 ) ,0 )

ROCInSS Index If( Fml( "ROCInS2" ) ,> ,0 ,If( Mov( ROC( C ,10 ,$ ) ,10 ,S ) ,> ,0 ,5 ,0 ) ,0 )

RSIInS If( RSI(14 ) ,> ,70 ,5 ,If( RSI(14 ), < ,30 ,-5 ,0 ) )

Page 127: Metastock Formulae

STO%dInS If( Stoch(14 ,3 ) ,> ,80 ,5 ,If( Stoch(14 ,3 ) ,< ,20 ,-5 ,0 ) )

STO%kInS If( Stoch(14 ,1) ,> ,80 ,5 ,If( Stoch(14 ,1 ) ,< ,20 ,-5 ,0 ) )

InSync Index 50 + Fml( "CCIInS" ) + Fml( "BOLInSLL" ) + Fml( "RSIInS" ) + Fml( "STO%kInS " ) +Fml( "STO%dInS" ) + Fml( "MFIInS" ) + Fml( "EMVInSB" ) + Fml( "EMVInSS" ) + Fml( "ROCInSS" ) + Fml( "ROCInSB" ) + Ref (Fml( "PDOInSS" ) ,-10 ) + Ref (Fml( "PDOInSB" ) ,-10 ) + Fml( "MACDInS S" ) + Fml( "MACDInSB" )

These formulas were provided by Barry Millman. All questions should be addressed to him at [email protected].

Mr. Millman wrote these formulas using many Custom Formula slots for clarity and ease of understanding. Please note that the final formula `InSync Index' requires all of the previous formulas to be correct.(Go Top)Investor Preference Index This indicator was discussed in the December 1997 Technical Analysis of Stocks & Commodities magazine, page 19. The article was written by Cyril V. Smith Jr."This indicator, a long - term stock market investment tool, compares the performance of the S&P 500 to the New York Stock Exchange index to measure sentiment. The theory is that investors have a preference for certain types of investments, blue chips versus mid-cap, during phases of a bull market."To plot this in MetaStock for Windows, follow these instructions. When complete, if you save this as a chart, you will simply need to load the chart and it will recalculate using the newest data. •             Open a chart of the S&P 500. •             Open a chart of the New York Stock Exchange index. •             Drag the S&P 500 price plot into the NYSE chart. •             Drop the indicator listed below on the plot of the S&P 500. The plot will turn a different color when you are pointing at it. •             The resultant plot is the Investor Preference Index. Formula: Investor Preference Index:(Sum(Mov(ROC(Log(C),24,%)-ROC(Log(P),24,%),15,S)-Mov(ROC(Log(C),24,%)-ROC(Log(P),24,%),38,S),54)+1)*100System test:Enter LongC=HHV(C,26)Close LongFml("Investor Preference Index")<97.6 AND ROC(Fml("Investor Preference Index"),2,$)<=(-.04) Jack Landis' Weighted Stochastic(shortened to Landis)

((Stoch(8,3)*.05)+(Stoch(89,21)*.43)+(Stoch(55,13)*.26)+(Stoch(34,8)*.16)+(Stoch(21,5)*.10)) Landis 3 week s m a

Page 128: Metastock Formulae

mov(((Stoch(8,3)*.05)+(Stoch(89,21)*.43)+(Stoch(55,13)*.26)+(Stoch(34,8)*.16)+(Stoch(21,5)*.10)),15,s)landis multiple time periodsformula #1mov(((Stoch(8,3)*.05)+(Stoch(89,21)*.43)+(Stoch(55,13)*.26)+(Stoch(34,8)*.16)+(Stoch(21,5)*.10)),15,s)formula #2mov(((Stoch(8,3)*.05)+(Stoch(89,21)*.43)+(Stoch(55,13)*.26)+(Stoch(34,8)*.16)+(Stoch(21,5)*.10)),10,s)formula #3mov(((Stoch(8,3)*.05)+(Stoch(89,21)*.43)+(Stoch(55,13)*.26)+(Stoch(34,8)*.16)+(Stoch(21,5)*.10)),5,s)formula #4mov(((Stoch(8,3)*.05)+(Stoch(89,21)*.43)+(Stoch(55,13)*.26)+(Stoch(34,8)*.16)+(Stoch(21,5)*.10)),2,s)multiple slopes of landisformula #1slope(mov(((Stoch(8,3)*.05)+(Stoch(89,21)*.43)+(Stoch(55,13)*.26)+(Stoch(34,8)*.16)+(Stoch(21,5)*.10)),15,s),2)formula #2slope(mov(((Stoch(8,3)*.05)+(Stoch(89,21)*.43)+(Stoch(55,13)*.26)+(Stoch(34,8)*.16)+(Stoch(21,5)*.10)),10,s),2)formula #3slope(mov(((Stoch(8,3)*.05)+(Stoch(89,21)*.43)+(Stoch(55,13)*.26)+(Stoch(34,8)*.16)+(Stoch(21,5)*.10)),5,s),2)(Go Top)Jeff Cooper 180's Buy

A:CloseB:{MA}Ref(C,-1)<Mov(C,10,S) AND Ref(C,-1)<Mov(C,50,S)AND C>Mov(c,10,S) AND C>Mov(C,50,S)C:{Breakout}Ref(C,-1)<=((Ref(H,-1)-Ref(L,-1))*.25)+Ref(L,-1)AND C>=H-(H-L)*.25D:{Entry}HHV(H,2)+.125E:{Stop}HHV(H,2)+.125-1(Go Top)Jeff Cooper 180's Sell

A:CloseB:{MA}Ref(C,-1)>Mov(C,10,S) AND Ref(C,-1)>Mov(C,50,S)AND C<Mov(c,10,S) AND C<Mov(C,50,S)C:{Breakout}Ref(C,-1)>=((Ref(H,-1)-Ref(L,-1))*.25)+Ref(H,-1)AND C<=L+((H-L)*.25)D:{Entry}LLV(L,2)-.125E:{Stop}LLV(L,2)-.125+1(Go Top)Jeff Cooper Lizards Buy

A:closeB:{Signal}O>H-(H-L)*.25 AND C>H-(H-L)*.25 ANDL<Ref(LLV(L,10),-1)

Page 129: Metastock Formulae

C:{entry}H+.125D:{Stop}H+1.125Filter:O>H-(H-L)*.25 AND C>H-(H-L)*.25 ANDL<Ref(LLV(L,10),-1)(Go Top)Jeff Cooper Lizards Sell

A:closeB:{Signal}O<L+(H-L)*.25 AND C<L+(H-L)*.25 ANDH>Ref(HHV(H,10),-1)C:{entry}L-.125D:{Stop}L-1.125Filter:O<L+(H-L)*.25 AND C<L+(H-L)*.25 ANDH>Ref(HHV(H,10),-1)(Go Top)Jeff Cooper Slingshots Buy

A:CloseB:{Range breakout}Ref(H,-1)>=Ref(HHV(H,40),-1)AND L<Ref(L,-1)-.125C:{entry}If(O>Ref(H,-1)+.125,O,0)D:{Stop}If(If(O>Ref(H,-1)+.125,O,0)=O,Ref(O,-1)-2,0)Filter:Ref(H,-1)>=Ref(HHV(H,40),-1)AND L<Ref(L,-1)-.125(Go Top)Jeff Cooper Slingshots Sell

A:CloseB:{Range breakout}Ref(L,-1)<=Ref(LLV(L,40),-1)AND H>Ref(H,-1)+.125C:{entry}If(O<Ref(L,-1)-.125,O,0)D:{Stop}If(If(O<Ref(L,-1)-.125,O,0),Ref(O,-1)+2,0)Filter:Ref(L,-1)<=Ref(LLV(L,40),-1)AND H>Ref(H,-1)+.125(Go Top)Jeff Cooper Whoops Sell

A:closeB:C<Mov(C,10,S) AND C<Mov(C,50,S) AND O>Ref(C,-1)+.25C:{Entry}Ref(C,-1)-.125D:{Stop}Ref(C,-1)-.125+1Filter:C<Mov(C,10,S) AND C<Mov(C,50,S) AND O>Ref(C,-1)+.25

A:CloseB:ADX(14){The higher the better}C: PDI(14)>MDI(14)D:If(L<Ref(L,-1) and Ref(L,-1)<Ref(L,-2) andRef(L,-2)<Ref(L,-3),1,0)E:{Entry}HHV(H,3)+.125

Page 130: Metastock Formulae

F:{stop}LLV(L,3)Filter:ColB>30 and ColC and ColD=1 (Go Top)Jim's Uptrender As the name implies this metastock exploration finds stocks with a recent uptrend.{Col A } CLOSE{Col B} V{Filter} x:=HHV(H,60);y:=MACD();C > Ref(x,-1)AND Ref(C,-1) < Ref(x,-1)AND H = xAND y > 0AND y > Ref(y,-1)AND C > Mov(C,13,W)AND C > Mov(C,34,W)AND V*C > 250000(Go Top)John Hunt's Exploration for Metastock

Place in FILTER section of Exploration.No other information need be entered in the Exploration columns.}

When(C-Mov(C,25,S),>,0) ANDWhen(Ref(C-Mov(C,25,S),-1),<=,0) ANDWhen(HHV(Mov(Ref(C-Mov(C,25,S),-1),3,S),19),<=,0) ANDWhen(C,<,0.8*HHV(C,260)) 

{This means: when today's (close - moving average) > 0, when yesterday's (close - moving average) <= 0, when highest value of 3 day moving average of yesterday's (close - moving average) over past 19 days <= 0, and finally, when today's close < 80% of highest value of all closes for past year. (The third test is to eliminate past false breakouts.)}KA Money Flow System by Karim AnwarThis system is based on Money Flow Index . It is a developing system and will like input from other readers to improve it> Thanks for any suggestions to improve it.It tries to buy when MFI is starting to rally from an oversold state and sells short when MFI starts falling from overbought state.Can any body help to form an exploration to find stocks for whom this system will work best ?EnterLong: Cross(MFI(23), (LLV(MFI(23),23) + opt1)) AND MFI(23)<50closeLong: MFI(23)=LLV(MFI(23),23)longOptimisationFullDetails: OPT 1 = Min. 5 Max. 20 Step: 1enterShort: Cross( (HHV(MFI(23),23) - opt1), MFI(23))AND MFI(23)>50closeShort: MFI(23)=HHV(MFI(23),23)ShortOptimisationFullDetails: OPT 1 = Min. 5 Max. 20 Step: 1(Go Top)Karnish Bollinger Band Histogram Trading System{EnterLong and Close Short}BBHistogram:= (CLOSE + 2*Std(CLOSE,20) -Mov(CLOSE,20,SIMPLE)) / (4*(Std(CLOSE,20)))

Page 131: Metastock Formulae

* 100;Cross(0,BBHistogram)

{Enter Short and Close Long}BBHistogram:= (CLOSE + 2*Std(CLOSE,20) -Mov(CLOSE,20,SIMPLE)) / (4*(Std(CLOSE,20)))* 100;Cross(BBHistogram,100)

Here's a "freebie". BB Histogram: ((C+2*Std(C,20)-Mov(C,20,S))/(4*(Std(C,20)))*100)

Sell the opening days after the BB Histogram penetrates 100 and buy when it penetrates zero. Add to positions when the BB Histo leaves "above 100" or "below zero" and then "repenetrates" the trigger levels.

I believe this approach has recorded 11 straight S&P winners, with 700+ points. "But Steve, this system must not be working any more because it is losing the last trade you put on". Right! 

My only disclaimer is that I guarantee that I will sell software, charting services and anything else that I can think of to make a "buck" in 2000. In the meantime, suck all the free stuff from me you can copy. And most of all, please note, the biggest antagonists on the list provide absolutely "zero" when it comes to helping you trade. Seek the answers from "within" (with some shortcutting help from people that are willing to share). (Go Top)Kauffman's Adaptive RSIMetaStock formula derived from calculations in Trading Systems and Methods, Third Edition, by Perry J. Kaufman. This formula adapts the standard RSI to a smoothing constant.

Period := Input("Period",1,10000,20);

sc := Abs(RSI(Period)/100 - .5)*2;

If(Cum(1) <= Period, CLOSE,PREV + sc*(CLOSE - PREV))(Go Top)Krausz's Gann Swing HiLow Activator I was only able to implement Krausz's Gann Swing HiLow Activator in Metastock,because it's simply the average of the last three bars High (stop for short position orlong entry) or Low (stop for long position or short entry) plotted one period forward:

Ref(Mov(L,3,S),-1) or Ref(Mov(H,3,S),-1)(Go Top)Kurtosis IndicatorThe Kurtosis is a market sentiment indicator. The MetaStock formula for the Kurtosis is as follows:Mov(Mov(Mo(3)-Ref(Mo(3),-1),66,E),3,S)

Page 132: Metastock Formulae

The Kurtosis is constructed from three different parts. The Kurtosis, the Fast Kurtosis(FK), and the Fast/Slow Kurtosis(FSK).The Kurtosis(K) portion of this calculation is mo(3)-ref(mo(3),-1). Which is today's Kurtosis - yesterday's Kurtosis.The Fast Kurtosis(FK) is mov(K,66,E) mov(mo(3)-ref(mo(3),-1,66,E). Which is the Kurtosis smoothed with a 66 period exponential moving average.The Fast/Slow Kurtosis(FSK) is the complete formula mov(mov(mo(3)-ref(mo(3),-1),66,E),3,S). Which is the FK smoothed with 3 period simple moving average.

**You may want to experiment with different time periods to optimize the results. For example, to calculate a 4 period Kurtosis, a 50 period FK and a 10 period FSK, use the following formula:mov(mov(mo(4)-ref(mo(4),-1),50,E),10,S)(Go Top)Keltner ChannelsKeltner Channels are explained in the book The New Commodity Trading System and Methods by Perry Kaufman and were first introduced in the book How To Make Money in Commodities, by Chester W. Keltner. The syntax for the formulas in MetaStock are:Formula #1Name: The 10-Day Moving AverageFormula: MOV( (H+L+C)/3, 10, Simple )

Formula #2Name: Upper Keltner BandFormula: MOV((H+L+C)/3,10,S) + MOV((H-L),10,S)

Formula #3Name: Lower Keltner BandFormula: MOV((H+L+C)/3,10,S) - MOV((H-L),10,S)

** All three formulas must be plotted.

In the System Tester, a BUY or a COVER SHORT Signal would occur whenC > Upper Keltner Bandand a SELL or a SELL SHORT Signal would occur whenC < Lower Keltner Band** Thus, the system is always either long or short.

For interpretation refer to either of the two books listed above.(Go Top)Linear Regression Slope{The basic "programming" in MetaStock of the LRS-ROC indicator is like this: NIO is the _basic_ number of points taken to calculate the ROCs. The four  ROCs _per day_ used for interpolation are:}

rll:=ROC(O,nio-1,%)/(nio-1);rl:=ROC(O,nio,%)/nio;rh:=ROC(O,nio+1,%)/(nio+1);rhh:=ROC(O,nio+2,%)/(nio+2);

Page 133: Metastock Formulae

{Now, interpolation is done at a point XIO (0<=xio<=1), i.e., between the points NIO and NIO+1, using a simple interpolation formula weighting with the _distances_ of the four ROCs from the interpolation point XIO:}

rit:=(rll/(1+xio)+rl/(xio+.0001)+rh/(1-xio)+rhh/(2-xio))/(1/(1+xio)+1/(xio+.0001)+1/(1-xio)+1/(2-xio));

{Then the LinearRegressionSlope is taken _twice_ (for numerical reasons) from the interpolated ROC, using the basic number of points; i.e., NIO. That is where we get our LRS-ROC indicator, named RO here:}

ro:=LinRegSlope(LinRegSlope(rit,nio),nio);

{NIO+XIO together represent the _real_ (not integer!) number of points or days, the LRS-ROC indicator is calculated for, e.g. 4.57 days. Unfortunately, MetaStock is not able to use _one_ real number (e.g., 4.57) as input to be splitted into NIO and XIO and to be used in the formulas above. So NIO and XIO have to be provided separately, because of the restrictions in MetaStock, and both are subjected to some "optimization" in accordance to the historical prices.

To be clear: This LRS-ROC indicator triggers _only the timing_ for entering/closing a position, using an appropriate criterion. Additional (also ROC-based) criterions are used to stay out/in during extreme bearish/bullish situations.

Additionally: This "TA" is only one basic element of my option trading system, primarily to catch some "special reality effects" that cannot be modeled by example-based know-how recycling from historical data. But probably this TA system may also be used as a "stand-alone" system.(Go Top)Linking Metastock Updates to Excel FilesAs I understand your desire, it's to take data from a MetaStock file and use it to update an Excel file. The way to have this update-process automatically done requires for you to have an OLE-link capable object (chart or indicator) to be present. In MetaStock this can be easy established by creating separate Charts for each security. Follow and execute these steps below. Here I am using a single daily closing price as object, for a simplified use of the Win 95's OLE program.1. First make a new indicator Close Only :•             Start MetaStock and click the button for the Indicator Builder •             In Indicator Builder create a custom indicator named "Close Only" (without the quotations) and in the formula field type CLOSE and click OK 2. To create a Close Only Template :•             Start the Win95-Explorer and create a new folder named OLE(which folder will hold your Template and Charts used for this OLE) below your working folder(that is holding your metastock files dat/dop/master/emaster etc.) •             Then switch back to MetaStock •             Open the by you desired security using Smart Charts as type •             Delete all other charts and all inner windows and all indicators that are open in the current screen(=layout) except for the base securities' Price indicator(the bar, line, sticks) 

Page 134: Metastock Formulae

•             Drag the newly created Close Only indicator down from the IB-Quick List (from the small window in the middle at the top) and release it to have the newly created indicator displayed in its own inner-window •             Now SAVE AS the current screen (with Template as the file type) using the CloseOnly name(without a space) as the Template's name("CloseOnly.mwt") •             Close down MetaStock + Win95-Explorer 3. To create the separate Charts used for OLE :•             Start MetaStock (fresh again) and click New|Chart or click Open •             Click Apply Template (this action is always required prior to selecting a security) and scroll to the OLE folder to apply the newly created CloseOnly Template •             On Opening of this New Chart the above mentioned Template's layout containing the Price and the Close Only indicators will be displayed •             Now SAVE AS the current screen (with Chart as the file type) using the security's name as the Charts' pointer name("SecurityX.mwc") to the newly created OLE-folder •             Close Metastock 4. To create the OLE link from Metastock to an Excel spreadsheet :•             Start MetaStock (fresh again) and click Open •             Open the required security in the newly created OLE-folder •             Right-click to Select and click Copy to have the security's CloseOnly indicator copied to the Clipboard •             Start Excel and check that the first cell at the top-left is been selected(=black line bordered rectangle) •             Select the required cells by placing the mouse-pointer at the right corner of the selected rectangle and click and press down the Left-mouse button and whilst at the same time holding the mouse-button down, drag down this first column(A) and release button until you have reached record row #999 and all of the selected cells will be colered black(Note that this selection made, has to be done in one(1) straight firm move down the column, eg a one single selection has been made) •             Now let the mouse-pointer float on this blackened selection and Right-click to choose Paste Special •             In the Paste Special's Dialog Window click the Paste Link radio-button and choose CSV as file-type •             With plenty of system memory on board it will not take that long before the Special Linked data is calculated and displayed (as the cell's contents), andthat the Link has been made •             Close and Save As the Excel file to the OLE folder(with standard XLS as file type) with the security's name as the pointer name •             Each time now, that you Open this XLS-file again, automatically the Excel program will have you prompted if you would to update the Link. Within the Excel program's options (Tools|Options|Calculations or Edit|Link|Manual) you can pre-set this to "manual" as well, but then you will have to click Edit|Link|Update Now to update once the spreadsheet's above Linked cell selection entirely A.Note here that the more history is stored in your 'original' Metastock files, eg the files the Chart uses as its base, the longer the column contents(displayed cells), the longer it will take to calculate and also the more memory is being used, so you will have to keep this 'history' as short as what can be possible for any fast results.

B.Note here too that you can then apply the special instructions (mailed in a previous mail to the List) to have the Linked cells' contents SPLIT UP over more cells in the spreadsheet(s), so 

Page 135: Metastock Formulae

as to enable you to make calculations in Excel, eg using Excel's cell linking(referencing) and formula language(the tiny editor) capabilities and/or apply any of the other Excel program's features.

C.Note here also that the above applies for MS6.x and Excel8.0(OfficePro97).

D.To reverse this OLE linkage back into MetaStock , do not forget to create an empty Inner Window first, prior to creating the Link. In MS click Window|New Inner Window and then Right-click in this Inner Window and choose Paste Special|Paste Link (with CSV as file type). See MS-Help or MS-Manualor Equis' Customer|Support Website for more detailed instructions.(Go Top)Lone RangerThis is the calculation:

There are 2 calculations needed for this.For the first, just take the highest value of the close in the past 3 days (including todays close) and take this away from the lowest value of the cose in the past 3 days. Call the result of this a.

Then divide a by volume. Subtract the result of this by the value of a divided by volume 5 days ago.

Finally, multiply this number by -1.

Simple Interpretation:This is a short term indicator which will show short term divergences against the market instrument. You can also use it to compare its rate of change against that of the market.Extreme lows or highs in the indicator may be a signal of similar instances in the market, however you would want to define a time period to make use of this function.

Metastock code for Lone Ranger:

(( Fml( "Z Range" ) / V) - Ref((Fml( "Z Range" ) / V),-5)) * -1

Where Fml( "Z Range" ) = (HHV(c,3) - LLV(c,3))(Go Top)LRS-ROC Indicator--another oneLb:=Input("Look-Back Periods?",3,100,13);ROC( LinRegSlope(C,Lb),Lb,$)(Go Top)LSS Oscillator & Pivot Point Here are a few formula's that I picked up from amailing from George Angell

LSS 5 day Osc X:=HHV(H,5)-Ref(O,-5);Y:=C-LLV(L,5);LSS:=100*(X+Y)/(HHV(H,5)-LLV(L,5))*2;

Page 136: Metastock Formulae

LSS;

LLS 5 DAY Osc Diff from 3 day oscX:=HHV(H,5)-Ref(O,-5);Y:=C-LLV(L,5);LSS:=100*(X+Y)/(HHV(H,5)-LLV(L,5))*2;Diff:=LSS-Ref(LSS,-3);Diff;

LLS Strength Index(1 day)100*(Ref(C,-1)-Ref(L,-1))/(Ref(H,-1)-Ref(L,-1))

LLS Pivot Breakout Buy NumberX:=(H+L+C)/3;BBN:=2*X-L;BSN:=2*X-H;BBN;BSN;(Go Top)LookBackFormula: X := Stdev(C, 30);Y := Ref(X, -1);Z := 1+((X-Y)/X);If(Cum(1)=1, 20, Min(Max(Prev*Z, 20), 60))

Name: BuyBreakFormula: HHV(H, LastValue(Fml("LookBack")+Prev-Prev))

Name: BuyExitFormula: LLV(L, LastValue(Fml("LookBack")/2+Prev-Prev))

Name: SellBreakFormula: LLV(L, LastValue(Fml("LookBack")+Prev-Prev))

Name: SellExitFormula: HHV(H, LastValue(Fml("LookBack")/2+Prev-Prev))

Name: BreakWhereFormula: TopB := Ref(Fml("BuyBreak"), -1);LowB := Ref(Fml("SellBreak"), -1);((O+H+L+C)/4 - LowB)*100/(TopB-LowB);

Name: DBS-SystemEnter Long: H > Ref(Fml("BuyBreak"), -1)Close Long: L < Ref(Fml("BuyExit"), -1)Enter Short: L < Ref(Fml("SellBreak"), -1)Close Short: H > Ref(Fml("SellExit"), -1)

This is George Pruitt's ("Futures Truth") basic system. It is also the basic system used as the basis for Thomas Stridsman's year-long series of articles about system development and tweaking.

Page 137: Metastock Formulae

(Go Top)Last Date ExplorationThis set of column formulae allows you to either scan the results of a previous MetaStock exploration or the whole market to view the last trading date of each code.

To delete all securities that have been non-trading since a user specified date, you will need to use a program such as StockDelete.MetaStock Column Formula{Day} Column A: Dayofmonth(){Month} Column B: Month(){Year} Column C: Year()No filter is required for this formula. Text in {} indicates the column name (not required)

Download the Last Date Formula for use in your MetaStock software by clicking here.(Go Top)Linear Regression Trendline{ Linear Regression Trendline Channel v2.0 }{ ©Copyright 2004 Jose Silva }{ [email protected] }

EnDay:=Input("end Day",1,31,31);EnMnth:=Input("end Month",1,12,12);EnYear:=Input("end Year",1800,2200,2006);pds:=Input("Linear Regression Trendline periods",2,2520,63);multi:=Input("Channel Standard Deviations", 0,100,2);x:=Input("use Open=1 High=2 Low=3 Close=4 Volume=5 P=6",1,6,4);x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,If(x=6,P,C)))));

end:=Year()>EnYear OR (Year()=EnYear AND (Month()>EnMnth  OR Month()=EnMnth AND DayOfMonth()>=EnDay));end:=end AND Alert(end=0,2);end:=If(LastValue(Cum(Ref(end,pds)))=0, LastValue(Cum(1))=Cum(1),end);

lastValLRI:=LastValue(Highest( If(end,LinearReg(x,pds),0)));lastValLRS:=LastValue(Highest( If(end,LinRegSlope(x,pds),-10000)));

adjust:=LastValue(LastValue(Cum(1)) -Highest(If(end,Cum(1),0)));countback:=LastValue(Cum(1))-Cum(1)-adjust;{ rem next line to extend plot to end of chart }countback:=Ref(Ref(countback,-adjust),adjust);

LR:=lastValLRI-lastValLRS*countback;restrict:=adjust-(LastValue(Cum(1))-pds);LRT:=Ref(Ref(LR,-restrict),restrict);upLR:=LRT+Stdev(LR,pds)*multi;lwLR:=LRT-Stdev(LR,pds)*multi;

Page 138: Metastock Formulae

upLR;lwLR;LRTMACD 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 linemp1:=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 Linemp1:=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 createEnter 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

Page 139: Metastock Formulae

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: MACDcustomFormula: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 TriggerColumns: Cola:Name: CloseFormula:CColb:Name: MACDFormula:FML( "MACDcustom , MACD" ) Colc:Name: MACDTriggerFormula:FML( "MACDcustom , YourTrig" )Filter:Formula:Colb > Colc{orFML( "MACDcustom , MACD" ) > FML( "MACDcustom , YourTrig" )}(Go Top)MACD Histogram DivergenceThis 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)*

Page 140: Metastock Formulae

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.8The 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 signalH > Ref(C,-1) + 1.8 * Ref( ATR(10),-1)ColC: Volume 10% above the average of the previous 10 daysV > 1.1 * Ref( Mov(V,10,E),-1)Filter Column:colA AND colB AND colC AND colA <-0.80Initial tests with this system have been encouraging.(Go Top)MACD Offset(MACD()*10 +50) {offset the MACD to 50}(Go Top)MACD Tops and BottomsQUESTION: 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) 

Page 141: Metastock Formulae

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 - UltimateThis 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:

Page 142: Metastock Formulae

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 OscillatorThe 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 IndexThe 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.

Page 143: Metastock Formulae

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 RevisedI 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);

Page 144: Metastock Formulae

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

EXPERT

{Name: %Bands}

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

Symbols tab.{NAME: %BandDn}FmlVar("%BandsCount","CNTDN") >= 1Graphic tab: Dot, Small, Magenta, Below price plot(Go Top) Metastock Adjustable Trading BandsUsing 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

Page 145: Metastock Formulae

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 ArnoldiReview of : <symbol>as of <date>TODAY'S CLOSE WriteVal(CLOSE,2.3)TOMORROW's PROJECTED HIGHWriteIf(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 LOWWriteIf(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 BANDSCLOSING 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)

Page 146: Metastock Formulae

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 HighTo 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) CColB: {Previous 60-day High} Ref(HHV(H,60), -1)ColC: {Current 60-day High} HHV(H,60)ColD: {Volume} VFilter: (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 ExplorationThis 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) ANDRef(C,-1)<=Ref(C,-2) AND Ref(C,-1)<=Ref(C,-3) ANDRef(C,-1)<=Ref(C,-4) AND

Page 147: Metastock Formulae

Ref(C,-2)<=Ref(C,-3) AND Ref(C,-2)<=Ref(C,-4) ANDRef(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 signalbuy:Fml("CCIF-P")>Ref(Fml("CCIF-P"),-1) ANDCross(Fml("CCIF-P"),-100) ORCross(Fml("CCIF-P"),100)

sell:Fml("CCIF-P")<Ref(Fml("CCIF-P"),-1) ANDCross(100,Fml("CCIF-P")) ORCross(-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 UpdateI 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 willalso 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 AverageN:=50;TN:=Mov(C,N,S);sOneA:=((n-1)/2)*C+

Page 148: Metastock Formulae

((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);

Page 149: Metastock Formulae

yTwo(Go Top)Modified Williams %R Metastock Indicatorby 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 IndexThe 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 FORMULASEnter Long:Periods := 11;

Page 150: Metastock Formulae

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 BuySignal4Close 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 SellSignal3STOPSMaximum Loss: LONG ONLY10.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 CrossoversWhat 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--

Page 151: Metastock Formulae

Indicator Name: PositionMASwitch:=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: EquityCum(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: TotalEquityFml("Equity1")+Fml("Equity2")(Go Top)Moving Average Violated By %200 dma violated by 100%enter shortc>=(mov(c,200,s)*2)

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

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

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

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

Page 152: Metastock Formulae

c>prev(hhv(c,21),1) and (pdi(9)>mdi(14))(Go Top)MTF-Fixed Balance Pointname: 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 FrameDynamic 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)+

Page 153: Metastock Formulae

Ref(CLOSE,-1))/3);DBC------------------------------------------------name: MTF-Dynamic Balance Point Step

{Multiple Time FrameDynamic 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

Page 154: Metastock Formulae

{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 FormulasQUESTION: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.

Page 155: Metastock Formulae

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 ParadigmHIGHLIGHTSName: ContractionCondition: BBandTop(CLOSE,28,SIMPLE,2)< Ref(BBandTop(CLOSE,28,SIMPLE,2),-1) ANDBBandBot(CLOSE,28,SIMPLE,2)>Ref(BBandBot(CLOSE,28,SIMPLE,2),-1)Color: BlueName: ExpansionCondition: BBandTop(CLOSE,28,SIMPLE,2)> Ref(BBandTop(CLOSE,28,SIMPLE,2),-1) ANDBBandBot(CLOSE,28,SIMPLE,2)<Ref(BBandBot(CLOSE,28,SIMPLE,2),-1)Color: RedClick 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 variableVidya{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 LongC-(((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 IndexThe 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 

Page 156: Metastock Formulae

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 = decrease0 = 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 AdvisorIn 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,$) < 0Fake Bar (Dk Gray Bar)ROC((H-L)/V,1,$) > 0 AND ROC(V,1,$) < 0Squat Bar (Red Bar)ROC((H-L)/V,1,$) < 0 AND ROC(V,1,$) > 0After 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 OscillatorThe 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.

Page 157: Metastock Formulae

"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 dataCum(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 dataCum(P-(C*V)) for RTD and Dial DataYou now have the thrust indicator plotted exactly as the article discusses.(Go Top)Martin Pring's KST FormulasThe 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.

Page 158: Metastock Formulae

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) ) / 4Intermediate 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 IndexThe 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 forSum(Mov( ( H - L ) ,9 ,E) / Mov(Mov( ( H - L ) ,9 ,E) ,9 ,E ) ,25 )(Go Top)McGinley DynamicRef(Mov(C,12,E),-1)+((C-(Ref(Mov(C,12,E),-1))) / (C/(Ref(Mov(C,12,E),-1))*125))(Go Top)Modified VIX IndicatorThe 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 OEX2 - Open the chart of the VIX.3 - Drag the plot of the OEX into the chart of the VIX.

Page 159: Metastock Formulae

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 IndicatorMov(((ROC(C,12.8,%))+(ROC(C,19.2,%))),10,W)(Go Top)Moving Average of Only One Day of the WeekFrequently 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 FormulasEnter 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.

Missing trading days{ Plots missing daily (weekday) bars count }{ ©Copyright 2003-2004 Jose Silva }{ [email protected] }

ChkVol:=Input("Zero-volume days = missing data days?  Yes=1, No=0",0,1,1);VolMissing:=If(ChkVol,V=0,0);

limit:=1960;  {do not change limit year}LimLeap:=Frac(limit/4)=0 AND Frac(limit/100)<>0 OR Frac(limit/400)=0;NoCount:=limit*365+Int(limit/4) -Int(limit/100)+Int(limit/400)-LimLeap;leap:=Frac(Year()/4)=0 AND Frac(Year()/100)<>0

Page 160: Metastock Formulae

 OR Frac(Year()/400)=0;y:=Year()*365+Int(Year()/4) -Int(Year()/100)+Int(Year()/400)-NoCount;m:= If(Month()=2,31-leap, If(Month()=3,59, If(Month()=4,90, If(Month()=5,120, If(Month()=6,151, If(Month()=7,181, If(Month()=8,212, If(Month()=9,243, If(Month()=10,273, If(Month()=11,304, If(Month()=12,334, -leap)))))))))));DayNr:=y+m+DayOfMonth();WkDayCount:= Int((DayNr+3)/7)+   {Mon} Int((DayNr+2)/7)+   {Tue} Int((DayNr+1)/7)+   {Wed} Int((DayNr)/7)+     {Thu} Int((DayNr-1)/7);   {Fri}

WkDayCount-ValueWhen(2,1,WkDayCount)-1 +VolMissing(Go Top...)Momentum - normalized{ Normalized Momentum v3.1 }{ ©Copyright 2003-2004 Jose Silva }{ [email protected] }

pds:=Input("Momentum periods",1,2520,10);pdsN:=Input("normalizing periods (1=none)", 1,2520,63);x:=Input("use Open=1 High=2 Low=3 Close=4 Volume=5 P=6",1,6,4);plot:=Input("Momentum=1,  midpoint crossover Signals=2",1,2,1);

x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,If(x=6,P,C)))));y:=Ref(x,-pds);ratio:=Min(x,y)/Max(x,y);Mom:=If(x>y,2-ratio,ratio)*100-100;MomNorm:=(Mom-LLV(Mom,pdsN)) /(HHV(Mom,pdsN)-LLV(Mom,pdsN)+.000001)*100;MomNorm:=If(pdsN=1,Mom,MomNorm);midpt:=If(pdsN=1,0, Cum(MomNorm)/Cum(IsDefined(MomNorm)));signals:= Cross(MomNorm,midpt)-Cross(midpt,MomNorm);

midpt;If(plot=2,signals,MomNorm)(Go Top...)

Page 161: Metastock Formulae

Momentum, LRS-smoothed{ LRS-smoothed normalized Momentum v2 }{ ©Copyright 2003 Jose Silva }{ [email protected] }

pds:=Input("Momentum periods",2,2520,10);smooth:=Input("LRS smoothing periods", 1,252,10);plot:=Input("Momentum=1,  Smoothed=2,  Double smoothed=3",1,3,2);x:=Input("use Open=1 High=2 Low=3 Close=4 Volume=5 P=6",1,6,4);

x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,If(x=6,P,C)))));y:=Ref(x,-pds);ratio:=Min(x,y)/Max(x,y);Mom:=If(x>y,2-ratio,ratio)*100-100;MoSm:=LinRegSlope(Mom,smooth)*10;MoSm:=If(smooth<2,Mom,MoSm);MoSm2:=LinRegSlope(MoSm,smooth)*4;MoSm2:=If(smooth<2,Mom,MoSm2);

If(plot=1,Cum(Mom)/(Cum(Mom>-100)+.000001), If(plot=2,Cum(MoSm)/(Cum(MoSm>-100)+.000001), Cum(MoSm2)/(Cum(MoSm2>-100)+.000001)));

If(plot=1,Mom,If(plot=2,MoSm,MoSm2))Natenberg's Volatility

rev. 01/21/97

Historical volatility is defined by Sheldon Natenberg, as the standard deviation of the logarithmic price changes measured at regular intervals of time. In Mr. Natenberg's book, "Option Volatility & Pricing," he covers volatility in detail and gives the formula for computing historical volatility. In MetaStock, the equivalent formula would be:

Std( Log( C / Ref( C ,-1 ) ) ,10 ) * Sqrt( 365 / 7 )

The above assumes Weekly Data. To utilise this with Daily Data, the MetaStock formula would be:

Std( Log( C / Ref( C,-1) ),10 ) * Sqrt( 365 )

For further interpretation refer to the book "Option Volatility & Pricing," by Sheldon Natenberg.

Nat's VoltStd(log(c/ref(c,-1)),10)*sqr(365/7) (Go Top)NR4 Formula from Trading Tactics page 100 Column AStd(Log(C/Ref(C,-1)),5)/Std(Log(C/Ref(C,-1)),99)Column BHIGH-LOW<Ref(LLV(H-L,3),-1)

Page 162: Metastock Formulae

Column CHIGH<(Ref(HIGH,-1)AND LOW>Ref(LOW,-1))Column DHIGHColumn ELOWFiltercolA<.5 AND (colB= 1 OR colC= 1)One Day Money FlowThe One Day Money Flow Indicator (some also call this indicator the One Day Accumulation/Distribution Indicator) MetaStock formula is the following:

(((Close-Low) - (High-Close)) / (High-Low)) * Volume (Go Top)Overbrought/Over SoldCol A: CLOSE

Col B: Fml("ob/os summation") 

Filter: Fml("ob/os summation") > 450 OR Fml("ob/os summation") < -50

Filter enabled: Yes

Here is the "ob/os summation" formula:

RSI(25)+Stoch(25,3)+Mo(25)+CCI(25) (Go Top)OBV Volatility{ On Balance Volume Volatility v1.0 }{ Plot on own window below price chart }{ ©Copyright 2004 Jose Silva }{ [email protected] }

pds:=Input("Volatility StdDev periods", 2,2520,10);choose:=Input("base Volatility on:  OBV=1,  Close=2",1,2,1);plot:=Input("plot:  Normal Vt=1,  Split Up+Down Vt=2,  OBV=3",1,3,1);

x:=Stdev(If(choose=1,OBV(C),C),pds);y:=Ref(x,-1);ratio:=Min(x,y)/Max(x,y);Vt:=Abs(If(x>y,2-ratio,ratio)-1)*100;VtAvg:=Cum(Vt)/Cum(Vt>-1);VtUp:=If(x>Ref(x,-1),Vt,0);VtDw:=-If(x<Ref(x,-1),Vt,0);

If(plot=2,VtUp,If(plot=3,OBV(C),VtAvg));If(plot=2,VtDw,If(plot=3,OBV(C),Vt))

OBV Volatility system

Page 163: Metastock Formulae

{ On Balance Volume Volatility system v1.0 }{ Enters Long on high negative OVB Volatility }{ Exits Long on high positive OVB Volatility }{ Plot on own window below price chart }{ ©Copyright 2004 Jose Silva }{ [email protected] }

pds:=Input("Volatility StdDev periods",2,2520,252);level:=Input("Threshold levels",0,100,0.5);

x:=Stdev(OBV(C),pds);y:=Ref(x,-1);ratio:=Min(x,y)/Max(x,y);Vt:=Abs(If(x>y,2-ratio,ratio)-1)*100;VtUp:=If(x>Ref(x,-1),Vt,0);VtDw:=-If(x<Ref(x,-1),Vt,0);

In:=Cross(-level,VtDw);Out:=Cross(VtUp,level);

delay:=Input("Entry and Exit delay",0,5,0);plot:=Input("plot:  entry/exit signals=1,  trade binary=2",1,2,1);

Init:=Cum(In+Out>-1)=1;InInit:=Cum(In)=1;flag:=Ref(BarsSince(Init OR In) < BarsSince(Init OR Out)+InInit,-delay);In1:=Cum(Cum(In))=1;Out1:=Cum(Cum(Out))=1;signals:=(InInit AND Alert(InInit=0,2)  OR flag AND Alert(flag=0,2))   -(flag=0 AND Alert(flag,2));odd:=Cum(1)/2=Int(Cum(1)/2);

Ref(If(plot=1,In1,0),-delay);-(plot=1 AND Ref(Out1 AND BarsSince(In1) >=BarsSince(Out1),-delay));If(plot=1,0,If(odd,flag,0));If(plot=1,signals,flag)Panic Selling sqrt(((buyp()/sellp())/rsi(2))) > ref(((buyp()/sellp())/rsi(2)),-1)(Go Top) Performance Daily Stocks sorted on % gains over 1, 2, 3, 4, and 5 days. Rank results for the selected day. Good for finding breakout stocks.•             CLOSE •             ROC(CLOSE,1,percent) •             ROC(CLOSE,2,percent) •             ROC(CLOSE,3,percent) •             ROC(CLOSE,4,percent) •             ROC(CLOSE,5,percent) (Go Top) Performance Intra Day and DailyColA:C {label CLOSE}

Page 164: Metastock Formulae

ColB:O {label OPEN}ColC:Sub(C,O) / O {label Intr.dy%}ColD:Sub(C,Ref(C,-1)) / Ref(C,-1) {label 1 dy %}ColE:Sub(C,Ref(C,-2)) / Ref(C,-2) {label 2 dy %}ColF:Sub(C,Ref(C,-3)) / Ref(C,-3) {label 3 dy %}Filter: O>.2 ANDC<.3 ANDC>.2

Filter: enabledPeriodicity: DailyRecords required: 5 (Go Top)Persistance of Money FlowChaikin's Money Flow is a built-in MetaStock indicator, as follows: cmf(periods)

Persistence of Money Flow (PMF%)

Pds1:= Input("CMF Periods?",1,100,21);Pds2:= Input("PMF Periods?",10,1000,120);Sum((cmf(Pds1)>0),Pds2)/(Pds2/100)

{from HHP}

Persistence or (PMF%) is the percentage of days over 6 months that the Chaikin Money Flow Oscillator is above 0. The Chaikin Money Flow Oscillator formula default uses a 21 day money flow sum divided by the 21 day sum of daily volume. HHP sent the correct indicator formula for persistence, tho you can modify it by selecting 1 for "Pds1" if you prefer to create a 120 day cumulative money flow indicator to do what you are suggesting. The cumulative money flow indicator often uses a 90SMA trigger. (Go Top)PFE IndicatorMov(If(C > Ref(C,-9), Sqr( Pwr( ROC(C,9,$),2) + Pwr(10,2))/ Sum( Sqr( Pwr( ROC(C,1,$),2) +1), 9),-Sqr( Pwr(ROC(C,9,$),2) + Pwr( 10,2)) / Sum(Sqr(Pwr(ROC(C,1,$),2)+1),9)) * 100,5,E)

I use a 80, -80 trendline. I have stuck it in different things at different times. Right now I have it crossing -80 with MACD 4, 35,5, crossing, RSI(9) up one day, and selling pressure down one day. (Go Top)Plotting Forward DaysI want an indicator that will project an exponential moving average into the next period (i.e., draw tomorrow's line). It would be really spiffy if I could pl ug in tomorrow estimated/projected close and be able to adjust  the indicator based on various projected closes. 

The formula below may be close to what you want, but it will not plot on the forward day. It will just plot the point where tomorrow's EMA would be. The equation is based on the MetaStock manual, page 459, concerning exponential moving averages. 

TC:=Input("Tomorrow's close",0.001,1000,1);

Page 165: Metastock Formulae

MAP:=Input("Moving Average Period",2,144,55);MA1:=Mov(C,MAP,E);EPX:=2/(MAP+1);MA2:=(TC*EPX)+(MA1*(1-EPX));ValueWhen(1,Cum(1)=LastValue(Cum(1)),MA2) (Go Top)Presto's Magic Box(a tweaked version of the Darvis Box) Periods:=Input("periods",1,260,100);Topbox:=If(Ref(H,-3)>=Ref(HHV(H,Periods),-4) AND Ref(H,-2)<Ref(H,-3) AND Ref(H,-1)<Ref(H,-3) AND H< Ref(H,-3),Ref(H,-3),PREVIOUS);Botbox:=If(Ref(H,-3)>=Ref(HHV(H,Periods),-4) AND Ref(H,-2)<Ref(H,-3) AND Ref(H,-1)<Ref(H,-3) AND H< Ref(H,-3),LLV(L,4),PREVIOUS);Botbox;Topbox;(Go Top)Price Action Indicator (PAIN)If you were only given today's open, high, low and close, how could you make heads or tails of it? The Price Action Indicator (PAIN) can help. The formula returns a single value that weighs intra-day momentum (C-O), Late Selling Pressure (LSP) (C-L), and Late Buying Pressure (LBP) (C-H). The formula is proven by constructing ideal limit-up and limit down scenarios in bond futures. The output is shown to be consistent with the interpretation of Japanese candlestick patterns. See Michael B. Geraty (1997). "Getting Better Directions" Futures Vol. 26: Aug.

PAIN

((C-O)+(C-H)+(C-L))/2 (Go Top)Price and Volume Breakout Shows stocks where the price increased 5% and the volume is 50% above a 50-day moving average. Rank results by % change in price, then check the volume.•             CLOSE •             Ref(CLOSE,-1) •             ROC(CLOSE,1,percent) •             VOLUME •             Mov(VOLUME,50,EXPONENTIAL) •             ((VOLUME - Mov(VOLUME,50,EXPONENTIAL)) /Mov(VOLUME,50,EXPONENTIAL)) * 100 •             **When(colC> = 5) AND When(colD >= colE*1.5) (Go Top)Pring's Daily KST BuyNotes: KST BUY SIGNAL FROM BELOW ZERO

ColA:Name: CloseCLOSEColB:Name: KST(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)

Page 166: Metastock Formulae

ColC:Name: KST MAMov((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),10,S)ColD:Name: KST-1Ref( (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),-1)ColE:Name: MA KST-1Ref(Mov((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),10,S),-1)Filter:When(colB,>,colC)AND When(colB,<,0)AND When( colD,<,colE) (Go Top)Projected RangeFrom "Lyn Maine"This isTom DeMark's Projected Range:TPH1:=(H+C+2*L)/2-L;TPH2:=(2*H+L+C)/2-L;TPH3:=(H+L+2*C)/2-L;TPL1:=(H+C+2*L)/2-H;TPL2:=(2*H+L+C)/2-H;TPL3:=(H+L+2*C)/2-H;PH:=If((C<O),TPH1,If((C>O),TPH2,If((C=O),TPH3,0)));PL:=If((C<O),TPL1,If((C>O),TPL2,If((C=O),TPL3,0)));PH;PL;

This is my updated version of Tushar Chande's Vidya

Vidya:K:=Stdev(P,5)/Mov(Stdev(P,5),20,S);SC:=Input("SC",.1,.9,.1);Vidya:=SC*K*P+(1-SC*K)*Ref(P,-1);Vidya; {the sc input is more responsive if you use a higher number}

This is Vidya with volatility bands:K:=Stdev(C,5)/Mov(Stdev(C,5),20,S);SC:=0.9;Vidya:=SC*K*C+(1-SC*K)*Ref(C,-1);UpperBand:=Vidya+2*.5*K;LowerBand:=Vidya-2*.5*K;UpperBand;LowerBand;Vidya;

This is Tushar Chande's target price:A:=Mov(Abs(C-Ref(C,-1)),10,S);

Page 167: Metastock Formulae

TPH1:=C+A;TPH2:=C+(2*A);TPL1:=C-A;TPL2:=C-(2*A);TPH1;TPH2;TPL1;TPL2;

This is ATR Ratio to Close:ATRR:= ATR(5)/C;MATRR:=Mov(ATRR,3,E);ATRR;MATRR;

This is a CMO Composite Average:(((CMO(C,5))+(CMO(C,10))+(CMO(C,20)))/3)

This is CMO Volatility: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;

This is Rule of 7 down objective:If((ROC(C,12,%)>-1.5),If((ROC(C,12,%)>-3),If((ROC(C,12,%)>-4.5),((H-(H-L)*1.75)),((H-(H-L)*2.33))),((H-(H-L)*3.5))),(H-(H-L)))

This is rule of 7 up objective:If((ROC(C,12,%)>1.5),If((ROC(C,12,%)>3),If((ROC(C,12,%)>4.5),(((H-L)*1.75)+L),(((H-L)*2.33)+L)),(((H-L)*3.5)+L)),((H-L)+L))

This is rule of 7 Osc:Fml("Rule of 7 UP Objective") -Fml("Rule of 7 DOWN Objective")

This is %f Osc:100*((C-Ref(TSF(C,5),-1))/C)

This is Chande's Trendscore: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)

This is McGinley Dynamic:Ref(Mov(C,12,E),-1)+((C-(Ref(Mov(C,12,E),-1))) / (C/(Ref(Mov(C,12,E),-1))*125))

This is Morris Double Momentum Osc:Mov(((ROC(C,12.8,%))+(ROC(C,19.2,%))),10,W)

Page 168: Metastock Formulae

This is Volatility%:

Lookback := Input("Time Periods",1,1000,50);

HighVolatility := Input("High Volatility %",.01,100,3);

100 * Sum(100 * ATR(1)/CLOSE > HighVolatility, Lookback)/Lookback

This is Positive Volume Indicator:Cum(If(V>Ref(V,-1),ROC(C,1,%),0))

This is negative volume indicator:Cum(If(V<Ref(V,-1),ROC(C,1,%),0)) (Go Top)Percent Above/Below Moving Average(oscp(1,30,E,%))(Go Top)Plotting Alpha and BetaTo plot Alpha and Beta in MetaStock follow the steps below. **The custom indicator named Beta is required to plot Alpha.In the Windows versions of MetaStock:To plot Alpha: •             Create the custom formulas Alpha and Beta (see below for formula syntax). •             Open a chart of the desired security. •             Drag the price plot of the index you are comparing, into the chart of the security and close the chart of the index. **Maximize the security chart if needed. •             Drag the custom indicator Alpha from the Quick List and drop it onto the price plot of the index. **The index plot will turn a purplish color when you are plotting on top of it. **Note, this formula is set to calculate Alpha over 21 periods. To change the time periods replace each instance of 21 in the formula with the desired number of periods and also change the time periods in the Beta custom indicator.( Sum( ROC( CLOSE ,1 ,% ) ,21 ) - ( Fml( "Beta" ) * Sum( ROC( INDICATOR,1,%) ,21 ) ) ) / 21To plot Beta: •             Open a chart of the desired security. •             Drag the price plot of the index your comparing, into the chart of the security. •             Drag this custom indicator from the Quick List and drop it onto the price plot of the index. Note, this formula is set to calculate beta over 21 periods. To change the time periods replace each instance of 21 in the formula with the desired number of periods.( ( 21 * Sum( ROC( CLOSE ,1 ,% ) * ROC( INDICATOR ,1 ,% ) ,21 ) ) - ( Sum( ROC( CLOSE ,1 ,% ) ,21) * Sum( ROC( INDICATOR ,1 ,% ) ,21 ) ) ) /( (21 * Sum( Pwr( ROC( INDICATOR ,1 ,% ) ,2 ) ,21 )) - Pwr( Sum( ROC( INDICATOR ,1 ,% ) ,21 ) ,2 ))**Beta is a measure of volatility of one security against another. This is typically used to measure the volatility of a stock against an index like the S&P 500. A value greater than one indicates the stock is more volatile than the index.(Go Top)Polarized Fractual Efficiency

Page 169: Metastock Formulae

The January 1994 issue of Stocks & Commodities featured an article by Hans Hannula on Polarized Fractual Efficiency. Here is the custom formula for creating the five-period smoothed 10-day PFE using MetaStock:Mov(If(C,>,Ref(C,-9),Sqr(Pwr(Roc(C,9,$),2) + Pwr(10,2)) /Sum(Sqr(Pwr(Roc(C,1,$),2)+1),9),-Sqr(Pwr(Roc(C,9,$),2) + Pwr(10,2)) /Sum(Sqr(Pwr(Roc(C,1,$),2)+1),9))*100,5,E)(Go Top)Price Oscillator Waveif(ref(oscp(3,15,S,%),-1),<,0,1,0)(Go Top)Price Volume RankTaken from Stocks & Commodities, V. 12:6 (235-239): Price-Volume Rank by Anthony J. Macek"Imagine receiving a warning when the market was likely to collapse or being alerted when one of your favorite stocks was about to rally. What if these signals came from analysis that was simple enough to do without a computer and took only a few minutes a day to update, using just two pieces of information found in virtually any newspaper? Is this a dream? Maybe not. Anthony Macek explains.The old adage about keeping things simple applies even to the investment world. Methods of analysis such as polarized fractal efficiency and price oscillator divergences do a great job, but for those with neither the time nor the inclination to master the techniques necessary to monitor every blip and sputter that the market produces may be served just as well by noting only two very important market variables: price and volume."For interpretation refer to the June 94 issue of Technical Analysis of Stocks & Commodities.You need to create all of the following custom formulas in order for the PV Rank to calculate properly.P-V Rank:Fml( "PV1" ) + Fml( "PV2" ) PV1:If( C ,> ,Ref( C ,-1 ) ,If( V ,> ,Ref( V ,-1 ) ,1 ,If( V ,< ,Ref(V ,-1 ) ,2 ,0 ) ) ,0 )PV2:If( C ,< ,Ref( C ,-1 ) ,If( V ,< ,Ref( V ,-1 ) ,3 ,If( V ,> ,Ref( V ,-1 ) ,4 ,0 ) ) ,0 )PV Biggie: (This combines all formulas into one formula)If( C ,> ,Ref( C ,-1 ) ,If( V ,> ,Ref( V ,-1 ) ,1 ,If( V ,< ,Ref( V ,-1 ) ,2 ,0 ) ) ,If( C ,< ,Ref( C ,-1 ),If( V ,< ,Ref( V ,-1 ) ,3 ,If( V ,> ,Ref( V ,-1 ) ,4 ,0 ) ) ,0 ) )(Go Top)Price Volume Trend Stochastic{Fast line}Mov((PVT()-LLV(PVT(),19))/(HHV(PVT(),19)-LLV(PVT(),19)), 5, S)

{Slow Line}Mov(Mov((PVT()-LLV(PVT(),19))/(HHV(PVT(),19)-LLV(PVT(),19)), 5, S),3,S)(Go Top)Pathfinder Trading System To recreate the Pathfinder currency trading system (described in the October 1996 interview with Nelson Freeburg) in MetaStock for Windows, open two charts, one of the desired currency and the other of Treasury bonds. For this example, I used the Swiss Franc. Choose Tile from the Window menu so both charts are visible. Drag the T-bonds price bar and drop 

Page 170: Metastock Formulae

it on the heading of the currency chart. Your currency chart should now have T-bonds plotted in the top inner window of the chart. Click on the T-bonds plot in the currency chart so it's selected (that is, little squares appear on the price bars). You will need to select the T-bonds plot each time before running a system test. The selected plot tells the MetaStock System Tester what to use for "P". Next, choose System Tester from the Tools menu, and then New to create a new system. Enter the following system rules, stops, and options and then run the test.Signal FormulasEnter Long:Mov(C,6,S) > Ref(Mov(C,6,S),-1) ANDMov(P,3,S) > Mov(P,25,S) ANDAlert(Cross(Mov(C,9,S),Mov(C,18,S)),10)Close LongCross(Mov(C,18,S),Mov(C,9,S))Enter ShortMov(C,6,S) < Ref(Mov(C,6,S),-1) ANDMov(P,3,S) < Mov(P,25,S) ANDAlert(Cross(Mov(C,18,S),Mov(C,9,S)),10)Close ShortCross(Mov(C,9,S),Mov(C,18,S))

StopsMaximum Loss Stop:Long and short positionsMaximum loss of 0.016 points.

•             Initial equity Points Only •             Positions: Long and short •             Trade price: Open •             Trade delay: 1 Note that the maximum stop loss amount should be changed to 0.032 for the British Pound and 0.02 for the Australian and Canadian dollars when testing these contracts. (Go Top)Psychology Indexby Glenn Wallace - Futures Magazine, Vol.29 No.6, June 2000, P.48

There was an overbought/oversold indicator described in the June 2000 Futures Magazine called the Psychological Index. It looked sort of interesting, so I wrote the MetaStock code for it:

LookBack:= Input("Number of lookback periods", 2, 100, 12);UThreshold:= Input("Upper threshold (%)", 0, 100, 75);LThreshold:= Input("Lower threshold (%)", 0, 100, 25);UpDay:= If(CLOSE > Ref(CLOSE,-1), 1, 0);PsychIndex:= Sum(UpDay,LookBack) / LookBack * 100;PsychIndex; UThreshold; LThreshold(Go Top)Periodicity detector

Page 171: Metastock Formulae

{ Chart periodicity detector }{ References indicator "Calendar Week counter" }{ ©Copyright 2003-2004 Jose Silva }{ [email protected] }

dummy:=Input("Chart detected:  (1) Daily,  (2) Weekly, ",0,0,0);dummy:=Input(" (3) Monthly,  (4) Quarterly,  (5) Yearly",0,0,0);

Wk:=Fml("Calendar Week counter");{FortnightCount:=Int((Wk+1)/2);}m:=Month();Mth:=Cum(m<>ValueWhen(2,1,m));q:=If(m=1 OR m=2 OR m=3,1, If(m=4 OR m=5 OR m=6,2, If(m=7 OR m=8 OR m=9,3,4)));Qtr:=Cum(q<>ValueWhen(2,1,q));Yr:=Cum(Year()<>ValueWhen(2,1,Year()));

chart:=If(LastValue(Cum(Wk=ValueWhen(2,1,Wk)))=0,2,1);chart:=If(LastValue(Cum(Mth=ValueWhen(2,1,Mth)))=0,3,chart);chart:=If(LastValue(Cum(Qtr=ValueWhen(2,1,Qtr)))=0,4,chart);chart:=If(LastValue(Cum(Yr=ValueWhen(2,1,Yr)))=0,5,chart);

chart

Periodicity detector app example

{Chart periodicity detector application example}{Automatically adjusts EMA to chart periodicity}{ References indicator "Calendar Week counter" }{ ©Copyright 2003-2004 Jose Silva }{ [email protected] }

Wk:=Fml("Calendar Week counter");{Frt:=Int((Wk+1)/2);}m:=Month();Mth:=Cum(m<>ValueWhen(2,1,m));q:=If(m=1 OR m=2 OR m=3,1, If(m=4 OR m=5 OR m=6,2, If(m=7 OR m=8 OR m=9,3,4)));Qtr:=Cum(q<>ValueWhen(2,1,q));Yr:=Cum(Year()<>ValueWhen(2,1,Year()));chart:=If(LastValue(Cum(Wk=ValueWhen(2,1,Wk)))=0,2,1);chart:=If(LastValue(Cum(Mth=ValueWhen(2,1,Mth)))=0,3,chart);chart:=If(LastValue(Cum(Qtr=ValueWhen(2,1,Qtr)))=0,4,chart);chart:=If(LastValue(Cum(Yr=ValueWhen(2,1,Yr)))=0,5,chart);

pds:=Input("daily EMA periods",1,25200,126);x:=Input("use Open=1 High=2 Low=3 Close=4 Volume=5 P=6",1,6,6);shift:=1+Input("EMA vertical shift %", -100,100,0)/100;plot:=Input("EMA=1, Crossover signals=2",1,2,1);

x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,If(x=6,P,C)))));pds:=If(chart=1,pds,If(chart=2,pds/5,

Page 172: Metastock Formulae

If(chart=3,pds/21,If(chart=4,pds/63,pds/252))));pds:=If(pds<1,1,pds);pds:=If(pds>Cum(IsDefined(x)), Cum(IsDefined(x)),pds);Ema:=x*2/(pds+1)+PREV*(1-2/(pds+1));Ema:=Ema*shift;signals:=Cross(x,Ema)-Cross(Ema,x);

If(plot=2,signals,Ema)

Calendar Week counter

{ Week counter v2.0, Gregorian calendar }{ Count is independent of any missing chart data }{ ©Copyright 2003-2004 Jose Silva }{ [email protected] }

limit:=2000;  {do not change limit year}LimLeap:=Frac(limit/4)=0 AND Frac(limit/100)<>0 OR Frac(limit/400)=0;NoCount:=limit*365+Int(limit/4) -Int(limit/100)+Int(limit/400)-LimLeap;leap:=Frac(Year()/4)=0 AND Frac(Year()/100)<>0 OR Frac(Year()/400)=0;y:=Year()*365+Int(Year()/4) -Int(Year()/100)+Int(Year()/400)-NoCount;m:= If(Month()=2,31-leap, If(Month()=3,59, If(Month()=4,90, If(Month()=5,120, If(Month()=6,151, If(Month()=7,181, If(Month()=8,212, If(Month()=9,243, If(Month()=10,273, If(Month()=11,304, If(Month()=12,334, -leap)))))))))));DayNr:=y+m+DayOfMonth();WkCount:=Int((DayNr-1)/7)+(Year()>=limit);

WkCountRally Gap and Inside Day Finds stocks which have rallied, gapped upwards, and then had an inside day.Usually leads to a resumption of the rally. The search returns 1 for Ok and 0 for not ok.•             RallyWithVol() •             Inside() •             GapUp() (Go Top) Range High Looks for out of range move where the close equals the high. Suggests more buying pressure.

Page 173: Metastock Formulae

The search returns 1 for Ok and 0 for not ok.•             BigWhite() •             CLOSE •             (Go Top) {Recursive Moving Trend Average} Lb:=Input("Look-Back Period?",3,100,21);Alpha:=2/(LB+1);Bot:=(1-Alpha)*(If(Cum(1)<Lb,C,PREV))+C;RMTA:=(1-Alpha)*(If(Cum(1)<Lb,C,PREV))+(Alpha*(C+Bot-Ref(Bot,-1)));RMTA;{TOSC}Lb:=Input("Look-Back Period?",3,100,21);Alpha:=2/(LB+1);Bot:=(1-Alpha)*(If(Cum(1)<Lb,C,PREV))+C;RMTA:=(1-Alpha)*(If(Cum(1)<Lb,C,PREV))+(Alpha*(C+Bot-Ref(Bot,-1)));TOSC:=RMTA-Mov(C,lb,E);TOSC;Is the name of an article in the December issue of TASC, written by Dennis Meyers. In it he describes what he calls " The Recursive Moving Trend Average" . I wont go into all the article right now, but here is my translation of his math (for Metastock 6.5) :{Recursive Moving Trend Average}Lb:=Input("Look-Back Period?",3,100,21);Alpha:=2/(LB+1);Bot:=(1-Alpha)*(If(Cum(1)<Lb,C,PREV))+C;RMTA:=(1-Alpha)*(If(Cum(1)<Lb,C,PREV))+(Alpha*Abs(C+Bot-Ref(Bot,-1)));RMTA;He then explains how to make an oscillator by subtracting an Exponential MA form the Recursive MA...... again here is the code:{TOSC}Lb:=Input("Look-Back Period?",3,100,21);Alpha:=2/(LB+1);Bot:=(1-Alpha)*(If(Cum(1)<Lb,C,PREV))+C;RMTA:=(1-Alpha)*(If(Cum(1)<Lb,C,PREV))+(Alpha*Abs(C+Bot-Ref(Bot,-1)));TOSC:=RMTA-Mov(C,lb,E);TOSC;Here is the code for System Testing;Buy Long:Lb:=opt1;ent:=3;Alpha:=2/(LB+1);Bot:=(1-Alpha)*(If(Cum(1)<Lb,C,PREV))+C;RMTA:=(1-Alpha)*(If(Cum(1)<Lb,C,PREV))+(Alpha*Abs(C+Bot-Ref(Bot,-1)));TOSC:=RMTA-Mov(C,lb,E); Cross(tosc,(0-Abs(ent)))Sell short:

Page 174: Metastock Formulae

Lb:=opt1;ent:=3;Alpha:=2/(LB+1);Bot:=(1-Alpha)*(If(Cum(1)<Lb,C,PREV))+C;RMTA:=(1-Alpha)*(If(Cum(1)<Lb,C,PREV))+(Alpha*Abs(C+Bot-Ref(Bot,-1)));TOSC:=RMTA-Mov(C,lb,E); Cross((0+Abs(ent)),tosc1)Opt1 is the look- back periods, of 3 to 30, and Opt2 is the entry value of the oscillator, 0 to 5.Now, after all the hours spent on figuring out the code, I have discovered that the RMTA plots very similar to the DEMA, oh well............(Go Top)Regression Asymmetric Volatile Price Band SIGNAL FORMULASEnter Long:Periods := 21;UpperBand := STEBandTop(CLOSE,Periods,1) ;Sum(CLOSE > UpperBand,3) = 3 AND LinRegSlope(CLOSE,21)> 0 AND ROC(Correl(CLOSE,Cum(1) ,21,0),2,$) >= .2Close Long:Periods := 21;LowerBand := STEBandBot(CLOSE,Periods,1.5) ;SellSignal1 := Sum(CLOSE < LowerBand,3) = 3;SellSignal2 := CLOSE < (1-.18) * HHV(HIGH,Periods + 1) AND HIGH < LowerBand;SellSignal1 OR SellSignal2STOPSMaximum Loss: LONG ONLY 10.00 Percent(Go Top)Resistance and SupportLookBack := Input("Look Back Periods",1,1000,10);Resistance :=ValueWhen(1,Cross(Mov(C, LookBack,S),C),HHV(H, LookBack));Support :=ValueWhen(1,Cross(C,Mov(C, LookBack,S)),LLV(L, LookBack));Resistance;Support; (Go Top)Resistance and Support *FPrCnt:=Input("Percentage",0,100,10);LookBack:= Input("Look Back Periods",1,1000,10);Resistance:=ValueWhen(1,Cross(Mov(C,LookBack,S),C),HHV(H,LookBack));

Support:=ValueWhen(1,Cross(C,Mov(C,LookBack,S)),LLV(L,LookBack));Resistance * ((100-prcnt)/100);Support * ((prcnt/100)+1); (Go Top)ROC Moving Average System TestENTER LONG:ROC(Mov(C,12,E),1,%)>0 AND ROC(Mov(C,60,E),1,%)>0

Page 175: Metastock Formulae

EXIT LONG:(ROC(Mov(C,12,E),1,%)<0 AND ROC(Mov(C,60,E),1,%)>0)OR(ROC(Mov(C,12,E),1,%)>0 AND ROC(Mov(C,60,E),1,%)<0)

SHORT:ROC(Mov(C,12,E),1,%)<0 AND ROC(Mov(C,60,E),1,%)<0

EXIT SHORT:(ROC(Mov(C,12,E),1,%)<0 AND ROC(Mov(C,60,E),1,%)>0)OR(ROC(Mov(C,12,E),1,%)>0 AND ROC(Mov(C,60,E),1,%)<0)

{Ref(c,-1) gives yesterday's close today. So all values are shifted to theright!} (Go Top)RSI and Moving Averages{place in filter section}

C>MOV(C,5,E) AND C>MOV(C,200,E) AND CROSS(RSI(14),30) (Go Top)RSI Divergence{RSI(9) DIVERGENCE BUY:}If(RSI(9) >= HHV(RSI(9),19) AND CLOSE <HHV(CLOSE,19), 1,0) ORIf(CLOSE <= LLV(CLOSE,19) AND RSI(9) > LLV(RSI(9),19), 1,0)

{RSI(9) DIVERGENCE SELL:}If(CLOSE >= HHV(CLOSE,19) AND RSI(9)<HHV(RSI(9),19),1,0) ORIf(RSI(9) <= LLV(RSI(9),19) AND CLOSE > LLV(CLOSE,19),1,0)

{You can substitute any formula for the "RSI(9)"} (Go Top)RSI Divergence Exploration{A simple exploration filter formula for finding a bullish divergencebetween the RSI and the price is shown below. To find a bearish divergence,replace > with <. The differences in the trough function was found throughan optimization routine and they may not be the best values for yourapplication.}

Ref(RSI(14),-1)>Trough(1,RSI(14),.8)ANDRef(CLOSE,-1)<Trough(1,CLOSE,.2) (Go Top)RSI OffsetRSI(13) - 50 {offset the RSI to +-50} (Go Top)Ruggerio's TrendRuggiero's rules for trend mode quoting his table 4.9:

1. If ADX crosses above 25, then the market is trending.2. If ADX crosses below 20, then the market is consolidating.

Page 176: Metastock Formulae

3. If ADX crosses below 45 from above, then the market is consolidating.4. If ADX rises from below 10 on 3 out of 4 days, then the market will startto trend.5. If a trend is based on rule 4, it remains in effect until the 5 daydifference in ADX is less than 0.

Ruggiero employs a 14 day ADX but that is based on T-Bonds data. He suggests employing the above rules as a filter. I make the indicator take the value +1 if trending, a -1 if consolidating according to the above criteria but I guess the zero is for the grey areain between. Anyway according to definition: If a market is not trending it must be consolidating. However the zero may contain additional useful information. Ruggiero suggests tweaking the threshold values.

periods:=Input("Periods?",1,63,14);If((ADX(periods)>25 AND (BarsSince(Cross(45,ADX(periods))) >BarsSince(Cross(ADX(periods),25)))) OR (ADX(periods) > 10 ANDRef(ADX(periods),-4)<10 AND (ADX(periods)-Ref(ADX(periods),-5)>0)), 1,If(ADX(periods)<20 OR ((BarsSince(Cross(45,ADX(periods)))< BarsSince(Cross(ADX(periods),25))) AND ADX(periods) < 45),-1,0)) (Go Top)Random Walk IndexThe following formulas, for the Random Walk Index, were constructed using information from the article "Are There Persistent Cycles", by E. Michael Poulos, in the September 1992 TASC.All formulas are needed.MetaStock Windows versions:Random Walk Index:Max( ( Ref(HIGH,-1) - LOW ) / ( ( Ref(Sum (Atr ( 1 ) ,2 ),-1) / 2) * Sqrt( 2 ) ) ,Max( (Ref(HIGH,-2) -LOW) / ( ( Ref(Sum (Atr ( 1 ),3),-1) / 3) * Sqrt( 3 ) ), Max( (Ref(HIGH,-3) - LOW)/ ( (Ref(Sum (Atr( 1 ) ,4) ,-1) / 4) * Sqrt( 4 ) ) , Max( ( Ref( HIGH,-4) - LOW) / ( (Ref(Sum(Atr( 1 ),5),-1) / 5) * Sqrt( 5 ) ), Max( (Ref(HIGH,-5) - LOW) / ( (Ref( Sum( Atr ( 1 ),6),-1) / 6 ) * Sqrt( 6 ) ), Max( ( Ref(HIGH,-6) -LOW) / ( (Ref( Sum( Atr( 1 ),7),-1) / 7) * Sqrt( 7 ) ), Max((Ref(HIGH,-7)-LOW) / ( (Ref(Sum (Atr( 1 ),8),-1) / 8) * Sqrt(8) ), (Ref(HIGH,-8)-LOW) / ( (Ref(Sum (Atr (1),9),-1) / 9) * Sqrt( 9 ) ) ) ) ) ) ) ) )(Go Top)Rate of Change Since a Specific DateThe following formula plots a percent rate of change between a specific date and today. The user is prompted for the specific date.This will only work in MetaStock™ for Windows 95/NT version 6.5 (or higher) or in MetaStock Professional.

Construct the formula in the Indicator Builder, giving it the name shown below in bold. All the text after "FORMULA:" and before "*END OF FORMULA*" below should be placed in the Formula field in the Indicator Builder. Once the indicator has been created, you can drag it out of the Indicator Quicklist for placement in an inner-window of your chart.

NAME: ROC Since a Date

FORMULA:Day1 := Input("Day",1,31,4);

Page 177: Metastock Formulae

Month1 := Input("Month",1,12,1);Year1 := Input("Year",1900,2400,1999);

100 * (CLOSE - ValueWhen(1,DayOfMonth() = Day1 AND Month() = Month1 AND Year() = Year1, CLOSE))/ ValueWhen(1,DayOfMonth() = Day1 AND Month() = Month1 AND Year() = Year1,CLOSE)(Go Top)Regression Oscillator and Slope/Close IndicatorIn MetaStock 6.0 it’s easy to create the Regression Oscillator and the Slope/Close Indicator from Richard Goedde’s article, "Market timing with the regression oscillator", which appears in the March 97 issue of Technical Analysis Stocks and Commodities magazine.First choose Indicator Builder from the Tools menu and enter the following formulas:Regression Oscillator100 * (CLOSE/ LinearReg(CLOSE,63)-1) Slope/Close10000* LinRegSlope(CLOSE,63)/CLOSENext drag each of these formulas from the Indicator QuickList and drop them on the heading of a chart. To create horizontal lines, click the right mouse button while the mouse pointer is positioned over the Regression Oscillator to display the shortcut menu. Choose Regression Oscillator Properties. On the Horizontal lines page add horizontal lines at 14, 0, and -14.You can use The Explorer to perform the screen mentioned in the article. First choose The Explorer from the Tools menu, next create a new Exploration with the following information:Column AName: Reg OscFormula: Fml("Regression Oscillator") Column BName: Slp/ClsFormula: Fml("Slope/Close")FilterFormula: ColB > 50 and ColA >-15 and ColA < -5Choose OK and then Explore to run the Exploration. For MetaStock for Windows 5.x users the instructions are the same except enter the following custom indicator in place the ones mentioned earlier.Regression Oscillator100 * (CLOSE/ ((63 * Sum(Cum(1) * C,63) - Sum(Cum(1),63) * Sum(C,63)) /(63 * Sum(Pwr(Cum(1),2),63) - Pwr(Sum(Cum(1),63),2)) * Cum(1) + (Mov(C,63,S) - Mov(Cum(1),63,S) * (63 * Sum(Cum(1) * C,63) - Sum(Cum(1),63) * Sum(C,63)) / (63 * Sum(Pwr(Cum(1),2),63) - Pwr(Sum(Cum(1),63),2))))-1) Slope/Close10000* ((63 * Sum(Cum(1) * C,63) - Sum(Cum(1),63) * Sum(C,63)) / (63* Sum(Pwr(Cum(1),2),63) - Pwr(Sum(Cum(1),63),2)))/CLOSE(Go Top)Relative Strength Index (RSI) CustomThis custom RSI will allow you to select which price data to use when you plot it. The standard RSI uses the close value as Welles Wilder did when he created the indicator. This custom indicator will allow you to use the other price fields including volume.Q:=Input("Time Periods",1,1000,14); B:=Input("Field: 1=Close, 2=Open, 3=High, 4=Low, 5=Volume",1,5,1);Z:=If(B=1,Wilders(If(ROC(C,1,$)>0,ROC(C,1,$),0),LastValue(Q)),If(B=2,Wilders(If(ROC(O,1,$)>0,ROC(O,1,$),0)LastValue(Q)),If(B=3,Wilders(If(ROC(H,1,$)>0,ROC(H,1,$),0),LastValue(Q)),

Page 178: Metastock Formulae

If(B=4,Wilders(If(ROC(L,1,$)>0,ROC (L,1,$),0),LastValue(Q)),Wilders(If(ROC(V,1,$)>0,ROC(V,1,$),0),LastValue(Q))))));Y:=If(B=1,Wilders(If(ROC(C,1,$)<0,Abs(ROC(C,1,$)),0),LastValue(Q)),If(B=2,Wilders(If(ROC(O,1,$)< 0,Abs(ROC(O,1,$)),0),LastValue(Q)),If(B=3,Wilders(If(ROC(H,1,$)<0,Abs(ROC(H,1,$)),0),LastValue(Q)),If(B=4,Wilders(If(ROC(L,1,$)0,Abs(ROC(L,1,$)),0),LastValue(Q)),Wilders(If(ROC(V,1, $)<0,Abs(ROC(V,1,$)),0),LastValue(Q))))));RS:=Z/Y;100-(100/(1+RS))(Go Top)Relative Volatility Index (RVI)The following formulas were taken from the article "The relative volatility index," written by Dorsey, Donald, in the June 93 issue of Technical Analysis of STOCKS & COMMODITIES.Taken from Stocks & Commodities, V. 11:6 (253-256): The Relative Volatility Index by Donald Dorsey"The RVI is simply the relative strength index (RSI) with the standard deviation over the past 10 days used in place of daily price change. Because most indicators use price change for their calculations, we need a confirming indicator that uses a different measurement to interpret market strength. The RVI measures the direction of volatility on a scale of zero to 100. Readings above 50 indicate that the volatility as measured by the 10-day standard deviation of the closing prices is more to the upside. Readings below 50 indicate that the direction of volatility is to the downside. The initial testing indicates that the RVI can be used wherever you might use the RSI and in the same way, but the specific purpose of this study is to measure the RVI's performance as a confirming indicator."The RVI was designed to measure the direction of volatility. It calculates price strength by measuring volatility rather than price change.All of the following formulas are required:@RVI Down ((PREV*13)+If(ROC(C,1,%)<0,Stdev(C,10),0))/14@RVI Up((PREV*13)+If(ROC(C,1,%)>0,Stdev(C,10),0))/14@RVI(100*Fml("@RVI Up"))/(Fml("@RVI Up")+Fml("@RVI Down"))(Go Top)R-squared, Chande and Kroll'sIn 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)For interpretation refer to Chande & Kroll's book, as stated above.Note: The r-squared indicator is built into MetaStock for Windows version 6.0 and later.(Go Top)Rule of 7 OscillatorRule of 7 Down ObjectiveIf((ROC(C,12,%)>-1.5),If((ROC(C,12,%)>-3),If((ROC(C,12,%)>-4.5),((H-(H-L)*1.75)),((H-(H-L)*2.33))),((H-(H-L)*3.5))),(H-(H-L)))

Rule of 7 Up ObjectiveIf((ROC(C,12,%)>1.5),If((ROC(C,12,%)>3),

Page 179: Metastock Formulae

If((ROC(C,12,%)>4.5),(((H-L)*1.75)+L),(((H-L)*2.33)+L)),(((H-L)*3.5)+L)),((H-L)+L))

Rule of 7 OscillatorFml("Rule of 7 UP Objective") -Fml("Rule of 7 DOWN Objective")(Go Top)Rainbow ChartsTo create Rainbow Charts in MetaStock for Windows, open any chart, drop the moving average indicator from the Indicator QuickList, and drop it in the same inner windows as the price bars. Enter two for the Periods and simple for the Method. Next plot a second moving average on the first moving average by dragging a moving average from the QuickList and dropping it on the first moving average (Note: The first moving average should turn light purple before you release the mouse button). If you dropped it correctly the Parameters dialog should say ‘Indicator’ for the Price Field. Click OK to accept two periods and simple as the parameters. Change the colour of this moving average as desired. Now plot a third moving average of the second moving average by repeating these steps. Continue this until you have ten moving averages. Choose Yes if MetaStock prompts you about plotting a duplicate indicator.

To save you time, Equis have created a template that allows you to bypass these steps. You can download this template directly off of the Equis web site. Download this file to the Charts folder (e.g. C:\Program Files\Equis\MetaStock\Charts) in your MetaStock folder. Open any chart and then click on your right mouse button while the pointer is located on the chart. Choose Apply Template from the Chart Shortcut menu and choose the Rainbow Chart template. You should now have a chart with ten different coloured moving averages.

Next choose Indicator Builder from the Tools menu and enter the following formulas.Rainbow MaxMax(Mov(C,2,S),Max(Mov(Mov(C,2,S),2,S),Max(Mov(Mov(Mov(C,2,S),2,S),2,S),Max(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),Max(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),Max(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),Max(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),Max(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),Max(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S))))))))))

Rainbow MinMin(Mov(C,2,S),Min(Mov(Mov(C,2,S),2,S),Min(Mov(Mov(Mov(C,2,S),2,S),2,S),Min(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),Min(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),Min(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),Min(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),

Page 180: Metastock Formulae

Min(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),Min(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S))))))))))

Rainbow Oscillator100 * (CLOSE - ((Mov(C,2,S)+Mov(Mov(C,2,S),2,S)+Mov(Mov(Mov(C,2,S),2,S),2,S) + Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S) + Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S) + Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S) +Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S)+ Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S)+Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S)+ Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S)) /10))/(HHV(C,10)-LLV(C,10))

Lower Rainbow Band-100 * (Fml("Rainbow Max") - Fml("Rainbow Min")) /(HHV(C,10) - LLV(C,10))

Upper Rainbow Band100 * (Fml("Rainbow Max") - Fml("Rainbow Min")) /(HHV(C,10) - LLV(C,10))

Plot the Rainbow Oscillator in a new inner window of your chart with the ten moving averages, by dropping the custom indicator from the QuickList onto the chart’s heading. Right click on the Rainbow Oscillator and choose properties, then change the Style to a histogram. Now plot the Lower Rainbow Band and the Upper Rainbow Band in the same inner window as the Rainbow Oscillator. If the scaling dialog appears when plotting these indicators, choose ‘Merge with Scale on Right.’ Change the colors of the Upper and Lower Rainbow Bands as desired. Now save this as a new template by choosing Save As from the File Menu and changing the File Type to template, so you can easily apply it to any chart.(Go Top)Regress Slope/Money Flow Index/Time Series ForecastA series of four trading systems, using the Regress Slope as basis and combining with other indicators.1. Regress Slope: Signal FormulasEnter Long:                  Alert(RSquared(C,21) < 0.15,21) ANDLinRegSlope(C,34) > opt1 ANDHHV(LinRegSlope(C,34),5) =HHV(LinRegSlope(C,34),13) ANDHHV(MFI(55),5) = HHV(MFI(55),13) ANDHHV(TSF(C,55),5) = HHV(TSF(C,55),13)

Page 181: Metastock Formulae

Close Long:         LLV(TSF(C,55),5) = LLV(TSF(C,55),13) ANDLinRegSlope(C,34) < opt1Enter Short:                  Alert(RSquared(C,21) < 0.15,13) ANDLinRegSlope(C,34) < opt2 ANDLLV(LinRegSlope(C,34),5) =LLV(LinRegSlope(C,34),13) ANDLLV(MFI(55),5) = LLV(MFI(55),13) ANDLLV(TSF(C,144),5) = LLV(TSF(C,144),13)Close Short:        HHV(TSF(C,144),5) = HHV(TSF(C,144),13)

Optimization VariablesOPT1: Min = -0.10 Max = 0.00 Step = 0.10OPT2: Min = -0.20 Max = 0.00 Step = 0.10STOPS: ALL OFF

2. Regress Slope/CMO - All: Signal FormulasEnter Long:                  Alert(RSquared(C,21) < 0.15,21) ANDLinRegSlope(C,34) > opt1 ANDHHV(LinRegSlope(C,34),5) =HHV(LinRegSlope(C,34),13) ANDCMO(C,55) > 0 ANDC = HHV(C,5)Close Long:         LinRegSlope(C,34) < opt1 ANDCMO(C,55) < 0 ANDC = LLV(C,5)Enter Short:                  Alert(RSquared(C,21) < 0.15,13) ANDLinRegSlope(C,34) < opt2 ANDLLV(LinRegSlope(C,34),5) =LLV(LinRegSlope(C,34),13) ANDCMO(C,55) < 0 ANDC = LLV(C,5)Close Short:        LinRegSlope(C,34) > opt2 ANDCMO(C,55) > 0 ANDC = HHV(C,5)

Optimization VariablesOPT1: Min = -0.10 Max = 0.00 Step = 0.10OPT2: Min = -0.20 Max = 0.00 Step = 0.10STOPS: ALL OFF

Page 182: Metastock Formulae

3. Regress Slope/Qstick - (OHLC Rqd): Signal FormulasEnter Long:                  Alert(RSquared(C,21) < 0.15,21) ANDLinRegSlope(C,34) > opt1 ANDHHV(LinRegSlope(C,34),5) =HHV(LinRegSlope(C,34),13) ANDQstick(55) > opt1 ANDHHV(Qstick(55),5) = HHV(Qstick(55),13)AND C=HHV(C,5)Close Long:         LinRegSlope(C,34) < opt1 ANDQstick(55) < opt1 ANDC = LLV(C,5)Enter Short:                  Alert(RSquared(C,21) < 0.15,13) ANDLinRegSlope(C,34) < opt2 ANDLLV(LinRegSlope(C,34),5) =LLV(LinRegSlope(C,34),13) ANDQstick(55) < opt2 ANDLLV(Qstick(55),5) = LLV(Qstick(55),13)AND C = LLV(C,5)Close Short:        LinRegSlope(C,34) > opt2 ANDQstick(55) > opt2 ANDC = HHV(C,5)

Optimization VariablesOPT1: Min = -0.10 Max = 0.00 Step = 0.10OPT2: Min = -0.10 Max = 0.00 Step = 0.10STOPS: ALL OFF

4. Regress Slope/CCI/TSF - All: Signal FormulasEnter Long:                  Alert(RSquared(C,21) < 0.15,21) ANDLinRegSlope(C,34) > opt1 ANDHHV(LinRegSlope(C,34),5) =HHV(LinRegSlope(C,34),13) ANDHHV(CCI(55),5) = HHV(CCI(55),13) ANDCCI(55) > 0 ANDHHV(TSF(C,55),5) = HHV(TSF(C,55),13)AND C = HHV(C,5)Close Long:         LLV(TSF(C,55),5) = LLV(TSF(C,55),13) ANDLinRegSlope(C,34) < opt1 ANDCCI(55) < 0 ANDC = LLV(C,5)Enter Short:                  Alert(RSquared(C,21) < 0.15,13) ANDLinRegSlope(C,34) < opt2 ANDLLV(LinRegSlope(C,34),5) =

Page 183: Metastock Formulae

LLV(LinRegSlope(C,34),13) ANDLLV(CCI(55),5) = LLV(CCI(55),13) ANDLLV(TSF(C,144),5) = LLV(TSF(C,144),13)AND C = LLV(C,5)Close Short:        HHV(TSF(C,144),5) = HHV(TSF(C,144),13) ANDC = HHV(C,5)

Optimization VariablesOPT1: Min = -0.10 Max = 0.00 Step = 0.10OPT2: Min = -0.20 Max = 0.00 Step = 0.10STOPS: ALL OFF

(Go Top)RSI, sine-weighted smoothed{ Smoothed RSI indicator v1.1 }{ Internal sine-weighted smoothing }{ Automatic historically-valid RSI peak/trough boundaries}{ Boundary crossover signals: +1=Long, -1=Short}{ ©Copyright 2004 Jose Silva }{ [email protected] }

{ user input }pds:=1/Input("RSI periods",1,2520,10);plot:=Input("plot:  [1]-RSI,  [2]-Long/Short signals",1,2,1);

{ RSI up/down average components }x:=If(C>Ref(C,-1),C-Ref(C,-1),0);y:=If(C<Ref(C,-1),Ref(C,-1)-C,0);up:=PREV*(1-pds)+x*pds;dw:=PREV*(1-pds)+y*pds;

{ sine-weighted internal smoothing }s1:=Sin(30)*up;s2:=Sin(60)*Ref(up,-1);s3:=Sin(90)*Ref(up,-2);s4:=Sin(60)*Ref(up,-3);s5:=Sin(30)*Ref(up,-4);up:=(s1+s2+s3+s4+s5)/(Sin(30)*2+Sin(60)*2 +Sin(90));S1:=Sin(30)*dw;S2:=Sin(60)*Ref(dw,-1);S3:=Sin(90)*Ref(dw,-2);S4:=Sin(60)*Ref(dw,-3);S5:=Sin(30)*Ref(dw,-4);dw:=(s1+s2+s3+s4+s5)/(Sin(30)*2+Sin(60)*2 +Sin(90));

{ RSI indicator }dw:=If(dw=0,.000001,dw);RS:=100-100/(1+up/dw);

{ automatic RSI peak/trough boundaries }pk:=Ref(RS,-1)>Ref(RS,-2) AND Ref(RS,-1)>RS

Page 184: Metastock Formulae

 AND Alert(Ref(C,-1)>Ref(C,-2) AND Ref(C,-1)>C,2) {AND Ref(RS,-1)>50};pkVal:=ValueWhen(1,pk,Ref(RS,-1));pkAvg:=Cum(pkVal)/Cum(pkVal>-1);tr:=Ref(RS,-1)<Ref(RS,-2) AND Ref(RS,-1)<RS AND Alert(Ref(C,-1)<Ref(C,-2) AND Ref(C,-1)<C,2) {AND Ref(RS,-1)<50};trVal:=ValueWhen(1,tr,Ref(RS,-1));trAvg:=Cum(trVal)/Cum(trVal>-1);

{ RSI peak/trough boundary cross signals }up:=Cross(trAvg,RS);dw:=Cross(RS,pkAvg);signals:=up-dw;

{ alternative RSI peak/trough signals }{up:=Ref(RS,-1)<Ref(RS,-2) AND Ref(RS,-1)<RS AND Ref(RS,-1)<trAvg;dw:=Ref(RS,-1)>Ref(RS,-2) AND Ref(RS,-1)>RS AND Ref(RS,-1)>pkAvg;signals:=up-dw;}

{ plot }If(plot=1,pkAvg,0);If(plot=1,trAvg,0);If(plot=1,RS,signals)(Go Top)RSI - Stochastic-normalized{ Stochastic-normalized RSI v1.0 }{ [email protected] }

pds1:=Input("RSI periods",2,252,21);pds2:=Input("Stochastic periods",2,252,63);x:=Input("use Open=1 High=2 Low=3 Close=4 Volume=5 P=6",1,6,4);plot:=Input("plot Stoch-RSI=1, RSI=2, both=3",1,3,1);

x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,If(x=6,P,C)))));

Rs:=RSI(x,pds1);{MetaStock versions earlier than v7.2, use:}{Rs:=RSI(pds1);}

StochRsi:=(Rs-LLV(Rs,pds2))/ (HHV(Rs,pds2)-LLV(Rs,pds2)+.000001)*100;

If(plot=3,Rs,50);If(plot=2,Rs,StochRsi)

(Go Top)Random trade generator{ Random trade generator v2.5 }{ ©Copyright 2001-2004 Jose Silva }{ [email protected] }

Page 185: Metastock Formulae

{Download  Random.dll  from  http://www.traderhelp.net  and place in  MetaStock External Function DLLs folder}

{Plot indicator in its own window below price  chart & refresh screen to generate new trades}{Buy signal: +1, Sell signal: -1}{Smaller signals: secondary buy/sell events}

{user input}x:=Input("Frequency of random trades (0-100%)", 0,100,10);seed:=Input("Randomizer seed = 1~1000000,   none = 0",0,1000000,0)-1;

{trade generator engine}y:=ExtFml("Random.Number",seed);z:=(100-x)/2;Buy:=y>50+z;Sell:=y<50-z;

{trade organizer}Init:=Cum(Buy+Sell>-1)=1;BuyInit:=Cum(Buy)=1;flag:=BarsSince(Init OR Buy) <BarsSince(Init OR Sell)+BuyInit;signals:=(BuyInit AND Alert(BuyInit=0,2)  OR flag AND Alert(flag=0,2))   -(flag=0 AND Alert(flag,2));BuySm:=Buy AND signals<1;SellSm:=Sell AND signals>-1;

{signals display}0;(BuySm-SellSm)*.3;signals

Random Strategy market test report

Market Trade $ Profit test for four random strategies, as at Close Fri 23/01/2004.

Tested on 475 ASX All Ords stocks; Avg test period: 8.25 years of data (2075 days); $10K starting capital for each stock; 1% Entry/Exit Slippage, $34 brokerage each way.

Buy & Hold: +$22,699 (+227%) avg profit per stockEntry on Open of day oneExit on Close of last day

Strategy 1: -$7,540 (-75.4%) avg profit per stock==========Random entry (10% of max signals) set at seed 1Random exit (10% of max signals) set at seed 1

Exit 2: -$10,794 (-107.9%) avg profit per stock======

Page 186: Metastock Formulae

Random entry (10% of max signals) set at seed 12% Trailing StopLoss exit

Exit 3: -$6,851 (-68.5%) avg profit per stock======Random entry (10% of max signals) set at seed 15% Trailing StopLoss exit

Exit 4: +$647 (+6.5%) avg profit per stock======Random entry (10% of max signals) set at seed 110% Trailing StopLoss exitame Direction {It returns the number of periods the close is moving in the same direction. A positive number indicates ascending close prices, a negative descending ones and zero unchanged ones}

If(C>Ref(C,-1) AND Ref(C,-1)>Ref(C,-2),PREV+1,If(C<Ref(C,-1) AND Ref(C,-1)<Ref(C,-2),PREV-1,If(C>Ref(C,-1) AND Ref(C,-1)<=Ref(C,-2),1,If(C<Ref(C,-1) AND Ref(C,-1)>=Ref(C,-2),-1,0))))

This formula might be useful as a component of other indicators, systems or explorations, rather than as a stand-alone indicator.(Go Top) Setting up the ADX TemplateThis constructs the template mentioned in the ADX article of the October 1999 issue of TASC by Paul Babbitt.

1. Chart your stock/index/whatever, using a "Clean" template, then do the same again, so that the two overlapping charts are displayed.

2. On the menu bar, click Windows, then Columns. The two charts will then be displayed side-by-side.

3. Change the left-hand chart from Daily to Weekly. Right click on the date scale and select X-Axis. Set the displayed range of dates to what you want, e.g., 1996 to 1999. Make sure the loaded dates range starts earlier. Click the Margin tab and set the margin to 1.

4. From the Indicator drop-down list select Moving Average and drag it to the left-hand chart. A 40 period on the weekly chart corresponds to a 200 day MA.

5. For the right-hand chart, leave it at a daily interval but set the X-Axis as in paragraph 3 above to, say, a 3-month display.

6. Drag the Bollinger Band indicator to the right-hand chart.

7. Drag the Directional Movement ADX indicator to the top of the right-hand chart until the cursor changes to a box, then release. Set the horizontal lines as desired.

Page 187: Metastock Formulae

8. Similarly drag the RSI indicator to the bottom of the right-hand chart. (Go Top)Shark-32 System, Walter DownsThe Shark exit signals don't appear to be all that good. In some cases, the sell signals provide good opportunities for short-selling, but the signals appear to be too few and far between to rely on them for sell signals for long trades. The Shark pattern occurs too infrequently, and there's no guarantee it'll occur when the trend reverses. With long trades, you'd have to look to other indicators, such as CCI, as you say, or maybe Parabolic SAR. You could use price breaking below certain moving averages, too -- or moving- average crossovers.

Seems like entry but no exits in Shark. maybe standard CCI(13) with 200 and -150 triggers.

The shark pattern signals, in the third window in the chart I sent, were really just alerts showing that the shark pattern had occurred on those days. The shark system is based on the close rising above levels set when the shark pattern occurs. The levels are set by the high and low in the shark pattern, and the close must break through them within 25 days of the signal.

The shark pattern, in other words, isn't a buy or sell signal. The buy signals were shown in the second window of the chart I sent. The window is labeled "Shark buy signal." Also, the signals are marked by green arrows over the price plot in the first window of the chart. I didn't include sell signals in the chart I sent earlier today. In the case of MU, the sell signals weren't very good, to be honest.

The Shark system is really based on two separate events: the occurrence of the pattern and then the signal.

The pattern isn't the signal. The system gives a signal if and when the stock breaks above the high point in the pattern over the next 25 days. The high on the first day of the pattern sets that high point. It's like a resistance level, set by the highest point in the shark fin. Sometimes the stock doesn't break above it, so there's no signal. The Shark pattern shows consolidation, which may indicate an expansion in price to come. But the breakout doesn't always occur. If the stock breaks below the low point in the pattern, there's a sell signal.

The idea behind the system is: Look for a three-bar shark pattern, based on progressively smaller ranges. It looks like a shark fin. Once that pattern appears, a level is set by the highest point in the fin, which is the high(-2). In the scan, I call that level "Sharkhigh." To get a buy signal, the price has to close above that level within 25 days. If you want to plot "sharkhigh" over a chart with the price, you can do it with the "BuyOK" part of the Metastock formula by plotting this in the Expert Adviser:

Symmetry:=.28;Apex:=(H+L)/2;WB:=Ref(H,-2)-Ref(L,-2);

Shark:=If((H<Ref(H,-1) AND L>Ref(L,-1) AND Ref(H,-1)<Ref(H,-2) ANDRef(L,-1)>Ref(L,-2))=1,{ try Ref(L,-1)>Ref(L,-2)), without the "=1"}If(apex <= (Ref(H,-2)-(WB*Symmetry)) AND Apex >=(Ref(L,-2)+(WB*Symmetry)) ,1,0),0);

Page 188: Metastock Formulae

Buyok:=Cross(C,ValueWhen(1,Shark=1,Ref(H,-2)));{try Buyok:=ValueWhen(1,Shark=1,Ref(H,-2));}

Chk:=Cum(Buyok)-ValueWhen(1,Shark=1,Cum(Buyok));

ValidChk:=Alert(Shark=1,25);

Buy:= Buyok=1 AND Ref(Chk,-1)=0 AND ValidChk=1;

Buy OR Ref(Buy,-1) OR Ref(Buy,-2) OR Ref(Buy,-3) OR Ref(Buy,-4) ORRef(Buy,-5);

From: Brooke

For the pattern in the Indicator Builder:

Symmetry:=.28;Apex:=(H+L)/2;WB:=Ref(H,-2)-Ref(L,-2);

If((H<Ref(H,-1) AND L>Ref(L,-1) AND Ref(H,-1)<Ref(H,-2) ANDRef(L,-1)>Ref(L,-2)),If(apex <= (Ref(H,-2)-(WB*Symmetry)) AND Apex >=(Ref(L,-2)+(WB*Symmetry)) ,1,0),0);

That's like a resistance level that the price has to break through. It lasts for 25 days or until a new Shark signal appears.

Combining Statistical and Pattern Analysis, Shark – 32 - Walter T.Down, TASC 10/1998Equis

First, choose Expert Adviser from the Tools menu in MetaStock 6.5.Next, choose New and enter the following formulas:

Name:Click the Name tab and enter "Shark – 32" in the Name field.

Trends:Click the Trends tab and enter the following formulas in the Bullishand Bearish fields.

Bullish: Mov(C,5,S)>Mov(C,20,S);

Bearish: Mov(C,5,S)<Mov(C,20,S);

Highlights:

Click the Highlights tab, choose New, and enter "3rd Bar" in the Name field. Now change the color in the Color field to Blue. Finally, enter the following formula in the Condition field, and then choose OK.

Page 189: Metastock Formulae

Symmetry:=.28;Apex:=(H+L)/2;WB:=Ref(H,-2)-Ref(L,-2);Shark:=If((H<Ref(H,-1) AND L>Ref(L,-1) AND Ref(H,-1)<Ref(H,-2) ANDRef(L,-1)>Ref(L,-2))=1,If(Apex <=(Ref(H,-2)-(WB*Symmetry)) AND Apex >= (Ref(L,-2)+(WB*Symmetry)),1,0),0);Shark;

Using the same method as above, enter the following 2 highlight formulas.

Name: 2nd BarColor: BlueCondition:Symmetry:=.28;Apex:=(H+L)/2;WB:=Ref(H,-2)-Ref(L,-2);Shark:=If((H<Ref(H,-1) AND L>Ref(L,-1) AND Ref(H,-1)<Ref(H,-2) ANDRef(L,-1)>Ref(L,-2))=1,If(Apex <=(Ref(H,-2)-(WB*Symmetry)) AND Apex >= (Ref(L,-2)+(WB*Symmetry)),1,0),0);Ref(Shark,+1)=1;

Name: 1st BarColor: BlueCondition:Symmetry:=.28;Apex:=(H+L)/2;WB:=Ref(H,-2)-Ref(L,-2);Shark:=If((H<Ref(H,-1) AND L>Ref(L,-1) AND Ref(H,-1)<Ref(H,-2) ANDRef(L,-1)>Ref(L,-2))=1,If(Apex <=(Ref(H,-2)-(WB*Symmetry)) AND Apex >= (Ref(L,-2)+(WB*Symmetry)),1,0),0);Ref(Shark,+2)=1;

Symbols:Click the Symbols tab, choose New and enter "Shark Buy" in the Name field. Now enter the following formula in the Condition field.

Symmetry:=.28;Apex:=(H+L)/2;WB:=Ref(H,-2)-Ref(L,-2);Shark:=If((H<Ref(H,-1) AND L>Ref(L,-1) AND Ref(H,-1)<Ref(H,-2) ANDRef(L,-1)>Ref(L,-2))=1,If(apex <=(Ref(H,-2)-(WB*Symmetry)) AND Apex >= (Ref(L,-2)+(WB*Symmetry)),1,0),0);Buyok:=Cross(C,ValueWhen(1,Shark=1,Ref(H,-2)));Chk:=Cum(Buyok)-ValueWhen(1,Shark=1,Cum(Buyok));ValidChk:=Alert(Shark=1,25);

Page 190: Metastock Formulae

{Note* The above ValidChk variable makes the Shark signal valid for 25 periods. If the price does not cross above the High value of the base within 25 periods, you will not receive a signal. You can change the number of periods by changing 25 to the number of periods you desire. *}

Buy:= Buyok=1 AND Ref(Chk,-1)=0 AND ValidChk=1;Buy;

Click the Graphic tab. Change the symbol in the Graphic field to Buy Arrow. Now change the color in the Color field to Green. Finally, type "Buy" in the Label field, and then choose OK.

Using the Same method as above, enter the following Symbol formula.

Name: Shark SellCondition:Symmetry:=.28;Apex:=(H+L)/2;WB:=Ref(H,-2)-Ref(L,-2);Shark:=If((H<Ref(H,-1) AND L>Ref(L,-1) AND Ref(H,-1)<Ref(H,-2) ANDRef(L,-1)>Ref(L,-2))=1,If(apex <=(Ref(H,-2)-(WB*Symmetry)) AND Apex >= (Ref(L,-2)+(WB*Symmetry)),1,0),0);Sellok:=Cross(ValueWhen(1,Shark=1,Ref(L,-2)),C);Chk:=Cum(Sellok)-ValueWhen(1,Shark=1,Cum(Sellok));ValidChk:=Alert(Shark=1,25);

{Note* The above ValidChk variable makes the Shark signal valid for 25 periods. If the price does not cross below the Low value of the base within 25 periods, you will not receive a signal. You can change the number of periods by changing 25 to the number of periods you desire.*}

Sell:= Sellok=1 AND Ref(Chk,-1)=0 AND ValidChk=1;Sell;Symbol: Sell ArrowColor: RedLabel: Sell (Go Top)Shark Pattern Symmetry:=.28;Apex:=(H+L)/2;WB:=Ref(H,-2)-Ref(L,-2);

If((H<Ref(H,-1) AND L>Ref(L,-1) AND Ref(H,-1)<Ref(H,-2) ANDRef(L,-1)>Ref(L,-2)),If(apex <= (Ref(H,-2)-(WB*Symmetry)) AND Apex >=(Ref(L,-2)+(WB*Symmetry)) ,1,0),0);

{simply place the above in the filter section}(Go Top)Shifted TSMA Indicator

Page 191: Metastock Formulae

You could use the Reference (Ref) function to shift your indicator back in time and you could add or multiply by a constant or variable to give your indicator a vertical shift. I've never used a time series moving average so I'm kind of out of my league, but I guess it could look like this:

TSMA:= Mov(CLOSE,5,TIMESERIES);ShiftedTSMA:= Ref(TSMA, -1) + 2;ShiftedTSMA (Go Top)Signal FormulasMetaStock for Windows System Tester01_R2/Regress Slope/MFI/TSF - (Vol Rqd)

Enter Long:Alert(RSquared(C,21) < 0.15,21) AND LinRegSlope(C,34) > opt1 ANDHHV(LinRegSlope(C,34),5) = HHV(LinRegSlope(C,34),13) AND HHV(MFI(55),5) = HHV(MFI(55),13) ANDHHV(TSF(C,55),5) = HHV(TSF(C,55),13)Close Long:LLV(TSF(C,55),5) = LLV(TSF(C,55),13) ANDLinRegSlope(C,34) < opt1 Enter Short:Alert(RSquared(C,21) < 0.15,13) ANDLinRegSlope(C,34) < opt2 ANDLLV(LinRegSlope(C,34),5) = LLV(LinRegSlope(C,34),13) ANDLLV(MFI(55),5) = LLV(MFI(55),13) ANDLLV(TSF(C,144),5) = LLV(TSF(C,144),13)Close Short:HHV(TSF(C,144),5) = HHV(TSF(C,144),13) OPTIMIZATION VARIABLES

OPT1: Min = -0.10 Max = 0.00 Step = 0.10OPT2: Min = -0.20 Max = 0.00 Step = 0.10STOPS ALL OFF

02_R2/Regress Slope/CMO - AllSIGNAL FORMULAS

Enter Long:Alert(RSquared(C,21) < 0.15,21) AND LinRegSlope(C,34) > opt1 ANDHHV(LinRegSlope(C,34),5) = HHV(LinRegSlope(C,34),13) ANDCMO(C,55) > 0 ANDC = HHV(C,5)Close Long:LinRegSlope(C,34) < opt1 ANDCMO(C,55) < 0 AND

Page 192: Metastock Formulae

C = LLV(C,5) Enter Short:Alert(RSquared(C,21) < 0.15,13) ANDLinRegSlope(C,34) < opt2 ANDLLV(LinRegSlope(C,34),5) = LLV(LinRegSlope(C,34),13) ANDCMO(C,55) < 0 ANDC = LLV(C,5)Close Short:LinRegSlope(C,34) > opt2 ANDCMO(C,55) > 0 ANDC = HHV(C,5)OPTIMIZATION VARIABLES

OPT1: Min = -0.10 Max = 0.00 Step = 0.10OPT2: Min = -0.20 Max = 0.00 Step = 0.10

STOPS ALL OFF

03_R2/Regress Slope/Qstick - (OHLC Rqd)SIGNAL FORMULAS

Enter Long:Alert(RSquared(C,21) < 0.15,21) AND LinRegSlope(C,34) > opt1 ANDHHV(LinRegSlope(C,34),5) = HHV(LinRegSlope(C,34),13) ANDQstick(55) > opt1 ANDHHV(Qstick(55),5) = HHV(Qstick(55),13) AND C=HHV(C,5)Close Long:LinRegSlope(C,34) < opt1 ANDQstick(55) < opt1 ANDC = LLV(C,5)Enter Short:Alert(RSquared(C,21) < 0.15,13) ANDLinRegSlope(C,34) < opt2 ANDLLV(LinRegSlope(C,34),5) = LLV(LinRegSlope(C,34),13) ANDQstick(55) < opt2 ANDLLV(Qstick(55),5) = LLV(Qstick(55),13) AND C = LLV(C,5)Close Short:LinRegSlope(C,34) > opt2 ANDQstick(55) > opt2 ANDC = HHV(C,5)

OPTIMIZATION VARIABLES

OPT1: Min = -0.10 Max = 0.00 Step = 0.10OPT2: Min = -0.10 Max = 0.00 Step = 0.10

Page 193: Metastock Formulae

STOPS ALL OFF

04_R2/Regress Slope/CCI/TSF - AllSIGNAL FORMULAS

Enter Long:Alert(RSquared(C,21) < 0.15,21) AND LinRegSlope(C,34) > opt1 ANDHHV(LinRegSlope(C,34),5) = HHV(LinRegSlope(C,34),13) ANDHHV(CCI(55),5) = HHV(CCI(55),13) ANDCCI(55) > 0 AND HHV(TSF(C,55),5) = HHV(TSF(C,55),13) AND C = HHV(C,5) Close Long:LLV(TSF(C,55),5) = LLV(TSF(C,55),13) ANDLinRegSlope(C,34) < opt1 ANDCCI(55) < 0 ANDC = LLV(C,5)Enter Short:Alert(RSquared(C,21) < 0.15,13) ANDLinRegSlope(C,34) < opt2 ANDLLV(LinRegSlope(C,34),5) = LLV(LinRegSlope(C,34),13) ANDLLV(CCI(55),5) = LLV(CCI(55),13) ANDLLV(TSF(C,144),5) = LLV(TSF(C,144),13) AND C = LLV(C,5)Close Short:HHV(TSF(C,144),5) = HHV(TSF(C,144),13) ANDC = HHV(C,5) OPTIMIZATION VARIABLES

OPT1: Min = -0.10 Max = 0.00 Step = 0.10OPT2: Min = -0.20 Max = 0.00 Step = 0.10

STOPS ALL OFF (Go Top)Short term horizontal trading ranges exploration by Jim Greening

HHV(C,21) < 1.1*Mov(C,21,S) ANDLLV(C,21) > 0.9*Mov(C,21,S)

{place the formulas above in the filter section; nothing else is required}(Go Top)Sideways Channels ExplorationPeriodicity: Daily

Formulas

Page 194: Metastock Formulae

ColumnA: TopMov(Peak(1,H,1),45,S)-Ref(Mov(Peak(1,H,1),45,S),-45)

ColumnB: BottomMov(Trough(1,L,1),45,S)-Ref(Mov(Trough(1,L,1),45,S),-45)

Filter:ColA < 1 AND ColA > -1 AND ColB < 1 AND ColB > -1 (Go Top)Sine Weighted Moving Average{from Equis}

PI:=3.1415926;SD:=180/6;S1:=Sin(1*180/6)*C;S2:=Sin(2*180/6)*Ref(C,-1);S3:=Sin(3*180/6)*Ref(C,-2);S4:=Sin(4*180/6)*Ref(C,-3);S5:=Sin(5*180/6)*Ref(C,-4);Num:=S1+S2+S3+S4+S5;Den:=Sin(SD)+Sin(2*SD)+Sin(3*SD)+Sin(4*SD)+Sin(5*SD);Num/Den

I use the peak and trough function in MetaStock to show support and resistance levels. It could also be used as a trailing stoploss method. (Go Top)SIROC Indicator From ElderROC(Mov(C,13,E),21,%) (Go Top)Slope of a Linear Regression Line The following custom formula will return the slope of a Linear Regression Line. tp:=Input("Time Periods",1,200,21); ((tp*(Sum(Cum(1)*C,tp)))-(Sum(Cum(1),tp)*(Sum(C,tp))))/((tp*Sum(Pwr(Cum(1),2),tp))-Pwr(Sum(Cum(1),tp),2))(Go Top)SPECIAL TRIX This is my own version of the well-known indicator, TRIX. I have had much better results with this than the canned version that comes with every charting program. 

trix(12)-ref((trix(12)),-1) (Go Top)Stix IndicatorMov((H+L)/2,5,S)-Mov((H+L)/2,35,S) (Go Top)Stochastic and RSI SystemMov((RSI(8)-LLV(RSI(8),8))/(HHV(RSI(8),8)-(LLV(RSI(8),8))),5,w)*100 

A formula like this works best with confirming indicators. If the MACD 13-34-89 is above the zero line (purple line in window 2 above), it confirms and uptrend and the indicator is usually more accurate. If the MACD 13-34-89 is below the zero line, then a "short" indication from the StochRSI may give better results.StochRSI 13 also gives excellent indicators- in this index 

Page 195: Metastock Formulae

it had 4 out of 5 winning signals in two year period. The time between signals is of course longer. Check this method out on your favorite issues. (Go Top)Stochastic MA Systementer longmov(stoch(55,21),5,w)>ref(mov(stoch(55,21),5,w),-1)and mov(stoch(55,21),5,w)<75 andmov(stoch(55,21),5,w)>20exit long(mov(stoch(55,21),5,w)<75 andref(mov(stoch(55,21),5,w),-1)>75)enter short(mov(stoch(55,21),5,w)<70 andref(mov(stoch(55,21),5,w),-1)>70) andmov(stoch(55,21),5,w)<ref(mov(stoch(55,21),5,w),-1)exit shortmov(stoch(55,21),5,w)>ref(mov(stoch(55,21),5,w),-1)and mov(stoch(55,21),5,w)<75 andmov(stoch(55,21),5,w)>20 (Go Top)Stochastic MomentumSMI-Plex:=StochMomentum(2,1,2)+StochMomentum(3,2,1)+StochMomentum(4,2,3)+StochMomentum(5,3,5)+StochMomentum(8,21,13)+StochMomentum(13,25,2)

SMI13E-Plex:=Mov(StochMomentum(2,1,2)+StochMomentum(3,2,1)+StochMomentum(4,2,3)+StochMomentum(5,3,5)+StochMomentum(8,21,13)+StochMomentum(13,25,2),13,E) (Go Top)Stochastic Momentum Indicator{Appeared in the January 1993 issue of Stocks & Commodities magazine}

100 * ( Mov( Mov(C - (.5 * ( HHV(H,13) + LLV(L,13))),25,E),2,E) / (.5*Mov(Mov( HHV(H,13) - LLV(L,13),25,E),2,E))) (Go Top)StochPVT IndicatorsThough not directly related to the volume percent indicator, I have recently been using a volume indicator that I wrote myself in MetaStock's formula language. It uses the same idea that Chande used to turn RSI into the StochRSI oscillator and the preprogrammed Price Volume Trend function. Price Volume Trend is similar to On Balance Volume, except that as the volume is accumulated, it is weighted according to the percent price change from the previous close. 

I use fast and slow "stochastic" lines to judge when either accumulation or distribution is taking place. I used a look back period of 19 days which fits my style. Signals are generated by the fast crossing above or below the slow lines. I have not worked with it enough to say whether or not divergences offer signals too. 

Formulas for the StochPVT are shown below:

Page 196: Metastock Formulae

{Fast line}

Mov((PVT()-LLV(PVT(),19))/(HHV(PVT(),19)-LLV(PVT(),19)), 5, S)

{Slow Line}

Mov(Mov((PVT()-LLV(PVT(),19))/(HHV(PVT(),19)-LLV(PVT(),19)), 5, S),3,S) (Go Top)Stoch RSIAlthough I keep the best of the bunch as a "super secret" for friends, relatives, and clients ... here is a smattering of formulae that might be useful. StoRSI's perform very differently when you plug in various numbers. Experiment and determine which are most suitable for your style and markets. Substitute numbers, apply moving averages, get creative. These are just a few:

((RSI(21)-LLV(RSI(21),8))/((HHV(RSI(21),13))-LLV(RSI(21),13)))

((RSI(21)-LLV(RSI(21),21))/((HHV(RSI(21),21))-LLV(RSI(21),21)))

((RSI(14)-LLV(RSI(14),14))/((HHV(RSI(14),14))-LLV(RSI(14),14)))

Mov((RSI(21)-LLV(RSI(21),13))/(HHV(RSI(21),8)-(LLV(RSI(21)+.00001,13))),8,E)*100

Mov((RSI(5)-LLV(RSI(5),5))/(HHV(RSI(5),5)- (LLV(RSI(5),5))),3,E)*100

Mov((RSI(13)-LLV(RSI(13),13))/(HHV(RSI(13),13)- (LLV(RSI(13),13))),3,E)*100 (Go Top)Stop Loss Indicatorperiodsshort:=Input("periods if short",1,50,10); periodslong:=input("periodsif long",1,50,10);

HHV(H,periodsshort)-atr(periodsshort);{stop loss level for short positions}LLV(L,periodslong)+ATR(periodslong);{stop loss level for long positions} (Go Top)ST Oscillator{The StTO is really nothing unique. It is basically a momentum indicator and plots very similar to the "Chande Momentum Oscillator" with the main difference being the "StTO" doesn't seem to swing as far as the CMO. I am not sure how the math is calculated for the CMO, but the (basic) math for the StTO is: (Close- Yesterday's Close) /(H-L)}

{Here is the MetaStock code I use:}

{name: StTO}

{Short-term Trend Oscillator}

Lb:=Input("Smoothing Period?",1,60,5);

Page 197: Metastock Formulae

Num:=C-Ref(C,-1);Den:=H-L;Mn:=If(Mov(Num,Lb,S)=0,.01,Mov(Num,Lb,S));Md:=If(Mov(Den,Lb,S)=0,.01,Mov(Den,Lb,S));(Mn/Md)*100(Go Top)Starc BandSTARC BAND Formula = (Mov(Typical(),5,S))

Starc Upper Band:Fml( "STARC BAND" )+ (ATR(15)*1.33)

Starc Lower Band:Fml( "STARC BAND" )-(ATR(15)*1.33)

Any five day moving average will work. (Go Top)Support and ResistanceI wrote this MetaStock Expert for calculating the support 1& 2 and resistance 1 & 2 as per Futures magazine, October 1999, page 52.

FIRST RESISTANCE: WRITEVAL(-L+(2* (H+L+C)/3),1.2)SECOND RESISTANCE: WRITEVAL(((H+L+C)/3) +((-L+(2*(H+L+C)/3))-(-H+(2* (H+L+C)/3))),1.2)FIRST SUPPORT: WRITEVAL(-H+(2*(H+L+C)/3),1.2)SECOND SUPPORT: WRITEVAL(((H+L+C)/3)-((-L+(2* (H+L+C)/3))-(-H+(2* (H+L+C)/3))),1.2) (Go Top)Support and Resistance LevelsAVd:=If(CLOSE>Ref(Peak(1,H,1) ,-1),{then}1,{else}If(CLOSE<Ref(Trough(1,L,1),-1),{then}-1,{else}0));ANv:=ValueWhen(1,AVd<>0,AVd);SuRe:=If(ANv=-1,{then}Peak(1,H,1),{else}Trough(1,L,1));SuRe;

{StochCMO}

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((CMO(c,mp1)-LLV(CMO(c,mp1),mp2)),mp3)/Sum((.0000001+(HHV(CMO(c,mp1),mp2)-(LLV(CMO(c,mp1),mp2)))),mp3),mp4,E)*100 (Go Top)

Page 198: Metastock Formulae

System Test Examplesfrom Glen Wallace

"Buy at the open plus half the average true range of the last ten days?"

HIGH >= OPEN + 0.5*Ref(ATR(10), -1)

"If these two moving averages cross today, buy on tomorrow's open."

MA1:= Mov(CLOSE, 10, SIMPLE); MA2:= Mov(CLOSE, 20, SIMPLE);Ref(Cross(MA1, MA2), -1)(with System Testing Options | Testing tab | Entry Price set to "Open" and delay set tozero)

"Exit five bars after entry."

EntryCondition:= {your trade entry conditions};BarsSince(EntryCondition >= 5) (Go Top)Short Volume Waveif(oscv(1,50,S,%),>,0, if(V,>,ref(V,-1),1,0),0)(Go Top)Slope of a LineThe following custom formula returns the slope of a line. For example, this formula returns the slope of a 14 day run of the security's closing prices.( (14 * (Sum(Cum( 1 ) * C ,14 ) ) ) - (Sum(Cum( 1 ) ,14 ) * (Sum( C ,14) ) ) ) / ( (14 * Sum(Pwr (Cum( 1 ) ,2 ) ,14 ) ) - Pwr(Sum(Cum( 1 ) ,14 ) ,2 ) )To apply this to different lines you would replace C with the desired syntax for the line. For example the slope of a 25 period simple moving average would be:( ( Sum(Cum(1) * Mov(C,25,S),14) ) - (Sum(Cum(1),14) * Sum(Mov(C,25,S),14) / 14) ) / ( (Sum(Power(Cum(1),2),14) ) - (Power(Sum(Cum(1),14),2) / 14) )You could also make this a universal formula by using the P variable. You could then plot the formula on top of any line.( (14*(Sum(Cum(1)*P,14) ) ) - Sum(Cum(1),14)*(Sum(P,14 ) ) ) / ( (14*Sum(Pwr(Cum(1),2 ),14 ) )-Pwr(Sum(Cum(1),14),2 ) )(Go Top)Standard Error Bands for MetaStock for WindowsFor interpretation refer to the article "Standard Error Bands", in the September 96 issue of TASC, written by Jon Anderson.21 period Upper Band (smoothed):Mov((21 * Sum(Cum(1) * C,21) - Sum(Cum(1),21) * Sum(C,21)) / (21 * Sum(Pwr(Cum(1),2),21) - Pwr(Sum(Cum(1),21),2)) * Cum(1) + (Mov(C,21,S) - Mov(Cum(1),21,S) * (21 * Sum(Cum(1) * C,21) - Sum(Cum(1),21) * Sum(C,21))/(21 * Sum(Pwr(Cum(1),2),21) - Pwr(Sum(Cum(1),21),2))) +2*(Sqrt(((Sum(Power(C,2),21)-(Power(Sum(C,21),2)/21)) -((Sum(Cum(1)*C,21))-((Sum(Cum(1),21)*Sum(C,21)/21)))/ ((Sum(Power(Cum(1),2),21))-(Power(Sum(Cum(1),21),2)/21)) *((Sum(Cum(1)*C,21))-((Sum(Cum(1),21)*Sum(C,21)/21)))) /19)),3,S)21 period Lower Band (smoothed):Mov((21 * Sum(Cum(1) * C,21) - Sum(Cum(1),21) * Sum(C,21)) / (21* Sum(Pwr(Cum(1),2),21) - Pwr(Sum(Cum(1),21),2)) * Cum(1) +(Mov(C,21,S)

Page 199: Metastock Formulae

- Mov(Cum(1),21,S) * (21 * Sum(Cum(1) * C,21) - Sum(Cum(1),21) * Sum(C,21))/ (21* Sum(Pwr(Cum(1),2),21) - Pwr(Sum(Cum(1),21),2))) - 2*(Sqrt(((Sum(Power(C,2),21)-(Power(Sum(C,21),2)/21)) -((Sum(Cum(1)*C,21))- ((Sum(Cum(1),21) * Sum(C,21)/21))) / ((Sum(Power(Cum (1),2),21))-(Power(Sum(Cum(1),21),2)/21))*((Sum(Cum(1)*C,21))- ((Sum(Cum(1),21)*Sum(C,21)/21)))) /19)),3,S)21 period R2 (smoothed):Mov((Pwr(Corr(Cum(1),C,21,0),2)),3,S)21 period Regression Slope:(((Sum(Cum(1)*C,21))-(Sum(Cum(1),21)*Sum(C,21)/21)) / ((Sum(Power(Cum(1),2),21))-(Power(Sum(Cum(1),21),2)/21)))21 period %A:((C-Fml("21 period lower band (smoothed)")) / (Fml("21 period upper band(smoothed)") -Fml("21 period lower band (smoothed)")))21 period Regression (smoothed):Mov((21*Sum(Cum(1)*C,21)-Sum(Cum(1),21)*Sum(C,21))/ (21*Sum(Pwr(Cum(1),2),21)-Pwr(Sum(Cum(1),21),2))*Cum(1) +(Mov(C,21,S) - Mov(Cum(1),21,S) * (21*Sum(Cum(1) * C,21) - Sum(Cum(1),21)*Sum(C,21))/(21*Sum(Pwr(Cum(1),2),21) -Pwr(Sum(Cum(1),21),2))),3,S)(Go Top)Stochastic %DThe following formula is a three day moving average of a 14 day Stochastic. In MetaStock for Windows this would be the indicator line that is plotted with the built in Stochastic indicatorMov( ( ( ( C - LLV( L,14 ) ) /( HHV( H,14 ) - LLV( L,14 ) ) ) * 100 ) ,3 ,S )(Go Top)Stochastic Wave Longif(ref(stoch(14,3),-1),=,llv(stoch(14,3),3),2, if(stoch(14,3),=,llv(stoch(14,3),3),1,0))(Go Top)Stochastic Wave Shortif(ref(stoch(14,3),-1),=,hhv(stoch(14,3),3),2, if(stoch(14,3),=,hhv(stoch(14,3),3),1,0))(Go Top)Support and ResistanceThink of security prices as the result of a head-to-head battle between a bull (the buyer) and a bear (the seller). The bulls push prices higher and the bears push prices lower. The direction prices actually move reveals who is winning the battle.Support levels indicate the price where the majority of investors believe that prices will move higher, and resistance levels indicate the price at which a majority of investors feel prices will move lower.To create the Support and Resistance indicator in MetaStock use the following custom formula:LookBack := Input("Look Back Periods",1,1000,10);Resistance :=ValueWhen(1,Cross(Mov(C, LookBack,S),C),HHV(H, LookBack));Support :=ValueWhen(1,Cross(C,Mov(C, LookBack,S)),LLV(L, LookBack));Resistance;Support; To use this formula most effectively, use the parameters dialogue to change the style to a dotted line while increasing the line weighting.(Go Top)Simple Moving Average with Resistance and Support

Page 200: Metastock Formulae

In this issue, Dennis L.Tilley uses support and resistance to confirm price and SMA crossover signals in his article "Simple Moving Average with Resistance and Support".

In MetaStock for Windows, you can easily recreate the SMARS Indicators discussed in Tilley's article. First, choose Indicator Builder from the Tools menu in MetaStock 6.5. Next, choose New and enter the following formulas:Resistance and SupportLookBack := Input("Look Back Periods",1,1000,10); Resistance :=ValueWhen(1,Cross(Mov(C, LookBack, S),C),HHV(H, LookBack));Support :=ValueWhen(1,Cross(C,Mov(C, LookBack, S)),LLV(L, LookBack));Resistance;Support;

Resistance and Support * FPrCnt:=Input("Percentage",0,100,10); LookBack:= Input("Look Back Periods",1,1000,10);Resistance:=ValueWhen(1,Cross(Mov(C,LookBack,S),C),HHV(H,LookBack));Support:=ValueWhen(1,Cross(C,Mov(C,LookBack,S)),LLV(L,LookBack));Resistance * ((100-prcnt)/100);Support * ((prcnt/100)+1);

*Note: It is much easier to see the difference between the actual "Resistance and Support" lines and the "Resistance and Support * F " lines if you change the color and/or style of one of them.

To Display the Indicators in MetaStock 6.5 Drag the "Moving Average" indicator from the Indicator QuickList into the price window. Choose Simple as the method, enter the time periods and then click OK.

Now, drag the "Resistance and Support" indicator from the QuickList into the price window. You will be prompted to enter the "Look Back" periods. You should select the same time periods you used with the "Moving Average".

Finally, drag the "Resistance and Support * F" indicator into the price window. You will be prompted to enter the "Percentage" and the "Look Back" periods. If you would like the indicator to be a 10% difference from the "Resistance and Support" line, you would enter 10. You should select the same time periods you used with the "Moving Average".(Go Top)Smoothing Techniques for More Accurate SignalsThe following MetaStock formulas are from the 1998 January TASC article "Smoothing Techniques for more Accurate Signals", by Tim Tillson. Refer to his article for interpretation.

"More sophisticated smoothing techniques can be used to determine market trend. Better trend recognition can be lead to more accurate trading signals."ILRSPeriods:=Input("Periods?",2,63,11);Size:=LastValue(Cum(1));Start:=LastValue(Ref(Mov(P,Periods,S),Periods-Size));Cum(LinRegSlope(P,Periods))+Start; 

Page 201: Metastock Formulae

T3Periods:=Input("Periods?",1,63,5);a:=Input("Hot?",0,2,.7);e1:=Mov(P,Periods,E);e2:=Mov(e1,Periods,E);e3:=Mov(e2,Periods,E);e4:=Mov(e3,Periods,E);e5:=Mov(e4,Periods,E);e6:=Mov(e5,Periods,E);c1:=-a*a*a;c2:=3*a*a+3*a*a*a;c3:=-6*a*a-3*a-3*a*a*a;c4:=1+3*a+a*a*a+3*a*a;c1*e6+c2*e5+c3*e4+c4*e3;

Stock Rhythm SystemIn Jeffrey Owen Katz's article "Trading stocks with a cyclical system" he introduces the Stock Rhythm System. In MetaStock 6.5, or higher, you can easily create this system. With MetaStock running choose "System Tester" from the Tools menu, click on the New button and enter the following formulas:Signal FormulasEnter Longthresh:= 4;k:= 3;m:= 63;Value1:= Stdev(Ref(ROC(C,k,$),-m),20);Value2:= Ref(ROC(C,k,$),-m);When(Value2 > thresh*Value1)Close Longthresh:= 4;k:= 3;m:= 63;Value1:= Stdev(Ref(ROC(C,k,$),-m),20);Value2:= Ref(ROC(C,k,$),-m);When(Value2 <-thresh*Value1)

StopsInactivity Positions - Long and Short Method - Points Minimum Change - 15000 Periods - 10

After entering the formulas click OK, then click on Options. On the Testing page set the Trade Delay to 0, set Positions to Both, then set any other desired options Click OK to save the changes, then open a chart and run the system.(Go Top...) Schaff Trend Cycle Oscillator{ Schaff Trend Cycle Oscillator v1.0 }{ Automatic trigger levels }{ Also see: "MACD oscillator - Schaff Trend Cycle" }{ [email protected] }{ With thanks to Tim Straiton, www.stoploss.ch }

{ variables input }

Page 202: Metastock Formulae

pdsCy:=Input("Schaff cycle periods",2,252,10);pdsSh:=Input("Short periods",1,252,10);pdsLg:=Input("Long periods",2,2520,21);

{ Schaff Trend Cycle }MCD:=Wilders(MP(),pdsSh)-Wilders(MP(),pdsLg);ST:=(MCD-LLV(MCD,pdsCy)) /(HHV(MCD,pdsCy)-LLV(MCD,pdsCy))*100;STC:=Wilders(ST,pdsCy/2);

{ automatic trigger levels }pk:=Ref(STC,-1)>STC AND Ref(STC,-1)>Ref(STC,-2);pkVal:=If(pk,Ref(STC,-1),0);pkAvg:=Cum(pkVal)/(Cum(pk)+.000001);pkAvg:=If(pkAvg=0,100,pkAvg);tr:=Ref(STC,-1)<STC AND Ref(STC,-1)<Ref(STC,-2);trVal:=If(tr,Ref(STC,-1),0);trAvg:=Cum(trVal)/(Cum(tr)+.000001);

{ plot on own window }pkAvg;trAvg;STCSchaff Trend Cycle Indicator

{ Schaff Trend Cycle Indicator v1.0 }{ Automatic trigger levels }{ Also see: "MACD oscillator - Schaff Trend Cycle" }{ [email protected] }{ With thanks to Tim Straiton, www.stoploss.ch }

{ variables input }buffer:=Input("Long/Short buffer zone %", 0,100,0)/100;pdsCy:=Input("Schaff cycle periods",2,252,10);pdsSh:=Input("Short periods",1,252,10);pdsLg:=Input("Long periods",2,2520,21);

{ Schaff Trend Cycle }MCD:=Wilders(MP(),pdsSh)-Wilders(MP(),pdsLg);ST:=(MCD-LLV(MCD,pdsCy)) /(HHV(MCD,pdsCy)-LLV(MCD,pdsCy))*100;STC:=Wilders(ST,pdsCy/2);

{ Schaff Trend Cycle }MCD:=Wilders(MP(),pdsSh)-Wilders(MP(),pdsLg);ST:=(MCD-LLV(MCD,pdsCy)) /(HHV(MCD,pdsCy)-LLV(MCD,pdsCy))*100;STC:=Wilders(ST,pdsCy/2);

{ automatic trigger levels }pk:=Ref(STC,-1)>STC AND Ref(STC,-1)>Ref(STC,-2);pkVal:=If(pk,Ref(STC,-1),0);pkAvg:=Cum(pkVal)/(Cum(pk)+.000001);pkAvg:=If(pkAvg=0,100,pkAvg);

Page 203: Metastock Formulae

tr:=Ref(STC,-1)<STC AND Ref(STC,-1)<Ref(STC,-2);trVal:=If(tr,Ref(STC,-1),0);trAvg:=Cum(trVal)/(Cum(tr)+.000001);

{ STC crossover signals }In:=Cross(pkAvg,STC);Out:=Cross(STC,trAvg);InInit:=Cum(In)=1;Init:=Cum(In+Out>-1)=1;flag:=BarsSince(Init OR In) < BarsSince(Init OR Out)+InInit;signals:=(InInit AND Alert(InInit=0,2)  OR flag AND Alert(flag=0,2))   -(flag=0 AND Alert(flag,2));

{ trend support/resistance levels }STCI:=If(flag,ValueWhen(1,signals,L*(1-buffer)), ValueWhen(1,signals=-1 OR Init,H*(1+buffer)));

{ alternative STC crossover signals method}{bb:=BarsSince(Cross(STC,trAvg)); bs:=BarsSince(Cross(pkAvg,STC)); tb:=ValueWhen(1,Cross(STC,trAvg),H*(1+buffer)); ts:=ValueWhen(1,Cross(pkAvg,STC),L*(1-buffer)); STCI:=If(bb<bs,tb,ts);}

{ plot on price chart }STCI(Go Top...) Signal accumulator{ Accumulates OBV/Volume (or any other signals)  between & including two user-input dates }{signal to accumulate - OBV}x:=If(C>Ref(C,-1),V,If(C<Ref(C,-1),-V,0));

{signal to accumulate - Volume}{x:=V;}

StDay:=Input("Start Day",1,31,1);StMnth:=Input("start Month",1,12,10);StYear:=Input("start Year",1960,2060,2003);EnDay:=Input("End Day",1,31,31);EnMnth:=Input("end Month",1,12,10);EnYear:=Input("end Year",1960,2060,2003);

start:=Year()>StYear OR (Year()=StYear AND (Month()>StMnth  OR Month()=StMnth AND DayOfMonth()>=StDay));end:=Year()<EnYear OR (Year()=EnYear AND (Month()<EnMnth  OR Month()=EnMnth AND DayOfMonth()<=EnDay));

Page 204: Metastock Formulae

period:=start AND end;

If(period,Cum(If(period,x,0)),0)(Go Top...) Siroc{ Siroc v2.0 }{ System1: trigger crossovers }{ System2: auto over-bought/sold crossovers }{ ©Copyright 2002-2004 Jose Silva }{ [email protected] }

prd1:=Input("first period",2,252,21);prd2:=Input("second period",2,252,10);prdCrs:=Input("crossover periods",2,252,5);x:=Input("use Open=1 High=2 Low=3 Close=4 MP=5 P=6",1,6,5);plot:=Input("[1]Siroc,  [2]System1,  [3]System3",1,3,1);

x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,If(x=6,P,C)))));Src:=Mov((x-Mov(x,prd1,E)) /Ref(Mov(x,prd1,E),-prd1),prd1,E);prd2:=prd2*2-1;y:=Src-Ref(Src,-1);

Siroc:=100-100/(1+If(Mov( If(Src<Ref(Src,-1),-y,0),prd2,E)=0,1000000, Mov(If(Src>Ref(Src,-1),y,0),prd2,E)/(Mov(If(Src<Ref(Src,-1),-y,0),prd2,E) +.000001)));SirocAvg:=Cum(Siroc)/Cum(Siroc>-1);

{ Automatic peak/trough historical boundaries }pk:=Ref(Siroc,-1)>Ref(Siroc,-2) AND Ref(Siroc,-1)>Siroc AND Ref(Siroc,-1)>SirocAvg;pkVal:=ValueWhen(1,pk,Ref(Siroc,-1));oBought:=Cum(pkVal)/Cum(pkVal>-1);tr:=Ref(Siroc,-1)<Ref(Siroc,-2) AND Ref(Siroc,-1)<Siroc AND Ref(Siroc,-1)<SirocAvg;trVal:=ValueWhen(1,tr,Ref(Siroc,-1));oSold:=Cum(trVal)/Cum(trVal>-1);

{ System signals }dTrigger:=Mov(Siroc,prdCrs,E);System1:= Cross(Siroc,dTrigger)-Cross(dTrigger,Siroc);System2:= Cross(Siroc,oSold)-Cross(Siroc,oBought);signals:=If(plot=2,System1,System2);

If(plot=1,oBought,0);If(plot=1,oSold,0);If(plot=1,dTrigger,0);If(plot=1,Siroc,signals)

Page 205: Metastock Formulae

Siroc II

{ Siroc II v2.0 }{ System1: trigger crossovers }{ System2: auto over-bought/sold crossovers }{ ©Copyright 2002-2004 Jose Silva }{ [email protected] }

prd1:=Input("first period",2,252,21);prd2:=Input("second period",2,252,10);prd3:=Input("crossover periods",2,252,5);x:=Input("use Open=1 High=2 Low=3 Close=4 MP=5 P=6",1,6,5);plot:=Input("[1]Siroc,  [2]System1,  [3]System3",1,3,1);

x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,MP(),If(x=6,P,C)))));y:=Mov(x,prd1,E);z:=Mov((x-y)/Ref(y,-prd1),prd2,E);

Siroc:=100 *Mov(If(z>Ref(z,-1),z-Ref(z,-1),0),prd3,E) /(Mov(If(z>Ref(z,-1),z-Ref(z,-1),0),prd3,E) +Mov(If(z<Ref(z,-1),Ref(z,-1)-z,0),prd3,E) +.000001);SirocAvg:=Cum(Siroc)/Cum(Siroc>-1);

{ Automatic peak/trough historical boundaries }pk:=Ref(Siroc,-1)>Ref(Siroc,-2) AND Ref(Siroc,-1)>Siroc AND Ref(Siroc,-1)>SirocAvg;pkVal:=ValueWhen(1,pk,Ref(Siroc,-1));oBought:=Cum(pkVal)/Cum(pkVal>-1);tr:=Ref(Siroc,-1)<Ref(Siroc,-2) AND Ref(Siroc,-1)<Siroc AND Ref(Siroc,-1)<SirocAvg;trVal:=ValueWhen(1,tr,Ref(Siroc,-1));oSold:=Cum(trVal)/Cum(trVal>-1);

{ System signals }dTrigger:=Mov(Siroc,prd3,E);System1:= Cross(Siroc,dTrigger)-Cross(dTrigger,Siroc);System2:= Cross(Siroc,oSold)-Cross(Siroc,oBought);signals:=If(plot=2,System1,System2);

If(plot=1,oBought,0);If(plot=1,oSold,0);If(plot=1,dTrigger,0);If(plot=1,Siroc,signals)(Go Top...) Smart System design - Long

Page 206: Metastock Formulae

{ Simple combined Entry & Exit system }{ Plots +1 spike on entry, -1 on exit signals }{ Warning: this trading system is a design example only - do not trade! }{ ©Copyright 2003 Jose Silva }{ [email protected] }

{*** user input section ***}

delay:=1;  {delay entry/exit x periods}pds:=Input("global entry/exit periods", 1,252,21);En1:=Input("enable EMA entry",0,1,1);En2:=Input("enable HHV entry",0,1,1);Ex1:=Input("enable EMA exit",0,1,1);Ex2:=Input("enable LLV exit",0,1,1);Ex3:=Input("enable ATR exit",0,1,1);

{*** place your entry/exit conditions here ***}

EntryCond1:=Cross(C,Mov(C,pds,E)*1.05);EntryCond2:=Cross(C,Ref(HHV(C,pds),-1));ExitCond1:=C<Mov(C,pds,E);ExitCond2:=C<Ref(LLV(C,pds),-1);ExitCond3:=C<HHV(C,pds)-ATR(pds)*2.5;

{*** system logic section ***}

En1:=If(En1,EntryCond1,0);En2:=If(En2,EntryCond2,0);Ex1:=If(Ex1,ExitCond1,0);Ex2:=If(Ex2,ExitCond2,0);Ex3:=If(Ex3,ExitCond3,0);

{*** system signals logic section ***}

In:=En1 OR En2;Out:=Ex1 OR Ex2 OR Ex3;Init:=Cum(In+Out>-1)=1;Flag:=BarsSince(Init OR In) < BarsSince(Init OR Out)+(Cum(In)=1);

{*** system signals display section ***}

Ref(Flag AND Alert(Flag=0,2),-delay)-Ref((Flag=0 AND Alert(Flag,2)),-delay)

More advanced system developers:

Smart System Long Entry developer

{ Plots +1 spike on Long entry signal }{ Warning: this trading system is a design example only - do not trade! }{ ©Copyright 2003 Jose Silva }

Page 207: Metastock Formulae

[email protected] }

{*** user input section ***}

pds:=Input("global entry periods",1,252,21);En1:=Input("enable EMA entry",0,1,1);En2:=Input("enable HHV entry",0,1,1);En3:=Input("enable ATR entry",0,1,1);En4:=Input("enable WR% entry",0,1,1);En5:=Input("enable CMF entry",0,1,1);

{*** place your entry Long conditions here ***}

Entry1:=Cross(C,Mov(C,pds,E)*1.05);Entry2:=Cross(C,Ref(HHV(C,pds),-1));Entry3:=Cross(C,HHV(C-2.5*ATR(pds),pds));Entry4:=Cross(WillR(pds),-50);Entry5:=Cross(CMF(pds),0);

{*** system logic section ***}

En1:=If(En1,Entry1,0);En2:=If(En2,Entry2,0);En3:=If(En3,Entry3,0);En4:=If(En4,Entry4,0);En5:=If(En5,Entry5,0);entry:=En1 OR En2 OR En3 OR En4 OR En5;

{*** system entry output section ***}

entry

Smart System Long Exit developer

{Plots -1 spike on Long exit signal}{Warning: this trading system is a design example only - do not trade!}{©Copyright 2003 Jose Silva}{[email protected]}

{*** user input section ***}

pds:=Input("global exit periods",1,252,10);Ex1:=Input("enable EMA exit",0,1,1);Ex2:=Input("enable LLV exit",0,1,1);Ex3:=Input("enable ATR exit",0,1,1);Ex4:=Input("enable WR% exit",0,1,1);Ex5:=Input("enable CMF exit",0,1,1);

{*** place your exit Long conditions here ***}

Exit1:=C<Mov(C,pds,E);

Page 208: Metastock Formulae

Exit2:=C<Ref(LLV(C,pds),-1);Exit3:=C<LLV(C+2.5*ATR(pds),pds);Exit4:=WillR(pds)<-50;Exit5:=CMF(pds)<0;

{*** system logic section ***}

Ex1:=If(Ex1,Exit1,0);Ex2:=If(Ex2,Exit2,0);Ex3:=If(Ex3,Exit3,0);Ex4:=If(Ex4,Exit4,0);Ex5:=If(Ex5,Exit5,0);exit:=-(Ex1 OR Ex2 OR Ex3 OR Ex4 OR Ex5);

{*** system exit output section ***}

exit

Smart System Long trade signals

{ Plots +1 on entry, -1 spike on exit signals }{ Change user-input default settings within code in referenced indicators: "Smart System Long Entry developer" & "Smart System Long Exit developer" }

{ Warning: this trading system is a design example only - do not trade! }{ ©Copyright 2003 Jose Silva }{ [email protected] }

delay:=Input("Entry and Exit delay",0,5,0);plot:=Input("plot:  entry/exit signals=1,  trade binary=2",1,2,1);

In:=Fml("Smart System Long Entry developer");Out:=Fml("Smart System Long Exit developer")=-1;

Init:=Cum(In+Out>-1)=1;InInit:=Cum(In)=1;flag:=Ref(BarsSince(Init OR In) < BarsSince(Init OR Out)+InInit,-delay);In1:=Cum(Cum(In))=1;Out1:=Cum(Cum(Out))=1;signals:=(InInit AND Alert(InInit=0,2)  OR flag AND Alert(flag=0,2))   -(flag=0 AND Alert(flag,2));odd:=Cum(1)/2=Int(Cum(1)/2);

0;Ref(If(plot=1,In1,0),-delay);If(plot=1,-Ref(Out1 AND BarsSince(In1) >=BarsSince(Out1),-delay),0);If(plot=1,0,If(odd,flag,0));If(plot=1,signals,flag)TASC Trader's Tip: Volatility % Indicator (Dec '97)

Page 209: Metastock Formulae

You can easily create the Volatility% Indicator from William Brower’s article in MetaStock for Windows. First choose Indicator Builder from the Tools menu in MetaStock. Next choose New and enter one of the following formulas:

Formula for MetaStock 6.5

Volatility%

Lookback := Input("Time Periods",1,1000,50);

HighVolatility := Input("High Volatility %",.01,100,3);

100 * Sum(100 * ATR(1)/CLOSE > HighVolatility, Lookback)/Lookback (Go Top)Tema PV Binary Wave Use of Tema PV Binary Wave and Tema QStick Formulas in MetaStock, from "JimG"There are really two different ways to use these formulas. Since the Binary Wave is a smoothed addition of several technical indicators that each give +1 when bullish, 0 when neutral and -1 when negative, it makes sense that a positive number is bullish and rising numbers are bullish. Similarly negative numbers and falling numbers are bearish. The QStick is really a candlestick type indicator, but can be read as bullish or bearish in same way as the Binary Wave. The two traditional ways to play them are to buy on a rise from a negative peak and sell on a fall from a positive peak, or to buy on a zero cross over to the upside and sell on a zero crossover to the downside. Of course you can optimize and find various buy and sell levels as long as you understand what is bearish and what is bullish. My own MetaStock system tests alerts on the BW crossing a moving average of itself and buys or sells on a confirmation of Qstick turning positive or negative respectively. Having said that, I don't make my buy an sell decisions from the indicators or the system test. I do use the system test as an initial screen and use a buy signal as a flag to move the stock to my watch list. I make all buying and selling decisions based on the trend channels. Over the years, I've found that works best for me.(Go Top)Tema PV Binary Wave and Tema QStick Formulas--use of in MetaStock, from "JimG"

There are really two different ways to use these formulas. Since the Binary Wave is a smoothed addition of several technical indicators that each give +1 when bullish, 0 when neutral and -1 when negative, it makes sense that a positive number is bullishand rising numbers are bullish. Similarly negative numbers and falling numbers are bearish. 

The QStick is really a candlestick type indicator, but can be read as bullish or bearish in same way as the Binary Wave. 

The two traditional ways to play them are to buy on a rise from a negative peak and sell on a fall from a positive peak, or to buy on a zero cross over to the upside and sell on a zero crossover to the downside. Of course you can optimize and find various buy and sell levels as long as you understand what is bearish and what is bullish. 

My own MetaStock system tests alerts on the BW crossing a moving average of itself and buys or sells on a confirmation of Qstick turning positive or negative respectively. Having 

Page 210: Metastock Formulae

said that, I don't make my buy an sell decisions from the indicators or the system test. I do use the system test as an initial screen and use a buy signal as a flag to move the stock to my watch list. I make all buying and selling decisions based on the trend channels. Over the years, I've found that works best for me.

The HIGHER CLOSES MetaStock exploration should be entered as follows:

colA CLOSEcolB ref(C,-1)colC ref(C,-2)filter colA > colB AND colB > colC

{General Purpose Intermediate Term MACD Indicator}( Mov( C,13,E ) - Mov( C,34,E ) ) - Mov( ( Mov( C,13,E ) - Mov( C,34,E ) ),89,E ) 

{General Purpose Short Term MACD Indicator}( Mov( C,8,E ) - Mov( C,17,E ) ) - Mov( ( Mov( C,8,E ) - Mov( C,17,E ) ),9,E )(Go Top)Tema StochRSI FormulaI use is Tema smoothed and I subtract 0.5 so I can plot it as a histogram. It's:}

Periods := Input("Enter Tema Smoothing Periods",5,233,13);Tema(((RSI(Periods) - LLV(RSI(Periods),Periods)) / ((0.0001+HHV(RSI(Periods),Periods)) - LLV(RSI(Periods),Periods))) -0.5,Periods) (Go Top)Three inside Days Inside days suggest a volatility compression and often preceede strong breakouts. Search returns 1 for ok and 0 for not ok •             Inside() •             Inside()-1 •             Inside()-2 (Go Top)Tom Demark's Range Expansion IndexTDREITD1:= H-Ref(H,-2);TD2:= L-Ref(L,-2);TD3:= If((H>=Ref(L,-5) OR H>=Ref(L,-6)) AND (L<=Ref(H,-5) OR L<=Ref(H,-6)),1,0);TD4:= If((Ref(H,-2)>=Ref(C,-7) OR Ref(H,-2)>=Ref(C,-8)) AND (Ref(L,-2)<=Ref(C,-7) OR Ref(L,-2)<=Ref(C,-8)),1,0);TD6:= (TD1) + (TD2);TD5:= If((TD3) + (TD4)>=1, (TD6), 0);TD7:= Abs(TD1) + Abs(TD2);TDREI:=((TD5) + Ref(TD5,-1) + Ref(TD5,-2) + Ref(TD5,-3) + Ref(TD5,-4))/ (TD7) + Ref(TD7,-1) + Ref(TD7,-2) + Ref(TD7,-3) + Ref(TD7,-4)*100;TDREI; (Go Top)Trading the Trend 1TTT--TREND TRAILING Indicator -- Andrew Abraham 

Could have been called: •             STOP LOSS Indicator 

Page 211: Metastock Formulae

•             SUPPORT& RESISTANCE Indicator •             DYNAMIC SUPPORT & RESISTANCE Indicator •             BUY/SELL TRIGGER Indicator •             INVESTORS DREAM Indicator •             TRADING Indicator fml("VOLAInd"): Mov(ATR(21),1,W)*3;

If(C>Ref(C,-21) AND C>fml("VOLAInd"),HHV(H,21)-Ref(fml("VOLAInd"),-1), Ref(fml("VOLAInd"),-1)+LLV(L,21))

.or.

VOLAInd :=Mov(ATR(21),1,W)*3;If(C>Ref(C,-21) AND C>VOLAInd, HHV(H,21)-Ref(VOLAInd,-1),Ref(VOLAInd,-1)+LLV(L,21))

{CHANGE BAR COLORS: double click on the price plot in the chart, from the Color/Style page click the UP drop-list and choose darkblue for upwards, and red for downward price changes}(Go Top)Trading the Trend 2Trading the Trend (TTT) -- by Andrew Abraham, TASC Magazine 9/1998, was about one form of stoploss exit: subtract some manipulation of the true range from the highest high (or add it to the lowest low) and exit when the close crosses that. (Members of Chuck LeBeau's Traders Club will recognise the "Chandelier Exit".)

THE CHANDELIER EXIT: The exit stop is placed at a multiple of average true ranges from the highest high or highest close since the entry of the trade. As the highs get higher the stop moves up but it never moves downward.

In MS 6.5 as a variable or custom indicator : DaysinTrade:= Barssince(previous composite entry criteria = 1)

THE YO YO EXIT: This exit is very similar to the Chandelier Exit except that the ATR stop is always pegged to the most recent close instead of the highest high. Since the closes move higher and lower, the stop also moves up and down (hence the Yo Yo name).

Name: Trading the Trend

Pds:=21;Mult:=3;TruRan:=Mov(ATR(1),Pds,W)*Mult;HiLimit:=HHV(H,Pds)-TruRan;LoLimit:=LLV(L,Pds)+TruRan;If(C>HiLimit,HiLimit,LoLimit) 1.            After closing the Indicator Builder click on the Expert Advisor (the guy in the bowler/derby hat). 2.            Click on New, then the Name tab, type in Trading the Trend. 3.            Click on the Highlights tab, select the first line so that it is highlighted, click Edit, type in the name Uptrend, select Colour Blue, select Condition, type in C>FmlVar("Trading the Trend","HiLimit"), and click OK, 

Page 212: Metastock Formulae

4.            Still on the Highlights tab, select the second line, click Edit, type in the name Downtrend, select Color Red, select Condition, type in C<=FmlVar("Trading the Trend","HiLimit"), click OK, and then click OK again. 5.            If you have a chart open that you want to use this on, click Attach, otherwise click Close. In the latter case, when you open a chart and plot the trendline, click on the Expert Advisor, select Trading the Trend, and click on Attach. I've given the Expert steps in detail for any who may not be familiar with its use. To experiment with variations in the lookback periods and the multiplier you can do so in either the Indicator Builder, or right-click the indicator on the chart, select Properties, then the Formula tab, and make the changes (e.g. try a lookback period of 10, and a multiplier of 2.5). As implemented above, the Expert should change accordingly. This shows the trade-offs that have to be madebetween near and distant stops. This is too rudimentary to be traded as a system - the whipsaws would chop you to pieces - but the exits should help to limit drawdowns.

A very similar stoploss is given in Chande & Kroll "The New Technical Trader", pp.167 - 169, "Volatility-Based Trailing Stops". My preference is to plot both the high and the low exit lines in contrasting colours, dispensing with the switch between them, and dispensing with the Expert. If anyone wants help with the code, just say so.

Assuming you entered everything exactly in both the Indicator Builder and the Expert Advisor, one question comes to mind. Did you decide to adapt the formula to MS v.6.5 and use an Input function for Pds and Mult? It seems like a logical thing to do, and in fact I coded it that way at first. The problem is that the Expert Advisor always reverts to the default value (the System Tester does the same thing).

Thus if you used something like:

Pds:=Input("Lookback Periods?",1,1000,20)

and then when you applied it you changed the periods to 15, the Expert Advisor will still read 20. I hard-coded the Pds and Mult parameters for that reason.(Go Top)Trailing Stop Loss IndicatorIf(cum(1)=1,{then} Close,{else} If((C*1.1) <= PREV,{then}(C*1.1),{else} PREV));

{from Adam Hefner}

{Regarding the Recursive Moving Trendline System, I ended up making an oscillator out of it (subtracting the ema from the rta). If you wish to try "tuning" it in MetaStock, you could try different entry levels from the oscillator. For example, go long when TOSC crosses from below -2, or go short when TOSC crosses from above +2. }

{TOSC}Lb:=Input("Look-Back Period?",3,100,21);Ty:=Input("1=C 2=H 3=L 4= Median Price",1,4,1);Tv:=If(Ty=1,C,If(Ty=2,H,If(Ty=3,L,MP())));

Page 213: Metastock Formulae

Alpha:=2/(LB+1);Bot:=(1-Alpha)*(If(Cum(1)<Lb,Tv,PREV))+Tv;RMTA:=(1-Alpha)*(If(Cum(1)<Lb,Tv,PREV))+(Alpha*(Tv+Bot-Ref(Bot,-1)));TOSC:=RMTA-Mov(Tv,lb,E);TOSC;

{NOTE: this code will work slowly because of all of the "PREV" functions. from Adam Hefner.}

{Single 60 Day Period BreakOut Signal Indicator}

ACol:= C;BCol:= Ref(HHV(H,59), -1);CCol:= HHV(H,60);SSDPBOS:= (ACol>BCol) AND (Ref(C,-1)<BCol) AND(H=CCol);SSDPBOS (Go Top)Trending Bandini Mov(C,2,S)>Mov(Mov(C,2,S),2,S) ANDMov(Mov(C,2,S),2,S)>Mov(Mov(Mov(C,2,S),2,S),2,S) ANDMov(Mov(Mov(C,2,S),2,S),2,S)>Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S) ANDMov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S)>Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S) ANDMov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S)>Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S) ANDMov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S)>Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S) ANDMov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S)>Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S) ANDMov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S)>Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S) ANDMov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S)>Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S)(Go Top)True Range FormulaTR = (H - L + Abs(H - Ref(C,-1)) + Abs(L - Ref(C,-1)) )/2 (Go Top)True Strength Index{Appeared in the January 1993 issue of Stocks & Commodities magazine}

100 * ( Mov( Mov( ROC(C,1,$),25,E),13,E) / Mov( Mov( Abs(ROC(C,1,$)),25,E),13,E)) (Go Top)TSF Optimised Trading System for MetastockEnter long:Cross(opt1,((CLOSE-Ref(TSF(C,opt3),-1))/CLOSE*100))

Page 214: Metastock Formulae

Close long:Cross(((CLOSE-Ref(TSF(C,opt3),-1))/CLOSE*100),opt2)

Enter short:Cross(((CLOSE-Ref(TSF(C,opt3),-1))/CLOSE*100),opt2)

Close short:Cross(opt1,((CLOSE-Ref(TSF(C,opt3),-1))/CLOSE*100))

opt 1: zero to -2 (with .1 step)opt 2: zero to +2 (with .1 step)opt 3: 2 to 8 (with 1 step)

{I use this for futures and the above parameters (optimized settings) keep it in the ballpark. If you are applying it to equities (or commodities), it always makes sense to look at the indicator and understand the outside parameters for each of its "steps". It makes no sense to limit your outside limits to -2 and +2 if the TSF oscillates between -8 and +8. So do a little homework on the "outside" limits of the indicator and then optimize accordingly. from Steve Karnish.} (Go Top)TSI and TSI Moving Average100*(Mov(Mov(Roc(C,1,$),25,E),13,E)/Mov(Mov(Abs(Roc(c,1,$)),25,E),13,E))

Mov(Fml("TSI"),20,E) (Go Top)The New Advance Decline LineThe formulas and steps necessary to do the New Advance -Decline Line from the September 1994 Technical Analysis of Stocks & Commodities, page 14 by Daniel Downing are:Taken from Stocks & Commodities, V. 12:9 (363-365): A New Advance-Decline Line by Daniel E. Downing"Here's a trading tool that uses a unique version of the daily advance-decline line of the New York Stock Exchange (NYSE). This version helps in our short- and long-term trading of index options and stock index futures. It gives many good short-term trading signals and excellent but infrequent longer-term signals…The philosophy behind this tool is that the short-term trader's capital is finite and that traders have to reliquify their holdings after a period. Traders can buy and try to push the equities higher only so many times before they need to reliquify, just as only a finite amount of selling waves can take place before the sellers are out of supplies. A tool that points to when short-term traders need to reliquify their positions will also spot when the markets will soon reverse their trends."For the Windows versions of MetaStock: •             Load the advances •             Load the declines •             Drag the plot of the advances into the chart of the declines •             Plot the following custom formula directly on the plot of advances. Cum( If( P ,>= ,1000 ,If(C ,< ,1000 , + 1 ,0 ) ,If( C ,>= ,1000 ,-1 ,0 ) ) )(Go Top)Tick Line Momentum OscillatorIn his article "Using The Tick In A Short-Term Indicator", in the January 94 issue of TASC, Daniel E. Downing presents the Tick Line Momentum Oscillator.

Page 215: Metastock Formulae

Taken from Stocks & Commodities, V. 12:1 (42-44): Using The Tick In A Short-Term Indicator by Daniel E. Downing"The tick index, the net difference of the numbers of stocks last traded on an uptick from those last traded on a downtick , is a well-known indicator, but it's got a problem. The raw number result is volatile, perhaps too volatile for some. What to do? here, then, is a way to smooth out the noise to identify short-term trading opportunities.The tick is a basic unit for the markets, watched with fascination during periods of turmoil and periods of enthusiasm. It is quoted throughout the day on most quote services. In addition, the closing tick value can be found on the market statistics pages of financial newspapers such as Barron's and The Wall Street Journal. Let me present, then, the tick line momentum oscillator, which is based on the closing value for the New York Stock Exchange (NYSE) tick indicator. The oscillator has been shown to have a good track record of determining when the NYSE is overbought or oversold on a short-term basis. The formula for the tick line momentum oscillator is simple and can be easily calculated without a computer, although a spreadsheet version can be found in the sidebar, "Tick line momentum." Finally, the oscillator is straightforward and simple to apply."The MetaStock formula for the Tick Line Momentum Oscillator is: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 )(Go Top)Trading Channel IndexThe Trading Channel Index comes from an early version of AIQ's Stock Expert program. "The Trading Channel Index measures the location of average daily price relative to a smoothed average of average daily price. It is derived from the average difference between these two values."To create the Trading Channel Index in MetaStock create the following custom formula's:AP+: Average price( H + L + C ) / 3 ESA+: Smoothed price averageMov( Fml( "AP+" ) ,10 ,E ) + ( Mov( Ref( Fml( "AP+" ) ,-1 ) ,10 ,E ) )D+: Price range estimateMov( ( Fml( "AP+" ) - Fml( "ESA+" ) ) ,10 ,E ) + ( Mov( Ref( Fml( "AP+" ) - Fml( "ESA+" ) ,-1 ) ,10 ,E ) )CI+: Channel index( ( Fml( "AP+" ) - Fml( "ESA+" ) ) / ( 0.015 * Fml( "D+" ) ) )TRADING CHANEL INDEX:Mov( Fml( "CI+" ) ,21 ,E ) + ( Mov( Ref( Fml( "CI+" ) ,-1 ) ,21 ,E ) )(Go Top)Trendline FormulaTrough(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 thedrop down list.(Go Top)Tushar Chande's Target PriceA:=Mov(Abs(C-Ref(C,-1)),10,S);TPH1:=C+A;TPH2:=C+(2*A);TPL1:=C-A;

Page 216: Metastock Formulae

TPL2:=C-(2*A);TPH1;TPH2;TPL1;TPL2;(Go Top)Tushar Chande's Vidya with Volatility BandsK:=Stdev(C,5)/Mov(Stdev(C,5),20,S);SC:=0.9;Vidya:=SC*K*C+(1-SC*K)*Ref(C,-1);UpperBand:=Vidya+2*.5*K;LowerBand:=Vidya-2*.5*K;UpperBand;LowerBand;Vidya;(Go Top)Trailing Stop - Elder's SafeZone{ Dr Alexander Elder's SafeZone trailing stop v2 }{ Triggers: Long (+1) & Short (-1) signals at crossover of user-defined trailing stops }{ ©Copyright 2003 Jose Silva }{ [email protected] }

coefficient:=Input("SafeZone coefficient", 0,10,2.5);bkpds:=Input("Lookback periods",1,252,10);pds:=Input("Trend EMA periods",2,252,21);adv:=Input("plot:  today's SafeZone=0,  tomorrow's stop=1",0,1,0);plot:=Input("plot:  trailing stop=1,  Long+Short=2,  signals=3",1,3,1);delay:=Input("Entry and Exit signal delay", 0,5,0);

DwSidePen:=Mov(C,pds,E)>Ref(Mov(C,pds,E),-1) AND L<Ref(L,-1);DwSideDiff:=If(DwSidePen,Ref(L,-1)-L,0);DwPenAvg:=Sum(DwSideDiff,bkpds) /(Sum(DwSidePen,bkpds)+.000001);StLong:=Ref(L-DwPenAvg*coefficient,-1);StopLong:=If(C<PREV,StLong,Max(StLong,PREV));

UpSidePen:=Mov(C,pds,E)<Ref(Mov(C,pds,E),-1) AND H>Ref(H,-1);UpSideDiff:=If(UpSidePen,H-Ref(H,-1),0);UpPenAvg:=Sum(UpSideDiff,bkpds) /(Sum(UpSidePen,bkpds)+.000001);StShort:=Ref(H+UpPenAvg*coefficient,-1);StopShort:=If(C>PREV,StShort,Min(StShort,PREV));

In:=Cross(C,Ref(StopShort,-1));Out:=Cross(Ref(StopLong,-1),C);flag:=BarsSince(Cum(In+Out>-1)=1 OR In) < BarsSince(Cum(In+Out>-1)=1 OR Out) +(Cum(In)=1);

Page 217: Metastock Formulae

signals:=Ref((Cum(In)=1 AND Alert((Cum(In)=1)=0,2) OR flag AND Alert(flag=0,2))  -(flag=0 AND Alert(flag,2)),-delay);

If(plot=1,Ref(If(flag=1,stopLong,stopShort), -1+adv),If(plot=2,Ref(stopLong,-1+adv),0));If(plot=1,Ref(If(flag=1,stopLong,stopShort), -1+adv),If(plot=2,Ref(stopShort,-1+adv), signals))(Go Top)Trailing Stop - MetaStock{ Triggers: Long (+1) & Short (-1) signals at crossover of user-defined trailing stops }{ x23 slower than TradeSim's version }{ ©Copyright 2003-2004 Jose Silva }{ [email protected] }

buffer:=Input("buffer % trailing stop",0,100,8);plot:=Input("plot:  trailing stop=1,  Long+Short=2,  signals=3",1,3,1);adv:=Input("plot:  today's trailing stop=0,  tomorrow's stop=1",0,1,0);delay:=Input("Entry and Exit signal delay", 0,5,0);

StLong:=C-C*buffer/100;StShort:=C+C*buffer/100;stopLong:=If(C<PREV,StLong,Max(StLong,PREV));stopShort:=If(C>PREV,StShort,Min(StShort,PREV));

In:=Cross(C,Ref(stopShort,-1));Out:=Cross(Ref(stopLong,-1),C);Init:=Cum(In+Out>-1)=1;InInit:=Cum(In)=1;flag:=BarsSince(Init OR In) < BarsSince(Init OR Out)+InInit;signals:=Ref((InInit AND Alert(InInit=0,2) OR flag AND Alert(flag=0,2)) -(flag=0 AND Alert(flag,2)),-delay);stop:=Ref(If(flag=1,stopLong,stopShort),-1+adv);

If(plot=1,stop, If(plot=2,Ref(stopLong,-1+adv),0));If(plot=1,stop, If(plot=2,Ref(stopShort,-1+adv),signals))

Trailing Stop - TradeSim

{ Triggers: Long (+1) & Short (-1) signals at crossover of user-defined trailing stops }{ x23 faster than MetaStock's 4-PREV version }{ TradeSim.dll must be in ...\MetaStock\External Function DLLs\ folder }{ ©Copyright 2003-2004 Jose Silva }{ [email protected] }

buffer:=Input("buffer % trailing stop",0,100,8);

Page 218: Metastock Formulae

plot:=Input("plot:  trailing stop=1,  Long+Short=2,  signals=3",1,3,1);adv:=Input("plot:  today's trailing stop=0,  tomorrow's stop=1",0,1,0);delay:=Input("Entry and Exit signal delay", 0,5,0);

Volatility:=C*buffer/100;stopLong:=ExtFml("TradeSim.TrailingStop", BAND,       {mode: band or trigger} LONG,       {long or short} Volatility, {user defined see variable above} CLOSE,      {RefPoint for stop calc} CLOSE);     {threshold - stop breached}stopShort:=ExtFml("TradeSim.TrailingStop", BAND,SHORT,Volatility,C,C);

In:=Cross(C,Ref(stopShort,-1));Out:=Cross(Ref(stopLong,-1),C);Init:=Cum(In+Out>-1)=1;InInit:=Cum(In)=1;flag:=BarsSince(Init OR In) < BarsSince(Init OR Out)+InInit;signals:=Ref((InInit AND Alert(InInit=0,2) OR flag AND Alert(flag=0,2)) -(flag=0 AND Alert(flag,2)),-delay);stop:=Ref(If(flag=1,stopLong,stopShort),-1+adv);

If(plot=1,stop, If(plot=2,Ref(stopLong,-1+adv),0));If(plot=1,stop, If(plot=2,Ref(stopShort,-1+adv),signals))

Trailing Stop - AdvTrailStop plug-in

{ Plot on price chart }{ Triggers: Long (+1) & Short (-1) signals at crossover of user-defined trailing stops }{ Much faster than MetaStock's 4-PREV version }{ ©Copyright 2004 Jose Silva }{ [email protected] }

{ AdvancedStop.dll must be in ...\MetaStock\External Function DLLs\ folder }{ AdvancedStop.dll by Richard Dale, free from: http://www.tradernexus.com/advancedstop/advancedstop.html }

buffer1:= Input("initial stop % buffer",0,100,5)/100;buffer2:= Input("trailing stop % buffer",0,100,8)/100;plot:=Input("plot:  trailing stop=1,  Long+Short=2,  signals=3",1,3,1);adv:=Input("plot:  today's trailing stop=0,  tomorrow's stop=1",0,1,0);delay:=Input("Entry and Exit signal delay", 0,5,0);

entrySignal:=C=C;

Page 219: Metastock Formulae

initialStopLong:=C*(1-buffer1);trailStopLong:=C*(1-buffer2);stopLong:=ExtFml("AdvancedStop.StopLong", entrySignal,initialStopLong,0,trailStopLong, 0,0,0,0);

exitSignal:=Cross(stopLong,C);initialStopShort:=C*(1+buffer1);trailStopShort:=C*(1+buffer2);stopShort:=ExtFml("AdvancedStop.StopShort", exitSignal,initialStopShort,0,trailStopShort, 0,0,0,0);

entrySignal:=Cross(C,stopShort);stopLong:=ExtFml("AdvancedStop.StopLong", entrySignal,initialStopLong,0,trailStopLong, 0,0,0,0);

In:=Cross(C,Ref(stopShort,-1));Out:=Cross(Ref(stopLong,-1),C);Init:=Cum(In+Out>-1)=1;flag:=BarsSince(Init OR In) < BarsSince(Init OR Out)+(Cum(In)=1);signals:=Ref(((Cum(In)=1) AND Alert((Cum(In)=1)=0,2) OR flag AND Alert(flag=0,2)) -(flag=0 AND Alert(flag,2)),-delay);stop:=Ref(If(flag=1,stopLong,stopShort),-1+adv);

If(plot=1,stop, If(plot=2,Ref(stopLong,-1+adv),0));If(plot=1,stop, If(plot=2,Ref(stopShort,-1+adv),signals))(Go Top)Trendline - adjustable{ ©Copyright 2003 Jose Silva }{ [email protected] }

pds:= Input("average trend length periods",2,252,21);pr:=Input("Open=1 High=2 Low=3 Close=4 Vol=5 MP=6, P=7",1,7,4);display:=Input("plot Trend line = 1, Trend points = 2",1,2,1);

{define events}pr:=If(pr=1,O,If(pr=2,H,If(pr=3,L,If(pr=5,V,If(pr=6,MP(),If(pr=7,P,C))))));price1:=pr;price2:=pr;time1:=price1>Ref(HHV(price1,pds),-1);time2:=price2<Ref(LLV(price2,pds),-1);

{restrict to last events}

Page 220: Metastock Formulae

time1:=time1 AND Cum(time1)=LastValue(Cum(time1));time2:=time2 AND Cum(time2)=LastValue(Cum(time2));

{sort events}t1pds:=LastValue(BarsSince(time1));t2pds:=LastValue(BarsSince(time2));x1:=If(t1pds>=t2pds,time1,time2);x2:=If(t1pds>=t2pds,time2,time1);y1:=If(t1pds>=t2pds,price1,price2);y2:=If(t1pds>=t2pds,price2,price1);

{fix coordinates}y1:=ValueWhen(1,x1,y1);y2:=LastValue(ValueWhen(1,x2,y2));b1:=LastValue(BarsSince(x1));b2:=LastValue(BarsSince(x2));plot:=y1+BarsSince(x1)*(y2-y1)/(b1-b2);

If(display=1,plot,time1+time2)Up 20% on Double Average Volume

Col A: CLOSE 

Col B:ROC(C,5,%) 

Filter ROC(C,5,%)>=20 AND Mov(V,5,S)>=(2*Ref(Mov(V,60,S),-5)) 

Filter enabled Yes 

Periodicity Daily 

Records required 1300Variable MA Formula- Updatedperiods:=Input("periods",1,244,89);VariableMA511( mp() , periods)

Equis put this function in for me. It uses VHF rather than CMO. Unlike the present version, this is better. (Go Top)Vidya 21, 5This is the MetaStock code for VIDYA 21,5 which applies to the article "Breaking Out Of Price Channels" by Gerald Marisch in the TASC January 1998 edition.

Length:=Input("Length",1,200,21);Smooth:=Input("Smoothing",1,200,5);AbsCMO:=(Abs(CMO(C,Length)))/100;SC:=2/(Smooth+1);VIDYA:=If(Cum(1)<=(Length+1),C,(SC*AbsCMO*CLOSE)+(1-(SC*AbsCMO))*PREV);VIDYA 

Page 221: Metastock Formulae

(Go Top)Vidya with P variable, version IIMy 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 LongC-(((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)Vidya ExplanationVidya is a subject that comes up with some regularity. It's actually available in MetaStock as the Variable Moving Average (Mov(C,n,V) but Equis, for their own inscrutable reasons, choose not to identify it by name. If you refer to the MetaStock manual, be aware that there is a typo in the formula (0.078 should read 0.78). Two or three years ago I coded the version given in TAS&C and it overlaid the MetaStock version precisely, except that at the time the MetaStock version was not correctly initialised -- this has since been corrected. Equis acknowledged the typo at the time, but have done nothing about it.

As far as the 'circular reference' is concerned, you are right that eventually you run out of data. However adding a portion of yesterday's value to a portion of today's value is common to several indicators, such as the Exponential Moving Average. If no provision is made, then usually the indicator will start with a value of zero, rise rapidly at first, then take some time to stabilise. 

One answer is to initialise it. For a Vidya of the close, period N, you can initialise with something like "If(Cum(1) < N, C,{else} ...)" with the Vidya formula as the 'else'. Then at day N the indicator uses the (N-1) close for yesterday's data and takes much less time to stabilise. (Go Top)Vidya using P variable, version IHere is a version of Vidya using a P variable that matches MetaStock's built-in Variable Moving Average. You can overlay them in different colours on the same chart to satisfy yourself that they are indeed the same (but remember to use the same number of periods). There is a small difference at the start due to different initialisation, after which they are identical. The coding is spelled out for the benefit of anyone studying the book. It can be adapted by adding a variable input for the CMO length (9), or made universal by replacing each C with a P, or the Abs(CMOsc) can be replaced with a different volatility index that ranges between 0 and 1.

{Vidya (Chande)}

Page 222: Metastock Formulae

Pds:= Input("Number of Periods?",1,1000,20);Alpha:= 2/(Pds+1);

{Chande Momentum Oscillator}{UD = Up day}{DD = Down day}UD:= Sum((C-Ref(C,-1))*(C>Ref(C,-1)),9);DD:= Sum((Ref(C,-1)-C)*(C<Ref(C,-1)),9);CMOsc:= (UD-DD)/(UD+DD);

k:= Abs(CMOsc);

Vidya:= (Cum(1) < Pds) * C + (Cum(1)>=Pds) * ((Alpha * k * C) + (1-Alpha* k) * PREV);Vidya (Go Top)Volatility % Indicator You can easily create the Volatility% Indicator from William Brower’s article in MetaStock for Windows. First choose Indicator Builder from the Tools menu in MetaStock. Next choose New and enter one of the following formulas:Formula for MetaStock 6.5Volatility%Lookback := Input("Time Periods",1,1000,50);HighVolatility := Input("High Volatility %",.01,100,3);100 * Sum(100 * ATR(1)/CLOSE > HighVolatility, Lookback)/LookbackFormula for earlier versions of MetaStock for WindowsVolatility%100 * Sum(100 * ATR(1)/CLOSE > 3, 50)/50Now drag the Volatility% from the Indicator QuickList and drop it on the desired chart.(Go Top)Volatility Trade in Gold"A Volatility Trade In Gold" by David S. Landry, CTA, Technical Analysis of Stocks & Commodities, page 87.

In this article the author gives formulas for three indicators MetaStock. The formulas as given will work in all versions of MetaStock. However, there is an error in the formula the author names Volatility 12 EMA. The formula should be: Mov((Fml("CONHV4") + Fml("CONHV6") + Fml("CONHV10"))/3,12,e)

Here are formulas for version 6.5 and higher of MetaStock for Windows. These formulas use Inputs which allow you to select the time periods when you plot the formulas.David Landry Historical VolatilityNum:=Input("Number Of Periods For Numerator",1,100,4);Den:=Input("Number Of Periods For Denominator",2,1000,100);(Log(C/Ref(C,-1)),Num)/Std(Log(C/Ref(C,-1)),Den)

David Landry Average Historical VolatilityDen:=Input("Number Of Periods For Denominator",2,1000,100);((Std(Log(C/Ref(C,-1)),4)/Std(Log(C/Ref(C,-1)),Den))+(Std(Log(C/Ref(C,-1)),6)/Std(Log(C/Ref(C,-1)),Den))+(Std(Log(C/Ref(C,-1)),10)/Std(Log(C/Ref(C,-

Page 223: Metastock Formulae

1)),Den)))/3

David Landry EMA of Historical VolatilityDen:=Input("Number Of Periods For Denominator",2,1000,100);EMA:=Input("Number Of Periods For EMA",2,100,12);Mov(((Std(Log(C/Ref(C,-1)),4)/Std(Log(C/Ref(C,-1)),Den))+(Std(Log(C/Ref(C,-1)),6)/Std(Log(C/Ref(C,-1)),Den))+(Std(Log(C/Ref(C,-1)),10)/Std(Log(C/Ref(C,-1)),Den)))/3,LastValue(EMA),E)

Note: Standard deviation information was not included here because the way these formulas are being used, any standard deviation being used would return an identical value as 1 standard deviation. (Go Top)Volatility Bands as a Long Term Strategy This article "Volatility Bands As A Long Term Strategy", by Ahmet Tezel, Ph.D., and Suzan Koknar-Tezel, M.S., which appears in this issue introduces two different volatility band trading systems. One system uses bands based on moving averages and the other is based on bands which use regression. To plot the Moving Average Asymmetric Volatility Price Bands in MetaStock for Windows, simply plot Bollinger Bands using 11 periods and 1.7 standard deviations. Then click your right-mouse button while the cursor is over the lower band and choose properties. Change the standard deviations to 2. This plot will now appear exactly as the bands discussed in the article.To plot the Regression Asymmetric Volatility Price Bands in Metastock for Windows, simply plot Standard Error Bands using 21 periods, 1 for standard errors, and 1 for the smoothing periods. Then click your right-mouse button while the cursor is over the lower band and choose properties. Change the standard errors to 1.5.To recreate the systems in MetaStock for Windows, choose System Tester from the Tools menu. Next choose New and enter the following trading rules and stop conditions. After entering this information, choose Options and change the trade delay to 1, then change the Trade Price to Open. If you have MetaStock 6.5 enter the first set of formulas. MetaStock 6.5 allows variables which will allow you to change the periods when testing much more easily.(Go Top)Volatility Over 16 WeeksCol A: CLOSE

Col B: Vol(10,80)

Filter: Vol(10,80)>200

Filter enabled: Yes (Go Top)Volume Accumulation PercentageI contacted David Vomund by e-mail and he was kind enough to mail me the equations required to calculate the VAP. I've programmed them in MetaStock as follows:

VOLUME ACCUMULATION PERCENTAGEPeriods:=Input("Time Periods",1,60,21);X:=(2*C-H-L)/(H-L);TVA:=Sum(V*x,Periods);

Page 224: Metastock Formulae

TV:=Sum(V,Periods);VA:=100*TVA/TV;VA (Go Top)Volume Based Exploration1. Stocks with volume > 10x the previous day's volume 

2. Stocks where the above situation hasn't occurred during the previous 60 days.

ColA = if(V > 10*ref(V,-1),1,0) 

ColB = ref(barssince(V>10*ref(V,-1)),-1) 

Filter: ColA=1 and ColB>60 (Go Top)Volatility Differencemov(H-L,1,S)/mov(H-L,20,S)(Go Top)Volume Oscillator Waveif(oscv(1,50,S,%),>,50,1,0)Weakness In A Strong TrendIn an up trend, three or four successive lower CLOSES and the EMA(21) is rising.

SimpleX LONG:

C <= Ref(C,-1) ANDRef(C, -1) <= Ref(C, -2) ANDRef(C, -2) <= Ref(C, -3) ANDMov(C, 21, E) > Ref(Mov(C, 21, E), -1)ORC <= Ref(C,-1) ANDRef(C, -1) <= Ref(C, -2) ANDRef(C, -2) <= Ref(C, -3) ANDRef(C, -3) <= Ref(C, -4) ANDMov(C, 21, E) > Ref(Mov(C, 21, E), -1)

SimpleX SHORT:

C >= Ref(C,-1) ANDRef(C, -1) >= Ref(C, -2) ANDRef(C, -2) >= Ref(C, -3) ANDMov(C, 21, E) < Ref(Mov(C, 21, E), -1)ORC >= Ref(C,-1) ANDRef(C, -1) >= Ref(C, -2) ANDRef(C, -2) >= Ref(C, -3) ANDRef(C, -3) >= Ref(C, -4) ANDMov(C, 21, E) < Ref(Mov(C, 21, E), -1)

Rig this up with an OB/OS oscillator and you've got an entry that is, well, at least worth considering. 

Page 225: Metastock Formulae

(Go Top)Weekly IndicatorsMetaStock Weekly Indicators

I had basically put the weekly indicators on daily charts thing on the back burner for the time being, but someone mentioned the subject in an off list e-mail, and I decided that maybe I should post these two indicators. They look right to me, but double check them. Remember, they plot the previous weeks value beginning the first trading day of the following week, and that value remains constant throughout that week. These are designed for backtesting.....so if you just gotta know on this Friday evening what the weekly value of the indicator is going to be for the following week, simply look a weekly chart.

Stochastic: The %K and %K slowing can be coded to accommodate more parameters by using the user Input function, but when you do this the %D always calculates using the default value of the %K slowing, giving erroneous values. So I just left it as is. Youcan plug in your own values...I just used the MetaStock default values as a starting point. I made the %K D as two separate indicators so that you can plot the %D a different color and/or dashed. The Momentum indicator uses the Input function just fine.

{`Wkly Stoch 5 per %K, slowing=3, no %D}

{start week}sw:=If(DayOfWeek()<=Ref(DayOfWeek(),-1),1,0);yestClo:=If(sw>0,Ref(C,-1),0);

{lowest low last 5 weeks}LLow:=(ValueWhen(1,sw>0,Ref(LowestSince(5,sw>0,L),-1)));

{highest high last 5 weeks}HHigh:=(ValueWhen(1,sw>0,Ref(HighestSince(5,sw>0,H),-1)));

{5 per %K, slowing=3}y:=(ValueWhen(1,sw>0,(yestClo-LLow))+ValueWhen(2,sw>0,(yestClo-LLow))+ValueWhen(3,sw>0,(yestClo-LLow)))/

((ValueWhen(1,sw>0,HHigh)+ValueWhen(2,sw>0,HHigh)+ValueWhen(3,sw>0,HHigh))-

(ValueWhen(1,sw>0,LLow)+ValueWhen(2,sw>0,LLow)+ValueWhen(3,sw>0,LLow)))*100;y;

{`Wkly Stoch 3 per %D of a 5 per %K, slowing=3}

Page 226: Metastock Formulae

{start week}sw:=If(DayOfWeek()<=Ref(DayOfWeek(),-1),1,0);yestClo:=If(sw>0,Ref(C,-1),0);

{lowest low last 5 weeks}LLow:=(ValueWhen(1,sw>0,Ref(LowestSince(5,sw>0=1,L),-1)));

{highest high last 5 weeks}HHigh:=(ValueWhen(1,sw>0,Ref(HighestSince(5,sw>0,H),-1)));

{5 per %K, slowing=3}y:=(ValueWhen(1,sw>0,(yestClo-LLow))+ValueWhen(2,sw>0,(yestClo-LLow))+ValueWhen(3,sw>0,(yestClo-LLow)))/

((ValueWhen(1,sw>0,HHigh)+ValueWhen(2,sw>0,HHigh)+ValueWhen(3,sw>0,HHigh))-

(ValueWhen(1,sw>0,LLow)+ValueWhen(2,sw>0,LLow)+ValueWhen(3,sw>0,LLow)))*100;

{This plots the 3 period %D (ma) of the above.}z:=(ValueWhen(1,sw>0,y)+ValueWhen(2,sw>0,y)+ValueWhen(3,sw>0,y))/3;z

{`Wkly Momentum for DAILY Chart }

{This plots WEEKLY Momentum on DAILY charts. -Ken 4/16/99}

n:=Input("Periods",1,20,10);{start week}sw:=If(DayOfWeek()<=Ref(DayOfWeek(),-1),1,0);

(ValueWhen(1,sw>0,Ref(C,-1))/ValueWhen(n+1,sw>0,Ref(C,-1)))*100(Go Top)Weekly Pivot Point{Weekly Pivot Point Projection 8/4/99}

Dw:=If(DayOfWeek()<=Ref(DayOfWeek(),-1),1,0);{Weekly Typical Price}PP1:=If(Dw=1,{then}(Ref(HighestSince(1,Dw=1,H),-1)+Ref(LowestSince(1,Dw=1,L),-1) +Ref(C,-1))/3,

Page 227: Metastock Formulae

{else}0);{Weekly High}Wh1:=If(Dw=1,{then}Ref(HighestSince(1,Dw=1,H),-1),{else}0);{Weekly Low}Wl1:=If(Dw=1,{then}Ref(LowestSince(1,Dw=1,L),-1),{else}0);Wh:=ValueWhen(1,Wh1>0,Wh1);Wl:=ValueWhen(1,Wl1>0,Wl1);PP:=ValueWhen(1,PP1>0,PP1);{Resistance 1}R1:=(2*PP)-Wl;{Support 1}S1:=(2*PP)-Wh;{Resistance 2}R2:=(PP-S1)+R1;{Support 2}S2:=PP-(R1-S1);R2;R1;S1;S2; (Go Top)Weekly Trix Moving Average TestCOLA: TRIX(3)COLB: REF(TRIX(3),-1)COLC: MOV(TRIX(3),8,TIMESERIES)COLD: REF(MOV(TRIX(3),8,TIMESERIES),-1)COLE: C

Filter enabled:yes

when(cola,>,colc)and when(colb,<,cold)and when(cola,<,0)and when(cola,>,-2) (Go Top)Wilders ATR From Equis{The actual ATR does not use a simple moving average. Welles Wilder uses his own smoothing (a modified exponential average) which is the function named "Wilders" in MetaStock. Try your formula this way:} periods:=Input("ATR Periods?",1,100,10);TH:=If(Ref(C,-1) > H,Ref(C,-1),H);TL:=If(Ref(C,-1) < L,Ref(C,-1),L);TR:=TH-TL;Wilders(TR,periods)(Go Top)WillSpread by Larry Williams The Larry Wiliams' indicator named WillSpread is quite easy to plot in MetaStock for Windows version 6.5. Using version 6.5 of MetaStock for Windows, please follow these steps. •             Plot the underlying commodity. 

Page 228: Metastock Formulae

•             Drag the Spread Indicator from the indicator quick list to this commodity chart. •             Select either Tbonds or Tbills as the security to use to spread. I recommend you plot this in a new inner window. •             Drag the Price Oscillator from the indicator quick list and drop it on the SPREAD plot, not the price plot. The parameters Mr. Williams' uses are 7 and 11 time period exponential moving averages. You also want to use "points" as the method. This plot is the WillSpread indicator. •             At this point, you may change the Spread Indicator plot's color to match the background of the chart, or perhaps move the WillSpread indicator to a separate inner window. If you save this first effort as a template, perhaps named WillSpread, you are able to apply this template to any commodity you wish and the indicator will be automatically calculated against that commodity.You may also use the "Next Security" function within MetaStock for Windows to view each of your commodities by setting the options for next security to "Keep line studies". If you apply this template to the first commodity in your futures folder, you may then use the right arrow to move down the folder contents. Each new commodity will have the WillSpread calculated as it is loaded.(Go Top)Working with DMI{Smoothed DMI Index (20 Period Moving Average)}

Mov(PDI(14)-MDI(14),20,S)

OPEN LONG:close>hhv(low,21)

CLOSE LONG:close<llv(high,21) (Go Top)Writing Metastock Explorations MetaStock is a marvellous program for traders, but can appear complicated and intimidating at first. In reality, it's easy and fun, if you take it slowly, step by step.Let's consider a common trader's question: "How can MetaStock help me find all the stocks where the 3 day moving average has just crossed above the 10 day moving average?"MetaStock's Explorer tool allows you to search all the stocks in the ASX, and within a minute or two (depending on your computer's speed!) generate a list of all stocks meeting this particular criteria.Here's a step by step guide for beginners:1. Open up your Explorer tool in MetaStock by clicking on the little "binoculars" symbol in the upper right field of your screen, or find it under Tools in the drop-down menu.2. You will be presented with the Explorer screen showing a list of ready-made Equis Explorations plus various options to view or edit them. More about these later. Look instead at the list of options to the right.3. Choose the "New" button and click. You've just starting writing your own MetaStock Exploration! MetaStock gives it the name "<New Exploration>" but let's rename it "Moving Average Crossover" for the sake of this exercise.4. Note that the Explorer screen has an upper section labelled "Notes" and then, just below, seven columns, with tabs, labelled "A" to "F," plus "Filter." For now we're just going to work 

Page 229: Metastock Formulae

with the "Filter" column. Click on its tab and you're ready to write a MetaStock formula in this column.5. Enter the following without the quotation marks: "Cross( Mov(c,3,s) , Mov(c,10,s) )" but don't worry about the *spaces* between letters and punctuations marks, nor about capitalisation.6. Here's a quick explanation to ponder, before we go further. What you've just entered under MetaStock Explorer's Filter is a much more simple formula than you realise! It means only "Crossover A over B" or "Crossover 3 over 10" in ordinary English. MetaStock writes this as "Cross( A , B )" where A and B are other MetaStock formulas, any formulas you like. In this case, we're putting two different moving averages in the place of A and B. MetaStock writes the English language phrase "Moving Average of the past 3 days" as "mov(c,3,s)" and the second moving average is exactly the same, with the numeral 10 substituted for the 3. 7. Your first MetaStock Exploration is now finished. Click "OK" in the lower left of the Explorer field to save it and you will quickly find your own "Moving Average Crossover" Exploration added to those already on MetaStock's ready-made list.8. Next, click on the "Explore" button and MetaStock will prompt you for the path to the place on your computer where you have all your ASX (or other) data. Choose which securities you want to scan. I suggest that you choose them all to start with, and save this as a "List" named "All" so that when you make more Explorations you won't have to go through this step again. You can just choose the "All" list whenever you want to scan stocks. (Take note at this point that MetaStock has excellent assistance for you under its "Help" tab as well as one of the best software manuals ever written.)9. MetaStock will quickly verify that your stocks are where you say they are, and prompt you for an "OK". Once you do this, you can watch a nifty screen where MetaStock outlines its search for all the stocks that match your search (Filter) criteria. How long this process takes depends once again on the speed of your computer!10. When Explorer is finished you should choose the "Report" option to find a filtered list of all the stocks which *today* have their 3 day moving average rising above their 10 day moving average. MetaStock allows you to open each or all of these stocks in full screen pages for further analysis.(Go Top)WRO and WSO IndicatorsIn the May 1998 issue of STOCKS & COMMODITIES, a Traders' Tip provided MetaStock formulas for calculating support and resistance levels and the WRO and WSO support and resistance oscillators. The Traders' Tip was based on my article, "Automated Support And Resistance," also in that issue. Since then, I've received many E-mail messages from STOCKS & COMMODITIES readers about it. While the method was well received, the formulas provided were a bit confusing and could use some clarification. Further, execution was slow and screening of large numbers of stocks was difficult. Since then, I havedeveloped a faster and improved method for computing these indicators. To begin, the support levels S1 through S6 and the resistance levels R1 through R6 are separate indicators (12 in all), and each should be entered using the custom indicator option in the indicator builder.

S1 Indicator:ValueWhen(1, Ref(L,-4) = LLV(L,9), Ref(L,-4))

S2 Indicator:ValueWhen(2, Ref(L,-4) = LLV(L,9), Ref(L,-4))

S3 Indicator:

Page 230: Metastock Formulae

ValueWhen(3, Ref(L,-4) = LLV(L,9), Ref(L,-4))

S4 Indicator:ValueWhen(4, Ref(L,-4) = LLV(L,9), Ref(L,-4))

S5 Indicator:ValueWhen(5, Ref(L,-4) = LLV(L,9), Ref(L,-4))

S6 Indicator:ValueWhen(6, Ref(L,-4) = LLV(L,9), Ref(L,-4))

R1 Indicator:ValueWhen(1, Ref(H,-4) = HHV(H,9), Ref(H,-4))

R2 Indicator:ValueWhen(2, Ref(H,-4) = HHV(H,9), Ref(H,-4))

R3 Indicator:ValueWhen(3, Ref(H,-4) = HHV(H,9), Ref(H,-4))

R4 Indicator:ValueWhen(4, Ref(H,-4) = HHV(H,9), Ref(H,-4))

R5 Indicator:ValueWhen(5, Ref(H,-4) = HHV(H,9), Ref(H,-4))

R6 Indicator:ValueWhen(6, Ref(H,-4) = HHV(H,9), Ref(H,-4))

These 12 indicators should be individually plotted with the price data as points, not lines (click on each and change the style to the one on the bottom of the style menu). The color red is recommended for the support levels S1 through S6 and the color blue for the resistance levels R1 through R6. Entering these formulas and changing the style takes a bit of time, but once done, they can be saved as a template and easily applied to anotherstock.

If you are interested only in computing the WRO and WSO indicators, then these formulas can be entered as shown here. It is not necessary to compute S1 through S6 or R1 through R6, since the new formulas are now self-contained. The new WRO and WSO formulas also contain max and min functions to ensure that the change for each level is either zero or 1. This avoids a rare but occasional error when the price change is very large over a short period.

WSO Indicator:L1:=ValueWhen(1,Ref(L,-4)=LLV(L,9),Ref(L,-4));L2:=ValueWhen(2,Ref(L,-4)=LLV(L,9),Ref(L,-4));L3:=ValueWhen(3,Ref(L,-4)=LLV(L,9),Ref(L,-4));L4:=ValueWhen(4,Ref(L,-4)=LLV(L,9),Ref(L,-4));L5:=ValueWhen(5,Ref(L,-4)=LLV(L,9),Ref(L,-4));L6:=ValueWhen(6,Ref(L,-4)=LLV(L,9),Ref(L,-4));L1M:= Max(0,Min(1,Int(L1/C)));L2M:= Max(0,Min(1,Int(L2/C)));

Page 231: Metastock Formulae

L3M:= Max(0,Min(1,Int(L3/C)));L4M:= Max(0,Min(1,Int(L4/C)));L5M:= Max(0,Min(1,Int(L5/C)));L6M:= Max(0,Min(1,Int(L6/C)));100*(1-(L1M+L2M+L3M+L4M+L5M+L6M)/6)

WRO Indicator:L1:=ValueWhen(1,Ref(H,-4)=HHV(H,9),Ref(H,-4));L2:=ValueWhen(2,Ref(H,-4)=HHV(H,9),Ref(H,-4));L3:=ValueWhen(3,Ref(H,-4)=HHV(H,9),Ref(H,-4));L4:=ValueWhen(4,Ref(H,-4)=HHV(H,9),Ref(H,-4));L5:=ValueWhen(5,Ref(H,-4)=HHV(H,9),Ref(H,-4));L6:=ValueWhen(6,Ref(H,-4)=HHV(H,9),Ref(H,-4));L1M:= Max(0,Min(1,Int(L1/C)));L2M:= Max(0,Min(1,Int(L2/C)));L3M:= Max(0,Min(1,Int(L3/C)));L4M:= Max(0,Min(1,Int(L4/C)));L5M:= Max(0,Min(1,Int(L5/C)));L6M:= Max(0,Min(1,Int(L6/C)));100*(1-(L1M+L2M+L3M+L4M+L5M+L6M)/6)

The WRO and WSO oscillators are generally plotted together on a separate scale from the price plot. It is helpful to add horizontal lines at zero and 100 on this same scale. Horizontal lines can be added by clicking on the indicator and selecting "horizontal lines" from the Indicator Properties menu.

These formulas run much faster (by 40 times) than the earlier formulas, and theyÐ¥ve been tested successfully with both end-of-day data and real-time data using MetaStock Professional Version 6.51.(Go Top)Weekly High Low Waveif(H,>,ref(hhv(H,40),-1),1, if(L,<,ref(llv(L,40),-1), -1,0))(Go Top)Weekly Oscillator Segmentmov(oscp(43,86,S,%),43,S)(Go Top)Weekly Price Oscillatormov(oscp(10,20,S,%),10,S)(Go Top)Wilder's VolatilityIn his book New Concepts in Technical Trading Systems, J. Welles Wilder Jr. talks about volatility and describes his Volatility Index and Volatility System. Both of these can be performed in MetaStock™ for Windows. This document describes how to construct both the index and the system.The Volatility Index (VI) is described by Wilder as:VI Today = (13 * VI Prev + TR1) / 14 *where TR1 is today's true range.He defines the true range as the greatest of the following: 1.            The distance from today's high to today's low 2.            The distance from yesterday's close to today's high, or 3.            The distance from yesterday's close to today's low. In MetaStock version 5.0 or higher you would use the following function.

Page 232: Metastock Formulae

VI Today = ATR(14)The Volatility System is:Enter Long Cross(C,Ref(LLV(C,7),-1)+(Ref(ATR(7),-1)*3))Enter ShortCross(Ref(HHV(C,7),-1)-(Ref(ATR(7),-1)*3),C)Zero Lag EMA Here's my Metastock 6.2 coded version of the Zero Lag Moving Average, as described in the April, 2000, issue of Technical Analysis of Stocks and Commodities. I've also used it to construct a Zero Lag MACD and a Zero Lag MACD trigger signal.

Period:= Input("What Period",1,250,10);EMA1:= Mov(CLOSE,Period,E);EMA2:= Mov(EMA1,Period,E);Difference:= EMA1 - EMA2;ZeroLagEMA:= EMA1 + Difference;ZeroLagEMA(Go Top)Zero Lag MACDEMA1:= Mov(CLOSE,13,E);EMA2:= Mov(EMA1,13,E);Difference:= EMA1 - EMA2;ZeroLagEMA13:= EMA1 + Difference;EMA1:= Mov(CLOSE,21,E);EMA2:= Mov(EMA1,21,E);Difference:= EMA1 - EMA2;ZeroLagEMA21:= EMA1 + Difference;ZeroLagMACD:=ZeroLagEMA13 - ZeroLagEMA21;ZeroLagMACD (Go Top)Zero Lag MACD Trigger Signal(To be used with the ZeroLag MACD above)

EMA1:= Mov(CLOSE,13,E);EMA2:= Mov(EMA1,13,E);Difference:= EMA1 - EMA2;ZeroLagEMA13:= EMA1 + Difference;EMA1:= Mov(CLOSE,21,E);EMA2:= Mov(EMA1,21,E);Difference:= EMA1 - EMA2;ZeroLagEMA21:= EMA1 + Difference;ZeroLagMACD:=ZeroLagEMA13 - ZeroLagEMA21;EMA1:= Mov(ZeroLagMACD,8,E);EMA2:= Mov(EMA1,8,E);Difference:= EMA1 - EMA2;ZeroLagTRIG:= EMA1 + Difference;ZeroLagTRIG (Go Top)Zig Zag Validity perc:=Input("Percent",2,100,10);Z:=Zig(C,perc,%);

Page 233: Metastock Formulae

last:=ValueWhen(1,( Z > Ref(Z,-1) AND Ref(Z,-1) < Ref(Z,-2) )OR( Z < Ref(Z,-1) AND Ref(Z,-1) > Ref(Z,-2) ),Ref(Z,-1));pc:=(C-last) * 100 / last;pc:= Abs(pc);SD:=(z>Ref(z,-1) AND Ref(z,-1)>Ref(z,-2)) OR (z<Ref(z,-1) ANDRef(z,-1)<Ref(z,-2));res:=If(pc>=perc ,1,0);If(Alert(res,2) AND SD,1,res);(Go Top)Zigzag Validity Indicator Spyros Raftopoulos1=valid last leg of zig,-1=invalid last leg of zig.DO NOT use this indicator in systems}perc:=Input("Percent",0.2,100,10);Z:=Zig(C,perc,%);last:=ValueWhen(1,( Z > Ref(Z,-1) AND Ref(Z,-1) < Ref(Z,-2) )OR( Z < Ref(Z,-1) AND Ref(Z,-1) > Ref(Z,-2) ),Ref(Z,-1));pc:=(C-last) * 100 / last;pc:= Abs(pc); SD:=(z>Ref(z,-1) AND Ref(z,-1)>Ref(z,-2)) OR (z<Ref(z,-1) ANDRef(z,-1)<Ref(z,-2));res:=If(pc>=perc ,1,0);res:= If(Alert(res,2) AND SD,1,res);res(Go Top) ZigZag - Hi/Lo{ High/Low ZigZag v1.0 }{ Plot on price chart }{ ©Copyright 2004 Jose Silva }{ [email protected] }

pr:=Input("ZigZag reversal amount", 0.001,100000,5);choose:=Input("[1]Hi/Lo ZigZag,  [2]Close ZZ,  [3]Peaks/Troughs",1,3,1);

pk:=PeakBars(1,H,pr)=0;tr:=TroughBars(1,L,pr)=0;pktr:=pk-tr;

zz:=Zig(C,pr,%);zzHi:=Zig(H,pr,%);zzLo:=Zig(L,pr,%);avg:=(zzHi+zzLo)/2;

x:=If(pk,zzHi,If(tr,zzLo,If(avg>Ref(avg,-1),H,L)));zzHiLo:=Zig(x,pr,%);

Page 234: Metastock Formulae

If(choose=1,zzHiLo,If(choose=2,zz,pktr))

  

Email This   BlogThis!   Share to Twitter   Share to Facebook   Share to Pinterest   No comments:Post a Comment Home Subscribe to: Posts (Atom) Translate

Με την υποστήριξη της  Μετάφραση

Google Rank

Popular Posts

Supertrend Indicator - for catching trends with effective stoplossSupertrend Indicator on 5 min Nifty futures chart Copyright Suresh Gundappa 2012 SuperTrend was developed by Olivier Seban , This ind...15 Basic Rules for Using Bollinger BandsGuest Author: B Y  J O H N B O L L I N G E R Bollinger Bands are available on MetaStock and most charting software. They have become popu...RSI, The Secret Weapon For Trend TradingBefore you go jumping to any conclusions, read this through.  There are many uses for RSI (Relative Strength Index).  The way we are go...

An example of multi time frame NIfty trade - 250 points gain!! .

Επιλογή γλώσσας

Page 235: Metastock Formulae

Nifty 10 min charts March 2013 with Metastock SURE indicator, copyright Suresh Gundappa. I got lot of mails last week to show an ...Gartley Pattern Trading Made Easyby  RAMI One of my favorite trading setups is the Gartley Pattern a.k.a The Butterfly. Some of the variations of this pattern off...

Top 5 performing NSE charts YTD using Metastock "SURE" Indicator.As we approach March as well as the first quarter end, year 2013 has been eventful and is being heralded as "traders graveyard" y...BTST or STBT:Intraday low or high is taken out during the last hour of tradingIf an Intraday low or high is taken out during the last hour of trading , then it`s a good sign to do STBT or BTST kind of trades. 7 out o...

CNX Bank Nifty - NSE Futures chart and performance : June 2013 to August 2013 using Metastock "SURE" indicator.As we approach September start...  I can say that Bank Nifty has delivered "single trade" best performance over last four years. ...Five uses of the RSI in analyzing Equity/commodity chartsIn Mr. Wilder’s book-" New Concepts in Technical Trading Systems" , he discusses five uses of the RSI in analyzing  commodity c...How to interpret futures price and open interestBy Sahaj Agrawal, AVP- Derivatives, Kotak Securities Every investment that we make- as players or as investors, is made on solid reason...