METASTOCK FORMULAS
You visit formular pages no : since July, 1, 2002
Click one of the letters below to search for the name of a formula.
<A> <B> <C> <D> <E> <F> <G> <H> <I> <J> <K> <L> <M> <N> <O> <P> <Q> <R> <S> <T> <U> <V> <W> <X> <Y> <Z>

A

1 2 3 Ross Hook
1234's Sell
2 Day Hammer Exploration
21 Day Trigger
25x25 Bond System Metastock Format
5 Day High
52 Week Hi-Lo Exploration
7 Day Rate Of Change Ported From Super Charts
Adaptive Moving Average by Perry Kauffman
ADX And Trendlines
ADX Raw
ADX with Stochastic Signals
Alligator Indicators
Alligator Indicators
Alligator System Modifications
Anti Trigger- LB Raschke (For Metastock v6.5)
Are There Weekly Patterns in the Stock Market?
ATR Custom Indicator
ATR Modified
ATR Trailing Stop Loss
Automatic Support and Resistance
Average Dollar Price Volatility Exploration-Deel
Average Dollar Price Volatility Indicator-Deel
Average-Modified Method

B

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

C

Candle Code
Candle - Hanging Man/Hammer and CCI Trading System
Candle Shadow Support
CCI Spike Trading System
Chande and Kroll's R2 Indicator
Chandlier Exit
Chandelier Exit 2
Chandeleir Exit, version II
Changing Ways Accumulation/Distribution
Changing Ways Accumulation/Distribution
Channel Analysis
Channel Exit with Stop Loss
Cleaning out unwanted stocks from Metastock
Close Above Median Price
CMA
Coding Example
Collection from a Spanish Source
Common Metastock Bar Patterns
Congestion Index
Connors Raschke's Historical Volatility System
Consolidation Breakout, Downside
Consolidation Breakout, Upside
Consolidation Over 16 Weeks
Countback line for Metastock
Create a Gann Swing Expert
Creating Dynamic Vertical Lines
Cross Above 200 MA on Twice Average Volume
Crossing Below 200 Day MA on Double Average Volume
Customisable StochRSI from Nicholas Kormanik
Cyclical System

D

Dahl Oscillator
Dahl Variations
Dave's New System (DNS)
Days Since Crossover
Denvelope
Denvelope (RSI)
DEVSTOP
Displace Indicator Forward
Divergence Between Close and Indicator
Double Inside Day
Double Tops and Double Bottoms
Down 20% on Double Average Volume
DMTF Trading System
Dunnigan Trend
Dunn-Type 1
Dunn-Type 2
Dynamic Multiple Time Frame Indicator
Dynamic Zones

E

ECO - R Krauz
Elliot Oscillator
Elliot Wave Identification
EMA Cross System
End Point Moving Average
Enter 20 Days after MOV Signal
Equivalent to Wilders TR
Excel Confidence %
Excel Confidence %
Expansion Pivots Buy
Expansion Pivots Sell
Experimental Williams Trading System

F

FibboGatto
Fibonacci Ratios and Momentum
Fibonacci Trader- Dynamic Balance Point
Fibonacci Trader-Dynamic Balance Point Step
Fibonacci Trader - Fixed Balance Point
Fibonacci Trader- Fixed Balance Point- REVISED
Fibonacci Trader- Fixed Balance Point Step
Fibonacci Trader- Support and Resistance
Final Plot
Finding Trendiness
Forecast Oscillator
Forecast Oscillator System
Forecast Oscillator System Alternative
Formulas from Stocks and Commodities Magazine
Front Weighted 36 Day Moving Average
Front Weighted 36 Day Moving Average
Full Formula for RSI

G

Gain By %
Gann High Low
Gann Hi-Lo
Gann-Swing
Gann Swing HiLow Activator
Gann Swing Update
Gann-Trend
Gap 1 System
Gap 2 System
Gap 3 System
Gap Days
Gap Trading
Gap Up Formulas
Gap Up System with Delayed Exit
Gilligan's Island Buy
Gilligan's Island Sell
GRII
Guppy MMA Exploration from Trading Tactics, part 2
Guppy MMA Indicators
Guppy's MMA Long
Guppy MMA Oscillator
Guppy's MMA Short

H

Higher Closes
Higher Volume Exploration
Highest High Since Buy Signal
High Low
High Volume

I

Improved Chandeleir Exit
Instantaneous Trendline & Sinewave Indicator as described by John Ehlers
Instantaneous Trendline and Sinewave Indicator
INSYNC Index
Investor Preference Index

J

Jack Landis' Weighted Stochastic
Jeff Cooper 180's Buy
Jeff Cooper 180's Sell
Jeff Cooper Lizards Buy
Jeff Cooper Lizards Sell
Jeff Cooper Slingshots Buy
Jeff Cooper Slingshots Sell
Jeff Cooper Whoops Sell
Jim's Uptrender
John Hunt's Exploration for Metastock

K

Karnish Bollinger Band Histogram Trading System
Kauffman's Adaptive RSI
Krausz's Gann Swing HiLow Activator

L

Linear Regression Slope
Linking Metastock Updates to Excel Files
Lone Ranger
LookBack
LRS-ROC Indicator--another one
LSS Oscillator & Pivot Point

M

MACD Additions
MACD Crossover Buy Signal
MACD Crossover System test in MetaStock, an example of how to create
MACD Custom
MACD Histogram Divergence
MACD Offset
MACD Tops and Bottoms
Mark Brown Band2 Study
Market Pressure - Ultimate
Market Pressure-Ultimate
McClellan Oscillator
McClellan Summation Index
Metastock % Bands Revised
Metastock Adjustable Trading Bands
Metastock Automatic Trendline Formula
Metastock Custom Indicator Moving Averages
Metastock Expert Commentary by Michael Arnoldi
Metastock Formulas from Equis
Metastock SAR Exploration
Metastock-Stocks Closing Above 60 Day High
Mick's Breakout Exploration
Miesal Indicator
Mixed Balance Point Krause Update
Modified 50 Day Moving Average
Modified Williams %R Metastock Indicator
Money Flow Index
MovAvg Asymmetric Volatility Price Bands
Moving Average Channel
Moving Average Crossover---Bullish
Moving Average Crossovers
Moving Average Violated By %
MTF-Fixed Balance Point
MTF Tendency Update
Multipart Formulas
Mutated Variables, Volatility and a New Market Paradigm
My version of Tushar Chande's Vidya using the P variable

N

Natenberg's Volatility
NR4 Formula from Trading Tactics page 100

O

One Day Money Flow
Overbrought/Over Sold

P

Performance Daily
Performance Intra Day and Daily
Persistance of Money Flow
PFE Indicator
Plotting Forward Days
Presto's Magic Box (a tweaked version of the Darvis Box)
Price Action Indicator (PAIN)
Price and Volume Breakout
Pring's Daily KST Buy
Projected Range

Q

R

Rally Gap and Inside Day
Range High
Recursive Moving Trend Average
Recursive Moving Trend Average
Regression Asymmetric Volatile Price Band
Resistance and Support
Resistance and Support *F
ROC Moving Average System Test
RSI and Moving Averages
RSI Divergence
RSI Divergence Exploration
RSI Offset
Ruggerio's Trend

S

Same Direction
Setting up the ADX Template
Shark-32 System, Walter Downs
Shark Pattern
Shifted TSMA Indicator
Short term horizontal trading ranges
Sideways Channels Exploration
Signal Formulas
Sine Weighted Moving Average
Sine-Weighted Moving Average
SIROC Indicator From Elder
Slope of a Linear Regression Line
Special Trix
Stix Indicator
Stochastic and RSI System
Stochastic MA System
Stochastic Momentum
Stochastic Momentum Indicator
StochPVT Indicators
Stoch RSI
Stop Loss Indicator
ST Oscillator
Starc Band
Support and Resistance
Support and Resistance Levels
System Test Examples

T

TASC Trader's Tip: Volatility % Indicator (Dec '97)
Tema PV Binary Wave
Tema PV Binary Wave and Tema QStick Formulas--use of
Tema StochRSI Formula
Three inside Days
Tom Demark's Range Expansion Index
Trading the Trend 1
Trading the Trend 2
Trailing Stop Loss Indicator
Trending Bandini
True Range Formula
True Strength Index
TSF Optimised Trading System for Metastock
TSI and TSI Moving Average

U

Up 20% on Double Average Volume

V

Variable MA Formula- Updated
Vidya 21, 5
Vidya Explanation
Vidya using P variable, version I
Vidya with P variable, version II
Volatility % Indicator
Volatility % Indicator
Volatility Bands as a Long Term Strategy
Volatility Over 16 Weeks
Volume Accumulation Percentage
Volume Based Exploration

W

Weakness In A Strong Trend
Weekly Indicators
Weekly Pivot Point
Weekly Trix Moving Average Test
Wilders ATR From Equis
WillSpread by Larry Williams
Working with DMI
Writing Metastock Explorations
WRO and WSO Indicators

X

Y

Z

Zero Lag EMA
Zero Lag MACD
Zero Lag MACD Trigger Signal
Zig Zag Validity

Page 1

Guppy MMA Oscillator

by Jason Prestwidge

((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)))*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;

Candle Shadow Support

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.

Kontessis

http://users.otenet.gr/~kontesis
www.delphi.com/kontessis
http://groups.yahoo.com/group/greekanalysts  



Common Metastock Bar Patterns


BAR - 3 Higher Highs
H>Ref(H,-1) AND Ref(H,-1)>Ref(H,-2) AND Ref(H,-2)>Ref(H,-3)

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

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

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

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

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

BAR - Fractal-down
If(LOW < Ref(LOW, -1),1,0) AND If(LOW < Ref(LOW, -2),1,0) AND If(LOW <
Ref(LOW,+1),1,0) AND If(LOW < Ref(LOW,+2),1,0)

BAR - 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 Down
GapDown()

BAR - Gap Up
GapUp()

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

BAR - Highest Bars Ago
HighestBars(CLOSE)

BAR - Highest High Value Bars Ago
HHVBars(CLOSE,50)

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

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

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

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

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

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

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

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

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

BAR - Pivot Buy
If(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 Sell
If(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 Volume
ReactionWithVol()

BAR - Reaction Day
Reaction()

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

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

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

BAR - Typical Price
Typical()

(from Walter Lake}

Miesal Indicator

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

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

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

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

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

{from Mike Arnoldi}

Mixed Balance Point Krause Update

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

from Adam Hefner.
VonHef@email.msn.com


MTF-Fixed Balance Point

name: MTF-Fixed Balance Point

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

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


name: MTF-Fixed Balance Point Step

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

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

name: MTF-Dynamic Balance Point

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

name: MTF-Dynamic Balance Point Step

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

name: MTF-S&R

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

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

name: MTF-Tendency

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



Weekly Indicators

MetaStock 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, lowing=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}

{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


from  Ken


M odified Williams %R Metastock Indicator

by Rajat Bose

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

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

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

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 the
action and the longer ones tell you about the trend. I use two indicators
like 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 MMA
Short is bouncing up off a slowly rising MMA Long Term. The exit at the top
of the bubble is indicated by MMA Short turning down after a good separation
from the underlying MMA Long.

from Jeff Lederman.

{Suggestion: Create a single TEMPLATE with all the above indicators, giving
SHORT and LONG MMAs separate colours; e.g., RED for the SHORTs and BLUE for
the LONGs.}

G ann Swing Update

This is an update to Gann-Swing indicators I had posted several months
back. Most of the code has been improved and I have modified the swing
definition 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");
dplot:=If(BarsSince(dt=1)>
BarsSince(dt=-1),1,0);
dplot=1;
Then click on the "ribbon" option and turn off "Display Vertical Lines", I
also turn off
the corner option.
3a. Under highlights tab create a new and call it "HiLo Change", choose
color, and enter this code:
HLd:=If(CLOSE>Ref(Mov(H,3,S),-1),
{then}1,
{else}If(CLOSE<Ref(Mov(L,3,S),-1),
{then}-1,
{else}0));
HLv:=ValueWhen(1,HLd<>0,HLd);
HLv<>Ref(HLv,-1);
3b. Create new and call it "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 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.

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;

from Adam Hefner.

------------------------------------------------------
name: GANN-HiLo

{HiLo 4/27/99}
Lb:=Input("Look-Back Periods?",2,10,3);
HLd:=If(CLOSE>Ref(Mov(H,Lb,S),-1),
{then}1,
{else}If(CLOSE<Ref(Mov(L,Lb,S),-1),
{then}-1,
{else}0));
HLv:=ValueWhen(1,HLd<>0,HLd);
HiLo:=If(HLv=-1,
{then}Mov(H,Lb,S),
{else}Mov(L,Lb,S));
HiLo;
------------------------------------------
name: GANN-Swing

{Gann-Swing 4/27/99}
{Market swing is defined as:
Up = 2 higher highs,
Down = 2 lower lows.}
Us:=BarsSince(Sum(H>Ref(H,-1),2)=2);
Ds:=BarsSince(Sum(L<Ref(L,-1),2)=2);
Hc:=HighestSince(1,Us=0,H);
Lc:=LowestSince(1,Ds=0,L);
Sd1:=If(Us=0,
{then}If((L<>Lc) AND (Ref(L,-1)<>Lc),
{then}1,
{else}0),
{else}If(Ds=0,
{then}If((H<>HC) AND (Ref(H,-1)<>Hc),
{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;
--------------------------------------------
name: GANN-Trend

{Gann-Trend 4/27/99}
{Swing Direction}
Sd:= FmlVar("GANN-Swing","TD1") ;
{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
------------------------------------------
name: GaW-Swing

{Weekly Swing 4/27/99}
{Market swing is defined as:
Up = 2 higher highs,
Down = 2 lower highs }
{Weekly High/Low}
Dw:=If(DayOfWeek()<=Ref(DayOfWeek(),-1),1,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);
Hv1:=ValueWhen(1,Wh>0,Wh);
Hv2:=ValueWhen(2,Wh>0,Wh);
Hv3:=ValueWhen(3,Wh>0,Wh);
Lv1:=ValueWhen(1,Wl>0,Wl);
Lv2:=ValueWhen(2,Wl>0,Wl);
Lv3:=ValueWhen(3,Wl>0,Wl);
Us:=BarsSince((Hv1 > Hv2) AND (Hv2 > Hv3));
Ds:=BarsSince((Lv1 < Lv2) AND (Lv2 < Lv3));
Hc:=Ref(HighestSince(1,Us=0 AND Ref(Us,-1)>0,H),
-1);
Lc:=Ref(LowestSince(1,Ds=0 AND Ref(Ds,-1)>0,L),
-1);
{Swing direction Calculation}
Sd1:=If(Us=0 AND Dw=1,
{then}If((Lv1<>Lc) AND (Lv2<>Lc),
{then}1,
{else}0),
{else}If(Ds=0,
{then}If((Hv1<>Hc) AND (Hv2<>Hc),
{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
-------------------------------------------
name: GaW-Trend

{Weekly Trend 4/27/99}
{Swing Direction}
Sd:= FmlVar("GaW-Swing","TD1") ;
{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



Stop Loss Indicator

periodsshort:=Input("periods if short",1,50,10); periodslong:=input("periods
if 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}

{by Eric Kendall}

Gap Up Formulas

The MetaStock formulas to calculate these percentages are shown below. The
first input is the minimum gap (e.g., 1%), and the second input is the gap
increment (e.g., 1%, which would give you a range of 1-2%). To calculate
gaps down, change the percentage to a negative.

Formula to determine whether the closing price is equal to or exceeds the
opening 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 -
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’s
close 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 gap
trend:

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 AND
GapYesterday < 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;

{by Jon DeBry}

Page 2

Fibonacci Trader-Dynamic Balance Point Step

DPS:=(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;
{created by Adam Hefner 9-1-99}

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


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

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

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

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

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

(created by David Evans)

 

Trending Bandini

Mov(C,2,S)>
Mov(Mov(C,2,S),2,S) AND
Mov(Mov(C,2,S),2,S)>
Mov(Mov(Mov(C,2,S),2,S),2,S) AND
Mov(Mov(Mov(C,2,S),2,S),2,S)>
Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S) AND
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) AND
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) AND
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) AND
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) AND
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) AND
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)

{created by Brookelise}

 

Elliot Oscillator

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

 

GRII

This is a long formula so I broke it up into four pieces. GRII is derived from formulas 1, 2, and 3.

This is a nifty momentum oscillator that I've used for about five years to help me determine the direction of a given market when I have evidence that the market is about to turn.

test
formula
1 GRIIF1 tsf(C,9)-ref(tsf(C,9),-1)

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

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

4 GRII (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))))

(written by Eddie Kwong)

 

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)

(created by Eddie Kwong)

 

{Fibonacci Trader - Fixed Balance Point}
{NOTE: under Color/Style options, change
plot 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

{created by Adam Hefner}

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 or long 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)

(from Thorsten Buhmann in Germany)

 

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.

Ruggerio's Trend
Ruggiero'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.
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 start
to trend.
5. If a trend is based on rule 4, it remains in effect until the 5 day
difference 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 area
in 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 AND
Ref(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))

Metastock Automatic Trendline Formula

Trough(1,L,10)+

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

/

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

*TroughBars(1,L,10)))

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

Mike Helmacy www.techanalysis.com

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

PDI(34) - MDI(34)

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

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

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

 

{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;

Best wishes, Adam Hefner e-mail: VonHef@itlnet.net

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:

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

Adam Hefner. e-mail: VonHef@itlnet.net

Market Pressure - Ultimate

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

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

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

Metastock code for Market Pressure - Ultimate:

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

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

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


Changing Ways Accumulation/Distribution

This is the calculation for the first formula (Todays Change):
Todays close - yesterdays close

This is the main formula, incorporating the first calculation:
If todays change (1st formula) is greater than a 7 day exponential moving average of todays change and todays close is greater than yesterdays close, write down todays close + todays volume, otherwise,
If todays change is less than a 7 day exponential moving average of todays change and todays close is less than yesterdays close, write down the negative value of todays close + todays volume, otherwise write down 0.

Then add up all the days values and keep a cumulative running total for each new trading day.

Simple Interpretation:
Changing Ways Accumulation/Distribution can show divergences against the instrument.
When compared against volume activity, it can show what impact a day of high turnover had on the share price for the coming periods. This is to say that if a day had high volume and there was little movement in the indicator alongside this, then you can suggest that all the volume for that day was absorbed into the price and there is less likelihood of buying/selling pressure in that day taking hold in the market in future trading days.

Metastock code for Changing Ways Accumulation/Distribution:

Cum(If(Fml( "Todays Change" ) > Mov(Fml( "Todays Change" ),7,E) AND C > Ref(C,-1),
C + V,
If(Fml( "Todays Change" ) < Mov(Fml( "Todays Change" ),7,E) AND C < Ref(C,-1),
Neg(C + V) ,0)))

Where Fml( "Todays Change" ) = c - ref(c,-1)

Page 3

Front Weighted 36 Day Moving Average

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

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" ) =
0.07 * Ref(P,-1) +
0.079 * P

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.

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


Lone Ranger

This 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))

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

 

NR4 Formula from Trading Tactics page 100

Column A
Std(Log(C/Ref(C,-1)),5)/Std(Log(C/Ref(C,-1)),99)
Column B
HIGH-LOW<Ref(LLV(H-L,3),-1)
Column C
HIGH<(Ref(HIGH,-1)AND LOW>Ref(LOW,-1))
Column D
HIGH
Column E
LOW
Filter
colA<.5 AND (colB= 1 OR colC= 1)

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)

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

 

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

Higher Closes

Shows stocks which have closed higher on successive days.

  • CLOSE
  • CLOSE -1
  • CLOSE -2
  • **When(colA,>,colB) AND When(colB,>,colC)

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)

 

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))

 

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)

Rally 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()

 

Range High

Looks for out of range move where the close equals the high. Suggests more buying pressure.

The search returns 1 for Ok and 0 for not ok.

  • BigWhite()
  • CLOSE

 

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)

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 jomaba@interbook.net para su publicación en esta página. Muchos dicen que el Santo Grial no existe.¿Y si es mentira?

1 DAILY CLOSE VS HIGH AND LOW WAVE if((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)
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)
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

Page 4

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 of
the price, and that the two outer bands will shift outward to such an extent that the envelope loses its utility as a
volatility 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;
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;

Best wishes, Adam Hefner e-mail: VonHef@itlnet.net

Metastock Formulas from Equis

The following collection of formulas appears at http://www.equis.com/customer/support/
and is a selection of those more useful for Australian conditions. New free Metastock
formulas are added regularly.

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)),
Prev + constant * (CLOSE - PREV));

AMA

 

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))))

 

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)*100

System test:

Enter Long

C=HHV(C,26)

Close Long

Fml("Investor Preference Index")<97.6 AND ROC(Fml("Investor Preference Index"),2,$)<=(-.04)

 

Slope of a Linear Regression Line rev. 01/06/97

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))

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

Formulas from Stocks and Commodities
Magazine

The following collection of formulas are taken from Stocks and Commodities magazine.  A subscription soon pays for itself. This is a selection of those more useful for Australian conditions. Others are available from http://www.equis.com/customer/support/

1996 August TASC Trader's Tips

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 FORMULAS

Column A : Vol ratio

std(log(C/ref(C,-1)),5)/std(log(C/ref(C,-1)),99)

Column B : NR4 day

if(HIGH-LOW,<,ref(llv(H-L,3),-1),1,0)

Column C : Inside

if(HIGH,<,ref(HIGH,-1),if(LOW,>,ref(LOW,-1),1,0),0)

Column D : High

HIGH

Column E : Low

LOW

FILTER FORMULA

Formula:

when(colA,<,0.5) AND (when(colB,=,1) OR when(colC,=,1))

1997 October TASC Traders Tip

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.

Formulas for MetaStock 6.5

MovAvg Asymmetric Volatility Price Bands

SIGNAL FORMULAS

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

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

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

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

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

BuySignal1 OR BuySignal2 OR BuySignal3 OR BuySignal4

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

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

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

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

SellSignal1 OR SellSignal2 OR SellSignal3

STOPS
Maximum Loss: LONG ONLY

10.00 Percent

Regression Asymmetric Volatile Price Band

SIGNAL FORMULAS

Enter 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,$) >= .2

Close 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 SellSignal2

STOPS

Maximum Loss: LONG ONLY

10.00 Percent

1997 November TASC Traders Tip

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 Momentum

Highlights

Name: RSI > 50

Condition: RSI(14) > 50

Color: Dk Green

Name: RSI < 50

Condition: RSI(14) < 50

Color: Red

Symbols

Name: Isolated Low

Condition: LOW < Ref(LOW,-1) AND

LOW < Ref(LOW,1)

Graphic: Buy Arrow

Color: Black

Label: Isolated Low

Name: Isolated High

Condition: HIGH > Ref(HIGH,-1) AND

HIGH > Ref(HIGH,1)

Graphic: Sell Arrow

Color: Black

Label: Isolated High

Note: If the Symbol labels make the chart too busy you may want to shorten the label (e.g. change Isolated High to IH).

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.

1997 December TASC Trader's Tip

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

Formula for earlier versions of MetaStock for Windows

Volatility%

100 * Sum(100 * ATR(1)/CLOSE > 3, 50)/50

Now drag the Volatility% from the Indicator QuickList and drop it on the desired chart.

 

1998 February TASC

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 Tops

PK:=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);

(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 Bottoms

PK:=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)))

 

1998 May TASC Trader's Tip

Automatic Support and Resistance

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 ) > 95

Stop 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%

Mel Widner, Ph.D., 703 791-5910 E-mail techstrategies@msn.com

1998 June TASC Traders' Tip

Mutated Variables, Volatility and a New Market Paradigm

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

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

Expert name: New Market Paradigm

HIGHLIGHTS

Name: Contraction

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

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

Color: Blue

Name: Expansion

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

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

Color: Red

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

1998 July Trader's Tip

Channel Analysis

Channel 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 pallete. 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.

Page 5

Forecast Oscillator

Many 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:

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

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

Sweet dreams,

Steve Karnish
CCT

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");
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);

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

Fractal;

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)


Binary Wave System Test for Metastock

{created by Jim Greening}

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

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

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

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

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

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

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

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

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

Signal Formulas

MetaStock for Windows System Tester
01_R2/Regress Slope/MFI/TSF - (Vol Rqd)

---------------
Enter Long:
Alert(RSquared(C,21) < 0.15,21) AND
LinRegSlope(C,34) > opt1 AND
HHV(LinRegSlope(C,34),5) =
HHV(LinRegSlope(C,34),13) AND
HHV(MFI(55),5) = HHV(MFI(55),13) AND
HHV(TSF(C,55),5) = HHV(TSF(C,55),13)
Close Long:
LLV(TSF(C,55),5) = LLV(TSF(C,55),13) AND
LinRegSlope(C,34) < opt1
Enter Short:
Alert(RSquared(C,21) < 0.15,13) AND
LinRegSlope(C,34) < opt2 AND
LLV(LinRegSlope(C,34),5) =
LLV(LinRegSlope(C,34),13) AND
LLV(MFI(55),5) = LLV(MFI(55),13) AND
LLV(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.10
OPT2: Min = -0.20 Max = 0.00 Step = 0.10
STOPS ALL OFF
------------------------------------------------------------
02_R2/Regress Slope/CMO - All
SIGNAL FORMULAS
---------------
Enter Long:
Alert(RSquared(C,21) < 0.15,21) AND
LinRegSlope(C,34) > opt1 AND
HHV(LinRegSlope(C,34),5) =
HHV(LinRegSlope(C,34),13) AND
CMO(C,55) > 0 AND
C = HHV(C,5)
Close Long:
LinRegSlope(C,34) < opt1 AND
CMO(C,55) < 0 AND
C = LLV(C,5)
Enter Short:
Alert(RSquared(C,21) < 0.15,13) AND
LinRegSlope(C,34) < opt2 AND
LLV(LinRegSlope(C,34),5) =
LLV(LinRegSlope(C,34),13) AND
CMO(C,55) < 0 AND
C = LLV(C,5)
Close Short:
LinRegSlope(C,34) > opt2 AND
CMO(C,55) > 0 AND
C = HHV(C,5)
OPTIMIZATION VARIABLES
----------------------
OPT1: Min = -0.10 Max = 0.00 Step = 0.10
OPT2: 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 AND
HHV(LinRegSlope(C,34),5) =
HHV(LinRegSlope(C,34),13) AND
Qstick(55) > opt1 AND
HHV(Qstick(55),5) = HHV(Qstick(55),13)
AND C=HHV(C,5)
Close Long:
LinRegSlope(C,34) < opt1 AND
Qstick(55) < opt1 AND
C = LLV(C,5)
Enter Short:
Alert(RSquared(C,21) < 0.15,13) AND
LinRegSlope(C,34) < opt2 AND
LLV(LinRegSlope(C,34),5) =
LLV(LinRegSlope(C,34),13) AND
Qstick(55) < opt2 AND
LLV(Qstick(55),5) = LLV(Qstick(55),13)
AND C = LLV(C,5)
Close Short:
LinRegSlope(C,34) > opt2 AND
Qstick(55) > opt2 AND
C = HHV(C,5)

OPTIMIZATION VARIABLES
----------------------
OPT1: Min = -0.10 Max = 0.00 Step = 0.10
OPT2: Min = -0.10 Max = 0.00 Step = 0.10

STOPS ALL OFF
------------------------------------------------------------
04_R2/Regress Slope/CCI/TSF - All
SIGNAL FORMULAS
---------------
Enter Long:
Alert(RSquared(C,21) < 0.15,21) AND
LinRegSlope(C,34) > opt1 AND
HHV(LinRegSlope(C,34),5) =
HHV(LinRegSlope(C,34),13) AND
HHV(CCI(55),5) = HHV(CCI(55),13) AND
CCI(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) AND
LinRegSlope(C,34) < opt1 AND
CCI(55) < 0 AND
C = LLV(C,5)
Enter Short:
Alert(RSquared(C,21) < 0.15,13) AND
LinRegSlope(C,34) < opt2 AND
LLV(LinRegSlope(C,34),5) =
LLV(LinRegSlope(C,34),13) AND
LLV(CCI(55),5) = LLV(CCI(55),13) AND
LLV(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) AND
C = HHV(C,5)
OPTIMIZATION VARIABLES
----------------------
OPT1: Min = -0.10 Max = 0.00 Step = 0.10
OPT2: Min = -0.20 Max = 0.00 Step = 0.10

STOPS ALL OFF


{from "Jim Greening" JimGinVA@msn.com}

 

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) AND
Ref(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}

Short term horizontal trading ranges

exploration by Jim Greening

HHV(C,21) < 1.1*Mov(C,21,S) AND
LLV(C,21) > 0.9*Mov(C,21,S)

{place the formulas above in the filter section; nothing else is required}

 

Pring's Daily KST Buy

Notes: KST BUY SIGNAL FROM BELOW ZERO

