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