ColA:
Name: Close
CLOSE
ColB:
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)
ColC:
Name: KST MA
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)
ColD:
Name: KST-1
Ref( (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-1
Ref(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)

 

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) AND
When(Ref(C-Mov(C,25,S),-1),<=,0) AND
When(HHV(Mov(Ref(C-Mov(C,25,S),-1),3,S),19),<=,0) AND
When(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.)}



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)),
{then}1,
{else}-1);
TD1



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

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

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 by
taking the weekly (high+low+close)/3. It really doesn't
need to be plotted, but is mostly used to base the other
indicators 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 the
Fixed Balance Point.

The Dynamic Balance Point Step is the daily update
of the Fixed Balance Point Step.

Robert Krausz teaches that by watching the balance point
calculations of the longer (weekly) time, you have the market
direction (trend) for the shorter (daily) time. He also revealed
that the when the Dynamic Balance Point is above the Dynamic
Balance 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 using
this formula."

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 or
long 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)

(from Thorsten Buhmann in Germany)

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

The HIGHER CLOSES MetaStock exploration should be entered as follows:

colA CLOSE
colB 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 )


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)

{created by David R. Evans}

Fibonacci Trader- Fixed Balance Point- REVISED

{NOTE: under Color/Style options, change
plot to last "style" option}

{revised 1 Jan 99}

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;

Fibonacci Trader- Support and Resistance

{NOTE: under Color/Style options, change
plot 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)));
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;

Fibonacci Trader- Fixed Balance Point Step

FPS:=(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

Fibonacci Trader- Dynamic Balance Point

Dynamic Balance Point Calculation

dt:=DayOfWeek();
DBC:=(HighestSince(5,DayOfWeek()=dt,H)+
LowestSince(5,DayOfWeek()=dt,L)+CLOSE)/3;
DBC

Page 6

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);

from Eric Kendall

 

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}

{from Mike Anoldi}

 

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

from G.G.

 

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)))

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))

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);

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

rudolf stricker


LRS-ROC Indicator--another one

Lb:=Input("Look-Back Periods?",3,100,13);
ROC( LinRegSlope(C,Lb),Lb,$)

{by Adam Hefner}

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)

MACD Tops and Bottoms

QUESTION: As you know, MACD is always bottoming or topping before crossing its trigger line. However, the MACD signal comes always a bit late compared to price movement. Is there any way to calculate the MACD first derivative function to identify MACD tops/bottoms, that could be use by the Explorer or the System Tester? -- Augustin Bataille, Belgium 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. -- Dr. Robert Jackson robert.jackson@utoronto.ca -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? -- Augustin Bataille, Belgium 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. -- Dr. Robert Jackson robert.jackson@utoronto.ca -

Countback line for Metastock

(Note. This is very good, but the limitation is the lookback period. The

calculation point for the CBL line might be 5, 10, 15, 30 days away from

todays date.Also watch for the way 'gap' days are treated. Daryl Guppy)

Copied from StockCentral - Thanks Ken D

Well .... last weekend I replied to a post requesting a MetaStock solution for calculating the Countback Line discussed in Daryl Guppy's book "Share Trading: An Approach to Buying and Selling". Subequently, about 30 requests for the formulas I use were received. Not unexpectedly, a few defects were found with the original offerings. This helped forge a somewhat more robust solution, which is here given to the wider audience of this Forum, so that further improvements may be forthcoming. Alternatives of presentation style are many, according to taste, but we are here requesting improvements in substance, identification of possible flaws, or have real simplification benefits - please provide solutions where possible.

ACKNOWLEDGEMENTS .... With thanks to the several people who have commented, all constructively it is pleasing to say, particular credit is warranted by the significant contributions from Bryan Stanton and Siobhan Channon.

LIMITATIONS .... With MetaStock, there seems to be a need for two different formulas to handle the issue: - one for the CBL from a LOW (CBLlo), - the other for the CBL from a HIGH (CBLhi). The formulas given below were generated using v.6.52. Because of the use of PREV they won't work in some earlier MetaStock versions it seems, though a bit of thought should overcome this limitation - anyone able to comment? As written they are based upon relative prices over a DEFAULT cover of 13 days (but adjustable from 3 to 55 days) - this is one of the potential weaknesses which commands individual interpretation for a particular equity or contract, which may cycle more or less frequently and require different timeframes. Other indicators and assessments are, of course, needed to gauge the probability of a 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

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.

Linking Metastock Updates to Excel Files

As 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)
-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), and
that 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 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-Manual
or Equis' Customer|Support Website for more detailed instructions.

suggested by Ton Maas, ms-irb@wxs.nl


Metastock Expert Commentary by Michael Arnoldi

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

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



Plotting Forward Days

>I 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. --Steve Karnish


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. -- Chuck Wemlinger

TC:=Input("Tomorrow's close",0.001,1000,1);
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)



MACD Additions

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

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

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

{Thanks to Keith Massey}



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;

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;

Gann-Trend

{Swing Direction}
Sd:= FmlVar("GANN-Swing","TD1") ;
{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;

contributed by Adam Hefner



Create a Gann Swing 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");
dplot:=If(BarsSince(dt=1)>
BarsSince(dt=-1),1,0);
dplot=1;

Then click on the "ribbon" option and turn off "Display Vertical Lines", I also turn off the corner option.

3a. Under highlights tab create a new and call it "HiLo Change", choose color, and enter this code:

HLd:=If(CLOSE>Ref(Mov(H,3,S),-1),
{then}1,
{else}If(CLOSE<Ref(Mov(L,3,S),
-1),
{then}-1,
{else}0));
HLv:=ValueWhen(1,HLd<>0,HLd);
HLv<>Ref(HLv,-1);

3b. Create new and call it "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.

from Adam Hefner

Page 7

RSI and Moving Averages

{place in filter section}

C>MOV(C,5,E) AND C>MOV(C,200,E) AND CROSS(RSI(14),30)

{from Michael Arnoldi}

 

Alligator System Modifications

from Murray Richards . . .

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

AO oscillator Green
If( 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 histogram
A Oscillator red
If( 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)

Acc
Mov(( 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 red
AC Red
If( Fml( "Acc" )<Ref( Fml( "Acc" ),-1) ,Fml( "Acc" ),0 )

Put in the same window and plot green

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


Start a new expert and chose highlights
color red

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


Color green

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

Save as a template


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)


by Dick Brow


Shark-32 System, Walter Downs

The 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) AND
Ref(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);

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) OR
Ref(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) AND
Ref(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/1998
Equis

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 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 Bar
Color: Blue
Condition:
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
Color: Blue
Condition:
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 Sell
Condition:
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 Arrow
Color: Red
Label: Sell

Building Metastock System Tests

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

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

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

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

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

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

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

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

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

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

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

That's it. Any comments or questions?

JimG


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 - 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}
AND
DayOfWeek() = 2 {Today is Tuesday}
AND { Either both days were up or down }
((Ref(CLOSE,-2) > Ref(CLOSE,-1) AND
Ref(CLOSE,-1) > CLOSE ) OR
(Ref(CLOSE,-2) < Ref(CLOSE,-1) AND
Ref(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
Ref(DayOfWeek(),-1) = 1 {Yesterday was Mon}
AND
DayOfWeek() = 2 {Today is Tuesday}
AND { Tuesday is opposite direction of Monday }
((Ref(CLOSE,-2) > Ref(CLOSE,-1) AND
Ref(CLOSE,-1) < CLOSE ) OR
(Ref(CLOSE,-2) < Ref(CLOSE,-1) AND
Ref(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

Kauffman's Adaptive RSI

MetaStock 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))

Market Pressure-Ultimate

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

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

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

Metastock code for Market Pressure - Ultimate:

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

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

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


Changing Ways Accumulation/Distribution

This is the calculation for the first formula (Today's Change):
Today's close - yesterdays close

This is the main formula, incorporating the first calculation:
If today's change (1st formula) is greater than a 7 day exponential moving average of today's change and today's close is greater than yesterdays close, write down today's close + today's volume, otherwise,
If today's change is less than a 7 day exponential moving average of today's change and today's close is less than yesterdays close, write down the negative value of today's close + today's volume, otherwise write down 0.

Then add up all the days values and keep a cumulative running total for each new trading day.

Simple Interpretation:
Changing Ways Accumulation/Distribution can show divergences against the instrument.
When compared against volume activity, it can show what impact a day of high turnover had on the share price for the coming periods. This is to say that if a day had high volume and there was little movement in the indicator alongside this, then you can suggest that all the volume for that day was absorbed into the price and there is less likelihood of buying/selling pressure in that day taking hold in the market in future trading days.

Metastock code for Changing Ways Accumulation/Distribution:

Cum(If(Fml( "Today's Change" ) > Mov(Fml( "Today's Change" ),7,E) AND C > Ref(C,-1),
C + V,
If(Fml( "Today's Change" ) < Mov(Fml( "Today's Change" ),7,E) AND C < Ref(C,-1),
Neg(C + V) ,0)))

Where Fml( "Today's Change" ) = c - ref(c,-1)


Front Weighted 36 Day Moving Average

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

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" ) =
0.07 * Ref(P,-1) +
0.079 * P

Excel Confidence %

This is the calculation:

Take toadies 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 * today's 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.

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

Page 8

Bullish Engulfing Pattern

ColA: CLOSE

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

Filter enabled Yes

Periodicity Daily

Records required 1300


Bearish Engulfing Pattern

Col A: CLOSE

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

Filter enabled Yes

Periodicity Daily

Records required 1300


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 1300


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

Cross Above 200 MA on Twice 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

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


Consolidation Over 16 Weeks

Col A: CLOSE

Filter Fml("congestion index") <= 10 AND BarsSince(Fml("congestion index")>10) > 0

Filter enabled Yes


Here is the "congestion index" formula:

((HHV(C,80)-LLV(C,80))/LLV(C,80))*100


Consolidation Breakout, Upside

Col A: CLOSE

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

Filter enabled: Yes


Consolidation Breakout, Downside

If(Ref(Fml("congestion index"),-5),<,10,

{and} If(Fml("congestion index"),>=,10,

{and} If(CLOSE,>,Ref(HHV(C,80),-5),

{and} If(Mov(V,5,S),>=,1.5*(Ref(Mov(V,60,S),-5)),

+1,0),0),0),0)


Stocks breaking out of consolidation (downside)

Col A: CLOSE

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

Filter enabled: Yes

Here is the "consolidation breakout(downside)" formula:

If(Ref(Fml("congestion index"),-5),<,10{%},

{and} If(Fml("congestion index"),>=,10{%},

{and} If(CLOSE,<,Ref(LLV(C,80),-5),

{and} If(Mov(V,5,S),>=,1.5*(Ref(Mov(V,60,S),-5)),

+1,0),0),0),0)


Volatility Over 16 Weeks

Col A: CLOSE

Col B: Vol(10,80)

Filter: Vol(10,80)>200

Filter enabled: Yes


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


Biggest Losers

Col A: CLOSE

Col B: ROC(C,5,%)

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

Filter enabled: Yes


Overbrought/Over Sold

Col 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)


Elliot Wave Identification

As far as using MetaStock for identifying waves, use a 5/34 histogram for
finding wave 4, the end of wave 3 and for help with identifying wave 1/2,
which apparently Advanced Get uses extensively. You can write MetaStock
explorations/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 for
waves 2 and 4. Use MetaStock line studies (both trendlines, channels and
fib retracements) for additional wave identification/analysis. Of course,
you can label the waves with the text box.

from Kevin Campbell


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)


{Equis Support}


ATR Custom Indicator


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;
Mov(TR,periods,S)

{from Yngvi Hardarson}


MTF Tendency Update

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

{from Adam Hefner}

 

Guppy MMA Exploration from Trading Tactics, part 2

NOTE 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)

Performance Intra Day and Daily

ColA:C {label CLOSE}
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 AND
C<.3 AND
C>.2

Filter: enabled
Periodicity: Daily
Records required: 5

Patrick McDonald

Gap Up System with Delayed Exit

Enter long
GapUp()

Close long
Ref(GapUp(),-5)

Initial equity 10000
Positions Long and short
Trade price Open
Trade delay 1
Entry commission 0%
Exit commission 0%
Interest rate 0%
Margin req. 100%

Elliot Oscillator

Mov(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) and
to be used on weekly data}


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) AND
When(CLA,<,0)AND When(CLA,>,-2);
LONG:=When(CLA,<,CLC) AND When(CLB,>,CLD) AND
When(CLA,>,0)AND When(CLA,<,+2);
If(LONG>0,+1,
If(SHORT>0,-1,PREVIOUS))



Weekly Trix Moving Average Test


COLA: 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)

from A. J. Maas

ROC Moving Average System Test

ENTER LONG:
ROC(Mov(C,12,E),1,%)>0 AND ROC(Mov(C,60,E),1,%)>0

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 the
right!}

{from Onno Goedknegt}

 

Days Since Crossover

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

BarsSince(Cross(45, Fml( "Stochrsi (14)" )))>
BarsSince(Cross(Fml( "Stochrsi (7,3)" ),72)) AND
Ref(BarsSince(Cross(45,Fml( "StochRSI (14)" ))) <
BarsSince(Fml( "staters (7,3)")>72), -1)

{from Stefan Schittko}

 

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.


{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 =BULLLONG
AT0SSELL =BEARSHORT
AT0CSELL =CLOSEBEARSHORT
AT0CBUY =CLOSEBULLLONG
AT0MP =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 AND
H>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 AND
L<REF(AT0SSELL,-1)), H+AT0EXITADD,0);}
AT0MP


Recursive Moving Trend Average

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())));
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)));
RMTA

{from Adam Hefner}

TSF Optimised Trading System for Metastock

Enter long:
Cross(opt1,((CLOSE-Ref(TSF(C,opt3),-1))/CLOSE*100))

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


End Point Moving Average

{The End Point Moving Average was introduced in the October 95 issue of
Technical Analysis of Stocks & Commodities in the article "The End Point
Moving Average", by Patrick E. Lafferty. The exact formula for the End Point
Moving 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 ) ) )

{The above formula plots the last value of a linear regression line of the
previous 14 periods. The Time Series Forecast (TSF) takes this value and the
slope of the regression line to forecast the next day and then plots this
forecasted price as today's value. from Equis.}



Metastock Adjustable Trading Bands

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

from Rajat K Bose


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))

Customisable StochRSI from Nicholas Kormanik

The formula I've adopted was put on the Silicon Investor web site thread by
'bdog'. Basically, I just leave the Slowing Periods (mp3) to 1, so it
really plays no part in things. However, if somebody presents a good
argument for using other than 1 ... hey, I'm amenable.

Chande, the original inventor, didn't use a moving average on the whole
thing. Chande's result was therefore sort of choppy. I guess along the way
people decided to add the EMA Periods to smooth things out.

Here's the MSWin formula:


mp1:=Input("RSI Periods",1,377,13);
mp2:=Input("Stoch Periods",1,377,13);
mp3:=Input("Slowing Periods",1,377,1);
mp4:=Input("EMA Periods",1,377,5);

Mov(Sum((RSI(mp1)-LLV(RSI(mp1),mp2)),mp3)/Sum((.0000001+(HHV(RSI(mp1),mp2)-(
LLV(RSI(mp1),mp2)))),mp3),mp4,E)*100


Now, from various posts, etc., the following parameters (mp1, mp2 and mp4)
*seem* to be the one's recommended. I'm trying to further find consensus
among users of StochRSI on what really appears to work for them.


StochRSI Set
--------------------
5 -- 5 -- 3
8 -- 8 -- 5
13 -- 13 -- 13
21 -- 15 -- 13
21 -- 21 -- 13
34 -- 34 -- 13
55 -- 55 -- 21
89 -- 13 -- 34
89 -- 89 -- 21
233 -- 233 -- 34

52 Week Hi-Lo Exploration

ColA: {Close}C;
ColB: {52-week High} HighestSince(1, (DayOfMonth()=08 AND Month()=05
AND Year()=1998), H);
ColC: {52-week Low} LowestSince(1, (DayOfMonth()=08 AND Month()=05 AND
Year()=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, just
join 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 got
to change the values for dayofmonth(), Month() and Year() functions. The
formula given above assumes that you would be running the query on May 07,
1998. Change the values of the above functions accordingly.}

{from Rajat Bose}


Trailing Stop Loss Indicator

If(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())));
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

{from Ton Maas}



Metastock-Stocks Closing Above 60 Day High

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

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

This formula does two things:

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

from Rajat Bose

{Stocks Closing Above 60 Day Highs}


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

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


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

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


{from Debra Orlow}

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.

from Anil Chugani


Support and Resistance Levels

AVd:=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

 

25x25 Bond System Metastock Format

more detail at http://www.traderclub.com

This system is provided free to people who join the System Traders Club. It is a profitable Bond Trading System that we supply in order to demonstrate the quality of our work, and as an example of the documentation that comes with each of our systems.

Gary Randal mailto:Randall_Gary@tmac.com has ported this system into MetaStock format. His comments and code for MetaStock follow our normal system Documentation. A Rrade by Trade Report concludes the document


"25 x 25" BOND TRADING SYSTEM
by Charles LeBeau and Terence Tan

Introduction

In this report we will present several useful concepts for trading the Bond futures markets, and illustrate these concepts with a Bond trading system that we have called the "25 x 25". The "25 x 25" system is a long-only trend-following system designed for the Bond market which has made hypothetical profits of $53,000 over the last 10 years of historical data, with an accuracy rate of 76%.


Aims of the System Traders Club

Before we present the details of the system, we will review some of the goals we hope to achieve for the System Traders Club.

First, we do not hope to reveal any "holy grails" to trading. Many of the systems that you will see in the System Club reports include indicators that you may already be familiar with, or that can be easily programmed into the computer. In addition, you will find that many of these systems are not perfect: they will all have drawdowns, and none of them are 100% accurate over the long run. However, we think they deserve serious consideration for actual real-time trading applications. We realize that in the business of trading the futures markets there is no single method that makes money automatically. We believe that a combination of logical system concepts and reasonable entry and exit strategies greatly increases the probability of success in trading. We hope to be able to communicate to you, through these reports, many of the concepts that we have learned over the years.

Second, we hope that these reports will serve both an informative as well as a practical purpose. We will share with you lessons that we have accumulated over the years regarding trading strategies and techniques that have worked in various markets, and the logic behind them. You may also want to view the systems presented as illustrations of general principles and concepts in systematic trading of the futures markets. We hope that you may also apply these concepts to your own favorite markets and time-frames. We would welcome any feedback you may have on possible improvements and different applications of these systems.

Third, we intend to provide many different systems and market combinations in our reports. Multiple systems can be combined together in a portfolio to generate more frequent trades and higher returns than any single system. We believe in diversification; but we also realize that diversification is a function of personality and preference. For this reason, we will be offering many different types of systems, from which you will be able to select systems that suit your personality and preference and combine them into your own diversified trading portfolio.


"25 x 25" System Rules

We will concisely present the system rules first, and then elaborate and explain the concept and logic behind some of the more important trading techniques represented in the system:

To go long in the Bond market, three conditions must be met.

1.    The 14-day +DI must be above the 14-day -DI.

2.    The 14-day ADX must be above 20.

3.    The 4-day RSI must be below 50.

If these three conditions are met then buy tomorrow only if and when prices rise 18 ticks (18/32) above today's close. Enter on a buy stop order.

After a trade has been entered, place a sell stop at whichever of the positions below are closest to the market price.

1.    A stop order at $2,500 below the entry price.

2.    Or a stop order at the lowest low of the last 25 days.

3.    After 25 days (count entry day as day 1), change stop #2 from the lowest low of 25 days to the lowest low of 2 days.

4.    Regardless of the number of days in the trade, after any close where the open profit is greater than 5 Average True     Ranges the exit stop should be at the lowest low of 2 days. (Important: use 45 days to calculate the ATR)

Historical Results

Table 1 shows the historical results of trading 1 contract on the system tested over 10 years of data. For the testing purposes, we used continuous back-adjusted daily data. We ignored all night sessions, and all calculations were based on day-session prices and ranges only. $100 was deducted from every trade to simulate the effects of commissions and slippage. The test period was from 1/1/88 to 1/16/98 with MaxBarsBack set to 50 to enable adequate smoothing on the ADX calculations. (MaxBarsBack refers to the number of bars of data necessary to calculate the rules in a system. System rules only begin after the MaxBarsBack period. The test period includes the MaxBarsBack period, so that no trades are taken for the first 50 trading days.)


Table 1. “25 x 25” System v.2.0 Hypothetical Results (TradeStation format) This system was created originally for Tradestation and then interpreted into MetaStock Format by one of our members. We do not have MetaStock reports.

Total net profit    $ 55,112.50         Open position P/L    $ 1,875.00
Gross profit     $ 64,887.50         Gross loss     $-9,775.00
           
Total # of trades        32         Percent profitable     72%
Number winning trades    23         Number losing trades 9
           
Largest winning trade    $ 5,181.25         Largest losing trade    $ -2,600.00
Average winning trade    $ 2,821.20         Average losing trade    $ -1,086.11
Ratio avg win/avg loss    2.60         Avg trade(win & loss)    $ 1,722.27

Max consec. winners    5        Max consec. losers    2
Avg # bars in winners    26        Avg # bars in losers    12
           
Max intraday drawdown    $ -3,381.25
Profit factor         6.64         Max # contracts held    1
Account size required    $ 3,381.25         Return on account    1,630%

The hypothetical performance data above was generated using Omega TradeStation, with $100 deducted per trade for commissions and slippage. In our opinion, the "account size required" and "return on account" calculations may not accurately reflect the actual account size required to trade this system nor the return to be expected.


PAST PERFORMANCE IS NOT NECESSARILY INDICATIVE OF FUTURE RESULTS.

HYPOTHETICAL OR SIMULATED PERFORMANCE RESULTS HAVE CERTAIN INHERENT LIMITATIONS. UNLIKE AN ACTUAL PERFORMANCE RECORD, SIMULATED RESULTS DO NOT REPRESENT ACTUAL TRADING. ALSO, SINCE THE TRADES HAVE NOT ACTUALLY BEEN EXECUTED, THE RESULTS MAY HAVE UNDER-OR-OVER COMPENSATED FOR THE IMPACT, IF ANY, OF CERTAIN MARKET FACTORS SUCH AS LACK OF LIQUIDITY. SIMULATED TRADING PROGRAMS IN GENERAL ARE ALSO SUBJECT TO THE FACT THAT THEY ARE DESIGNED WITH THE BENEFIT OF HINDSIGHT. NO REPRESENTATION IS BEING MADE THAT ANY ACCOUNT WILL OR IS LIKELY TO ACHIEVE PROFITS OR LOSSES SIMILAR TO THOSE SHOWN.


System Concept

The concept behind the system is simple. We designed 25 x 25 to be a trend following system that will enter an uptrend during a dip in prices. To do this we will implement three entry strategies. First, there is a trend indicator to identify a strongly uptrending market. Second, there is a shorter term retracement indicator that will identify a small dip in the uptrend which will set up the trade. Third, we have a precise short-term entry signal which will enter the trade when the uptrend resumes.


Trend Indication

For the trend indicator, we employ one of our favorite trend indicators, the Directional Movement Indicator. Specifically we will use the relationship between the +DI (Plus Directional Indicator), -DI (Minus Directional Indicator), and the ADX (Average Directional Movement Index). These indicators were described by Welles Wilder in his book, New Concepts In Technical Trading Systems, and are pre-programmed into most of the modern computerized charting software. The default value chosen by Mr Wilder was 14-days for all the indicators, and this is the value we have chosen for the system.

For our trend indication, we will require that the 14-day +DI must be above the 14-day -DI, and that the value of the ADX must be above 20. The relationship of the +DI to the -DI is a useful way of determining the direction of the intermediate trend; however this definition of trend is inadequate without the inclusion of the ADX which actually measures the strength of the trend. Trend indicators traditionally only indicate whether the trend is up or down, which is not an accurate representation of how the market behaves. As you are aware, markets spend most of their time neither in an uptrend or downtrend, but in a sideways market. By demanding that the ADX be above 20, we effectively filter out these sideways markets, and enable our system to enter during periods of relatively strong uptrends. It is important to understand that the ADX does not indicate the direction of the trend, merely its strength, which is why we need to combine the strong ADX reading with the DI relationship.

As a general concept it is a good idea to always trade markets according to the direction of the intermediate trend. For instance, with our trend indicator installed, the 25 x 25 system made $53,000 over 10 years with an accuracy of 76%, and had an average trade of $1,829. This indicator included a requirement for the ADX to be above 20.

To assess the impact of an uptrend in trading the Bond market from the long side, we eliminated the ADX requirement and reversed the rules of the system so that it only took trades when the +DI was below -DI, indicating a downtrend. The results are illuminating: trading the Bond market with all the same entry signals but during a downtrend as defined as -DI being above +DI produced losses of $781 over 10 years of trading, with a dismal accuracy of 29%, an average trade of -$6, and a drawdown of $25,000! You clearly do not want to be buying the Bond market using this technique in an intermediate downtrend.

We have mentioned the value of the ADX value in assessing the strength of the uptrend. To see the impact of the ADX value, we re-tested the system to see how it would perform if the ADX were below 20 while maintaining the requirement for the +DI to be above the -DI. When the ADX is below 20 in a prevailing uptrend (as defined by the +DI and -DI relationship), the system only made $8,900, was only 47% accurate, and had an average trade of only $595 and a drawdown of $6,500, a significant deterioration of results. We conclude that an uptrend indication on a trend indicator such as the DI only gives average results; however, combining the trend indicator with an ADX value is significantly superior because the ADX level serves to filter out periods of sideways markets.


Retracement Indicator

The second indicator we have adopted is the 4-day RSI (Welles Wilder's Relative Strength Index) which we use to identify a short-term dip in the market prices during the prevailing uptrending Bond market. We use the RSI because of its popularity and inclusion in most charting applications. Mr Wilder described a longer-term RSI, and our choice of a 4-day RSI reflects our design intention of identifying short-term retracements that would set up high probability trades. The RSI oscillates between a minimum and maximum value of 0 and 100. When the RSI declines to below 50 (the midpoint), we have defined a short-term decline in the market.

Does the short-term decline, as measured by the 4-day RSI falling below 50 actually make that much difference to trading this market? To study the difference, we ran another test on the system with the exact same rules, but eliminating the 4-day RSI rule. The tests over 10 years of data showed a profit of $22,400 over 51 trades, with an accuracy of 51%, an average trade of $440, and a drawdown of $9,200. The results are striking: by eliminating the retracement indicator and entering the markets at any point during an uptrend, the system makes less than half of the profits made when entering on a short-term decline. The average trade declined to less than 25% of the average trade when entering during a retracement! ($440 as compared with $1,800). We concluded therefore that in an uptrending Bond market, waiting for a short-term decline or dip in prices to set up a long trade is preferable to entering the trend on strength.


Entry Trigger

With the +DI, -DI and ADX rules in place, and a short-term market decline measured by the RSI, we have identified a market situation that is highly bullish. What we require next is a very short term indicator that will get us into the market. In our opinion, this particular indicator is the least important. It only serves to time our entry a bit more precisely. In fact, our tests show that you could ignore this entry trigger, and just enter the trade on the opening of the next trading day after the ADX and RSI setups are present, to get a profit of $49,600 over 10 years and 57% accuracy with an average trade of $974, a drawdown of $6,000, and a profit factor of 2.63! Entering on the open would have traded 51 times over the last 10 years, significantly more than the 29 trades with our 18-tick entry rule.

But entering on the opening after a decline has its difficulties, especially if the market continues to decline. On a psychological level, many traders (including us) are more comfortable knowing that the market is moving up in the direction of the trade before entering the position. Hence the logic of our entry trigger: to wait till the market proves itself by rallying 18 ticks from the previous day's close before we enter the trade. This is a significant rally, but forcing the prices to rally significantly before entering enables the system to produce a much higher percentage (76% over 10 years) of winning trades.

There is no particular magic about the 18-tick number. In fact to test the robustness of this entry parameter, we ran a series of tests using the same entry rules, and varying the entry trigger from 2-ticks to 36-ticks above the closing price. The results are presented in Table 2 below.

The most significant fact of the optimization is that all the tests are profitable, which is a good indicator of a parameter robustness. Significantly also, all tests have large average trades exceeding $1,000 per trade, and all tests show profit factors better than 2.50, and no drawdown on any test is greater than $6,000. It probably does not matter how many ticks above the close you decide to take for the entry point. As mentioned previously, even blindly entering on the opening is profitable over the historical data. Also, we could trade more frequently if we acted on smaller moves above the previous close, but we would expect to have a lower percentage of winners. For instance, we could have chosen a smaller move of 8 ticks above the close to get a profit of $52,500 on more trades (40 trades), but with a lower accuracy rate (68%) and a slightly higher drawdown ($5,600). Since all tests are profitable, if a trader wishes to deviate from the published system, we will leave it up to the individual trader to decide which profile of trades bests suits him.

Table 2. Optimization Results on Entry Trigger Parameters

Ticks    Net Profit    Avg Trde    PFact     MaxDD    #Trds    %Prft
                       
    2.00    54712.50    1189.40     2.93    -5168.75    46     61
    4.00    54087.50    1175.82     2.95    -4825.00    46     59
    6.00    48475.00    1101.70     2.66    -5606.25    44     61
    8.00    52562.50    1314.06     3.39    -5668.75    40     68
    10.00    48575.00    1278.29     3.39    -5731.25    38     68
    12.00    49300.00    1332.43     3.72    -5793.75    37     70
    14.00    51375.00    1467.86     4.69    -3881.25    35     71
    16.00    48837.50    1575.40     5.40    -4256.25    31     71
    18.00    53068.75    1829.96     7.17    -3381.25    29     76
    20.00    46100.00    1589.66     5.01    -4037.50    29     72
    22.00    46700.00    2030.43     7.64    -4100.00    23     78
    24.00    46362.50    2107.39     8.66    -4131.25    22     82
    26.00    39306.25    1871.73     6.11    -4193.75    21     76
    28.00    30787.50    1620.39     4.71    -4256.25    19     68
    30.00    15343.75    1022.92     2.52    -4318.75    15     60
    32.00    17637.50    1356.73     3.05    -4381.25    13     62
    34.00    16400.00    1490.91     3.02    -4443.75    11     64
    36.00    12281.25    1228.13     2.50    -4506.25    10     60


Testing the Entry Technique

Often, when we want to study the effectiveness of an entry technique by itself, we do optimization tests on the entry technique and exit simply at a close X days in the future. This often gives a good indication of the profit potential of any entry technique. The percentage of winning trades is a good indication of the efficiency of the entry technique. Table 3 below presents the results of the entry technique described above, and exiting at the Xth close after the entry. These tests do not include any money management stops or any other risk-management strategies.

Notice that all exits were profitable except an exit on the first close, which amounts to exiting on the close of the day of entry. You certainly do not want to be day-trading with this trend-following technique! Notice the high accuracy rates of 85 to 90% when the trade is held 20 days or more. For instance, if you exited each trade on the 22nd close, you would make $54,800 with a 91% accuracy rate and a drawdown of less than $5,500! And this is accomplished without any stop! We can conclude that this entry technique predicts,with almost 85 to 90 percent accuracy, a resumption of the trend that lasts between 20 to 25 days


Table 3. Results of the Entry Technique and Exiting on Xth Close.

    X    NetPrft         AvgTrd         PFact    MaxDD         #Trds    %Prft    

    1.00    -412.50         -5.81         .96    -3900.00     71    45
    2.00    2506.25         36.32         1.15    -4243.75     69    51
    3.00    3231.25         51.29         1.18    -5493.75     63    52
    4.00    9562.50         173.86         1.75    -4781.25     55    64
    5.00    14925.00    287.02         2.30    -4043.75     52    63
    6.00    21343.75    426.88         3.21    -3518.75     50    66
    7.00    24650.00    535.87         3.05    -4056.25     46    65
    8.00    31350.00    712.50         3.77    -3650.00     44    73
    9.00    22481.25    522.82         2.73    -4212.50     43    60
    10.00    21325.00    495.93         2.49    -5337.50     43    58
    11.00    21418.75    498.11         2.51    -6431.25     43    63
    12.00    27868.75    679.73         3.34    -4687.50     41    66
    13.00    24187.50    604.69         2.73    -6081.25     40    63
    14.00    19731.25    519.24         2.04    -7181.25     38    58
    15.00    20768.75    561.32         2.11    -7393.75     37    70
    16.00    25737.50    695.61         2.58    -7050.00     37    68
    17.00    37000.00    1057.14         4.49    -5468.75     35    71
    18.00    40631.25    1195.04         4.75    -5468.75     34    74
    19.00    46162.50    1357.72         6.23    -5468.75     34    79
    20.00    52793.75    1599.81         7.52    -5468.75     33    85
    21.00    57168.75    1732.39         8.29    -5468.75     33    85
    22.00    54862.50    1714.45         7.92    -5468.75     32    91
    23.00    56618.75    1826.41         9.00    -5468.75     31    90
    24.00    53318.75    1838.58         8.27    -5468.75     29    90
    25.00    56168.75    2006.03         7.45    -5468.75     28    86
    26.00    54075.00    1931.25         6.01    -5468.75     28    79
    27.00    52325.00    1868.75         6.45    -5468.75     28    79
    28.00    51043.75    1822.99         6.83    -5468.75     28    75
    29.00    47893.75    1773.84         5.92    -5468.75     27    78
    30.00    47581.25    1762.27         6.38    -5468.75     27    78



The Exit Techniques

For the exits we have included a $2,500 money management stop, which attempts to limit the worst possible loss sustainable on any particular trade. We are always most comfortable trading with stops that will limit the maximum dollar loss on any trade, although we realize that this protection may be limited if the market gaps against the position overnight. We have chosen $2,500 as the dollar-stop in this system. This is a large stop designed to avoid whipsaws, and it has only been hit once in the last 10 years. In spite of the fact that this stop is rarely triggered we believe it is essential and its presence makes us comfortable. We recommend dollar stops on all systems to protect against catastrophic losses.

The second exit strategy is a common one: the channel low exit. In this case we have chosen the low of the last 25 market days. Again, the exact number of days is probably unimportant; the concept of trailing a stop at a low point in the market is very popular and has been used successfully by market technicians for a long time.

If we merely installed the $2,500 dollar stop and the 25-day channel low exit, the system makes $43,000 over 10 years of trading, with 18 trades. The average bars in winners is 67, which is a relatively long period, and the average bars in losers is 14, showing that the trailing exit effectively cuts losses short and lets profits run. The system is 67% accurate, and has a huge average trade of $2,400. The ratio of average win to loss with this exit is 3.78.

While this variant of the system is profitable and tradable on its own, it suffers from several disadvantages: Firstly, it holds trades for a very long period. To take a profit on a winning trade, a trader would have to hold through an average of 67 days. This may not be psychologically appealing for many traders. But secondly, and even worse, the exit is inefficient in that it frequently gives up large amounts of open profits, since it always requires the market to reverse to a 25-day low before signalling an exit. We have frequently seen trades give up one-third, or half, or all of their open profits before exiting a trade on a trailing channel stop. In addition to suffering a "roller coaster" sensation while waiting for a profitable trade to retrace to a 25-day low, many winning trades could turn into losses because of the slow exit. This would not make us comfortable in spite of the potential profits.

A simple “twist” to the exit strategy allows us to reduce the number of days in the average holding period, increase total profits, increase the accuracy to 72%, and trade more frequently. The technique is this: we will wait patiently for a trade to develop over a specific number of days, using the conventional dollar and channel stops, and then switch to a tighter channel stop to effect a quick exit. Specifically, we will install the 25-day channel low exit for the first 25 days of a trade (count the day of entry as day 1), and on the 26th day, we will change the exit technique to a much tighter stop at the lowest low of the last 2 days. This dramatic hange will obviously trigger a more sensitive exit but will still allow us to maintain our position in a fast moving market.

We must also remember that our goal in trading is most directly related to the size of the profit and not to the average holding period. Holding a trade longer may be best in most cases but not in all. For those cases where we are fortunate enough to have a large profit in less than 25 days we want to raise our stop to protect those profits regardless of how long we have been in the trade. We have defined a large profit as a profit of 5 average true ranges or more. Once our open profit on a closing basis reaches this level we will implement our 2 day low exit regardless of the number of days in the trade.

The combination of the $2,500 dollar stop, the 25-day lowest low stop, and the switch in exits after 25 days creates a unique exit strategy which leads us to the name for this system.


Conclusion

This report has presented several profitable concepts for trading Bonds, which we believe should be equally applicable in other markets. For example, we have observed that minor variations of this system work well in testing over data in T Notes and Swiss Francs. We have shown the impact of a strong prevailing trend on winning trades and recommend taking long trades only when the trend is clearly and strongly up. In spite of the strong trend we have also shown that it is more advantageous to wait for a decline in prices during the uptrend in order to set up a high-probability entry point. Also, we have shown how a simple adaptation of an age-old exit technique can increase profitability and accuracy, while reducing the average holding period per trade.

We hope that this system as well as all our systems will be profitable in the future. There are no guarantees. Constructing systems that perform well over past data is relatively easy once you learn a few basic rules. But in addition to showing great hypothetical performance, our goal is to develop systems that will serve our club members as valuable learning tools and hopefully produce reasonably good results over the unseen data in the future. Please give us your comments and suggestions about this system and other systems that you would like to see.

Aims of the System Traders Club

First, we do not hope to reveal any "holy grails" to trading. Many of the systems that you will see in the System Club reports include indicators that you may already be familiar with, or that can be easily programmed into the computer. In addition, you will find that many of these systems are not perfect: they will all have drawdowns, and none of them are 100% accurate over the long run. However, we think they deserve serious consideration for actual real-time trading applications. We realize that in the business of trading the futures markets there is no single method that makes money automatically. We believe that a combination of logical system concepts and reasonable entry and exit strategies greatly increases the probability of success in trading. We hope to be able to communicate to you, through these reports, many of the concepts that we have learned over the years.

Second, we hope that these reports will serve both an informative as well as a practical purpose. We will share with you lessons that we have accumulated over the years regarding trading strategies and techniques that have worked in various markets, and the logic behind them. You may also want to view the systems presented as illustrations of general principles and concepts in systematic trading of the futures markets. We hope that you may also apply these concepts to your own favorite markets and time-frames. We would welcome any feedback you may have on possible improvements and different applications of these systems.

Third, we intend to provide many different systems and market combinations in our reports. Multiple systems can be combined together in a portfolio to generate more frequent trades and higher returns than any single system. We believe in diversification; but we also realize that diversification is a function of personality and preference. For this reason, we will be offering many different types of systems, from which you will be able to select systems that suit your personality and preference and combine them into your own diversified trading portfolio.

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

MetaStock Efficiency Issues

In order to implement the system several techniques were required that slow performance considerably. Daily commentaries suffer the most. On fast Pentium II processors the delays are bearable, but on a 486 processor it may take 3-5 minutes to update a commentary. System testing with a large data set requires a lot of patience. If charts are limited to a year’s daily data (250 bars more or less), delays will be minimized. Commentaries need only be enabled on setup and actual trade days. Keep open charts to a minimum.


Overview of MetaStock implementation

The 25x25 Bond System enters and exits trades at intraday prices. In order to create a MetaStock 6.50 version it was necessary to develop several indicators to keep track of the intraday entry and exit prices. While this sounds simple enough, MetaStock does not provide global variables or allow circular procedure referencing which would greatly simplify the task.

On top of these shortcomings, MetaStock imposes tremendous processing overhead by not allowing variable assignments within structured code. This means that all values that might be needed in a procedure must be calculated ahead of time, whether required or not, and are constantly updated when referencing previous values.

The 25x25 system only takes long trades. This MetaStock 6.50 system is designed as a template for more complex systems taking both long and short trades based on intraday prices and complex entry/exit procedures.

The main indicator is “25x25 LongEntry” which returns the entry price for a trade for each day in the trade. A zero value indicates no position. The exit day is signaled by setting the entry price negative. Thus, the value returned by a single fml(“25x25 LongEntry”) statement tells you the market position, the entry price, and whether it’s the last day of a trade or not, and can be used to calculate a trade’s open profit and days in the trade. This indicator is the heart of the system. It should be carefully studied to understand how it decides when to enter a trade and whether to continue or exit the trade. It stands alone and the other indicators depend on it.

The second indicator is “25x25 LongExit” which returns the exit price when “25x25 LongEntry” returns a negative value. It simply recalculates the exit stop value which triggered a “25x25 LongEntry” negative value. The result is only used to determine a trade’s closed profit. These two indicators may seem redundant for the 25x25 System, but the technique allows for more complex systems that may stop and reverse on intraday prices. By building corresponding “ShortEntry” and “ShortExit” indicators almost any system can be modeled.

A third indicator, “25x25 TP”, returns the Trade Position and all other variables needed by the MetaStock Expert. While not efficient, the Expert allows the system to be traded without the need to plot the indicators.

Since MetaStock’s System Tester does not handle intraday prices, it can’t test the 25x25 performance. The “25x25 Equity” indicator allows the user to plot an equity curve but, unfortunately, a trade by trade report cannot be generated. This indicator is not required by the system and should only be plotted when testing.

The “25x25 Stop” indicator is another stand alone indicator not required by the system but which is very helpful in seeing the stop values while in a trade. Unlike the other indicators, which should be plotted in separate windows, the “25x25 Stop” can be plotted directly on the daily bar chart. It should be plotted as a dashed line. Note that stop values for days with no trade position are plotted as the days’ low value just to keep the chart properly scaled.

Discrepancies between MetaStock and TradeStation Results

MetaStock and TradeStation do not compute several indicators exactly the same. In order to duplicate the TradeStation design as closely as possible, the following MetaStock indicators were modified:

Relative Strength Index (RSI(4)) results are rounded to two decimal places with the following code: PREC(RSI(4) + .005, 2)

Average True Range(ATR(45)) smoothing is removed with the following code: Mov(ATR(1), 45, S)

Even with these modifications not all 25x25 trades are exactly matched. However, they are very close. MetaStock’s ten year test equity is $51,556.27 compared to TradeStation’s $53,068.75.


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

{METASTOCK CODE}

{Chuck Le Beau's System Trader's Club}
{ http://traderclub.com }
{ mailto:chuck@traderclub.com }

{"25 x 25" Bond System MetaStock format}


{25X25 LongEntry}

{Returns long trade entry price. }
{A non-zero number if in a long trade. }
{A negative value if the last day of a trade. }

{Note: Modifications to MetaStock indicators }
{were req'd to simulate TradeStation results }
{ RSI: rounded to two decimal places }
{ ATR: Wilder's smoothing removed }

{Variables to avoid duplicate function calls }
PLLV2 := Ref(LLV(L,2),-1);
PLLV25 := Ref(LLV(L,25),-1);

{ Was yesterday a setup day? }
IsSetUp :=
Cum(1) > 50 AND
Ref(PDI(14),-1) > Ref(MDI(14),-1) AND
Ref(ADX(14),-1) > 20 AND
PREC(Ref(RSI(4),-1)+.005,2) < 50;

{Determine initial entry price condition}
EntryPriceCond := Ref(C,-1) + 0.5625;
{Adjust it to enter on open if open is greater}
EntryPriceCond :=
If(O > EntryPriceCond, O, EntryPriceCond);

{Return entry price, zero if no trade. }
If(PREV <= 0,
{Not in a long trade}
If(IsSetUp AND H >= EntryPriceCond,
{Trade entered today, was it stopped?}
If(L <= PLLV25 OR
L <= EntryPriceCond - 2.5,
-EntryPriceCond, {Yes}
EntryPriceCond {No}
),
{Not in trade and not entered today}
0
),
{Have been in trade for over one day. }
{Was it stopped today? }
{Note: BarsSince() gives days in trade }
If(L <= PREV - 2.5, - PREV,
If(BarsSince(PREV=0) > 24,
{More than 24 days in trade}
If(L <= PLLV2, -PREV, PREV),
{Less than 25 days in trade}
If(L <= PLLV25, -PREV,
If(Ref(C,-1) - PREV >
5*Ref(Mov(ATR(1),45,S),-1),
If(L <= PLLV2, -PREV, PREV),
PREV
)
)
)
)
);

25x25 Long Exit

{Returns exit price if last day of long trade}

EntryPrice := Fml("25x25 LongEntry");
ExitingTrade := EntryPrice < 0;

EntryPrice := Abs(EntryPrice);

{Variables to avoid duplicate function calls }
{Lowest low of previous two days }
PLLV2 := Ref(LLV(L,2),-1);
{Lowest low of previous 25 days }
PLLV25 := Ref(LLV(L,25),-1);
TradeDays := If(EntryPrice > 0,
BarsSince(Fml("25x25 LongEntry") = 0), 0);

{ Determine type of stop(s) }
Stop1 :=
ExitingTrade AND TradeDays>24 AND L<=PLLV2;
Stop2 :=
ExitingTrade AND TradeDays>0 AND TradeDays<=24 AND L<=PLLV25;
Stop3 :=
ExitingTrade AND L <= EntryPrice - 2.5;
Stop4 :=
ExitingTrade AND Ref(C,-1) - EntryPrice > 5*Ref(Mov(ATR(1),45,S),-1) AND L <= PLLV2;

{ Determine prices for activated stops }
Stop1Price :=
If(Stop1, Min(O, PLLV2), 0);
Stop2Price :=
If(Stop2, Min(O, PLLV25), 0);
Stop3Price :=
If(Stop3, Min(O, EntryPrice - 2.5), 0);
Stop4Price :=
If(Stop4, Min(O, PLLV2), 0);

{ Assume best stop price stopped the trade }
StopPrice :=
Max(Stop1Price,Max(Stop2Price,
Max(Stop3Price,Stop4Price)));

If(ExitingTrade, StopPrice, 0);

25x25 TP

{ Calculate today's trade position and other }
{ values used by the expert. }

{ LE = LongEntryPrice from indicator }
{ SULE = Tommorow's LongEntry if setup day }
{ SULS = Tommorow's LongStop if setup day }
{ TP = TradePosition +1,0 }
{ TLS = Tomorrow's LongStop if in trade }
{ PRFT = Trade Profit }
{ RISK = Tommorow's theoretical capital risk }


LE := Fml("25x25 LongEntry");
TP := If(LE <> 0, +1, 0);
PRFT := If(LE = 0, 0,
If(LE > 0, C - LE,
Fml("25x25 LongExit") + LE));
TradeDays := If(LE <> 0,
BarsSince(Fml("25x25 LongEntry") = 0), 0);

{Calculate tomorrow's entry prices }
SULE :=
If(TP = 0,
If(PDI(14) > MDI(14) AND ADX(14) > 20 AND
PREC(RSI(4)+.005,2) < 50,
C + .5625, 0), 0);

{Calculate initial stop price}
SULS :=
If(SULE <> 0, Max(LLV(L,25), SULE-2.5), 0);

{Calculate tomorrow's stops }
S1 := If(LE > 0,
If(TradeDays >= 24,
LLV(L,2),
LLV(L,25)), 0);
S2 := If(LE > 0, LE - 2.5, 0);
S3 := If(LE > 0 AND
PRFT >= 5*Ref(Mov(ATR(1),45,S),-1),
LLV(L,2), 0);

{Tomorrow's Long Stop}
TLS := Max(S1, Max(S2, S3));

PRFT := PRFT * 1000;

RISK :=
If(LE > 0, (LE-TLS)*1000,
If(SULE <> 0, (SULE-SULS)*1000, 0));

TP;



The following Trade by Trade Report was produced using the data supplied with this archive
which is continuous contract, back-adjusted, day session only, Bond futures data.

Bond "25" System UA.LNG-Daily 01/04/88 - 01/16/98                            

Date     Time    Type    Cnts     Price    Signal Name    Entry P/L     Cumulative

06/22/88        Buy    1     64^10            
07/13/88        LExit    1     62^22    L25    $ -1725.00     $ -1725.00
09/29/88        Buy    1     64^24            
11/04/88        LExit    1     67^10        $ 2462.50     $ 737.50
05/05/89        Buy    1     67^23            
06/15/89        LExit    1     73^13        $ 5587.50     $ 6325.00
06/20/89        Buy    1     73^14            
08/03/89        LExit    1     77^21        $ 4118.75     $ 10443.75
08/15/89        Buy    1     74^12            
08/22/89        LExit    1     73^24    L25    $ -725.00     $ 9718.75
08/23/89        Buy    1     74^08            
08/29/89        LExit    1     73^17    L25    $ -818.75     $ 8900.00
10/19/89        Buy    1     76^14            
11/27/89        LExit    1     77^01        $ 493.75     $ 9393.75
06/26/90        Buy    1     71^13            
07/10/90        LExit    1     70^27    L25    $ -662.50     $ 8731.25
11/09/90        Buy    1     70^14            
12/17/90        LExit    1     74^23        $ 4181.25     $ 12912.50
08/28/91        Buy    1     77^31            
10/03/91        LExit    1     80^22        $ 2618.75     $ 15531.25
11/06/91        Buy    1     80^05            
12/13/91        LExit    1     82^05        $ 1900.00     $ 17431.25
01/17/92        Buy    1     84^16            
01/29/92        LExit    1     83^07    L25    $ -1381.25     $ 16050.00
05/29/92        Buy    1     83^25            
07/08/92        LExit    1     86^13        $ 2525.00     $ 18575.00
07/15/92        Buy    1     86^17            
08/21/92        LExit    1     89^22        $ 3056.25     $ 21631.25
12/29/92        Buy    1     91^18            
02/10/93        LExit    1     93^31        $ 2306.25     $ 23937.50
02/11/93        Buy    1     93^31            
03/22/93        LExit    1     97^17        $ 3462.50     $ 27400.00
08/09/93        Buy    1     104^20            
09/15/93        LExit    1     108^25        $ 4056.25     $ 31456.25
12/13/94        Buy    1     94^05            
01/20/95        LExit    1     94^15        $ 212.50     $ 31668.75
02/10/95        Buy    1     97^04            
03/21/95        LExit    1     99^06        $ 1962.50     $ 33631.25
03/24/95        Buy    1     99^02            
05/11/95        LExit    1     104^04        $ 4962.50     $ 38593.75
06/13/95        Buy    1     108^18            
07/19/95        LExit    1     107^31        $ -693.75     $ 37900.00
09/19/95        Buy    1     110^13            
10/27/95        LExit    1     112^05        $ 1650.00     $ 39550.00
10/27/95        Buy    1     112^31            
12/07/95        LExit    1     116^16        $ 3431.25     $ 42981.25
08/16/96        Buy    1     108^22            
08/26/96        LExit    1     106^06MM         $ -2600.00     $ 40381.25
10/11/96        Buy    1     108^17            
11/25/96        LExit    1     113^02        $ 4431.25     $ 44812.50
05/08/97        Buy    1     108^21            
06/18/97        LExit    1     110^22        $ 1931.25     $ 46743.75
06/27/97        Buy    1     110^28            
08/04/97        LExit    1     113^28        $ 2900.00     $ 49643.75
09/26/97        Buy    1     115^14            
11/03/97        LExit    1     117^05        $ 1618.75     $ 51262.50
11/06/97        Buy    1     117^15            
12/17/97        LExit    1     119^12        $ 1806.25     $ 53068.75
12/31/97        Buy    1     120^05            

To view an equity chart based on the above trades go to:

http://www.traderclub.com/systems_25.htm

PAST PERFORMANCE IS NOT NECESSARILY INDICATIVE OF FUTURE RESULTS.

HYPOTHETICAL OR SIMULATED PERFORMANCE RESULTS HAVE CERTAIN INHERENT LIMITATIONS. UNLIKE AN ACTUAL PERFORMANCE RECORD, SIMULATED RESULTS DO NOT REPRESENT ACTUAL TRADING. ALSO, SINCE THE TRADES HAVE NOT ACTUALLY BEEN EXECUTED, THE RESULTS MAY HAVE UNDER-OR-OVER COMPENSATED FOR THE IMPACT, IF ANY, OF CERTAIN MARKET FACTORS SUCH AS LACK OF LIQUIDITY. SIMULATED TRADING PROGRAMS IN GENERAL ARE ALSO SUBJECT TO THE FACT THAT THEY ARE DESIGNED WITH THE BENEFIT OF HINDSIGHT. NO REPRESENTATION IS BEING MADE THAT ANY ACCOUNT WILL OR IS LIKELY TO ACHIEVE PROFITS OR LOSSES SIMILAR TO THOSE SHOWN.

Page 9

Sideways Channels Exploration

Periodicity: Daily

Formulas

ColumnA: Top
Mov(Peak(1,H,1),45,S)-Ref(Mov(Peak(1,H,1),45,S),-45)

ColumnB: Bottom
Mov(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


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)

from Richard Estes


Stochastic and RSI System

Mov((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 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.

from Andy G. andyg@megsinet.net


BDPL Trend Filter

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

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

BUY -1 SELL 1
 

PFE Indicator

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)

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.

from Stephen Zodkov

21 Day Trigger

Look 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))

from Alton Stephens


FibboGatto

FG1:
((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.

Regards, Jerry Gatto


Dynamic Zones

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

Dahl Variations

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

PVT Dahl Trend:
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.

from Alton Stephens


Dahl 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

from Jim O'Donnell


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)
))
From: Vitaly Larichev   vitaly@superlink.com  


2 Day Hammer Exploration

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

Ref((C-L)/(H-L),-1)<=.30 AND

((C-L)/(H-L)) >= .70 AND

Ref(ATR(1),-1) >ATR(10) AND

ATR(1) >= ATR(10)

from Styk


ATR Trailing Stop Loss

For 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.
Yngvi Hardarson


Sine-Weighted Moving Average

Formula:
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


WRO and WSO Indicators


In 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 have
developed 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:
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 another
stock.

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)));
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
theyve been tested successfully with both end-of-day data and real-time
data using MetaStock Professional Version 6.51.

-- Mel Widner, Ph.D., 703 791-5910


Gap 1 System

{BUY}
L>Ref(H,-1) OR
Cum(1)=LastValue(Cum(1))

{SELL}
H<Ref(L,-1) OR
Cum(1)=LastValue(Cum(1))


Gap 2 System

{BUY}
N1:=5;
L>Ref(HHV(H,N1),-1) OR
Cum(1)=LastValue(Cum(1))

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


Gap 3 System

{Enter Long}
N1:=5;
L>Ref(HHV(H,N1),-1) OR
Cum(1)=LastValue(Cum(1))

{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))

{from Ton Maas}

TSI and TSI Moving Average

100*(Mov(Mov(Roc(C,1,$),25,E),13,E)/Mov(Mov(Abs(Roc(c,1,$)),25,E),13,E))

Mov(Fml("TSI"),20,E)

RSI Divergence Exploration

{A simple exploration filter formula for finding a bullish divergence
between the RSI and the price is shown below. To find a bearish divergence,
replace > with <. The differences in the trough function was found through
an optimization routine and they may not be the best values for your
application.}

Ref(RSI(14),-1)>Trough(1,RSI(14),.8)
AND
Ref(CLOSE,-1)<Trough(1,CLOSE,.2)

{from Dan in Pocatello, ID}

Candle - Hanging Man/Hammer and CCI Trading System

enter long:
(Fml("Candle - Hammer")=1) AND
(CCI(11)<-50)

close long:
((CCI(11)<80) AND
(Ref(CCI(11),-1)>80)) OR
((CCI(11)<-80) AND
Ref(CCI(11)>-80,-1))

enter short:
(Fml("Candle - Hanging Man'")=-1) AND
(CCI(11)>50)

close short:
((CCI(11)>-80) AND
(Ref(CCI(11),-1)<-80)) OR
((CCI(11)<80) AND
Ref(CCI(11)>80,-1))

Stix Indicator

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



RSI Divergence

{RSI(9) DIVERGENCE BUY:}
If(RSI(9) >= HHV(RSI(9),19) AND CLOSE <HHV(CLOSE,19), 1,0) OR
If(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) OR
If(RSI(9) <= LLV(RSI(9),19) AND CLOSE > LLV(CLOSE,19),1,0)

{You can substitute any formula for the "RSI(9)"}

{from Mike Arnoldi}


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;

{from Adam Hefner
VonHef@email.msn.com }

High Low

Len:=Input("Periods",1,400,89);
(Mov((H - L + Abs(H - Ref(C,-1)) + Abs(L - Ref(C,-1)) ),len,E))/2


{ from Bob bjagow@jps.net }


Cyclical System

from Ton Maas ms-irb@wxs.nl

"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 from
theabove mentioned TASC article). My guess is that Equis (Alan McNichol) was
not in the possession of them when he wrote the Equis version of the system,
back in the Feb99 Trader's Tips section of TASC).

-----------------------
MetaStock 6.5 Indicator
-----------------------
Name:
Cyclical System - J O Katz

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

---------------------------
MetaStock 6.5 System Tester
---------------------------
Name:
Jeffrey Owen Katz - Cyclical System
Notes:
{February 1999 - TASC-article (see also TRADERS' TIPS)}

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 Testing
page, set the Trade Delay to zero, set Positions to "both", and then set any
other desired options (apart from Optimizing, which is not advisable; leave
the factory default settings). Click OK to save the changes, and then open a
chart and run the system.}

Body Momentum

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

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

{Here is the code:}

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

{from Adam Hefner}

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);
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

{Adam Hefner}


CCI Spike Trading System

{This system uses the momentum Commodity Channel Index (CCI) indicator to
find short-term bottoms in the market. The CCI indicator is extremely
volatile and is generally difficult to use when trading the S&P 500 Index.
We, however, have turned this volatility into a trading advantage by using
the spread or gap between the CCI index and its moving average as a reversal
signal. Specifically if the gap is larger then a certain percentage and CCI
indicator crosses above its moving average we buy the market. The system
remains in the market for a short period of time, exiting the trade as the
indicators cross to the downside. As designed, this system only trades long
the market; it can however be altered to short the market. It is best used
in choppy bullish markets similar to the 1995 bull market.}

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

{Enter long:}

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

{Exit long:}

Cross((Mov(CCI(13),3,S)),CCI(13)) AND
Ref(CCI(13),-1)>200

{from Craig Monroe}

LookBack

Formula: 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: BuyBreak
Formula: HHV(H, LastValue(Fml("LookBack")+Prev-Prev))

Name: BuyExit
Formula: LLV(L, LastValue(Fml("LookBack")/2+Prev-Prev))

Name: SellBreak
Formula: LLV(L, LastValue(Fml("LookBack")+Prev-Prev))

Name: SellExit
Formula: HHV(H, LastValue(Fml("LookBack")/2+Prev-Prev))

Name: BreakWhere
Formula: TopB := Ref(Fml("BuyBreak"), -1);
LowB := Ref(Fml("SellBreak"), -1);
((O+H+L+C)/4 - LowB)*100/(TopB-LowB);

Name: DBS-System
Enter 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.

Stochastic Momentum

SMI-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)+StochMome
ntum(5,3,5)+StochMomentum(8,21,13)+StochMomentum(13,25,2),13,E)

{from Craig DeHaan}

BradCCI

BradCCI: From Bill S.

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

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

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

Plot 1:

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

McClellan Oscillator

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

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

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



McClellan Summation Index

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

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

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

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

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

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

The summation index is plotted by adding the Cum function to the McCllellan
Oscillator. The formula is Cum(Mov(C,19,E) - Mov(C,39,E)).

Jack Landis' Weighted Stochastic
(shortened to Landis)


((Stoch(8,3)*.05)+(Stoch(89,21)*.43)+(Stoch(55,13)*.26)+(Stoch(34,8)*.16)+(S
toch(21,5)*.10))

Landis 3 week s m a
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 periods
formula #1
mov(((Stoch(8,3)*.05)+(Stoch(89,21)*.43)+(Stoch(55,13)*.26)+(Stoch(34,8)*.16
)+(Stoch(21,5)*.10)),15,s)
formula #2
mov(((Stoch(8,3)*.05)+(Stoch(89,21)*.43)+(Stoch(55,13)*.26)+(Stoch(34,8)*.16
)+(Stoch(21,5)*.10)),10,s)
formula #3
mov(((Stoch(8,3)*.05)+(Stoch(89,21)*.43)+(Stoch(55,13)*.26)+(Stoch(34,8)*.16
)+(Stoch(21,5)*.10)),5,s)
formula #4
mov(((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 landis
formula #1
slope(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 #2
slope(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 #3
slope(mov(((Stoch(8,3)*.05)+(Stoch(89,21)*.43)+(Stoch(55,13)*.26)+(Stoch(34,
8)*.16)+(Stoch(21,5)*.10)),5,s),2)

Barnes' Accelleration

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

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

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


Barnes' Adaptive Forecast

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

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

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

Barnes' Moving Average

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

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

{ Notice that comments may be placed within braces }

Chande and Kroll's R2 Indicator

rev. 01/06/97

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

In MetaStock the r2 formula is:

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

They also present a smoothed r2 which would be:

Mov(Pwr(Corr(Cum( 1 ),C,14,0),2)*100,14,S)

For interpretation refer to Chande & Kroll's book, as stated above.

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

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 Volt
Std(log(c/ref(c,-1)),10)*sqr(365/7)

Tema StochRSI Formula

I 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)

{from Jim Greening}

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 Systems
and Methods". It uses a 2-day range, calculates an average range and SD of
the range, and then draws 4 lines below the high, at 1 range and 0,1,2, and
3 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);

from Mikelu


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,
{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;


ATR Modified

prd1:=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);

Highest High Since Buy Signal

> Anyone 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)

from Ken


Forecast Oscillator System Alternative

Enter long:
Cross(ForecastOsc(C,21),Mov(ForecastOsc(C,21),3,E)) AND
Cross(ForecastOsc(C,21),0)

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

{You can use alert() function on either if you don't require both conditions
to fire on the same day.}

Forecast Oscillator System

Enter 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)) AND
Cross(6,Mov(C,3,E))


Equivalent to Wilders TR

Wilders(TR,periods) = Mov(TR,2*periods-1,E)


True Range Formula


TR = (H - L + Abs(H - Ref(C,-1)) + Abs(L - Ref(C,-1)) )/2

{from Bob Jagow}

Page 10

Creating Dynamic Vertical Lines
from Ken

These are dynamic moving vertical lines. Each new bar causes the line to move forward 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;
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


Support and Resistance

I 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)

from Mike Arnoldi



Volume Accumulation Percentage

I 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 PERCENTAGE
Periods:=Input("Time Periods",1,60,21);
X:=(2*C-H-L)/(H-L);
TVA:=Sum(V*x,Periods);
TV:=Sum(V,Periods);
VA:=100*TVA/TV;
VA

from Tom Strickland


Alligator Indicators

from Gary Randall -- Brunswick, Maine

Alligator Indicators - Bill William, "Trading Chaos"
----------------------------------------------
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");
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);

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

Fractal;


Experimental Williams Trading System

A trading system based on work of Bill Williams from jcob3@prodigy.com

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 really
haven't spent too much time on it yet so I'm not yet sure of the
significance 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.

Jeff


Shifted TSMA Indicator

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

from Ken Wallace gcwallace@home.com



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=5
Close Long
Cross(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, 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.

Regards,

Jeff jcob3@prodigy.net


Coding Example

If yesterdays high is greater than the high of 2 days ago// and the low 5 days ago is less than or equal to the high 4 days ago// and it is Wednesday
Try this:
Ref(H,-1)>Ref(H,-2) AND
Ref(L,-5)<=Ref(H,-4) AND
Dayofweek() = 3

from Paul Beattie



Persistance of Money Flow

Chaikin'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.

{from Craig DeHaan}


StochPVT Indicators

Though 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:

{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)

{from harelsdb@aol.com}



One Day Money Flow

The 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

{from Marcel Knechtle}



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 ) )

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 ) )

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 73374.1364@Compuserve.com.

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.



Multipart Formulas

QUESTION:

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

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

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

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

Bob Anderton



Gap Trading

Here 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);

Stéphane Reverre



Chandlier Exit

The exit system you use is at least as important as the entry system.

Below is the code for Chuck LeBeau's Chandelier Exit. The Chandelier Exit is a volatility based exit (it uses average true range) that works quite well on trend following systems. It lets "... profits run in the direction
of a trend while still offering some protection against any reversal in trend."

The theory is quite simple, but because of the awkwardness of defining the entry price, its implementation in MetaStock takes some work. The theory is: exit a long position at either the highest high since entry minus 3
ATRs, or at the highest close since entry minus 2.5 ATRs.

The exit is descibed more fully in the Trader's Toolkit section at Chuck LeBeau's site -- http://traderclub.com/

Here is the MetaStock code:

{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

{from Glen Wallace}


Projected Range

From "Lyn Maine"
This is
Tom 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);
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)

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))


Candle Code

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

CandleCode
Bdy:=Abs(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)


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

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

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

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


Tom Demark's Range Expansion Index

TDREI
TD1:= 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;


From Henry Z Kaczmarczyk

Page 11

Trading the Trend 2


Trading 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,
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 made
between 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.

From Harvey Pearce  hhp@home.com


Trading the Trend 1

TTT--TREND TRAILING Indicator -- Andrew Abraham

Could have been called:
-STOP LOSS Indicator
-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}

From  Ian Burgoyne  iburgy@one.net.au

Bollinger Band Width

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

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

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

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

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

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

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

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

from Alberto Torchio

Bollinger Band Histogram Karnish

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

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

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

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

from Steve Karnish

System Test Examples
from 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 to
zero)

"Exit five bars after entry."

EntryCondition:= {your trade entry conditions};
BarsSince(EntryCondition >= 5)

Bollinger Optimised Synergy System

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

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

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

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

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

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

Chaikin Oscillator formula:

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

from Ton Maas


Bianchi Approach


enter long

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


enter short

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

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

Starc Band

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

Contributed by J. Seed

Money Flow Index

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

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

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

Here are the MetaStock formulas for the Money Flow Index:

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

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

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

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

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


Bollinger Band Confirmation

From: Ton Maas

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

Chaikin Oscillator formula:

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


Bollinger Band Width 2

From: Philip Schmitz

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

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

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


Karnish Bollinger Band Histogram Trading System

{EnterLong and Close Short}
BBHistogram:= (CLOSE + 2*Std(CLOSE,20) -
Mov(CLOSE,20,SIMPLE)) / (4*(Std(CLOSE,20)))
* 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).

Steve Karnish


CMA


"1) Sell the opening (long or short) X-number of days(?) after the indicator above moves from below 100 to
above 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-number
of days after that occurs."

Buy, when the BB Histo dips below zero (the following morning).

"a) how many days after the signal does one act;"

The following morning.

" b) Is this 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.


Steve Karnish

Cleaning out unwanted stocks from Metastock

A fast method to clean out unwanted stocks from Metastock and also save them for future viewing.
On your hard drive, create a series of folders and sub folders like your present Metastock data system. In my case OLD_META_DATA/ALL01/A01,B01,C01 etc to Z01. (Be sure no more than 450 stocks go in each folder when you do copy/deletions)
Open METASTOCK/Tools/DOWNLOADER and once in DOWNLOADER open Tools/Copy .
Browse to the folder you wish to make deletions from.
In the "Copy Securities" window make sure you can read the Last Date column with the Name column showing. If not,do not use the scroll bar but place the cursor in the Name box at its RH end almost in the Symbol box and when your cursor turns into a cross hold down the LH button on the mouse and drag it left thereby narrowing the Name column till the Last Date column is visible.( This is also a good tip when printing out Metastock reports that do not fit on the width of an A4 page, just reduce the width of a column or eliminate it completely if it is not wanted on the print out.)
Hold down the Control key and highlight each Name you wish to delete. I go on the Last Date column to find useless stocks. If you use the scroll bar to go down the list be sure not to let go of the control key as you will lose all your previous selections.
When finished highlighting let go of control key and press copy. Browse to the new folder you created, tick the "Delete Source Security" box and press OK. Old securities gone out of current data base and saved for future reference. You can do hundreds in a matter of minutes. If you want to ever see the old securities just alter the lead folders names in explorer.
From Basil Holloway


Bollinger Bands 2

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

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

Alberto Torchio
Torino, Italy




Bull Fear/ Bear Fear with DX System

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

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

{Mike Arnoldi}


Bull Fear/ Bear Fear

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

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


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

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

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

Jeff


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

{from bdog}


Stoch RSI

Although 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

from Steve Karnish
Cedar Creek Trading



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) AND
LOW>=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) AND
HIGH<=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

Page 12

ADX with Stochastic Signals

Metastock 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 :

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))

C Miller, ccm@itga.com.au


Chandeleir Exit, version II

Below is the MetaStock code I posted for the Chandelier exit back in October, 1999. The trick is to define the entry date/price as the point at which your system triggered the entry, not by using the date functions. A side benefit is that you can also use it to implement a fixed dollar, or money management, stop.

The more time I spend with the Chandelier exit, the more I admire its strength as an exit and its simplicity. Because exits tend to be the weakest part of a system, I would urge everyone to spend some time with it.

And Chuck LeBeau gets credit for the MetaStock code, not me. I just took his framework and applied it to his exit.


{LONG EXIT}
LongEntry:= {this your entry system, eg. Cross(CLOSE, Mov(C,20,E))};
MoneyMgmtStop:= {this is your maximum loss, in points};

{DEFINE ENTRY PRICE, WITH EXIT BEING -- ENTRY PRICE AND NO TRADE BEING 0}
EntryPrice:= If(PREV <= 0,
{Trade entered today?}
If(LongEntry, CLOSE, 0),
{Trade entered before today. Stopped today?}
If(LOW <= PREV - MoneyMgmtStop, -PREV,
If(LOW <= HighestSince(1,PREV=0, HIGH) - 3 * ATR(10), -PREV,
If(LOW <= HighestSince(1,PREV=0, CLOSE) - 2.5 * ATR(10), -PREV,
PREV))));

{EXIT IF ENTRY PRICE < 0 (MEANING EXIT)}
EntryPrice < 0

{SHORT EXIT}
ShortEntry:= {this your entry system, eg. Cross(Mov(C,20,E), CLOSE)};
MoneyMgmtStop:= {this is your maximum loss, in points};

{DEFINE ENTRY PRICE, WITH EXIT BEING -ENTRY PRICE AND NO TRADE BEING 0}
EntryPrice:= If(PREV <= 0,
{Trade entered today?}
If(ShortEntry, CLOSE, 0),
{Trade entered before today. Stopped today?}
If(HIGH >= PREV + MoneyMgmtStop, -PREV,
If(HIGH >= LowestSince(1,PREV=0, LOW) + 3 * ATR(10), -PREV,
If(HIGH >= LowestSince(1,PREV=0, CLOSE) + 2.5 * ATR(10), -PREV,
PREV))));

{EXIT IF ENTRY PRICE < 0 (MEANING EXIT)}
EntryPrice < 0

from Glen Wallace

Moving Average Crossovers

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

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

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

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

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

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

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

from Yngvi
hardy@consulting.is


Setting up the ADX Template

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

8. Similarly drag the RSI indicator to the bottom of the right-hand chart.

from HHP


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

Patrick McDonald, patrick@mpx.com.au


Backdating Metastock Explorations

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

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

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

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

Patrick McDonald, patrick@mpx.com.au


Vidya 21, 5

This 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

from Ian Burgogyne


Vidya with P variable, version II


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

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

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

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

from Barry Marx


Vidya Explanation

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

from HHP


Vidya using P variable, version I

Here 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)}

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

{from HHP}


Channel Exit with Stop Loss

As people have mentioned before, it is difficult to design exits in MetaStock because of the awkwardness of defining your trade entry price. One exit system that requires your trade entry price is the channel exit.

For those not familiar with it, the channel exit is quite a straight forward trailing stop. Once you're in a trade (let's say, long), you maintain your stops at the lowest low of the past number of days (optimized, in the code below) until you are taken out of the market. This method attempts to let profits run in the direction of the trend, but takes you out when price makes a significant reversal and you risk giving back profits on a retracement or the end of the trend.

Below is the code for a channel exit. It also includes a money management stop to limit losses to an acceptable level until the channel exit exceeds it. Work on variations of this basic theme, such as moving the stop up faster where the market makes rapid gains and your lowest low in, say, 10 or 20 days is just too far away to adequately protect profits.

Glen Wallace

{LONG EXIT}
LongEntry:= {this your entry system, eg. Cross(CLOSE, Mov(C,20,E))};
MoneyMgmtStop:= {this is your maximum loss, in points};

{DEFINE ENTRY PRICE, WITH EXIT BEING -ENTRY PRICE AND NO TRADE BEING 0}
EntryPrice:= If(PREV <= 0,
{Trade entered today?}
If(LongEntry, CLOSE, 0),
{Trade entered before today. Stopped today?}
If(LOW <= Max(PREV - MoneyMgmtStop, Ref(LLV(LOW,opt1),-1)), -PREV,
PREV));

{EXIT IF ENTRY PRICE < 0 (MEANING EXIT)}

EntryPrice < 0


{SHORT EXIT}
ShortEntry:= {this your entry system, eg. Cross(Mov(C,20,E), CLOSE)};
MoneyMgmtStop:= {this is your maximum loss, in points};

{DEFINE ENTRY PRICE, WITH EXIT BEING -ENTRY PRICE AND NO TRADE BEING 0}
EntryPrice:= If(PREV <= 0,
{Trade entered today?}
If(ShortEntry, CLOSE, 0),
{Trade entered before today.Stopped today?}
If(HIGH >= Min(PREV + MoneyMgmtStop, Ref(HHV(HIGH,opt1),-1)), -PREV,
PREV));

{EXIT IF ENTRY PRICE < 0 (MEANING EXIT)}
EntryPrice < 0


Higher Volume Exploration

Required: today's volume to be greater than the highest high over the past 21 days.

MetaStock Explorer filter:

V>Ref(HHV(V,21),-1)

from HHP


Enter 20 Days after MOV Signal

I am trying to use the MetaStock Explorer to find all stocks with the following:

1. c - mov(c,60,s)<0
2. 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.

from Yngvi



Under the MetaStock Explorer filter, use something like:

C>MOV(C,60,S) AND REF((C>MOV(C,60,S)),-1) AND
REF((C>MOV(C,60,S)),-2) AND REF((C>MOV(C,60,S)),-3) AND
REF((C>MOV(C,60,S)),-4) AND REF((C>MOV(C,60,S)),-5) AND
REF((C>MOV(C,60,S)),-6) AND REF((C>MOV(C,60,S)),-7) AND
REF((C>MOV(C,60,S)),-8) AND REF((C>MOV(C,60,S)),-9) AND
REF((C>MOV(C,60,S)),-10) AND REF((C>MOV(C,60,S)),-11) AND
REF((C>MOV(C,60,S)),-12) AND REF((C>MOV(C,60,S)),-13) AND
REF((C>MOV(C,60,S)),-14) AND REF((C>MOV(C,60,S)),-15) AND
REF((C>MOV(C,60,S)),-16) AND REF((C>MOV(C,60,S)),-17) AND
REF((C>MOV(C,60,S)),-18) AND REF((C>MOV(C,60,S)),-19)

That should work ... theoretically. The only thing I'm concerned about is the REF format. However, I think it's correct. The Close is always above (or greater than '>') the MOV. The parentheses always match. Because a 60 day MOV is rather slow, you probably could shorten the formula by leaving out all of the even numbered REFerences:

C>MOV(C,60,S) AND REF((C>MOV(C,60,S)),-1) AND
REF((C>MOV(C,60,S)),-3) AND REF((C>MOV(C,60,S)),-5) AND
REF((C>MOV(C,60,S)),-7) AND REF((C>MOV(C,60,S)),-9) AND
REF((C>MOV(C,60,S)),-11) AND REF((C>MOV(C,60,S)),-13) AND
REF((C>MOV(C,60,S)),-15) AND REF((C>MOV(C,60,S)),-17) AND
REF((C>MOV(C,60,S)),-19)

from Daniel Martinez


Volume Based Exploration

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

from warthog

Page 13

LSS Oscillator & Pivot Point

Here are a few formula's that I picked up from a
mailing 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 osc
X:=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 Number
X:=(H+L+C)/3;
BBN:=2*X-L;
BSN:=2*X-H;
BBN;
BSN;

From Henry Kaczmarczyk


Volatility % Indicator

Create the Volatility% Indicator from William Brower’s S&C article in MetaStock for Windows.

Volatility%

Lookback := Input("Time Periods",1,1000,50);

HighVolatility := Input("High Volatility %",.01,100,3);

100 * Sum(100 * ATR(1)/CLOSE > HighVolatility, Lookback)/Lookback

From Henry Kaczmarczyk



Instantaneous Trendline & Sinewave Indicator as described by John Ehlers


Here are a few formula's that I picked up from a
mailing 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 osc
X:=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 Number
X:=(H+L+C)/3;
BBN:=2*X-L;
BSN:=2*X-H;
BBN;
BSN;


TASC Trader's Tip: Volatility % Indicator (Dec '97)

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


Instantaneous Trendline and Sinewave Indicator
by 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

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) +

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))+

(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)+

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)+

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"));

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

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)



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;


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

from Henry Kaczmarczyk

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

Peter Martin
alakazam@bigpond.com


Zero Lag MACD

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;
ZeroLagMACD

Peter Martin
alakazam@bigpond.com



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

Regards
Peter Martin
alakazam@bigpond.com


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?}
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))));

David Bozkurtian 2/17/00 


Variable MA Formula- Updated

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

Richard


RSI Offset


RSI(13) - 50 {offset the RSI to +-50}

from Warthog


MACD Offset

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

from Warthog

Page 14

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 = x
AND y > 0
AND y > Ref(y,-1)
AND C > Mov(C,13,W)
AND C > Mov(C,34,W)
AND V*C > 250000

Jim Thorley muffie53@ozemail.com.au

Jeff Cooper 180's Buy

A:Close
B:{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)*.25
D:{Entry}HHV(H,2)+.125
E:{Stop}HHV(H,2)+.125-1


Jeff Cooper 180's Sell

A:Close
B:{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)-.125
E:{Stop}LLV(L,2)-.125+1


Jeff Cooper Lizards Buy

A:close
B:{Signal}O>H-(H-L)*.25 AND C>H-(H-L)*.25 AND
L<Ref(LLV(L,10),-1)
C:{entry}H+.125
D:{Stop}H+1.125
Filter:O>H-(H-L)*.25 AND C>H-(H-L)*.25 AND
L<Ref(LLV(L,10),-1)


Jeff Cooper Lizards Sell

A:close
B:{Signal}O<L+(H-L)*.25 AND C<L+(H-L)*.25 AND
H>Ref(HHV(H,10),-1)
C:{entry}L-.125
D:{Stop}L-1.125
Filter:O<L+(H-L)*.25 AND C<L+(H-L)*.25 AND
H>Ref(HHV(H,10),-1)


Jeff Cooper Slingshots Buy

A:Close
B:{Range breakout}Ref(H,-1)>=Ref(HHV(H,40),-1)
AND L<Ref(L,-1)-.125
C:{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


Jeff Cooper Slingshots Sell

A:Close
B:{Range breakout}Ref(L,-1)<=Ref(LLV(L,40),-1)
AND H>Ref(H,-1)+.125
C:{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


Jeff Cooper Whoops Sell

A:close
B:C<Mov(C,10,S) AND C<Mov(C,50,S) AND
O>Ref(C,-1)+.25
C:{Entry}Ref(C,-1)-.125
D:{Stop}Ref(C,-1)-.125+1
Filter:C<Mov(C,10,S) AND C<Mov(C,50,S) AND
O>Ref(C,-1)+.25


A:Close
B:ADX(14){The higher the better}
C: PDI(14)>MDI(14)
D:If(L<Ref(L,-1) and Ref(L,-1)<Ref(L,-2) and
Ref(L,-2)<Ref(L,-3),1,0)
E:{Entry}HHV(H,3)+.125
F:{stop}LLV(L,3)
Filter:ColB>30 and ColC and ColD=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


Boomers Buy and Sell

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


Expansion Pivots Buy

A:=Close
B:{Breakout}(H-L)>ATR(9)
C:{Signal}Ref(C,-2)<=Mov(C,50,S) and
Ref(C,-1)>Mov(C,50,S) OR Ref(C,-1)<=Mov(C,50,S) and
C>Mov(C,50,S)
D:{entry}HHV(H,2)+.125
E:{Stop}If(Ref(C,-2)<=Mov(C,50,S) and
Ref(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


Expansion Pivots Sell

A:=Close
B:{Breakout}(H-L)>ATR(9)
C:{Signal}Ref(C,-2)>=Mov(C,50,S) and
Ref(C,-1)<Mov(C,50,S) OR Ref(C,-1)>=Mov(C,50,S) and
C<Mov(C,50,S)
D:{entry}LLV(L,2)-.125
E:{Stop}If(Ref(C,-2)>=Mov(C,50,S) and
Ref(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


Gilligan's Island Buy

A:Close
B:GapDown()<=Ref(LLV(L,40),-1) and C>=O and
C>=((H-L)*.50)+L
C:{entry}H+.125
D:{stop}H+.125-1
Filter: GapDown()<=Ref(LLV(L,40),-1) and C>=O and
C>=((H-L)*.50)+L


Gilligan's Island Sell

A:Close
B:GapUp()>=Ref(HHV(H,40),-1) and C<=O and
C<=((H-L)*.50)+L
C:{entry}L-.125
D:{stop}L-.125+1
Filter: GapUp()>=Ref(HHV(H,40),-1) and C<=O and C<=((H-L)*.50)+L


SIROC Indicator From Elder

ROC(Mov(C,13,E),21,%)


Moving Average Violated By %

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


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


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


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


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


Stochastic MA System

enter long
mov(stoch(55,21),5,w)>ref(mov(stoch(55,21),5,w),-1)
and mov(stoch(55,21),5,w)<75 and
mov(stoch(55,21),5,w)>20
exit long
(mov(stoch(55,21),5,w)<75 and
ref(mov(stoch(55,21),5,w),-1)>75)
enter short
(mov(stoch(55,21),5,w)<70 and
ref(mov(stoch(55,21),5,w),-1)>70) and
mov(stoch(55,21),5,w)<ref(mov(stoch(55,21),5,w),-1)
exit short
mov(stoch(55,21),5,w)>ref(mov(stoch(55,21),5,w),-1)
and mov(stoch(55,21),5,w)<75 and
mov(stoch(55,21),5,w)>20



Bollinger Bands Formula 7 Day

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


EMA Cross System

avoid using when the market has no clear direction --
enter long
mov(c,5,e)>mov(c,21,e) and
ref(mov(c,5,e),-1)<=ref(mov(c,21,e),-1)
exit long
mov(c,5,e)<mov(c,21,e) and
ref(mov(c,5,e),-1)>=ref(mov(c,21,e),-1)


Boomers Trading Signals:
Boomers buysig


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

Boomers watchsig**

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

Boomers watchsig 2**

(Ref not prev)

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

Page 15

Resistance and Support *F

PrCnt:=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);


Resistance and Support

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;


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);


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)

From superform@hotmail.com


Average Dollar Price Volatility Exploration-Deel
 
    This 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
   
    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   


7 Day Rate Of Change Ported From Super Charts

((C-Ref(CLOSE,-7))/Ref(CLOSE,-7)*100)

Close Above Median Price

This exploration is designed to find those stocks where the close is above the median price over the past five days. It matches the steps in Dels bvook The Strategic Electronic Day Trader.
col a = CLOSE - MP()
col b = (Ref(CLOSE,-1))-(Ref( MP() ,-1))
Col c = (Ref(CLOSE,-2))-(Ref( MP() ,-2))
col d = (Ref(CLOSE,-3))-(Ref( MP() ,-3))
col e = (Ref(CLOSE,-4))-(Ref( MP() ,-4))
filter = colA>=0 AND colB>=0 AND colC>=0 AND colD>=0 AND colE>=0
    The filter in the exploration only shows those stiocks that have the strongest bullish bias over all 5 days. By removing the filter all stocks will be shown. Ranking the first colum will then allow you to estaboish the overall score for each stock.


MACD Custom

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

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

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

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

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

Ton Maas
Submitted by warrah@comcen.com.au



ADX And Trendlines

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

from Philip pschmi02@sprynet.com
Submitted by warrah@comcen.com.au



Brown's Indicator

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

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


Finding Trendiness

A 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:
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) and
ADX(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)

from Philip pschmi02@sprynet.com
Submitted by warrah@comcen.com.au



Weakness In A Strong Trend

In an up trend, three or four successive lower CLOSES and the EMA(21) is rising.

SimpleX LONG:

C <= Ref(C,-1) AND
Ref(C, -1) <= Ref(C, -2) AND
Ref(C, -2) <= Ref(C, -3) AND
Mov(C, 21, E) > Ref(Mov(C, 21, E), -1)
OR
C <= Ref(C,-1) AND
Ref(C, -1) <= Ref(C, -2) AND
Ref(C, -2) <= Ref(C, -3) AND
Ref(C, -3) <= Ref(C, -4) AND
Mov(C, 21, E) > Ref(Mov(C, 21, E), -1)

SimpleX SHORT:

C >= Ref(C,-1) AND
Ref(C, -1) >= Ref(C, -2) AND
Ref(C, -2) >= Ref(C, -3) AND
Mov(C, 21, E) < Ref(Mov(C, 21, E), -1)
OR
C >= Ref(C,-1) AND
Ref(C, -1) >= Ref(C, -2) AND
Ref(C, -2) >= Ref(C, -3) AND
Ref(C, -3) >= Ref(C, -4) AND
Mov(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.

Philip pschmi02@sprynet.com
Submitted by warrah@comcen.com.au



Double Inside Day

{For today is an inside day}
H < Ref(H,-1) and
L > Ref(L,-1) and
{For yesterday was an inside day}
Ref(H,-1) < Ref(H,-2) and
Ref(L,-1) > Ref(L,-2)

Submitted by warrah@comcen.com.au

Page 16

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

Zig Zag Validity

perc:=Input("Percent",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) AND
Ref(z,-1)<Ref(z,-2));
res:=If(pc>=perc ,1,0);
If(Alert(res,2) AND SD,1,res);

by Spyros Raftopoulos

Mick's Breakout Exploration

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

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

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

regards mick (wintom)


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);
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)

from Bob Jagow


Gann Hi-Lo

colA
BUY
BarsSince(C< Fml("GANN-HiLo"))

colB
SELL
BarsSince(C> Fml("GANN-HiLo"))

filter
colA=1 OR colB=1

from Mike Arnoldi


Bollinger Bank Hook Up and Hook Down

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

Name: Upper BB Hookdown
Formula:

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


Name: Lower BB Hookup
Formula:

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

from Jim Barone

Metastock % Bands Revised

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

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

{NAME: %Bands}

Pds:= 21; {ENTER EMA LENGTH}

Pct:= 2.5; {ENTER PERCENT BANDWIDTH}

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


{NAME: %BandsCount}

{USE WITH %BANDS FORMULA}

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

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


EXPERT

{Name: %Bands}

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

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

{from HHP}

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}

{created by HHP from a Mark Brown system}


Modified 50 Day Moving Average


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

from Ton Maas ms-irb@planet.nl


ECO - R Krauz

The 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

J. Seed


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

[from Ian Burgoyne}

Page 17

FORMULAS FROM SITE VISITORS

FRACTAL UP AND FRACTAL DOWN EXPERT

The formula for Up Fractal is:

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

The formula for Down Fractal is:

(If( LOW < Ref( LOW , -1 ), 1 ,0 ) AND If( LOW < Ref( LOW , -2 ), 1 ,0) AND

If( LOW < Ref( LOW , +1 ), 1 ,0 )AND If( LOW < Ref( LOW , +2 ), 1 ,0 ))

Put the formulas in a new Expert with up arrows and down arrows in graphics with appropriate colors. Hope this will be of help.

Manoj P Abraham

 

FRACTAL UP AND FRACTAL DOWN INDICATOR

Manoj Abraham  manopab@hotmail.com

That formula was for the MetaStock Expert. Create a new Expert and put the same in the symbols section and apply it. It will highlight the points where these occur. If you want to plot the same as lines, check this out. Use the Indicator Builder to create these two indicators.

Fractal Up

ValueWhen(1,(( HIGH > Ref( HIGH , -1 ) ) AND ( HIGH > Ref( HIGH , -2 ) ) AND ( HIGH > Ref( HIGH , +1 ) ) AND ( HIGH > Ref( HIGH , +2

))),C)

Fractal Down

ValueWhen(1,((( LOW < Ref( LOW , -1 )) AND ( LOW < Ref( LOW , -2 )) AND ( LOW < Ref( LOW , +1 ))AND ( LOW < Ref( LOW , +2 ) ))),C)

I use the fractals (we call them minor tops and minor bottoms) to add to my existing positions. Hope this helps

Manoj P. Abraham

 

UP AND DOWN FRACTAL FORMULA CORRECTION

The formula for Up Fractal is:

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 )

The formula for Down Fractal is:

If( LOW < Ref( LOW , -1 ), 1 ,0 ) AND

If( LOW < Ref( LOW , -2 ), 1 ,0) AND

If( LOW < Ref( LOW , +1 ), 1 ,0 ) AND

If( LOW < Ref( LOW , +2 ), 1 ,0 )

Put the formulas in a new Expert, in the Trends section, with up arrows and down arrows in graphics with appropriate colours.

Hope this will be of help.

Manoj P Abraham

 

LINEAR REGRESSION TRADING SYSTEM

Here's a system that works. Its no Holy Grail but with a little common sense you'd be hard pressed losing money with it. Steve posted it a while back (his "lumber.gif") so I can hardly take credit for the idea, but I think the system is so profitable that I felt I really ought to champion it a bit. I would characterise it as being a fairly aggressive short term system, so it's not everyone's cup of tea.

I have added a stochastic crossover to its exit which gets it out just that little bit earlier sometimes. I find that to get the best signals there is no point in optimising over too long a time frame (yea, I know I'm going to get flamed -- heretic, unbeliever) so I pick a period back where the security doesn't change character too much and re-optimise if something dramatic happens.

Another trick is to initially optimise coarsely over a very wide range and then select intermediate results that appear to be heading for the sort of trades that you'd like to see (not always the most profitable). Often there are many profit peaks and if you initially optimise over too small a range you won't see the best version for that particular security.

I also attach the optimised formula as a MetaStock Expert to securities that I follow. The Buy signal is uncanny and the first few times you really wonder about your sanity.

{Enter Long}

Cross(opt2,ForecastOsc(O,opt1))

{Close Long}

Cross(ForecastOsc(O,opt1),opt3) OR

Cross(Mov(Stoch(opt4,3),opt5,S),Stoch(opt4,3))

Jeff Ledermann   j.ledermann@uq.net.au

 

ADX RISING EXPOLORATION

For ADX > 25 and rising, you could do something like this in MS Explorer:

Column A: ADX(21)

Filter: ADX(21)>25 AND

ADX(21)>Ref(ADX(21),-1) AND

Ref(ADX(21),-1)>Ref(ADX(21),-2) AND

Ref(ADX(21),-2)>Ref(ADX(21),-3)

For ADX starting to move higher, you could try:

Column A: ADX(21)

Column B: Ref(ADX(21),-1)

Filter: ADX(21)>ADXR(21) AND Ref(ADX(21),-1)<=Ref(ADXR(21),-1

 

SWING TRADING EXPERT

Inside(), outside(), rally(), reaction(), reactionwithvol() and rallywithvol() are all FUNCTIONS and described as such in the manual. These are not indicators, but can be used in writing an indicator. If you want to see rallywithvol() as an indicator, hit your formula button and call your new indicator rallywithvol. Then in the formula window, click on FUNCTIONS, highlight rallywithvol() and paste it in. Voila, you now have an indicator that reflects the rallywithvol() function. If you want to create a short term swing type trading system with these functions getting insights to their use which can be had by reading the description of these functions in the manual, create an expert and type the following:

(RallyWithVol() OR Rally()) AND Ref(Inside() OR Outside(),-1)

This is for the long side. Looking for a fast point or two in the next few trading sessions. Entry is just above the signal bar. Use a tight stop. If entry point was not hit, there is no trade. This is for "Hit and Run" style trading.

from Steve Denk

REACTION FUNCTIONS

I can help with explanations of the Reaction() function and other associated functions in the formula language. The functionality exist in the formula language ONLY and are not implemented as standard, built-in indicators. In order to access their capabilities, you must write a custom indicator or other formula-based calculation that calls the appropriate function. These functions are used mainly for a type of pattern similar to the functions used for candlestick patterns. The candlestick pattern functionality can also only be accessed through formula functions and not as standard, built-in indicators. Specifically, the following functions are related to the Reaction() function:

Reaction()

ReactionWithVol()

Rally()

RallyWithVol()

Inside()

Outside()

The user's manual attempts to describe the functionality of these functions, but we recently identified the fact that the user's manual did not correctly define how they work. A correct explanation for these functions follows:

Reaction() : Identifies a "reaction day". A reaction day occurs if the current bar's high is less than or equal to the previous rally or reaction day's high AND the current bar's low is less than the previous rally or reaction day's low.

ReactionWithVol() : Identifies a "reaction with volume day". This occurs if the current bar is identified as a reaction day AND the volume for the current bar is greater than the volume for the previous rally or reaction day.

Rally() : Identifies a "rally day". A rally day occurs if the current bar's high is greater than the previous rally or reaction day's high AND the current bar's low is greater than or equal to the previous rally or reaction day's low.

RallyWithVol() : Identifies a "rally with volume day". This occurs if the current bar is identified as a rally day AND the volume for the current bar is greater than the volume for the previous rally or reaction day.

Inside() : Identifies an "inside day". This occurs if the current bar's high is less than or equal to the high for the previous rally or reaction day AND the current bar's low is greater than or equal to the previous rally or reaction day's low.

Outside() : Identifies an "outside day". This occurs if the current bar's high is greater than the high for the previous rally or reaction day AND the current bar's low is less than the previous rally or reaction day's low.

Ken Hunt

SUSTAINED SWING EXPLORATION

{Place in MetaStock Explorer filter section. Recommended to predict sustained swings, contributed by from Rajat K. Bose.}

(ADX(14) < LLV(PDI(14),25) ) AND (ADX(14) < LLV(MDI(14), 25))

 

CCT LinReg OSC

{CCT LinRegOsc:}

(LinearReg(C,13)/Ref(LinearReg(C,13),-13))-1

{from Steve Karnish, Cedar Creek Trading (CCT)}

 

DOJI ALERT

I want to signal when a Doji occurs following a four-day consecutive increasing CLOSE. I would like this to be an ALERT, signalling if this completed pattern has occurred within the last five days.

from Barry Kales

ANSWER

Doji() AND

Alert((Ref(C,-1) > Ref(C,-2) > Ref(C,-3) > Ref(C,-4)),5)

from Richard Estes

 

DMI exploration version 2

QUESTION

I want to do a MetaStock Exploration with the Directional Movement Index. I want to scan for the crossing of the two, i.e., yesterday +DX is less than -DX; today +DX is greater than -DX; and visa versa.

from Dan

ANSWER

Although the names in the MetaStock quicklist drop down box are + or - DI, you will need to use PDI or MDI in your formulas. That seems to be causing your problem. PDI=Plus Directional Movement Index and MDI=Minus Directional Movement Index. Instead, use the following:

DIRECT:=PDI(14)>MDI(14);

DIRECT AND Ref(DIRECT,-1)=0;

from Dave Nadeau

 

DMI exploration version 3

QUESTION:

I want to do an exploration with Directional Movement Index. I want to scan for the crossing of the two, i.e., yesterday +DX is less than -DX, today +DX is greater than -DX and visa versa.

from Dan

ANSWER:

+DX(14) > -DX(14)

AND Ref(+DX(14),-1) < Ref(-DX(14),-1)

from Peter Gialames

 

EXCEL CONFIDENCE % INDICATOR

EXCEL CONFIDENCE % FOR METASTOCK

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.

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

 

FRONT WEIGHTED MOVING AVERAGE

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" ) =

0.07 * Ref(P,-1) +

0.079 * P

 

SWING CHART

SWING CHART FOR METASTOCK

Among the single-handful of tech analysis indicators I've come to value in seeking out potentially profitable trades is the good old swing chart. This is not present in the standard MetaStock 6.5 armoury (at least my edition of it)but Equis derived the following formula to me some time ago for the daily swing -

If( High > Ref(High,-1) AND Low > Ref(Low,-1), High, If( High <

Ref(High,-1) AND Low < Ref(Low,-1), Low, PREV))

Simple really! It certainly doesn't show up as a nice rectangular pattern, but you get used to reading it just as fluently for just as correct interpretation. This formula is easily adapted for any other time period by using Highest High Value and such-like functions instead of the Ref function. Though with a little more tooling, it is also readily adaptable to price swing charting rather than time swings.

 

How to filter out dead stocks

Here is how I do it (in the MetaStock Explorer filter):

y1:=2000;

m1:=7;

dt:=25;

test:=If(Year()<>y1,1,If(Month()<>m1,1,If(DayOfMonth()<>dt,1,0)));

Test=1

Since the Explorer does not allow the Input Function, you will need to enter the Year, Month, and Day as the variables y1,m1,and dt, respectively.

from Michael

 

RSI of MACD

Q:=Input("Periods",1,1000,14);

Z:=Wilders(If(ROC(MACD(),1,$)>0,ROC(MACD(),1,$),0),LastValue(Q));

Y:=Wilders(If(ROC(MACD(),1,$)<0,Abs(ROC(MACD(),1,$)),0),LastValue(Q));

RS:=Z/Y;

100-(100/(1+RS))

from Pierre Tremblay

 

WRITING EXPERT COMMENTARY

Here's how to use MetaStock Expert function with the tab for commentary. For example, I wrote this commentary that I can attach to any stock, and it will give me the next day's projected high & low.

PRICES:

TODAY'S CLOSE WriteVal(CLOSE,2.3)

TOMMOROW's

PROJECTED HIGH

WriteIf(C<O, "WRITEVAL(-L+ (H+2*L+C)/2,25.2)")

WriteIf(C>O, "WRITEVAL(-L+ (2*H+L+C)/2,25.2)")

WriteIf(C=O, "WRITEVAL(-L+ (H+L+2*C)/2,25.2)")

PROJECTED LOW

WriteIf(C<O, "WRITEVAL(-H+ (H+2*L+C)/2,25.2)")

WriteIf(C>O, "WRITEVAL(-H+ (2*H+L+C)/2,25.2)")

WriteIf(C=O, "WRITEVAL(-H+ (H+L+2*C)/2,25.2)")

BOLLINGER BANDS

CLOSING PRICE:WRITEVAL(C,2.3)

BOLLINGERBAND TOP:

WRITEVAL( BBandTop(C,21,E,2),13.3)

21 DAY MOVING AVERAGE:

WRITEVAL(MOV(C,21,E),13.3)

BOLLINGERBAND BOTTOM:

WRITEVAL( BBandBOT(C,21,E,2),13.3)

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)

 from Michael Arnoldi

 

VOLUME FLOAT INDICATOR

mp1:=Input("Days Volume Summed",1,377,30);

mf1:=Input("Float, in X million",.1,10000,10);

mf2:=mf1*1000000;

(Sum(V,mp1)/mf2)*100;

from Claud Baruch

 

EXAMPLE OF A TRADING SYSTEM

Enter Long if

1) today's five-day RSI is greater than yesterday's five-day RSI; and

2) today's close is below the close of five days ago; and

3) today's close is less then or equal to the average of the last five day's closes.

Long:=RSI(5)>Ref(RSI(5),-1) AND C<Ref(C,-5) AND C<=Mov(C,5,S);

Exit tomorrow at the market if:

1) today's close is higher than the average of the last five days' closes; or

2) you have been in the trade 10 days.

If(Long=1 AND (C>(Mov(C,5,S) OR (Ref(Long,-10)=1 AND Ref(Long,-11)=0)),0,Long)

from Ton Maas

 

DIRECTIONAL MOVEMENT INDEX EXPLORATION

I want to do an MetaStock Exploration with Directional Movement Index (DMI) that will scan for the crossing of the two: i.e., yesterday +DX is less than -DX, today +DX is greater than -DX, and visa versa.

ANSWER

Ref(Cross(MDI(14) , PDI(14)),-1) AND

Cross(PDI(14) , MDI(14))

from Ton Maas

 

NORMALISING INDICATORS

In his article "Normalization", Brian Bell introduces some methods for normalizing indicators. These methods can be easily created in MetaStock 6.52 or higher.

Select Indicator Builder from the Tools Menu, click New and enter the formula for the desired method.

Name: Simple Moving Average Oscillator

OscP(4,8,S,$)

Name: Simple MA Osc norm to Std Dev

OscP(4,8,S,$)/Stdev(C,8)

Name: Simple MA Osc norm to Ave True Range

OscP(4,8,S,$)/ATR(8)

Name: Simple MA Osc norm to Historical Range

OscP(4,8,S,$)/WillR(200)

Note: To apply these methods to different indicators replace the Simple Moving Average Oscillator portion with the desired indicator's formula.

Cheryl C. Abram, Equis International, Inc.

 

Custom Relative Momentum Index (RMI) Indicator for MetaStock

Q:=Input("RSI Time Periods",1,1000,14);

M:=Input("Momentum Time Periods",1,1000,5);

B:=Input("Field: 1=Close, 2=Open, 3=High, 4=Low, 5=Volume",1,5,1);

Bval:=If(B=1,C,If(B=2,O,If(B=3,H,If(B=4,L,V))));

Mom:=Bval-Ref(Bval,-M);

Z:=Wilders(If(ROC(Mom,1,$)>0,

ROC(Mom,1,$),0),LastValue(Q));

Y:=Wilders(If(ROC(Mom,1,$)<0,

Abs(ROC(Mom,1,$)),0),LastValue(Q));

RMS:=Z/Y;

RMIcust:=100-(100/(1+RMS));

Mov(RMIcust,M,S)

from Ton Maas

 

RSI OF THE MACD

In the indicator builder, you can create RSI of MACD (with MS 6.5 and later) :

Q:=Input("Periods",1,1000,14);

Z:=Wilders(If(ROC(MACD(),1,$)>0,ROC(MACD(),1,$),0),LastValue(Q));

Y:=Wilders(If(ROC(MACD(),1,$)<0,Abs(ROC(MACD(),1,$)),0),LastValue(Q));

RS:=Z/Y;

100-(100/(1+RS))

 

From Custom Relative Strength Index (RSI) from Equis site ...

http://www.equis.com/customer/support/formulas/cf00098.html

...I just put MACD in the formula.

I hope this helps...

Pierre Tremblay

 

How can we calculate the RSI of MACD?

Warmest regards,

Alex Spiroglou

 

Create an indicator called 'System - Volatility Breakout'.

Then copy this crude code in:

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

{Volatility Breakout System - returns Profit}

Commission:=21; {for Buy+Sell+Stop}

TradeAmt:=10000;

Buy:=O+((Ref(H,-1)-Ref(C,-1))*.7);

Sell:=C;

Stop:=O;

Trade:= O<Ref(C,-1) AND H>Buy AND Ref(C,-1)<Ref(C,-2) AND

Ref(C,-2)<Ref(C,-3) AND Ref(C,-3)<Ref(C,-4); {Trigger for Trade}

HitStop:= If(Trade AND Stop>=Sell,TRUE,FALSE);

{Have we hit our Stop}

TradeSize:= TradeAmt/Buy;

Profit:=If(Trade,-Commission-TradeSize*Buy,0);{Purchase}

Profit:=If(HitStop=TRUE,{then}

Profit+Stop*TradeSize,

{else} If(Trade AND HitStop=FALSE, {then}

Profit+Sell*TradeSize,0)); {Sale}

Win:=If(Profit>0,1,0);

Loss:=If(Profit<0,1,0);

Cum(Profit)

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

The indicator charts your profit. You just have to set the first 6 variables as per your system. The MS If structures are a pain and I'm sure there must be easier ways to do this. This is also my first attempt to prove if it works.

If you then create an Expert Advisor with the following in the Commentary definition, you'll get some summary statistics for the system.

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

Volatility Breakout System

Security Name: <Name>

Security Symbol: <Symbol>

Totals: Trades writeval( Cum( FmlVar("System - Volatility

reakout","trade") ),0.0 ), Wins writeval(cum( FmlVar("System - Volatility

Breakout","WIN") ),0.0), Losses Writeval(cum( FmlVar("System - Volatility

Breakout","LOSS") ),0.0)

Percentage Wins/Losses: writeval(cum( FmlVar("System - Volatility

Breakout","WIN") )/Cum( FmlVar("System - Volatility

reakout","trade") )*100,2.0)%

Profit: $Writeval(cum( FmlVar("System - Volatility

Breakout","PROFIT") ),0.0)

Commission: $Writeval( FmlVar("System - Volatility

Breakout","COMMISSION"),0.0 )

Trade Amount: $Writeval( FmlVar("System - Volatility Breakout","TRADEAMT"),

0.0)

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

If you want to Highlight the Winning days in one colour and the Losing days in another, just use 'FmlVar("System - Volatility Breakout","WIN")' as the condition for a WIN, etc.

The above is the only way I can see to test a system in MS that specifies the entry/exit prices. I suppose the other alternative is Excel!

Sean Taylor

 

McClellan Oscillator:

1. Create a composite security in DownLoader consisting of NYSE

Advancing Issues minus NYSE Declining Issues. Name the new

security something like "Adv-Decl Issues."

2. Open the Adv-Decl Issues chart in MetaStock.

3. Create a new inner window.

4. Create two custom indicators in MetaStock:

a) First is the McClellan Oscillator:

Mov(CLOSE,19,EXPONENTIAL) -

Mov(CLOSE,39,EXPONENTIAL)

b) Second is the McClellan Summation Index:

Cum(Mov(CLOSE,19,EXPONENTIAL) -

Mov(CLOSE,39,EXPONENTIAL) )

5. Plot the McClellan Oscillator custom indicator in the main chart

window over top of the data plot and select "Display New Scale

on Right." This will eliminate the Adv-Decl Issues' scale.

6. Select the Adv-Decl Issues data plot by clicking on it, then right

click it and select "Adv-Decl Issues Properties" and change the

bar colours to the same colour as your background to make it

invisible. The raw data is needed for indicators, but need not be

displayed.

7. Plot the McClellan Summation Index in the inner window.

8. Add whatever base lines you want.

from Glen Wallace

 

ATR KELTNER BANDS

Pds1:= Input("EMA Periods?",1,100,20);

Pds2:= Input("ATR Periods?",1,100,10);

Mult:= Input("ATR Multiple?",1,10,2.5);

EMA:= Mov(C, Pds1, E);

Diff:= ATR(Pds2) * Mult;

UBand:= EMA + Diff;

LBand:= EMA - Diff;

Ema; UBand; LBand;

See also TAS&C Dec. 1999 p.45, 'Keltner Channels' by Stuart Evens.

Various STOCHASTIC RSI OPTIONS

Mov((RSI(14)-LLV(RSI(14),9))/(HHV(RSI(14),9)-(LLV(RSI(14)+.00001,6))),4,E)*100

Equis' StochRSI - Tushar Chande

(RSI(14)-LLV(RSI(14),14))/(HHV(RSI(14),14)-LLV(RSI(14),14))*100

Bell Ringer's StochRSI14 - John A. Yurko

(Sum(RSI(14)-LLV(RSI(14),14),3)/Sum(HHV(RSI(14),14)-LLV(RSI(14),14),3))*100

StochRSI oscillator - Craig DeHaan

{configurable formula for the StochRSI oscillator to quickly find what time

periods/method you prefer to work with. CDH's List-post.

(Sun, 15 Nov 1998 "Re: Finding the Stochastic of the Relative Strength")}

mp1:=Input("RSI Periods",1,377,13);

mp2:=Input("Stochastic Periods",1,377,13);

mp3:=Input("Smoothing Periods",1,377,8);

mat:=Input("MA Type: S, E, W",1,3,2); {1=S,2=E,3=W}

If(mat=1, Mov((RSI(mp1)-LLV(RSI(mp1),mp2))/(.0000001+

HHV(RSI(mp1),mp2)-LLV(RSI(mp1),mp2)),mp3,S)*100,

If(mat=2, Mov((RSI(mp1)-LLV(RSI(mp1),mp2))/(.0000001+

HHV(RSI(mp1),mp2)-LLV(RSI(mp1),mp2)),mp3,E)*100,

If(mat=3, Mov((RSI(mp1)-LLV(RSI(mp1),mp2))/(.0000001+

HHV(RSI(mp1),mp2)-LLV(RSI(mp1),mp2)),mp3,W)*100,0)))

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

Stochastic Relative Strength Index { from www.equis.com }

rev. 01/06/97

In his book The New Technical Trader, Tushar Chande defines the Stochastic RSI as:

StochRSI = (RSI - RSIL)/(RSIH -RSIL)

where RSIL and RSIH are the lowest and highest values of the RSI over a given period.

In his book he uses 14 periods. The MetaStockT formula for the Stochastic RSI is:

( ( RSI ( 14 ) - LLV( RSI (14 ) ,14 ) ) / ( ( HHV( RSI (14 ) ,14 ) ) - LLV(RSI (14 ),14 ) ) )

from Ton Maas

 

PSYCHOLOGICAL INDEX

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:

{Futures Magazine, Vol.29 No.6, June 2000, P.48}

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

from Glenn Wallace

 

Buy and Hold Indicator

periods:=Cum(If(C>0,1,0));

dollars:=C-ValueWhen(1,periods=1,C);

percnt:=C/ValueWhen(1,periods=1,C);

percnt; [or] dollars;

You can quickly run an exploration and look at the buy and hold on everything in dollars or in percentage terms.

Michael

 

PERSISTENCY OF MONEY FLOW

Period := Input("Period",10,200,20);

Mov(If( CMF(Period ) > 0, 1, -1),Period,S)/Period;

0;

from Bob Sims

 

Doji alert

I want to signal when a Doji occurs following a four-day consecutive increasing CLOSE. I would like this to be an ALERT, signaling if this completed pattern has occurred within the last five days. from Barry Kales

Alert(Doji() AND

Ref(C,-1) > Ref(C,-2) AND

Ref(C,-2) > Ref(C,-3) AND

Ref(C,-3) > Ref(C,-4) AND

Ref(C,-4) > Ref(C,-5),5)

from CatLady

 

Sine wave

This is a 28 period sine wave. The "flaw" is that it starts from the first period loaded in the chart rather than an absolute date. Change the -12 to shift the wave right or left.

Ref(Sin( Cum(360/28) ), -12)

There's also MetaStock's built-in cycle lines drawing tool.

 from CatLady

 

Displaced moving average system test

Here's an example of how to specify displaced moving average in the system tester . . . .

Buy:

Cross(C,Ref(Mov(C,50,e),-15)) {uses 50ema displaced by 15 days}

Sell:

Cross(Ref(Mov(C,50,e),-15),C)

from Paul Beattie

 

Volatility Exploration

ATR(20) / MOV(Close,20,Simple)

from Glen Wallace

 

Smoothed adapative Stochastic Oscillator

n:=Input("**Volatility** lookback length",1,50,20);

x:=Input("%K smoothing (exponential smoothing)",1,50,3);

y:=Input("%D smoothing (exponential smoothing)",1,50,3);

lenmax:=28;

lenmin:=7;

v1:=Stdev(C,n);

v2:=HHV(v1,n);

v3:=LLV(v1,n);

v4:=((v1-v3)/(v2-v3));

currlen:=(Int(lenmin+(lenmax-lenmin)*(1-v4)));

hh:=HHV(H,LastValue(currlen));

ll:=LLV(L,LastValue(currlen));

RawStochK:=((C-ll)/(hh-ll))*100;

SmoothedStochK:=Mov(RawStochK,x,E);

StochD:=Mov(SmoothedStochK,y,E);

20;

80;

StochD;

SmoothedStochK;

from iamken

 

GUPPY MULTIPLE MOVING AVERAGE EXPLORATION for Metatstock V7.                       

Exploration notes    This uses the results of 6 custom indicators          HINT When constructing this exploration use the PASTE FUNCTIONS button to transfer the exact formula name to the exploration.

Col A: close            CLOSE         

Col B: Ref(C,-1)        

Col C: Ref(C,-2)        

Col D: Fml( "MMA 3/30") + Fml( "MMA 5/35") + Fml( "MMA

            8/40") + Fml( "MMA 10/45") + Fml( "MMA 12/50") +         

            Fml( "MMA 15/60")

Col E:             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)     

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

                       

CUSTOM MMA  INDICATORS – Must be installed using the Indicator builder before Guppy Multiple Moving Average Exploration can be run.

MMA 10/45

If(OscP(10,45,E,%)>0,+1,-1)

MMA 12/50

If(OscP(12,50,E,%)>0,+1,-1)

MMA  15/60

If(OscP(15,60,E,%)>0,+1,-1)

MMA 3/30

If(OscP(3,30,E,%)>0,+1,-1)

MMA  5/35

If(OscP(5,35,E,%)>0,+1,-1)

MMA 8/40

If(OscP(8,40,E,%)>0,+1,-1)

 

Finding rising moving averages
You just want to ask for an MA higher than yesterday, or higher than last week. So e.g., "mov(c,20,s)>ref(mov(c,20,s),-1)" or
"mov(c,20,s)>ref(mov(c,20,s),-7)"

Malcolm Scott



Using the call function
Create a few indicators and add them to your formula by calling on them via the formula call function:

Example: Create a few new indicators, e.g., n=1,2,3, etc.

Name: MyIndicator-n
Formula: Mov(c,10,s)

Now use the formula call function, e.g., create yet another indicator:

Name: MyCalls
Formula: fml (" MyIndicator-n ")

Place the above line in the formula field and repeat the line as needed.

from Ton Maas



Call function explanation

"When I use the FML() function in a formula to call a Multiple Expression formula my formula only sees one of the Lines. Why? "

The FML() function cannot call multiple values from one formula to another formula. The FML function can only call one value from one formula to another. If FML() calls a Multiple Expression formula it can only return the value of the Last Expression in a Multiple Expression formula, from one formula to another.

For example the following formula creates a Customized MACD with 3 trigger lines. When plotted it plots a total of 4 lines, exactly as expected.

Mov(C,11,E)-Mov(C,30,E);
Mov(Mov(C,11,E)-Mov(C,30,E),12,E);
Mov(Mov(C,11,E)-Mov(C,30,E),25,E);
Mov(Mov(C,11,E)-Mov(C,30,E),50,E)

In this example Mov(Mov(C,11,E)-Mov(C,30,E),50,E) is the Last Expression in this Multiple Expression formula. An FML() call to this formula returns the value of Mov(Mov(C,11,E)-Mov(C,30,E),50,E).

If you need to use FML() to call multiple values into another formula it is best to break the Multiple Expression Formula into Separate formulas. Then call each separate formula with a separate FML() call.

The following example formula uses FML() calls but would generate multiple plots when displayed in a chart:

FML("Mov(C,11,E)-Mov(C,30,E)");
FML("Mov(Mov(C,11,E)-Mov(C,30,E),12,E)"); FML("Mov(Mov(C,11,E)-Mov(C,30,E),25,E)");
FML("Mov(Mov(C,11,E)-Mov(C,30,E),50,E)")

You could also assign variables to each expression and then use the FMLVAR() function to call each of the expressions.

For example:

Formula: Multiple

One := Mov(C,11,E)-Mov(C,30,E);
Two := Mov(Mov(C,11,E)-Mov(C,30,E),12,E);
Three := Mov(Mov(C,11,E)-Mov(C,30,E),25,E);
Four := Mov(Mov(C,11,E)-Mov(C,30,E),50,E);
One;
Two;
Three;
Four

Formula: Call

FMLVAR("Multiple","One");
FMLVAR("Multiple","Two");
FMLVAR("Multiple","Three");
FMLVAR("Multiple","Four")

Refer to the MetaStock 6.5 manual and/or on-line help for more information on using variables and the function FMLVAR().

from Equis Support and Ton Maa



Example of use of Prev function
vPrev:=PREV;
Ndays:=If(Cum(1) < 50,Cum(1),vPrev);
Ndays2:=If(Ndays>0,Ndays,LastValue(Ndays>0));
Ndays2

{fromTon Maas}


Chandelier Exit variation
Below is a variation of the Chandelier Exit that I came up with. It doesn't solve the original question, but I like the way it plots better. It holds
the highest value every time the stop moves up, and never moves lower unless the stop is hit, in which case its value is reset.
from Barry Marx

Stop1:=If( PREV < L,
{then} If(( H - 3*ATR(10) ) >= PREV,
{then} ( H - 3*ATR(10) ),
{else} PREV),
{else (L <= PREV)}
( H - 3*ATR(10) ));

Stop2:=If( PREV < L,
{then} If(( C - 2.5*ATR(10) ) >= PREV,
{then} ( C - 2.5*ATR(10) ),
{else} PREV),
{else (L <= PREV)}
( C - 2.5*ATR(10) ));

StopVal:=If(Stop1>Stop2,Stop1,Stop2);

StopVal;


Zero lag MACD 2
Here's my MetaStock v6.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

from J. Seed



RSI of MACD
UpCl:= C * (C > Ref(C, -1));
Sum(UpCl,14);

from HHP


Three day Engulfingbear short trade

Buy again three days after the signal.

ENTER SHORT
Engulfingbear()
{Means: today there was an engulfingbear signa, so enter trade.}

EXIT SHORT
Ref(Engulfingbear, -3)
{Means: as of the current day, there was an EngulfingBear three days previous, so exit the trade today.}

from Walter Lake and HHP



Buy trigger trading system
{Enter long}
{System Tester options are set to enter on the Close}
BuyTrigger:=(MOV(C,10,E) - MOV(C,30,E)) / MOV(C,30,E);
BuyTrigger > 0.05

{Close long}
BuyTrigger:=(MOV(C,10,E) - MOV(C,30,E)) / MOV(C,30,E);
BuyPrice:= If(PREV <= 0,
{Then did you go long today?}
If(BuyTrigger > 0.05, CLOSE, 0),
{Else did you exit today?}
If(Close >= PREV*(1+BuyTrigger), -PREV,
PREV));
BuyPrice < 0

{In this formula, BuyPrice is the close on the date BuyTrigger exceeds your threshold. If you are in a trade and have just received a sell signal, BuyPrice is redefined as a negative, and System Tester is told to close your long position. If you are not currently in a trade, BuyPrice is assigned a zero value and System Tester is told to watch for a new long entry.}

{from Glenn Wallace}


GANN-HiLo 2

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;



Gann hi lo crossover
I took the "GANN-HiLo" indicator one step further, exploring in EOD which stocks crossed the GANN-HiLo dots.

cola buy:
Cross(C, Fml("GANN-HiLo")) AND
CLOSE > Fml("GANN-HiLo")

colb sell:
Cross(C, Fml("GANN-HiLo")) AND
CLOSE < Fml("GANN-HiLo")

filter:
cola=1 or colb=1


from Mike Arnoldi

Page 18

FORMULAS FROM SITE VISITORS

Explanation of the McClellan Oscillator

(DAILY ADVANCING ISSUES -(minus) DAILY DECLINING ISSUES)= B

McClellan OSC= MOV(B,19,E)- MOV(B,39,E)

WHERE: -100 OR LESS IS OVERSOLD (BULLISH)

WHERE: +100 OR GREATER IS OVERBOUGHT (BEARISH)

Note that B is just a constant for illustration purposes only.

Advance Decline Line

{To display the Advance Decline Line, create a composite security in The

DownLoader of Advancing Issues minus Declining Issues. Open a chart of

the composite and plot this formula}

Cum(CLOSE)

McClellan Oscillator

{To display the McClellan Oscillator, create a composite security in The

DownLoader of Advancing Issues minus Declining Issues. Open a chart of

the composite and plot this custom indicator.}

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

 mike arnoldi

 

CMO FILTER

CMO Filtered:

momu:=If(C>Ref(C,-1),C-Ref(C,-1),0);

momd:=If(C<Ref(C,-1),Ref(C,-1)-C,0);

A1:=Stdev(momu,100);

A2:=Stdev(momd,100);

Mup:=If(C-Ref(C,-1)>A1,C-Ref(C,-1),0);

Mdn:=If(Ref(C,-1)-C>A2,Ref(C,-1)-C,0);

Periods:=Input("Length",5,100,13);

CMOF:=100*((Sum(Mup,Periods)-Sum(Mdn,Periods))

/(Sum(Mup,Periods)+Sum(Mdn,Periods)));

Sig:=Mov(CMOF,10,S);

Hist:=CMOF-Sig;

Hist;

Sig;

CMOF;

Thrust Oscilator:

AI:= Security("D:\Stocks\Market

Indicators\X.NASD-A",C);

AV:= Security("D:\Stocks\Market

Indicators\X.NASD-A",V);

DecI:= Security("D:\Stocks\Market

Indicators\X.NASD-D",C);

DecV:= Security("D:\Stocks\Market

Indicators\X.NASD-D",V);

TO:=(((AI*AV)-(DecI*DecV))/((AI*AV)+(DecI*DecV)))*100;

Periods1:=Input("length1",3,100,21);

Periods2:=Input("length2",3,100,5);

IND:=Mov(TO,Periods1,S);

sig:=Mov(IND,Periods2,S);

sig;

IND;

You will have to create securities of advancing issues,declining issues,advancing volume, declining volume first then type in the directory where they are located

Henry kaczmarczyk

 

THRUST OSCILLATOR

the thrust osc, the metastock formula

AI:= Security("D:\Stocks\Market Indicators\X.NASD-A",C);

AV:= Security("D:\Stocks\Market Indicators\X.NASD-A",V);

DecI:= Security("D:\Stocks\Market Indicators\X.NASD-D",C);

DecV:= Security("D:\Stocks\Market Indicators\X.NASD-D",V);

TO:=(((AI*AV)-(DecI*DecV))/((AI*AV)+(DecI*DecV)))*100;

Periods1:=Input("length1",3,100,21);

Periods2:=Input("length2",3,100,5);

IND:=Mov(TO,Periods1,S);

sig:=Mov(IND,Periods2,S);

sig;

IND;

You will have to have created securities of advancing issues,declining issues,advancing volume, declining volume

henry1224@hotmail.com

 

STOCHASTIC CROSS TRADING SYSTEM

QUESTION

How would I write a MetaStock System Tester for:

Buy: stoch(12,3) has fallen below 36 and then crosses above its 6 day WMA.

Sell: stoch(12,3) rises above 52 and then falls below its 3 day WMA OR 3 day WMA of stoch crosses above 55.

ANSWER

stoch(12,3)<36 and cross(stoch(12,3),mov(stoch(12,3),6,w))

stoch(12,3)>52 and cross(mov(stoch(12,3),3,w),stoch(12,3)) or

mov(stoch(12,3),3,w)>55

 

TSI AND ERGODICS INDICATORS

Contributed by Christian Baude BAUDECB@ix.netcom.com

True Strength Index (TSI) - "Momentum, Direction and Divergence", William Blau, Pub: John Wiley& Sons (see also TASC Jan '93, "Stochastic Momentum" gives the formula for the true strength index. This article refers to an older article by Blau in the Jan '91 TASC "Double Smoothed Stochastics")

TSI(close,r,s) = 100*EMA(EMA(mtm,r),s / EMA(EMA(ImtmI,r),s)

>> Your formula expanded

>> 100*(Mov(Mov(ROC(C,1,$),25,E),13,E)/Mov(Mov(Abs(ROC(C,1,$)),25,E),13,E))

Numerator:

mtm = one-day momentum of close

r-day EMA of mtm {25 day}

s-day EMA {13 day double smoothing}

Denominator:

ImtmI = absolute value of mtm

r-day EMA of ImtmI

s-day EMA {double smoothing}

TSI(close,25,13)

Signal Line = EMA(TSI,7)

thresholds at +25, 0, -25

 

5 day EMA of 20 day EMA of 1 day momentum

{little lag Vs smoothing of price}

Ergodic Oscillator = Ergodic + Signal line {TSI version of Slow Stochastic}

Ergodic(close,r) = TSI(close,r,5) {double smoothing is fixed at 5}

Signal Line(close,r) = EMA(TSI(close,r,5),5)

r = 20days

thresholds are +20, -20

Interesting comparison chart between 20 Slow Stochastic and 20 Erodic

{more head room in oversold-bought areas}

another chart showing Ergodic Osc = TSI(close,32,5) with 5-day EMA signal line

 

Trading Ergodics with the Trend - Rules

1. Enter or hold position only when slope of Ergodic Signal line has the same direction as the trend

2. Stand aside when slope of Ergodic Signal Line is in the opposite direction of trend

3. Enter or exit position when Ergodic and its Signal Line cross

 

Slow TSI Trend = TSI(close,64,64) {? weekly looking chart - very little lag}

Thresholds set at +15 & -15

Trading Ergodics with Slow TSI Trend

1st window - Slow TSI Trend = TSI(close,64,64)

2nd window - Ergodic Osc = TSI(close,64,5)

 

TRUE STRENGTH INDEX

Walter Lake wlake@sprint.ca

True Strength Index = TSI

TSI(close,r,s) = 100*EMA(EMA(mtm,r),s / EMA(EMA(ImtmI,r),s)

Numerator

mtm = one-day momentum of close

r-day EMA of mtm {25 day}

s-day EMA {13 day double smoothing}

Demoninator

ImtmI = absolute value of mtm

r-day EMA of ImtmI

s-day EMA {double smoothing}

TSI(close,25,13)

Signal Line = EMA(TSI,7)

thresholds at +25, 0, -25

- 0 -

5 day EMA of 20 day EMA of 1 day momentum {little lag Vs smoothing of price}

- 0 -

Ergodic Oscillator = Ergodic + Signal line {TSI version of Slow Stochastic}

Erodic(close,r) = TSI(close,r,5) {double smoothing is fixed at 5}

Signal Line(close,r) = EMA(TSI(close,r,5),5)

r = 20days

thresholds are +20, -20

interesting comparision chart between 20 Slow Stochastic and 20 Erodic {more head room in oversold-bought areas}

another chart showing Ergodic Osc = TSI(close,32,5) with 5-day EMA signal line

- 0 -

Trading Ergodics with the Trend - Rules

1. Enter or hold position only when slope of Erogodic Signal line has the

same direction as the trend

2. Stand aside when slope of Erogodic Signal Line is in the opposite

diretion of trend

3. Enter or exit position when Erogodic and its Signal Line cross

- 0 -

Slow TSI Trend = TSI(close,64,64) {? weekly looking chart - very little lag}

Thresholds set at +15 & -15

Trading Ergodics with Slow TSI Trend

1st window - Slow TSI Trend = TSI(close,64,64)

2nd window - Ergodic Osc = TSI(close,64,5)

Page 19

FORMULAS FROM SITE VISITORS

MetaStock System Test 01  R2,S/C,MFI (Vol Required)

The RSquared, S/C,MFI test is based on linear regression. RSquared is a linear regression function that measures how strong a data array of given length is trending. It's really based on correlation. A return of one correlates to a very strong trend in either direction that rises or falls one point per day. A return of zero correlates to no trend.

I'm using RSquared to tell me when there is no trend over the last 21 days, or that RSquared(C,21) is less than 0.15. Now that we have no trend, we would expect one to start in the next 5 to 13 days. If one does start we want to determine the direction and get in early. Therefore I use RSquared as my trigger, combining it with the ALERT function. With the ALERT given by RSquared being less then 0.15, then we will get a buy signal if all my other conditions are met within a 13-day period that I also set with the ALERT function. For the other conditions, I'm using S/C, MFI, and the 55-day Variable Moving Average (vma) to determine trend start and direction.

S/C is nothing more than the normalized 34 day LinRegSlope of the close. I normalize it by dividing it by the close so charts are more directly comparable. I also multiply by 10000 just to get numbers between 0 and a few hundred. Finally I apply Tema smoothing to get a smoother plot. Therefore my formula for Tema S/C becomes:

Tema S/C

Periods := Input("Enter Periods",1,233,34);

Tema(10000*LinRegSlope(C,Periods)/C,Periods)

The theory is that if Tema S/C is rising then a up trend is in progress. If Tema S/C is falling a downtrend is in progress. I check this by making sure that tema(S/C) is larger than an optimized value (opt1) and is rising. I use the function HHV(X,5) = HHV(X,13) to check that it is really rising. This is just a quick way to determine if the most reason values of X have been rising. If the condition is met, then S/C is rising. Similarly if it met the condition LLV(X,5) = LLV(C,13) it would be falling.

I double-check the result by also making sure that both the MFI and the 55-day vma are also rising. I use a Tema MFI formula which is just the tema smoothed MFI - 50 so it can be plotted as a histogram. The formula is:

Tema MFI

Periods := Input("Enter Tema Smoothing Periods",13,55,55);

Tema(MFI(Periods),Periods) - 50

When all conditions are met within 13 days of the alert, we get a buy signal. The converse is true for a sell signal. Since the market is biased upwards, I use an additional check for the short - Tema MFI less then 0. I close the positions when the trend has stopped. For the long position I check that the Tema(MFI) is below 0, the Tema(S/C) is below opt 1 and that both are falling. Short positions tend to move faster, so I only look for the Tema MFI to be greater than zero and the 55 day vma to begin rising to close that position. The complete test follows:

ENTER LONG:

Alert(RSquared(C,21) < 0.15,13) AND

Tema(10000*LinRegSlope(C,34)/C,34) > opt1 AND

HHV(Tema(10000*LinRegSlope(C,34)/C,34),5) =

HHV(Tema(10000*LinRegSlope(C,34)/C,34),13) AND

HHV(Tema(MFI(55),55),5) = HHV(Tema(MFI(55),55),13))

CLOSE LONG:

Tema(MFI(55),55) - 50 < 0 AND

Tema(10000*LinRegSlope(C,34)/C,34) < opt1 AND

LLV(Tema(10000*LinRegSlope(C,34)/C,34),5) =

LLV(Tema(10000*LinRegSlope(C,34)/C,34),13) AND

LLV(Tema(MFI(55),55),5) = LLV(Tema(MFI(55),55),1

ENTER SHORT

Alert(RSquared(C,21) < 0.15,13) AND

Tema(10000*LinRegSlope(C,34)/C,34) < opt2 AND

LLV(Tema(10000*LinRegSlope(C,34)/C,34),5) =

LLV(Tema(10000*LinRegSlope(C,34)/C,34),13) AND

LLV(Tema(MFI(55),55),5) = LLV(Tema(MFI(55),55),13) AND

Tema(MFI(55),55) - 50 < 0 AND

LLV(Mov(C,55,VAR),5) = LLV(Mov(C,55,VAR),13)

CLOSE SHORT

HHV(Mov(C,55,VAR),5) = HHV(Mov(C,55,VAR),13) AND

Tema(MFI(55),55) - 50 > 0

OPTIMIZATION:

OPT1: Min=-34 Max=-8 Step=13

OPT2: Min=-55 Max=-21 Step=34

Although I have Tema S/C and Tema MFI defined as custom formulas so I can plot them as indicators on my charts, I don't call the custom formulas in the tests. Instead I use the actual formulas. The reason I do this, is that the test will run faster when the formulas are used direct instead of calling for the custom formulas.

from Jim Greening   http://www.geocities.com/

 

 

MetaStock System Test 02Tema Binary Wave Composite, QStick

The basic idea behind a MetaStock binary wave is to use if statements on several MetaStock indicators and have them return plus one for a bullish indication, minus one for a bearish indication, and zero for a neutral condition. Then you add them all up for your binary wave indicator. I decided to format all my indicators so they could be plotted as a histogram. For these indicators plotting as histograms, positive is bullish and negative is bearish. To cut down on whipsaws, I decided that over +5 would be bullish, under -13 would be bearish and anything in between would be neutral. Therefore my binary wave formulas are:

BW2 Demand Index

If(Tema(DI(),21) > 5,+1,If(Tema(DI(),21) < -13,-1,0))

BW3 Linear Regression Slope

If(Tema(10000*LinRegSlope(C,34)/C,34) > 5,+1,

If(Tema(10000*LinRegSlope(C,34)/C,34) < -13,-1,0))

BW4 CCI

If(Tema(CCI(21),21) > 5,+1, If(Tema(CCI(21),21) < -13,-

1,0))

BW5 ROC

If(Tema(ROC(C,21,%),21) > 2,+1,If(Tema(ROC(C,21,%),21) <

-2,-1,0))

BW6 Money Flow

If(Tema(MFI(21),21)-50 > 5,+1,If(Tema(MFI(21),21)-50

< -5,-1,0))

BW7 CMO

If(Tema(CMO(C,21),21) > 5,+1,If(Tema(CMO(C,21),21)

< -5,-1,0))

BW8 VAR ma

If(Mov(C,21,VAR) > Mov(C,55,VAR) AND

HHV(Mov(C,233,VAR),5) =

HHV(Mov(C,233,VAR),13),+1,If(Mov(C,21,VAR) <

Mov(C,55,VAR) AND LLV(Mov(C,233,VAR),5) =

LLV(Mov(C,233,VAR),13),-1,0))

The next formula just adds up the binary wave:

BW Add

Fml("BW2") + Fml("BW3") + Fml("BW4") + Fml("BW5") +

Fml("BW6") + Fml("BW7") + Fml("BW8")

Next, I decided to do something a little different. Since the whole purpose of this test is to catch a trending stock, I decided to add an amplifier that would get larger as the trend got stronger. Since I like Fibonacci numbers, I decided to use Rsquared as a measure of trend strength and base my amplifier on Fibonacci numbers. The formula I finally came up with after a lot of tinkering follows.

BW Amplifier

If(RSquared(C,21) > 0.8,5,If(RSquared(C,21) >

0.6,3,If(RSquared(C,21) > 0.4,2,

If(RSquared(C,21)>0.2,1,0.5))))

The last step in constructing the binary wave was to decide on the smoothing and put it all together. Of course, I used tema smoothing.

Tema Binary Wave Composite

Periods := Input("Enter Tema Smoothing

Periods",8,233,21);

Tema(Fml("BW Add")*Fml("BW Amplifier"),Periods)

The final step is to come up with a system test for the Tema Binary Wave Composite. Remember, the binary wave is just made up of a bunch of technical indicators that I give a +1 value when bullish, 0 when neutral, and -1 when bearish. Then they are summed and smoothed. So in general a positive value is bullish and a negative value is bearish. Also a rising number is bullish and a falling number is bearish. Therefore you could use a zero crossover to the upside as a buy signal and a crossover to the downside as a sell signal. If you had a good algorithm, you could also use a rise from a negative peak (or trough) as a buy signal and a fall from a positive peak as a sell signal. I decided to use a 8 day moving average of the BW with a crossover of the BW for my algorithm in an attempt to get an early signal on a rise from a negative peak. It does have the disadvantage of finding way too many peaks so I only use it as an Alert. For confirmation I use the QStick function and a variable moving average function.

QStick was developed by Chande as a way to quantify candlesticks. Since the difference between the open and close prices lies at the heart of candlestick charting, QStick is simply a moving average of that difference. Negative values of QStick correlate to black candlesticks, positive values to white candlesticks. Since in general black candles are bearish and white candles are bullish, this indicator can also be plotted as a histogram and interpreted the same was as the Binary Wave. The formula is:

Periods := Input("Enter Periods",1,233,34);

Tema(Qstick(Periods),Periods)

Now to get my open long signal I use the ALERT signal with an 8 day vma BW crossover of the BW. Then to actually get the signal, I have to have both the QStick rising and the 21 day vma greater then the 55 day vma.

Therefore my buy signal became:

Enter Long

Alert(Cross(Fml("Tema Binary Wave Comp"),

Mov(Fml("Tema Binary Wave Comp"),8,S)),21) AND

HHV(Tema(Qstick(34),34),5) = HHV(Tema(Qstick(34),34),13) AND

Mov(H,21,VAR) > Mov(H,55,VAR)

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

Therefore, my sell signal became:

Enter Short

Alert(Cross(-opt2,Fml("Tema Binary Wave Comp")),8) AND

Tema(Qstick(34),34) < -0.1 AND

C < Ref(L,-1) AND

Mov(L,21,VAR) < Mov(L,55,VAR)

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

Close Long

Fml("Tema Binary Wave Comp") < -opt1 AND

Tema(Qstick(34),34) < 0 AND

LLV(Mov(L,21,VAR),5) = LLV(Mov(L,21,VAR),13)

Close Short

Fml("Tema Binary Wave Comp") > 0 AND

Tema(Qstick(34),34) > 0.08

Finally I also used Fibonacci numbers for my optimization:

Opt 1: Min 3, Max 13, Step 5

Opt 2: Min 3, Max 13, Step 5

 

MetaStock System Test 03  Tema PDI - MDI, ADX (Vol Required)

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

Tema PDI - MDI

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

Tema(PDI(13) - MDI(13),Periods)

I started with the idea that I would take the PDI-MDI crossover of an optimized number as my basic buy and sell trigger. However, this number did not have to be zero and did not have to be the same for entering long and entering short. After a lot of trial an error I decide -1, -3, or -5 would be my enter long number and -5, -13, or -21 would be my enter short number. This makes sense since the market is biased to the up side, so entering a little under zero would get us in a little earlier. Also down moves tend to be fast an extreme and this would only let us in short for larger, faster down moves which is what I wanted. Finally I wanted some way to reduce the number of false signals and I wanted to do that with directional movement indicators only so this test would be completely uncorrelated with my other tests.

For long positions, I notice that most up moves started when adx was low and that adx climbed during the move to a max and then started to fall at the end of the move. Therefore, I thought an adx max and min for a buy signal would help reduce false signals. After some experimenting, I set the min at 8 and the max at 21. I also noticed that most good buy points occurred when MDI and ADX were close together so I decided that the difference between the two should be small. After more experimenting, I decided on the following for my open long signal:

Open Long:

Alert(Cross(Fml("Tema PDI - MDI"),opt1),13) AND

MDI(13) - ADX(13) <= 4 AND

MDI(13) - ADX(13) >= -2 AND

ADX(13) >= 8 AND

ADX(13) <= 21

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

Close Long:

Fml("Tema PDI - MDI") < opt1 AND

MDI(13) > 21 AND

LLV(Mov(L,55,VAR),5) = LLV(Mov(L,55,VAR),13)

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

Open Short:

Alert(Cross(opt2,Fml("Tema PDI - MDI")),8) AND

ADX(13) > 34

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

Close Short:

Fml("Tema PDI - MDI") > 13

Optimization:

Opt1: Min = -1 Max = -5 Step = 2

Opt2: Min = -21 Max = -5 Step = 8

 

 MetaStock System Test 04 Tema PV Binary Wave, StochRSI_21

I've been very busy and got away from the discussion of my MetaStock System tests. This week I'm going to get back on track and discuss my fourth MetaStock Profit System Test - 04_Tema PV Binary Wave, StochRSI_21.

As you may recall from my post last fall, I wanted to develop a binary wave and a binary wave system test based on price and volume patterns to supplement my indicator - Binary Wave Composite. I didn't want to use any indicators except price and volume. I'd hoped to use all the old sayings such as higher highs and higher lows are bullish, breakouts and big moves on large volume, etc. I developed the binary wave with the help and participation of several on this forum.

After a lot of experimenting, we came up with the following Binary wave formulas:

PVBW01 (Highs & Lows)

If(HHV(L,8) = HHV(L,21),2,0) +

If(HHV(L,21) = HHV(L,55),2,0) +

If(HHV(L,55) = HHV(L,233),1,0) +

If(HHV(H,8) = HHV(H,21),2,0) +

If(HHV(H,21) = HHV(H,55),2,0) +

If(HHV(H,55) = HHV(H,233),1,0) +

If(LLV(H,8) = LLV(H,21),-2,0) +

If(LLV(H,21) = LLV(H,55),-2,0) +

If(LLV(H,55) = LLV(H,233),-1,0) +

If(LLV(L,8) = LLV(L,21),-2,0) +

If(LLV(L,21) = LLV(L,55),-2,0) +

If(LLV(L,55) = LLV(L,233),-1,0)

PVBW02 (High Vol Move)

If(Mov(V,3,S) > 1.02*Mov(V,21,S),1,0) *

If(C > Ref(H,-1),2,0) +

If(Mov(V,2,S) > 1.02*Mov(V,21,S),1,0) *

If(C < Ref(L,-1),-2,0)

PVBW03 (New 233 Day High or Low)

((If(Mov(V,2,S) > 1.02*Mov(V,21,S),1,0)) *

If((H = HHV(H,233)),3,0)) +

((If(Mov(V,2,S) > 1.02*Mov(V,21,S),1,0)) *

If((L = LLV(L,233)),-3,0))

PVBW04 (Price Look Back)

(2*(C-Ref(C,-21)) + 2*(C-Ref(C,-55)) + (C-Ref(C,-233)))/C

The idea behind PVBW01 was the old idea that higher highs and higher lows are bullish and lower lows and lower highs are bearish. We decided that it made sense to test for short, intermediate, and long term indications. We used the Fibonacci values of 21, 55, and 233 days for short, intermediate, and long term moving averages. After a lot of experimenting, we gave more weight to the short and intermediate term results.

The idea behind PVBW02 was that a close above yesterdays high is bullish if it happens on good volume. Conversely, a close below yesterdays low is bearish if it happens on good volume. After more experimenting, we assigned a weight of +2 and -2 when these conditions were met.

The idea behind PVBW03 is similar except we use new yearly highs and lows. We also assign more weight for meeting this condition.

The idea behind PVBW04 is different. I wanted a look back indicator of some sort as the final component. I started with a 21, 55, and 233 day look back of the close and made it bullish or bearish just on comparing the two closing prices. However, when I got to thinking about this I thought it was just another way of getting the same results as our first binary wave. What I really wanted was momentum, so I came up with the idea of subtracting the two closes, assigning different weightings (our old 2, 2, 1) relationship, and then dividing by the closing price to normalize the results so there wouldn't be differences between low and high priced stocks.

To get the final PVBW formula, I first had to add each together with the following formula:

PVBW Add

Fml("PVBW01") + Fml("PVBW02") + Fml("PVBW03") +

Fml("PVBW04")

Finally the last formula applies Tema Smoothing as follows:

Tema PV Binary Wave

Periods := Input("Enter Tema Smoothing Periods",8,55,21);

Tema(Fml("PVBW Add"),Periods)

After we got the formula, the next challenge was how to test it. To develop the PVBW we used a simple zero cross over test to determine the appropriate variables for each of the Binary Wave components. The original test was:

05_Tema PV Binary Wave

ENTER LONG:

Cross(Fml("Tema PV Binary Wave"),0)

ENTER SHORT:

Cross(0,Fml("Tema PV Binary Wave"))

We improved that considerably and came up with the following test:

04_Tema PV Binary Wave, StochRSI_21

ENTER LONG:

(Cross(Fml("Tema PV Binary Wave"),opt1) AND

Fml("Tema StochRSI_21") > 0) OR

(Cross(Fml("Tema StochRSI_21"),0) AND

Fml("Tema PV Binary Wave") > 0)

CLOSE LONG:

Fml("Tema PV Binary Wave") < -opt1 AND

Fml("Tema StochRSI_21") < 0

ENTER SHORT:

Fml("Tema PV Binary Wave") < opt2 AND

Fml("Tema StochRSI_21") < 0.1*opt2

CLOSE SHORT:

Fml("Tema PV Binary Wave") > 0 AND

Fml("Tema StochRSI_21") > 0

OPTIMIZATION:

Opt1: Min = -5, Max = +5, Step = +5

Opt2: Min = -8, Max = -2, Step = +3

Before I discuss the test, I first need the following formula:

Tema StochRSI_21

Periods := Input("Enter Periods",5,233,21);

Tema(((RSI(Periods) - LLV(RSI(Periods ),Periods)) /

((HHV(RSI(Periods),Periods)) - LLV(RSI(Periods),Periods))) -

0.5,periods)

That's just the standard stochRSI formula that I tweaked to allow use of Fibonacci numbers and Tema smoothing.

Now back to the test. We get a enter long signal when the Tema PV Binary Wave crosses an optimized number and is confirmed by Tema StochRSI_21 being greater than 0 or when Tema StochRSI_21 crosses 0 and is confirmed by Tema PV Binary Wave being greater than 0. We get a close long signal when both Tema PV Binary Wave is less than minus opt1 and Tema StochRSI_21 is less than 0. Since the market is biased upwards, we want the short signals to be based on tougher critera, Therefore the enter Short signal is only generated when both the Tema PV Binary Wave and the Tema stochRSI are less than an optimized number. We close the Short when both are above 0.

 

MetaStock System Test 05 Tema StochRSI_13 & 55

For my last MetaStock system test, (05_StochRSI_13 & 55) I used the StochRSI formula described at the Equis site then modified it slightly. The original formula was:

( ( RSI ( 14 ) - LLV( RSI (14 ) ,14 ) ) / ( ( HHV( RSI (14 ) ,14 ) ) - LLV(RSI (14 ),14 ) ) )

I didn't want to use a specific number such as 14 for my formula, but want to be able to use my favorite Fibonacci numbers. I also wanted to smooth the formula with Tema smoothing. I finally settled on the Fibonacci numbers of 13 and 55 for my formulas. I also subtracted 0.5 from the result so I could plot the formula as a histogram. Therefore my formulas became:

Tema StochRSI_13

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)

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

Tema StochRSI_55

Periods := Input("Enter Tema Smoothing Periods",5,233,55);

Tema(((RSI(Periods) - LLV(RSI(Periods),Periods)) / ((0.0001+HHV(RSI(Periods),Periods)) - LLV(RSI(Periods),Periods))) -0.5,Periods)

After I decided on the formulas, the next step was how to use them in a system test. I plotted the two formulas above several of my favorite stocks and looked at them for buying patterns. Since they are plotted as a histogram I looked at zero crossovers to the upside as buys and to the downside as sells. Then instead of a zero crossover, I used an optimized value crossover. After some experimenting, I found that the shorter length crossover gave better signals if I also required the longer length one to be negative, and confirmed an up move by also requiring that a short term moving average was moving up. Finally I saw that there was usually a good buy signal when the longer term formula crossed the optimized value and the shorter term formula was above zero. Therefore my open long signal became:

OPEN LONG:

(Alert(Cross(Fml("Tema StochRSI_13"),opt1),21) AND

Fml("Tema StochRSI_55") < 0 AND

Mov(C,21,VAR) > Ref(Mov(C,21,VAR),-8)) OR

Alert(Cross(Fml("Tema StochRSI_55"),opt1),13) AND

Fml("Tema StochRSI_13") > 0

I couldn't find a good close long signal, but did find that a reverse to a short on the longer term StochRSI crossing an optimized value confirmed by a falling moving average seemed to work well. Therefore my Open Short became:

OPEN SHORT:

Alert(Cross(opt2,Fml("Tema StochRSI_55")),13) AND

Mov(C,21,VAR) < Ref(Mov(C,21,VAR),-8)

The optimization valiues are:

opt1: Min = -0.3 Max = 0 Step = 0.1

opt2: Min = -0.3 Max = 0 Step = 0.1

That's all there is to the StochRSI test, but it seems to work very well for some stocks. Try it and let me know what you think.

 

MetaStock System Test 05 Tema StochRSI_13 & 55

For my last MetaStock system test, (05_StochRSI_13 & 55) I used the StochRSI formula described at the Equis site then modified it slightly. The original formula was:

( ( RSI ( 14 ) - LLV( RSI (14 ) ,14 ) ) / ( ( HHV( RSI (14 ) ,14 ) ) - LLV(RSI (14 ),14 ) ) )

I didn't want to use a specific number such as 14 for my formula, but want to be able to use my favorite Fibonacci numbers. I also wanted to smooth the formula with Tema smoothing. I finally settled on the Fibonacci numbers of 13 and 55 for my formulas. I also subtracted 0.5 from the result so I could plot the formula as a histogram. Therefore my formulas became:

Tema StochRSI_13

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)

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

Tema StochRSI_55

Periods := Input("Enter Tema Smoothing Periods",5,233,55);

Tema(((RSI(Periods) - LLV(RSI(Periods),Periods)) / ((0.0001+HHV(RSI(Periods),Periods)) - LLV(RSI(Periods),Periods))) -0.5,Periods)

After I decided on the formulas, the next step was how to use them in a system test. I plotted the two formulas above several of my favorite stocks and looked at them for buying patterns. Since they are plotted as a histogram I looked at zero crossovers to the upside as buys and to the downside as sells. Then instead of a zero crossover, I used an optimized value crossover. After some experimenting, I found that the shorter length crossover gave better signals if I also required the longer length one to be negative, and confirmed an up move by also requiring that a short term moving average was moving up. Finally I saw that there was usually a good buy signal when the longer term formula crossed the optimized value and the shorter term formula was above zero. Therefore my open long signal became:

OPEN LONG:

(Alert(Cross(Fml("Tema StochRSI_13"),opt1),21) AND

Fml("Tema StochRSI_55") < 0 AND

Mov(C,21,VAR) > Ref(Mov(C,21,VAR),-8)) OR

Alert(Cross(Fml("Tema StochRSI_55"),opt1),13) AND

Fml("Tema StochRSI_13") > 0

I couldn't find a good close long signal, but did find that a reverse to a short on the longer term StochRSI crossing an optimized value confirmed by a falling moving average seemed to work well. Therefore my Open Short became:

OPEN SHORT:

Alert(Cross(opt2,Fml("Tema StochRSI_55")),13) AND

Mov(C,21,VAR) < Ref(Mov(C,21,VAR),-8)

The optimization valiues are:

opt1: Min = -0.3 Max = 0 Step = 0.1

opt2: Min = -0.3 Max = 0 Step = 0.1

That's all there is to the StochRSI test, but it seems to work very well for some stocks. Try it and let me know what you think.

from Jim Greening

 

DONCHAIN CHANNELS

My understanding is that Donchian Channels are channels formed by the highest high and lowest low in the last 20 days (traditionally). The MetaStock code for the indicator would then be:

Periods:= Input("Enter number of periods", 20, 60, 20);

UpperChannelLine:= Ref(HHV(HIGH, Periods), -1);

LowerChannelLine:= Ref(LLV(LOW, Periods), -1);

UpperChannelLine; LowerChannelLine

from Glen Wallace

 

Culumative Volume (Variation) Indicator

TotalVolume:=LastValue(Cum(V));

n := TotalVolume - Input("Float Volume", 1, 100000000000, 100000000);

TrueDays:=(LastValue(BarsSince(Cum(V)<=n)))-1;

HighestSince(1,(BarsSince(Cum(V)<=n)>0),LastValue(HHV((HighestSince(1,(BarsSince(Cum(V)<=n)>0),Ref(H,-1))),TrueDays)));

LowestSince(1,(BarsSince(Cum(V)<=n)>0),LastValue(LLV((LowestSince(1,(BarsSince(Cum(V)<=n)>0),Ref(L,-1))),TrueDays)))

{from Erich Kohlhofer}

 

Average of Multiple Moving Averages (based on ideas of Linda Bradford Raschke)}

Formula:

{written by Ton Maas for use in MetaStock}

DN:=1;

HN:=2;

HN3:=DN+HN;

HN4:=HN+HN;

HN5:=HN+HN+DN;

HN6:=HN+HN+HN;

HN7:=HN+HN+HN+DN;

n:=50;

sOne:=((n-DN)/HN)*C+

((n-HN3)/HN)*Ref(C,-DN)+

((n-HN5)/HN)*Ref(C,-HN)+

((n-HN7)/HN)*Ref(C,-HN3)+

((n-(HN7+HN))/HN)*Ref(C,-HN4)+

((n-(HN7+HN4))/HN)*Ref(C,-HN5)+

((n-(HN7+HN6))/HN)*Ref(C,-HN6)+

((n-(HN5*HN3))/HN)*Ref(C,-HN7)+

((n-(HN5*HN3+HN)/HN)*Ref(C,-HN*HN4)+

((n-(HN5*HN3+HN4))/HN)*Ref(C,-HN3*HN3)+

((n-(HN5*HN4+DN))/HN)*Ref(C,-HN*HN5)+

((n-(HN5*HN4+HN3))/HN)*Ref(C,-HN*HN5+DN)+

((n-(HN5*HN5))/HN)*Ref(C,-HN3*HN4)+

((n-(HN5*HN5+HN))/HN)*Ref(C,-HN3*HN4+DN)+

((n-29)/HN)*Ref(C,-HN3*HN4+HN)+

((n-31)/HN)*Ref(C,-HN3*HN5)+

((n-33)/HN)*Ref(C,-HN3*HN5+DN)+

((n-35)/HN)*Ref(C,-HN3*HN5+HN)+

((n-37)/HN)*Ref(C,-HN3*HN6)+

((n-39)/HN)*Ref(C,-HN3*HN6+DN)+

((n-41)/HN)*Ref(C,-HN4*HN5)+

((n-43)/HN)*Ref(C,-HN4*HN5+DN)+

((n-45)/HN)*Ref(C,-HN4*HN5+HN)+

((n-47)/HN)*Ref(C,-HN4*HN5+HN3)+

((n-49)/HN)*Ref(C,-HN4*HN6)+

((n-51)/HN)*Ref(C,-HN5*HN5)+

((n-53)/HN)*Ref(C,-HN5*HN5+DN)+

((n-55)/HN)*Ref(C,-HN5*HN5+HN)+

((n-57)/HN)*Ref(C,-HN4*HN7)+

((n-59)/HN)*Ref(C,-HN4*HN7+DN)+

((n-61)/HN)*Ref(C,-HN6*HN5)+

((n-63)/HN)*Ref(C,-HN6*HN5+DN)+

((n-65)/HN)*Ref(C,-HN6*HN5+HN)+

((n-67)/HN)*Ref(C,-HN6*HN5+HN3)+

((n-69)/HN)*Ref(C,-HN6*HN5+HN4)+

((n-71)/HN)*Ref(C,-HN5*HN7)+

((n-73)/HN)*Ref(C,-HN6*HN6)+

((n-75)/HN)*Ref(C,-HN6*HN6+DN)+

((n-77)/HN)*Ref(C,-HN6*HN6+HN)+

((n-79)/HN)*Ref(C,-HN6*HN6+HN3)+

((n-81)/HN)*Ref(C,-HN6*HN6+HN4)+

((n-83)/HN)*Ref(C,-HN6*HN6+HN5)+

((n-85)/HN)*Ref(C,-HN7*HN6)+

((n-87)/HN)*Ref(C,-HN7*HN6+DN)+

((n-89)/HN)*Ref(C,-HN7*HN6+HN)+

((n-91)/HN)*Ref(C,-HN7*HN6+HN3)+

((n-93)/HN)*Ref(C,-HN7*HN6+HN4)+

((n-95)/HN)*Ref(C,-HN7*HN6+HN5)+

((n-97)/HN)*Ref(C,-HN7*HN6+HN6)+

((n-99)/HN)*Ref(C,-HN7*HN7));

TN:=Mov(C,n,S);

yTwo:=TN+(HN6*sOne)/((n+DN)*n);

yTwo

 

Coppock Curve - LT Momentum

As you can see from the older mails below, there are quite a few CC indicators around. The Curves: Indicators, Momentums, Oscillators and SysTests.

The one I am using is a 3-week tradeable version:

Name: Coppock Curve - LT Momentum

Formula:

1). Calculate the % change in value from 14 months ago.

2). Calculate the % change in value from 11 months ago.

3). Add 1 + 2. 4). The Coppock indicator is the 10-month (220days) weighted average of 3.

4). Original Modified to a 3-week version for trading purposes.

5). Overlay for trigger with a 14-day SMA, AJM.}

Mov((CLOSE-Ref(C,-300))/(Ref(C,-300)*0.01)+

(CLOSE-Ref(C,-240))/(Ref(C,-240)*0.01),15,W)

Regards,

Ton Maas

 

WOODS CULUMATIVE VOLUME FLOAT INDICATOR

BackVolume:=LastValue(Cum(V))-Cum(V)+V;

float:=Input("# Shares (millions) ",1,100,1);

float=float*1000000;

if(BackVolume>=float,+1,-1);

leo.timmermans.lt@belgium.agfa.com

Here's how the WCVFI works:

The float is a variable input value that must be entered for each different stock under consideration. Starting on any given day and working backward, the current day's volume is added to the previous day's volume and adds that to the next previous day's volume and so on. As each volume number from the past is added cumulatively, the computer compares the running total with that particular stock's float. When the cumulative total is equal to or greater than the float, a dot is placed above that particular bar on the chart.

Then two horizontal lines are plotted on the chart. The top line shows the highest price reached during the backward count, and the bottom line, the lowest price. These lines serve as trigger lines for the buy and sell signals. When the stock's price goes through the top line it gives a buy signal, and when it goes through the bottom line it gives a sell signal. The lines extend backward from the starting date to the bar, where the float has gone through one complete turnover.

Some stocks with a small float may take months or years to go through one complete turnover, while other stocks with large floats may have a rapid turnover in a matter of days.

The program is set up to start counting backward from any date entered for historical studies or set for the present date form constant updates. If a stock's price is rising day after day, the program gives buy signals each time the price goes through the line set from the previous day's highest price reached. Looking at stocks reveals four patterns that occur often.

See http://www.floatanalysis.com/mag.htm   for full article and graph examples.

from Steve Denk

Page 20

FORMULAS FROM SITE VISITORS

Because of the quality of Guppy Trader's Site, I would offer my "J2L

trading system", which seems to be very simple but quite efficient : Plot

an histogram with the following "J2L Formula" : Period:= Input("What

Period",5,100,50); TSF( CLOSE,period) - LinearReg( CLOSE,period) Buy signal

is when plot crosses up the zero line Draw a trigger line between 0 and

0.05 Sell signal is when plot crosses down the trigger line. Enter long :

Cross( TSF( CLOSE,opt1) ,LinearReg( CLOSE,opt1)) Close long : Cross(

opt2,TSF( CLOSE,opt1) - LinearReg( CLOSE,opt1)) Optimise : Opt1 : 5 to 100

step 1 Opt2 : 0 to 0.05 step 0.1 I did'nt found that Stops improved the

equity Try "J2L trading system" , and if you can even improve it more, be

kind to send me a mail at : lepreux@noos.fr Jean-Louis Lepreux (from Paris)

{MetaStock Exploration -- RSI and Price}

- RSI has been going up for three days

- RSI three days ago was higher than lowest RSI in past 14 days

- Close of three days ago was lower than lowest close of the prior 14 days

will look something like this:

{RSI exploration}

Ref(RSI(14),0) > Ref(RSI(14),-1) AND

Ref(RSI(14),-1) > Ref(RSI(14),-2)AND

Ref(RSI(14),-2) > Ref( LLV(RSI(14),14),-3)

{Price exploration}

AND Ref(CLOSE,-2) < Ref(LLV(CLOSE,14),-3)

{or REF(C,-2) = REF(LLV(C,14),-2)}

{from Frans Derksen and Adam Hefner}

 

Almost zero lag moving average

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

EMA1:= Mov(P,Period,E);

EMA2:= Mov(EMA1,Period,E);

Difference:= EMA1 - EMA2;

ZeroLagEMA:= EMA1 + Difference;

ZeroLagEMA

To smooth it out further, one may apply it twice with smaller period for

the second.

But again, you cannot make the lag zero!

 

{Short-term Bottom Reversals Exploration}

colA < colD AND

colA < colE AND

(ADX(14) > 30) AND

(PDI(14) < MDI(14)) AND

VOLUME > 5000 AND

(Hammer() OR InvBlackHammer() OR InvHammer() OR BullHarami() OR

BullHaramiCross() OR DojiStar() OR MorningDojiStar() OR MorningStar() OR

ShavenBottom() OR TweezerBottoms()) = 1

With this filter I have about 99 % of stocks rejected. Also, some caution

in using ADX in exploration: to have the same value of ADX in exploration

and on your chart, you should load the same numbers of days (if you use EOD

version). So in the Explorer, you may have to change OPTIONS.

from Pierre Tremblay

 

{MOVING AVERAGE TILLSON TWICING

periods:= Input("Periods?",1,63,5);

a:= Input("HOT?",-10,2,.000075);

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-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;

{from J. Seed}

 

{Specialised Moving Average Exploration}

Col. Col. Name. Col Field

ColA. Close c

ColB Trigger If(Fml( "DS_EMA_X_MP()" )=1,H+.05,

If(Ref( Fml( "DS_EMA_X_MP()" )

,-1)=1,Ref(H,-1)+.05,

If(Ref( Fml( "DS_EMA_X_MP()" )

,-2)=1,Ref(H,-2)+.05,

If(Fml( "DS_EMA_X_MP()" )

=-1,L-.05,

If(Ref( Fml( "DS_EMA_X_MP()" )

,-1)=-1,Ref(L,-1)-.05,

If(Ref( Fml( "DS_EMA_X_MP()" )

,-2)=-1,Ref(L,-2)-.05,

0))))))

ColC Signal If( Fml( "DS_EMA_X_MP()" ) =1,1,

If( Fml( "DS_EMA_X_MP()" ) =-1,-1,

If(Ref( Fml( "DS_EMA_X_MP()" )

,-1)=1,2,

If(Ref( Fml( "DS_EMA_X_MP()" )

,-1)=-1,-2,

If(Ref( Fml( "DS_EMA_X_MP()" )

,-2)=1,3,

If(Ref( Fml( "DS_EMA_X_MP()" )

,-2)=-1,-3,

0))))))

Filter:

When(v,>=,500000)

AND

When( ADX(14),>,mov(adx(14),8,e))

AND

When(colC<>0)

 

You would do well to scan only those issues which have a high volume

number. The more highly traded a stock the better the chances of a signal

resulting in a decent move. I have also added the volume condition and you

can insert a condition in the filter stipulating ADX greater than ADXr or

some such measure. Paste the above into their respective places in a MS

exploration and and it should work fine.

I am also giving below the formula for the MA Xover. Paste it into the

indictor builder and give it the name I have indicated here.

Formula Name: DS_EMA_X_MP()

Formula Definition: if (

Cross(mov(mov(mp(),4,e))4,e),mov(mov(mp(),8,e))8,e)),1,

if

(Cross(mov(mov(mp(),8,e))8,e),mov(mov(mp(),4,e))4,e)),-1,

0))

 

I have substituted the trendliness and money flow formulae by the volume

and ADX() condition.

from Rakesh Sahgal

 

Up down Volume ratio indicator

I have been using the Up/Down Volume Ratio in MetaStock for some time. The

easiest way to enter the indicator formula is as:

 

Sum(If(C>Ref(C,-1),V,0),50)/Sum(If(C<Ref(C,-1),V,0),50).

from Denis Trover

 

KASE PEAK OSC

Per1:=Input("max length",10,100,30);
RWH:=(H-Ref(L,-Per1))/(ATR(Per1)*Sqrt(Per1));
RWL:=(Ref(H,-Per1)-L)/(ATR(Per1)*Sqrt(Per1));
Pk:=Mov((RWH-RWL),3,W);
MN:=Mov(Pk,Per1,S);
SD:=Stdev(Pk,Per1);
Val1:=If(MN+(1.33*SD)>2.08,MN+(1.33*SD),2.08);
Val2:=If(MN-(1.33*SD)<-1.92,MN-(1.33*SD),-1.92);
LN:=If(Ref(Pk,-1)>=0 AND Pk>0,Val1,If(Ref(Pk,-1)<=0 AND Pk<0,Val2,0));
Red:=If(Ref(Pk,-1)>Pk,Pk,0);
Green:=If(Pk>Ref(Pk,-1),Pk,0);
Red;Green;LN;

Just change the color{Red,Green} and style to plot as histogram


Henry Z Kaczmarczyk

Page 21

FORMULAS FROM SITE VISITORS

Cycle indicator

{double smoothed stochastic 10 period}

{denominators defined to eliminate divide by zero errors}

Period:= 10;

denom1:= If(HHV(H,Period)-LLV(L,Period)>0,

HHV(H,Period)-LLV(L,Period), 1);

P1:= Mov(((C-LLV(L,Period))/ denom1)*100,3,E);

denom2 := If(HHV(P1,Period)-LLV(P1,Period)>0,

HHV(P1,Period)-LLV(P1,Period), 1);

Mov(((P1-LLV(P1,Period))/denom2)*100,3,E)

from Bill Irwin

Bill-Irwin@home.com

 

DOUBLE STOCHASTICS EXPERT

Basically, what I am trying to program the Expert to do is:

==BUY==

IF THE CURRENT VALUE OF THE DBLSTOCH IS LESS THAN 40 AND GREATER THAN THE

PREVIOUS DAYS VALUE THEN PAINT ONLY THIS BAR AS A BUY. (i.e.. the dblstoch is below 40 and has just turned up.)

==SELL==

IF THE CURRENT VALUE OF THE DBLSTOCH IS MORE THAN 70 AND LESS THAN THE

PREVIOUS DAYS VALUE THEN PAINT ONLY THIS BAR AS A SELL. (i.e.. the dblstoch is above 70 and has just turned down.)

========

Buy Highlight:

P1:=Mov(((C-LLV(L,10))/(HHV(H,10)-LLV(L,10)))*100,3,E);

dblSto10:=

Mov(((P1-LLV(P1,10))/(HHV(P1,10)-LLV(P1,10)))*100,3,E);

buy:=dblSto10<40 AND dblSto10>Ref(dblSto10,-1) AND

Ref(dblSto10,-1)<Ref(dblSto10,-2);

buy

========

Sell Highlight:

P1:=Mov(((C-LLV(L,10))/(HHV(H,10)-LLV(L,10)))*100,3,E);

dblSto10:=

Mov(((P1-LLV(P1,10))/(HHV(P1,10)-LLV(P1,10)))*100,3,E);

sell:=dblSto10>70 AND dblSto10<Ref(dblSto10,-1) AND

Ref(dblSto10,-1)>Ref(dblSto10,-2);

sell

=========

from iamken

iamken@tampabay.rr.com

 

PIVOT PRICE INDICTOR

{The calculation for the new day are calculated from the High (H), low (L) and close (C) of the previous day.}

{P = Pivot Price}

(H + L + C)/3;

{R1 = 1st Resistance}

(2*((H + L + C)/3))-L;

{S1 = 1st Support}

(2*((H + L + C)/3))-H;

{R2 = 2nd Resistance }

(((H + L + C)/3)-((2*((H + L + C)/3))-H))+((2*((H + L + C)/3))-L);

{S2 = 2nd Support}

((H + L + C)/3)-(((2*((H + L + C)/3))-L)-((2*((H + L + C)/3))-H))

Lonnie Lepp

tllepp@wt.net

 

TEST OF INDICATORS BASED ON OTHER INDICATORS

Now, you can create an Exploration with INDICATOR4 as one of the columns and quickly see the equity performance across your portfolio of stocks.  Then, you can change "Length:=17;" to 18 or 20 in INDICATOR1, and run the exploration again to get the results for that value. You can repeat this for as many values as you like. (I copy the exploration results into Excel to do my summary statistics).

The first indicator is _Triple MA:

ShortTime := 25;

MediumTime := 75;

LongTime := 200;

ShortMA := Mov(CLOSE, ShortTime, S);

MediumMA := Mov(CLOSE, MediumTime, S);

LongMA := Mov(CLOSE, LongTime, S);

ShortMA; MediumMA; LongMA;

Next is _Triple MA Crossovers:

Sma := FmlVar("_Triple MA","ShortMA");

Mma := FmlVar("_Triple MA","MediumMA");

Lma := FmlVar("_Triple MA","LongMA");

LongSignal := Cross(Sma, Mma) AND Lma > Mma;

ShortSignal := Cross(Mma, Sma) AND Lma < Mma;

Then comes _Triple MA Positions:

BuyLong := FmlVar("_Triple MA Crossovers", "LongSignal");

SellShort := FmlVar("_Triple MA Crossovers", "ShortSignal");

If(

BarsSince(Ref(BuyLong,-1)) <= BarsSince(Ref(SellShort,-1)), +1,

If(

BarsSince(Ref(SellShort,-1)) <= BarsSince(Ref(BuyLong,-1)),

-1,0)

);

And lastly, _Triple MA Equity:

Cum(

If(Fml("_Triple MA Crossovers")=1,

OPEN-Ref(OPEN,-1),

If(Fml("_Triple MA Crossovers")=-1,

-1*OPEN-Ref(OPEN,-1),0

)

)

)

I've plotted the _Triple MA and set the 3 colours and saved that as a template. Plotting the Positions indicator produces a horizontal line at 1 when I'm long, -1 when short and zero when out. That's as I think it should be. The Equity indicator, when applied to the price bars, produces a stepping pattern that's horizontal until it steps vertically up or down to another location, then horizontal again. This doesn't seem right to me.

The Exploration:

ColA: FmlVar("_Triple MA","ShortMA")

ColB: FmlVar("_Triple MA","MediumMA")

ColC: FmlVar("_Triple MA","LongMA")

ColD: ((HHV(C,250)-LLV(C,250))/LLV(C,250))*100

ColE: Fml("_Triple MA Equity")

Filter: colD > 100 AND

colD < 300 AND

CLOSE > 5.00

Running this Exploration on the TSE produces a report where ColE ranges from -1331.80 to 17.95. Does this mean that, using this Triple MA indicator, and buying/selling when the crossovers hit, the best stock earned $17.95 over the history (5 years) and the worst stock lost $1,331.80?

from Bill Irwin

Page 22

FORMULAS FROM SITE VISITORS

RELATIVE STRENGTH OF STOCK TO INDEX

Here is what I have been using as Relative strength (RSC)Compared to the XAO

Column A: CLOSE

Column B: If( (Ref(Div(CLOSE,P),-4) > Ref(Mov(Div(C,P),30,E),-4)),1,0)

Column C: If( (Ref(Div(CLOSE,P),-3) > Ref(Mov(Div(C,P),30,E),-3)),1,0)

Column D: If( (Ref(Div(CLOSE,P),-2) > Ref(Mov(Div(C,P),30,E),-2)),1,0)

Column E: If( (Ref(Div(CLOSE,P),-1) > Ref(Mov(Div(C,P),30,E),-1)),1,0)

Column F: (( C/P - Mov(C/P,30,E)) / Mov(C/P,30,E)) * 100

Filter: Div(C,P)> Mov(Div(C,P),30,E) AND colB=1 AND colC =1 AND colD = 1 AND colE =1

I name columns B - E period 1, 2, 3, etc.

Open The chart of the index you wish to get the relative strength of the securities on make periodicity "Week".

In the options area of the exploration editor change to Week.

This formula will select securities that have outperform the index over the last 5 weeks. The formula in column F provides a way to rank the securities in terms of their recent performance relative to the index.

Frederick W McKenzie

:fmckenz@primus.com.au

 

FLEXIBLE PARAMETER BOLLINGER BAND SYSTEM

N:=Input("Lookback Period", 9, 220, 90);

M:=N; {Period used for Momentum Index}

SD:=1.5; {Number of Stdev's around FlexPivot}

MI:= CMO(C ,M ) / 100; { Momentum Index }

MA:= Mov(C, N, S); { Moving Average }

FlxP := If( MI > 0,

{ THEN }

MA + (MI * (HHV(C, M) - MA)),

{ ELSE }

MA + (MI * (MA - LLV(C, M)))

); { ENDIF }

LBand := FlxP - SD * Stdev(INDICATOR, N);

UBand := FlxP + SD * Stdev(INDICATOR, N);

UBand;

FlxP;

LBand;

{from Andreas Grau}

 

DIVERGENCE TRADING SYSTEM

RSI(9) DIVERGENCE BUY:

If(RSI(9) >= HHV(RSI(9),19) AND CLOSE <HHV(CLOSE,19), 1,0) OR

If(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) OR

If(RSI(9) <= LLV(RSI(9),19) AND CLOSE > LLV(CLOSE,19),1,0)

Substitute any formula for the "RSI(9)" in the above.

Mike Arnoldi

 

DYNAMIC ZONE WILLIAMS%R EXPLORATION

ColA:

Mov(WillR(19),70,S)-(1.3185 * Stdev(WillR(19),70))

ColB:

Mov(WillR(19),70,s)

Filter:

Cross(mov(WillR(19),70,s) , Mov(WillR(19),70,S)-(1.3185 * Stdev(WillR(19),70)))

{from suggestions by J. Seed and A. Grau}

 

DYNAMIC ZONE WILLIAMS%R INDICATOR

I have written a Dynamic Zone Williams % R indicator that you may find useful. I have converted the Will%R to a +/- 50 oscillator. The formula is:

{DYNAMIC W%R}

PR:=Input("Enter Periods for W%R",1,100,14);

PB:=Input("Enter Periods for BUY",1,100,20);

PS:=Input("Enter Periods for SELL",1,100,20);

{CONVERT W%R TO +/-50 OSC}

DWR:=(Mov(WillR(PR),2,S))+50;

UpZone:=Mov(DWR,PS,S)+(1.3185 *Stdev(DWR,PS));

LwZone:=Mov(DWR,PB,S)-(1.3185 *Stdev(DWR,PB));

MidZone:=(UpZone + LwZone)/2;

MidZone;

UpZone;

LwZone;

DWR

This will plot 3 dynamic zones and a Dynamic Williams%R. To use in an exploration you would need to use the Fml Var call function of the indicator.

from J. S

 

NEGATIVE CLOSES – DOWN DAYS

EXPLORE THE NUMBER OF NEGATIVE CLOSES AND THE PERCENT LOSS

CHANGING THE > WITH < WE HAVE THE POSITIVE DAYS .

COL A: BarsSince(C>Ref(C,-1)) {NUMBER OF NEG. DAYS )

COL B: ROC(C, LastValue(BarsSince(C>Ref(C,-1))),%) {PERCENT}

From "KAKARIDIS NIKOS"

 

FIND RSI ABOVE 80

Col A: RSI(14)

Filter colA>=80

Filter enabled Yes

Periodicity Daily

Records required 18

 

WOLF WAVE PATTERNS

Here's a simple Metastock exploration for locating Wolf Wave patterns. It doesn't hit all that often, but when it does, it's best to pay attention.

ColA: WW

Pa:=Trough(4,LOW,5);

Pb:=Peak(3,HIGH,5);

P1:=Trough(3,LOW,5);

P2:=Peak(2,HIGH,5);

P3:=Trough(2,LOW,5);

P4:=Peak(1,HIGH,5);

P5:=Trough(1,LOW,5);

tb:=TroughBars(1,LOW,5);

tb<=4 AND

p1 > pa AND

pb < p2 AND

p1 < p2 AND

p1 < p4 AND

p1 > p3 AND

p3 > p5 AND

p4 < p2 AND

ColB: Tangents

p1:=Trough(3,LOW,5);

p3:=Trough(2,LOW,5);

p5:=Trough(1,LOW,5);

o1:=p1-p3;

o2:=p1-p5;

a1:=TroughBars(3,LOW,5)-TroughBars(2,LOW,5);

a2:=TroughBars(3,LOW,5)-TroughBars(1,LOW,5);

tan1:=o1/a1;

tan2:=o2/a2;

Abs(tan1-tan2)

Filter:

colA AND colB <= .2

 

The Market Facilitation Index

In the August 1996 STOCKS & COMMODITIES, an article by Thom Hartle titled "The Market Facilitation Index" showed how to color chart bars to identify chart patterns based on changes in the market facilitation index and volume.

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, choosing the color and then entering the following formulas:

Green Bar (Green bar)

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

ROC(V,1,$) > 0

Fade Bar (Blue bar)

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

ROC(V,1,$) < 0

Fake Bar (Dk Gray bar)

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

ROC(V,1,$) < 0

Squat Bar (Red bar)

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

ROC(V,1,$) > 0

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

from Allan J. McNichol, EQUIS International

http://www.equis.com/ Sender: blackman@hawaii.rr.com

Page 23

FORMULAS FROM SITE VISITORS

Thomas R. DeMark

Sequential () Trading System

This will tell us how high the market washout rate is.
Submitted by
Maurice Odekerken from Holland m.odekerken@home.nl

Spreadsheet for this formula is available for download. Right-click here and select 'Save Target As...' to save it to a location on your harddrive.

Buy Indicators:

TD - SetUp-Buy

TD1:=If(C<Ref(C,-4),1,0);

TD2:=If(TD1=1 AND Ref(TD1,-1)=1 AND Ref(TD1,-2)=1 AND Ref(TD1,-3)=1 AND Ref(TD1,-4)=1 AND Ref(TD1,-5)=1 AND Ref(TD1,-6)=1 AND Ref(TD1,-7)=1 AND Ref(TD1,-8)=1, 1,0);

TD3:=If(Ref(C,-9)>=Ref(C,-13),1,0);

TD4:=If(TD2=1 AND TD3=1,1,0);

TD5:=If(H>=Ref(LLV(L,5),-3),1,0);

D8:=If(Ref(TD4,1)=1 AND TD5=1,1,0);

D9:=If(TD4=1 AND TD5=1 AND Ref(D8,-1)<>1,1,0);

D10:=If(Ref(TD4,-1)=1 AND TD5=1 AND Ref(D8,-2)<>1 AND Ref(D9,-1)<>1,1,0);

D11:=If(Ref(TD4,-2)=1 AND TD5=1 AND Ref(D8,-3)<>1 AND Ref(D9,-2)<>1 AND Ref(D10,-1)<>1,1,0); D12:=If(Ref(TD4,-3)=1 AND TD5=1 AND Ref(D8,-4)<>1 AND

Ref(D9,-3)<>1 AND Ref(D10,-2)<>1 AND Ref(D11,-1)<>1,1,0);

D13:=If(Ref(TD4,-4)=1 AND TD5=1 AND Ref(D8,-5)<>1 AND Ref(D9,-4)<>1 AND Ref(D10,-3)<>1 AND Ref(D11,-2)<>1 AND Ref(D12,-1)<>1,1,0);

D14:=If(Ref(TD4,-5)=1 AND TD5=1 AND Ref(D8,-6)<>1 AND Ref(D9,-5)<>1 AND Ref(D10,-4)<>1 AND Ref(D11,-3)<>1 AND Ref(D12,-2)<>1 AND Ref(D13,-1)<>1,1,0);

D15:=If(Ref(TD4,-6)=1 AND TD5=1 AND Ref(D8,-7)<>1 AND Ref(D9,-6)<>1 AND Ref(D10,-5)<>1 AND Ref(D11,-4)<>1 AND Ref(D12,-3)<>1 AND Ref(D13,-2)<>1 AND Ref(D14,-1)<>1,1,0);

D16:=If(Ref(TD4,-7)=1 AND TD5=1 AND Ref(D8,-8)<>1 AND Ref(D9,-7)<>1 AND Ref(D10,-6)<>1 AND Ref(D11,-5)<>1 AND Ref(D12,-4)<>1 AND Ref(D13,-3)<>1 AND Ref(D14,-2)<>1 AND Ref(D15,-1)<>1,1,0);

D17:=If(Ref(TD4,-8)=1 AND TD5=1 AND Ref(D8,-9)<>1 AND Ref(D9,-8)<>1 AND Ref(D10,-7)<>1 AND Ref(D11,-6)<>1 AND Ref(D12,-5)<>1 AND Ref(D13,-4)<>1 AND Ref(D14,-3)<>1 AND Ref(D15,-2)<>1 AND Ref(D16,-1)<>1,1,0);

SetUp:=D8+D9+D10+D11+D12+D13+D14+D15+D16+D17;

SetUp

 

TD Count Down Buy A

Cum(If(C<Ref(CLOSE,-2),1,0))-ValueWhen(1,Ref(Fml("TD - SetUp-Buy" ), 1)=1, Cum(If(C<Ref(C,-2),1,0)))

 

TD Count Down Buy B

If(Fml("TD Count Down Buy A")>=14 AND C>Ref(C,-4),1,0)

 

TD Count Down Buy C

If(Fml("TD Count Down Buy A")>=14 AND C>Ref(H,-2),1,0)

Buy Experts:

Type / Change in Highlights:

Buy Bullish SetUp (Color: Cyan)

Fml( "TD - SetUp-Buy" ) =1 OR

Ref( Fml( "TD - SetUp-Buy" ) ,1)=1 OR

Ref( Fml( "TD - SetUp-Buy" ) ,2)=1 OR

Ref( Fml( "TD - SetUp-Buy" ) ,3)=1 OR

Ref( Fml( "TD - SetUp-Buy" ) ,5)=1 OR

Ref( Fml( "TD - SetUp-Buy" ) ,6)=1 OR

Ref( Fml( "TD - SetUp-Buy" ) ,7)=1 OR

Ref( Fml( "TD - SetUp-Buy" ) ,8)=1

Buy Count Down (Color: Blue)

( Fml( "TD Count Down Buy A" ) =13

AND Ref( Fml( "TD Count Down Buy A" ) ,-1 )<> 13) OR

( Fml( "TD Count Down Buy A" ) =12

AND Ref( Fml( "TD Count Down Buy A" ) ,-1 )<> 12) OR

( Fml( "TD Count Down Buy A" ) =11

AND Ref( Fml( "TD Count Down Buy A" ) ,-1 )<> 11) OR

( Fml( "TD Count Down Buy A" ) =10

AND Ref( Fml( "TD Count Down Buy A" ) ,-1 )<> 10) OR

( Fml( "TD Count Down Buy A" ) =9

AND Ref( Fml( "TD Count Down Buy A" ) ,-1 )<> 9) OR

( Fml( "TD Count Down Buy A" ) =8

AND Ref( Fml( "TD Count Down Buy A" ) ,-1 )<> 8) OR

( Fml( "TD Count Down Buy A" ) =7

AND Ref( Fml( "TD Count Down Buy A" ) ,-1 )<> 7) OR

( Fml( "TD Count Down Buy A" ) =6

AND Ref( Fml( "TD Count Down Buy A" ) ,-1 )<>6) OR

( Fml( "TD Count Down Buy A" ) =5

AND Ref( Fml( "TD Count Down Buy A" ) ,-1 )<> 5) OR

( Fml( "TD Count Down Buy A" ) =4

AND Ref( Fml( "TD Count Down Buy A" ) ,-1 )<> 4) OR

( Fml( "TD Count Down Buy A" ) =3

AND Ref( Fml( "TD Count Down Buy A" ) ,-1 )<>3) OR

( Fml( "TD Count Down Buy A" ) =2

AND Ref( Fml( "TD Count Down Buy A" ) ,-1 )<>2)

 

Buy A (Color: Green)

( Fml( "TD Count Down Buy A" ) =14 AND Ref( Fml( "TD Count Down Buy A" ) ,-1 )<> 14)

 

Buy B (Color: Green)

A:=If( Fml( "TD Count Down Buy A" ) =14

AND Ref( Fml( "TD Count Down Buy A" ) ,-1 )<> 14,1,0);

B:=If( Ref(Fml( "TD Count Down Buy B" ),-1) =1,1,0);

HighestSinceBars(1,A =1,A )<HighestSinceBars(1,B=1,B ) AND Fml( "TD Count Down Buy B" ) =1

 

Buy C (Color: Green)

A:=If( Fml( "TD Count Down Buy A" ) =14

AND Ref( Fml( "TD Count Down Buy A" ) ,-1 )<> 14,1,0);

B:=If( Ref(Fml( "TD Count Down Buy C" ),-1) =1,1,0);

HighestSinceBars(1,A =1,A )<HighestSinceBars(1,B=1,C ) AND Fml( "TD Count Down Buy C" ) =1

Type / Change in Symbols:

SetUp9 (Label: 9 / Font: 8 / Color: Magenta / Position: Below / Graphics: None )

Fml( "TD - SetUp-Buy" )=1

 

SetUp8 (Label: 8 / Font: 8 / Color: Magenta / Position: Below / Graphics: None )

Ref( Fml( "TD - SetUp-Buy" ),1)=1

 

SetUp7 (Label: 7 / Font: 8 / Color: Magenta / Position: Below / Graphics: None )

Ref( Fml( "TD - SetUp-Buy" ) ,2)=1

 

SetUp6 (Label: 6 / Font: 8 / Color: Magenta / Position: Below / Graphics: None )

Ref( Fml( "TD - SetUp-Buy" ) ,3)=1

 

SetUp5 (Label: 5 / Font: 8 / Color: Magenta / Position: Below / Graphics: None )

Ref( Fml( "TD - SetUp-Buy" ) ,4)=1

 

SetUp4 (Label: 4 / Font: 8 / Color: Magenta / Position: Below / Graphics: None )

Ref( Fml( "TD - SetUp-Buy" ) ,5)=1

 

SetUp3 (Label: 3 / Font: 8 / Color: Magenta / Position: Below / Graphics: None )

Ref( Fml( "TD - SetUp-Buy" ) ,6)=1

 

SetUp2 (Label: 2 / Font: 8 / Color: Magenta / Position: Below / Graphics: None )

Ref( Fml( "TD - SetUp-Buy" ) ,7)=1

 

SetUp1 (Label: 1 / Font: 8 / Color: Magenta / Position: Below / Graphics: None )

Ref( Fml( "TD - SetUp-Buy" ) ,8)=1

 

CountDown1 (Label: 1 / Font: 8 / Color: Brown / Position: Below / Graphics: None )

Fml( "TD Count Down Buy A" ) =2 AND Ref( Fml( "TD Count Down Buy A" ) ,-1 )<>2

 

CountDown2 (Label: 2 / Font: 8 / Color: Brown / Position: Below / Graphics: None )

Fml( "TD Count Down Buy A" ) =3 AND Ref( Fml( "TD Count Down Buy A" ) ,-1 )<> 3

 

CountDown3 (Label: 3 / Font: 8 / Color: Brown / Position: Below / Graphics: None )

Fml( "TD Count Down Buy A" ) =4 AND Ref( Fml( "TD Count Down Buy A" ) ,-1 )<> 4

 

CountDown4 (Label: 4 / Font: 8 / Color: Brown / Position: Below / Graphics: None )

Fml( "TD Count Down Buy A" ) =5 AND Ref( Fml( "TD Count Down Buy A" ) ,-1 )<> 5

 

CountDown5 (Label: 5 / Font: 8 / Color: Brown / Position: Below / Graphics: None )

Fml( "TD Count Down Buy A" ) =6 AND Ref( Fml( "TD Count Down Buy A" ) ,-1 )<> 6

 

CountDown6 (Label: 6 / Font: 8 / Color: Brown / Position: Below / Graphics: None )

Fml( "TD Count Down Buy A" ) =7 AND Ref( Fml( "TD Count Down Buy A" ) ,-1 )<> 7

 

CountDown7 (Label: 7 / Font: 8 / Color: Brown / Position: Below / Graphics: None )

Fml( "TD Count Down Buy A" ) =8 AND Ref( Fml( "TD Count Down Buy A" ) ,-1 )<> 8

 

CountDown8 (Label: 8 / Font: 8 / Color: Brown / Position: Below / Graphics: None )

Fml( "TD Count Down Buy A" ) =9 AND Ref( Fml( "TD Count Down Buy A" ) ,-1 )<> 9

 

CountDown9 (Label: 9 / Font: 8 / Color: Brown / Position: Below / Graphics: None )

Fml( "TD Count Down Buy A" ) =10 AND Ref( Fml( "TD Count Down Buy A" ) ,-1 )<> 10

 

CountDown10 (Label: 10 / Font: 8 / Color: Brown / Position: Below / Graphics: None )

Fml( "TD Count Down Buy A" ) =11 AND Ref( Fml( "TD Count Down Buy A" ) ,-1 )<> 11

 

CountDown11 (Label: 11 / Font: 8 / Color: Brown / Position: Below / Graphics: None )

Fml( "TD Count Down Buy A" ) =12 AND Ref( Fml( "TD Count Down Buy A" ) ,-1 )<> 12

 

CountDown12 (Label: 12 / Font: 8 / Color: Brown / Position: Below / Graphics: None )

Fml( "TD Count Down Buy A" ) =13 AND Ref( Fml( "TD Count Down Buy A" ) ,-1 )<> 13

 

CountDown13 (Label: Buy A / Font: 9 / Color: Green / Position: Below / Graphics: Buy Arrow )

Fml( "TD Count Down Buy A" ) =14 AND Ref( Fml( "TD Count Down Buy A" ) ,-1 )<> 14

 

Buy B (Label: Buy B / Font: 9 / Color: Green / Position: Below / Graphics: Buy Arrow )

A:=If( Fml( "TD Count Down Buy A" ) =14 AND Ref( Fml( "TD Count Down Buy A" ) ,-1 )<> 14,1,0);

B:=If( Ref(Fml( "TD Count Down Buy B" ),-1) =1,1,0);

HighestSinceBars(1,A =1,A )<HighestSinceBars(1,B=1,B ) AND Fml( "TD Count Down Buy B" ) =1

 

Buy C (Label: Buy C / Font: 9 / Color: Green / Position: Below / Graphics: Buy Arrow )

A:=If( Fml( "TD Count Down Buy A" ) =14 AND Ref( Fml( "TD Count Down Buy A" ) ,-1 )<> 14,1,0);

B:=If( Ref(Fml( "TD Count Down Buy C" ),-1) =1,1,0);

HighestSinceBars(1,A =1,A )<HighestSinceBars(1,B=1,C ) AND Fml( "TD Count Down Buy C" ) =1

 

Sell Indicators:

TD - SetUp-Sell

TD1:=If(C>Ref(C,-4),1,0);

TD2:=If(TD1=1 AND Ref(TD1,-1)=1 AND Ref(TD1,-2)=1 AND Ref(TD1,-3)=1 AND Ref(TD1,-4)=1 AND Ref(TD1,-5)=1 AND Ref(TD1,-6)=1 AND Ref(TD1,-7)=1 AND Ref(TD1,-8)=1, 1,0);

TD3:=If(Ref(C,-9)<=Ref(C,-13),1,0);

TD4:=If(TD2=1 AND TD3=1,1,0);

TD5:=If(L>=Ref(HHV(H,5),-3),1,0);

D8:=If(Ref(TD4,1)=1 AND TD5=1,1,0);

D9:=If(TD4=1 AND TD5=1 AND Ref(D8,-1)<>1,1,0);

D10:=If(Ref(TD4,-1)=1 AND TD5=1 AND Ref(D8,-2)<>1 AND Ref(D9,-1)<>1,1,0);

D11:=If(Ref(TD4,-2)=1 AND TD5=1 AND Ref(D8,-3)<>1 AND Ref(D9,-2)<>1 AND Ref(D10,-1)<>1,1,0);

D12:=If(Ref(TD4,-3)=1 AND TD5=1 AND Ref(D8,-4)<>1 AND Ref(D9,-3)<>1 AND Ref(D10,-2)<>1 AND Ref(D11,-1)<>1,1,0);

D13:=If(Ref(TD4,-4)=1 AND TD5=1 AND Ref(D8,-5)<>1 AND Ref(D9,-4)<>1 AND Ref(D10,-3)<>1 AND Ref(D11,-2)<>1 AND Ref(D12,-1)<>1,1,0);

D14:=If(Ref(TD4,-5)=1 AND TD5=1 AND Ref(D8,-6)<>1 AND Ref(D9,-5)<>1 AND Ref(D10,-4)<>1 AND Ref(D11,-3)<>1 AND Ref(D12,-2)<>1 AND Ref(D13,-1)<>1,1,0);

D15:=If(Ref(TD4,-6)=1 AND TD5=1 AND Ref(D8,-7)<>1 AND Ref(D9,-6)<>1 AND Ref(D10,-5)<>1 AND Ref(D11,-4)<>1 AND Ref(D12,-3)<>1 AND Ref(D13,-2)<>1 AND Ref(D14,-1)<>1,1,0);

D16:=If(Ref(TD4,-7)=1 AND TD5=1 AND Ref(D8,-8)<>1 AND Ref(D9,-7)<>1 AND Ref(D10,-6)<>1 AND Ref(D11,-5)<>1 AND Ref(D12,-4)<>1 AND Ref(D13,-3)<>1 AND Ref(D14,-2)<>1 AND Ref(D15,-1)<>1,1,0);

D17:=If(Ref(TD4,-8)=1 AND TD5=1 AND Ref(D8,-9)<>1 AND Ref(D9,-8)<>1 AND Ref(D10,-7)<>1 AND Ref(D11,-6)<>1 AND Ref(D12,-5)<>1 AND Ref(D13,-4)<>1 AND Ref(D14,-3)<>1 AND Ref(D15,-2)<>1 AND Ref(D16,-1)<>1,1,0);

SetUp:=D8+D9+D10+D11+D12+D13+D14+D15+D16+D17;

SetUp

 

TD Count Down Sell A

Cum(If(C>Ref(C,-2),1,0))-ValueWhen(1,Ref( Fml( "TD - SetUp-Sell" ), 1)=1, Cum(If(C>Ref(C,-2),1,0)))

 

TD Count Down Sell B

If(Fml( "TD Count Down Sell A" )>=14 AND C<Ref(C,-4),1,0)

 

TD Count Down Sell C

If(Fml( "TD Count Down Sell A" )>=14 AND C<Ref(H,-2),1,0)

Sell Experts:

Type / Change in Highlights:

Sell Bearish Setup (Color: Cyan)

Fml( "TD - SetUp-Sell" ) =1 OR

Ref( Fml( "TD - SetUp-Sell" ) ,1)=1 OR

Ref( Fml( "TD - SetUp-Sell" ) ,2)=1 OR

Ref( Fml( "TD - SetUp-Sell" ) ,3)=1 OR

Ref( Fml( "TD - SetUp-Sell" ) ,4)=1 OR

Ref( Fml( "TD - SetUp-Sell" ) ,5)=1 OR

Ref( Fml( "TD - SetUp-Sell" ) ,6)=1 OR

Ref( Fml( "TD - SetUp-Sell" ) ,7)=1 OR

Ref( Fml( "TD - SetUp-Sell" ) ,8)=1

 

Sell Count Down (Color: Blue)

( Fml( "TD Count Down Sell A" ) =13

AND Ref( Fml( "TD Count Down Sell A" ) ,-1 )<> 13) OR

( Fml( "TD Count Down Sell A" ) =12

AND Ref( Fml( "TD Count Down Sell A" ) ,-1 )<> 12) OR

( Fml( "TD Count Down Sell A" ) =11

AND Ref( Fml( "TD Count Down Sell A" ) ,-1 )<> 11) OR

( Fml( "TD Count Down Sell A" ) =10

AND Ref( Fml( "TD Count Down Sell A" ) ,-1 )<> 10) OR

( Fml( "TD Count Down Sell A" ) =9

AND Ref( Fml( "TD Count Down Sell A" ) ,-1 )<> 9) OR

( Fml( "TD Count Down Sell A" ) =8

AND Ref( Fml( "TD Count Down Sell A" ) ,-1 )<> 8) OR

( Fml( "TD Count Down Sell A" ) =7

AND Ref( Fml( "TD Count Down Sell A" ) ,-1 )<> 7) OR

( Fml( "TD Count Down Sell A" ) =6

AND Ref( Fml( "TD Count Down Sell A" ) ,-1 )<> 6) OR

( Fml( "TD Count Down Sell A" ) =5

AND Ref( Fml( "TD Count Down Sell A" ) ,-1 )<> 5) OR

( Fml( "TD Count Down Sell A" ) =4

AND Ref( Fml( "TD Count Down Sell A" ) ,-1 )<> 4) OR

( Fml( "TD Count Down Sell A" ) =3

AND Ref( Fml( "TD Count Down Sell A" ) ,-1 )<> 3) OR

( Fml( "TD Count Down Sell A" ) =2

AND Ref( Fml( "TD Count Down Sell A" ) ,-1 )<> 2)

 

Sell A (Color: Green)

( Fml( "TD Count Down Sell A" ) =14

AND Ref( Fml( "TD Count Down Sell A" ) ,-1 )<> 14)

 

Sell B (Color: Green)

A:=If( Fml( "TD Count Down Sell A" ) =14

AND Ref( Fml( "TD Count Down Sell A" ) ,-1 )<> 14,1,0);

B:=If( Ref(Fml( "TD Count Down Sell B" ),-1) =1,1,0);

HighestSinceBars(1,A =1,A )<HighestSinceBars(1,B=1,B ) AND Fml( "TD Count Down Sell B" ) =1

 

Sell C (Color: Green)

A:=If( Fml( "TD Count Down Sell A" ) =14

AND Ref( Fml( "TD Count Down Sell A" ) ,-1 )<> 14,1,0);

B:=If( Ref(Fml( "TD Count Down Sell C" ),-1) =1,1,0);

HighestSinceBars(1,A =1,A )<HighestSinceBars(1,B=1,C ) AND Fml( "TD Count Down Sell C" ) =1

 

SetUp9 (Label: 9 / Font: 8 / Color: Magenta / Position: Above / Graphics: None )

Fml( "TD - SetUp-Sell" )=1

 

SetUp8 (Label: 8 / Font: 8 / Color: Magenta / Position: Above / Graphics: None )

Ref( Fml( "TD - SetUp-Sell" ),1)=1

 

SetUp7 (Label: 7 / Font: 8 / Color: Magenta / Position: Above / Graphics: None )

Ref( Fml( "TD - SetUp-Sell" ),2)=1

 

SetUp6 (Label: 6 / Font: 8 / Color: Magenta / Position: Above / Graphics: None )

Ref( Fml( "TD - SetUp-Sell" ),3)=1

 

SetUp5 (Label: 5 / Font: 8 / Color: Magenta / Position: Above / Graphics: None )

Ref( Fml( "TD - SetUp-Sell" ),4)=1

 

SetUp4 (Label: 4 / Font: 8 / Color: Magenta / Position: Above / Graphics: None )

Ref( Fml( "TD - SetUp-Sell" ),5)=1

 

SetUp3 (Label: 3 / Font: 8 / Color: Magenta / Position: Above / Graphics: None )

Ref( Fml( "TD - SetUp-Sell" ),6)=1

 

SetUp2 (Label: 2 / Font: 8 / Color: Magenta / Position: Above / Graphics: None )

Ref( Fml( "TD - SetUp-Sell" ),7)=1

 

SetUp1 (Label: 1 / Font: 8 / Color: Magenta / Position: Above / Graphics: None )

Ref( Fml( "TD - SetUp-Sell" ),8)=1

 

CountDown1 (Label: 1 / Font: 8 / Color: Brown / Position: Above / Graphics: None )

Fml( "TD Count Down Sell A" ) =2

AND Ref( Fml( "TD Count Down Sell A" ) ,-1 )<>2

 

CountDown2 (Label: 2 / Font: 8 / Color: Brown / Position: Above / Graphics: None )

Fml( "TD Count Down Sell A" ) =3

AND Ref( Fml( "TD Count Down Sell A" ) ,-1 )<>3

 

CountDown3 (Label: 3 / Font: 8 / Color: Brown / Position: Above / Graphics: None )

Fml( "TD Count Down Sell A" ) =4

AND Ref( Fml( "TD Count Down Sell A" ) ,-1 )<>4

 

CountDown4 (Label: 4 / Font: 8 / Color: Brown / Position: Above / Graphics: None )

Fml( "TD Count Down Sell A" ) =5

AND Ref( Fml( "TD Count Down Sell A" ) ,-1 )<>5

 

CountDown5 (Label: 5 / Font: 8 / Color: Brown / Position: Above / Graphics: None )

Fml( "TD Count Down Sell A" ) =6

AND Ref( Fml( "TD Count Down Sell A" ) ,-1 )<>6

 

CountDown6 (Label: 6 / Font: 8 / Color: Brown / Position: Above / Graphics: None )

Fml( "TD Count Down Sell A" ) =7

AND Ref( Fml( "TD Count Down Sell A" ) ,-1 )<>7

 

CountDown7 (Label: 7 / Font: 8 / Color: Brown / Position: Above / Graphics: None )

Fml( "TD Count Down Sell A" ) =8

AND Ref( Fml( "TD Count Down Sell A" ) ,-1 )<>8

 

CountDown8 (Label: 8 / Font: 8 / Color: Brown / Position: Above / Graphics: None )

Fml( "TD Count Down Sell A" ) =9

AND Ref( Fml( "TD Count Down Sell A" ) ,-1 )<>9

 

CountDown9 (Label: 9 / Font: 8 / Color: Brown / Position: Above / Graphics: None )

Fml( "TD Count Down Sell A" ) =10

AND Ref( Fml( "TD Count Down Sell A" ) ,-1 )<>10

 

CountDown10 (Label: 10 / Font: 8 / Color: Brown / Position: Above / Graphics: None )

Fml( "TD Count Down Sell A" ) =11

AND Ref( Fml( "TD Count Down Sell A" ) ,-1 )<>11

 

CountDown11 (Label: 11/ Font: 8 / Color: Brown / Position: Above / Graphics: None )

Fml( "TD Count Down Sell A" ) =12

AND Ref( Fml( "TD Count Down Sell A" ) ,-1 )<>12

 

CountDown12 (Label: 12 / Font: 8 / Color: Brown / Position: Above / Graphics: None )

Fml( "TD Count Down Sell A" ) =13

AND Ref( Fml( "TD Count Down Sell A" ) ,-1 )<>13

 

CountDown13 (Label: Sell A / Font: 9 / Color: Red / Position: Above / Graphics: Sell Arrow )

Fml( "TD Count Down Sell A" ) =14

AND Ref( Fml( "TD Count Down Sell A" ) ,-1 )<>14

 

Sell B (Label: Sell B / Font: 9 / Color: Red / Position: Above / Graphics: Sell Arrow )

A:=If( Fml( "TD Count Down Sell A" ) =14

AND Ref( Fml( "TD Count Down Sell A" ) ,-1 )<> 14,1,0);

B:=If( Ref(Fml( "TD Count Down Sell B" ),-1) =1,1,0);

HighestSinceBars(1,A =1,A )<HighestSinceBars(1,B=1,B ) AND Fml( "TD Count Down Sell B" ) =1

 

Sell C (Label: Sell C / Font: 9 / Color: Red / Position: Above / Graphics: Sell Arrow )

A:=If( Fml( "TD Count Down Sell A" ) =14

AND Ref( Fml( "TD Count Down Sell A" ) ,-1 )<> 14,1,0);

B:=If( Ref(Fml( "TD Count Down Sell C" ),-1) =1,1,0);

HighestSinceBars(1,A =1,A )<HighestSinceBars(1,B=1,C ) AND Fml( "TD Count Down Sell C" ) =1

Page 24

MACD Histogram Divergence

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

ColA:

md := MACD();

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

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

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

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

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

),12,0)

Filter Column:

colA and colA <-0.8

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

ColB: The volatility buy signal

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

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

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

Filter Column:

colA AND colB AND colC AND colA <-0.80

Initial tests with this system have been encouraging.

Denis Mortell


1 2 3 Ross Hook

http://www.fib-charting.it/

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


Presto's Magic Box
(a tweaked version of the Darvis Box)

Jason Prestwidge

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;