Metastock
Formulas
- D
Click
here to go back to Metastock Formula
Index
IMPORTANT:
These formulas aren't my complete collection. For my complete
collection of instantly usable, profitable
and powerful MetaStock formulas Click
Here
|
Would
You Like To Use MetaStock To Its Full Potential? Discover the Amazingly
Simple Secret to Master Metastock Step-By-Step
- click
here
A | A 1 | B | B 1 | C | C 1 | D | D 1 | E | F | G | H | I | J | K | L | M | M 1 | N | O | P | R | S | S 1 | T | U | V | W | Z |
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
(Go
Top) |
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.
(Go
Top) |
Dave's
New System (DNS)
Is a binary consisting of 8 indicators.}
If(SAR(.02,.2)<C,1,0) +
If((Mov(C,5,E)>Mov(C,13,E)),1,0) +
If((Mov(C,13,E)>Mov(C,40,E)),1,0) +
If((Mov(C,8,E)-Mov(C,17,E))> (Mov(Mov(C,8,E)-Mov(C,17,E),9,E)),1,0)+
If(Mov(C,50,SIMPLE) - Ref(Mov(C,50,SIMPLE),-15) > 0,1,0)+
If((Mov(ROC(C,12,%),3,E)>=-6 OR ROC(C,12,%)>0),1,0)+
If(OBV()>Mov(OBV(),40,S),1,0)+
If(V>Mov(V,120,S),1,0)
(Go
Top)
|
Days
Since Crossover
{place formula in filter section of explorer, making sure
that 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)
(Go
Top) |
Denvelope
In the Oct issue of "Futures" there is an
article written by Dennis McNicholl called "Better Bollinger
Bands". In his
article he describes how in a trending market the center
band of the B.B. will shift away from the "mean" value 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;
(Go
Top)
|
Denvelope
(RSI)
pds:=Input("Periods",2,200,14);
sd:=Input("Standard Deviations",.01,10,2);
D1:= RSI(pds);
alpha:=2/(pds+1);
mt:=alpha*D1+(1-alpha)*(If(Cum(1)<pds,D1,PREV));
ut:=alpha*mt+(1-alpha)*(If(Cum(1)<pds,D1,PREV));
dt:=((2-alpha)*mt-ut)/(1-alpha);
mt2:=alpha*Abs(D1-dt)+(1-alpha)*PREV;
ut2:=alpha*mt2+(1-alpha)*PREV;
dt2:=((2-alpha)*mt2-ut2)/(1-alpha);
but:=dt+sd*dt2;
blt:=dt-sd*dt2;
blt;
dt;
but;
(Go
Top) |
DEVSTOP
Here's what I think a DEVSTOP is in MetaStock language,
described in Kase's
"Trading with the Odds", and better described in Kaufman's
"Trading 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);
(Go
Top) |
Displace
Indicator Forward
To displace an indicator forward, you use
Ref(myInd,-p). The median and typical prices are built-in
functions -- MP() is (H+L)/2 and typ() is (H+L+C)/3.
For MP, use
Period:= Input("What Period",1,250,10);
Disp:= Input("Forward Displacement",0,250,10);
EMA1:= Mov(MP(),Period,E);
EMA2:= Mov(EMA1,Period,E);
Difference:= EMA1 - EMA2;
ZeroLagEMA:= EMA1 + Difference;
Ref(ZeroLagEMA,-Disp)
(Go
Top)
|
Divergence
Between Close and Indicator
Divergence between the Close and an Indicator (Rev. 03/18/97
from Equis Support) The following formula will calculate the
correlation of the Close and the MACD. It is written using
a "long form" MACD so that the time periods used by the MACD
may be changed. This indicator shows "divergence" between
the close and the indicator: In the Windows versions of MetaStock
the formula is:
Correl(((Sum(Cum(1)*(Mov(C,12,E)-Mov(C,26,E)),100))-(Sum(Cum(1),100)*
Sum((Mov(C,12,E)-Mov(C,26,E)),100)/100))/((Sum(Power(Cum(1),2),100))-
(Power(Sum(Cum(1),100),2)/100)),((Sum(Cum(1)*C,100))-(Sum(Cum(1),100)*
Sum(C,100)/100))/((Sum(Power(Cum(1),2),100))-(Power(Sum(Cum(1),100),2)/100)),12,0)
The interpretation of the indicator output
is as follows: - .08 (80%) and lower is divergence between
the Close and the MACD. - 1 is very strong divergence. +
1 is very strong correlation. The formula was constructed
this way so that most other indicators may be used in place
of the MACD. For example, here is the same indicator using
the RSI(14):
Correl(((Sum(Cum(1)*(RSI(14)),100))-(Sum(Cum(1),100)*
Sum((RSI(14)),100)/100))/((Sum(Power(Cum(1),2),100))-(Power(Sum(Cum(1),100),2)/100)),
((Sum(Cum(1)*C,100))-(Sum(Cum(1),100)*Sum(C,100)/100))/((Sum(Power(Cum(1),2),100))-
(Power(Sum(Cum(1),100),2)/100)),12,0)
(Go
Top)
|
Double
Inside Day
{For today is an inside day}
H < Ref(H,-1) 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)
(Go
Top) |
Double
Tops and Double Bottoms
In the February 1998 issue of Technical
Analysis of Stocks & Commodities magazine, Thomas Bulkowski
discusses the use of Double Bottoms as a means of finding
profitable trades.
In MetaStock for Windows, you can find both
Double Tops and Double Bottoms with these formulas. There
is a caveat however. In the article, Mr. Bulkowski utilizes
the High-Low range in finding Double Bottoms. These formulas
use only the close value, so a few of the lower priced issues
will not produce signals in MetaStock. Overall, however,
these formulas produce most of the major signals he discusses.
Double 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)))
(Go
Top)
|
Down
20% on Double Average Volume
Col A: CLOSE
Col B: ROC(C,5,%)
Filter ROC(C,5,%)<=-20 AND Mov(V,5,S)>=(2*Ref(Mov(V,60,S),-5))
Filter enabled Yes
Periodicity Daily
Records required 1300
(Go
Top) |
DMTF
Trading System
I know I'm a little slow, but I've just gotten around to
working on the Dynamic Multiple Time Frame indicators given
by Robert Krausz in the 1999 Bonus Issue of TASC.
The code for the actual indicators can be found at the Equis
website (www.equis.com) so I won't post them again here.
I've been testing a system based on these indicators on
Best Buy (a stock that seems to be quite amenable to system
trading) and getting very good results. The system is currently
for long trades only; I'll work on shorting later. Here's
what I've got so far
Enter Long:
day:=DayOfWeek();
Fml("dynamic balance")>Fml("dynamik balance point steps")
AND Fml("fixed balance point")>Ref(Fml("fixed balance
Point"),-5)
OR Fml("tendency")>0 AND day=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.
(Go
Top) |
Dunnigan
Trend
{Ask to use 1 day or 2 day Swing type}
St:=Input("Short Term Swing Type, 1 or 2 ?",
1,2,2);
{Call Swing Type Formula}
Sd:=If(Round(St)=1,
{then} FmlVar("Dunn-Type1","TD1"),
{else} FmlVar("Dunn-Type2","TD1"));
{Number Of Periods Since Swing Started Up}
Hc:=BarsSince(SD=-1);
{Number Of Periods Since Swing Started Down}
Lc:=BarsSince(SD=1);
{Find Highest Value Of Up Swing}
Hv:=If(Hc>Lc AND H>Ref(H,-1),
{then}HighestSince(1,Hc=1,H),
{else}0);
{Find Lowest Value Of Down Swing}
Lv:=If(Hc<Lc AND L<Ref(L,-1),
{then}LowestSince(1,Lc=1,L),
{else}0);
{Find The Low Of The Highest High}
Hlv:=ValueWhen(1,H=Hv,L);
{Find The High Of The Lowest Low}
Lhv:=ValueWhen(1,L=Lv,H);
{Calculate And Plot Trend Direction,
Note: 1= Uptrend,
-1= Downtrend}
TD2:=If(Sd=1 AND H>Lhv,
{then}1,
{else}If(Sd=-1 AND L<Hlv,
{then}-1,
{else}0));
TD3:=ValueWhen(1,TD2<>0,TD2);
TD3
{These formulas simply plot a 1 if market is up or -1 if
down. I really didn't code this to be used as an indicator,
but to be used as a subroutine, or possibly in an "Expert
Adviser".
Best wishes, Adam Hefner.}
(Go
Top) |
Dunn-Type
1
{Market swing is defined as:
Up = higher highs and higher lows,
Down = lower highs and lower lows.}
TD1:=If(BarsSince(H>Ref(H,-1) AND L>Ref(L,-1)) <
BarsSince(L<Ref(L,-1) AND H<Ref(H,-1)),
{then}1,
{else}-1);
TD1
(Go
Top) |
Dunn-Type
2
{Market swing is defined as:
Up = 2 higher highs and 2 higher lows,
Down = 2 lower highs and 2 lower lows.}
TD1:=If(BarsSince((H>Ref(H,-1) AND L>Ref(L,-1))
AND (Ref(H,-1)>Ref(H,-2)
AND Ref(L,-1)>Ref(L,-2))) <
BarsSince((L<Ref(L,-1) AND H<Ref(H,-1))
AND (Ref(L,-1)<Ref(L,-2)
AND Ref(H,-1)<Ref(H,-2))),
{then}1,
{else}-1);
TD1
(Go
Top) |
Dynamic
Multiple Time Frame Indicator
Explanation of the Dynamic Multiple Time
Frame Indicator by the author, Adam Hefner:
"The Fixed Balance Point is calculated every Friday 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."
(Go
Top)
|
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.
(Go
Top)
|
if((C-L)/(H-L),>,.66
,1, if((C-L)/(H-L),<,.38,-1,0))
(Go
Top) |
The
Detrended Price Oscillator (DPO) is an indicator that attempts
to eliminate the trend in prices. Detrended prices allow
you to more easily identify cycles and overbought/oversold
levels. Here is the MetaStock custom formula for the DPO:
Close-Ref(
Mov(Close, X, Simple ), T)
***where
X is the number of Time Periods for the Oscillator and T
= X / 2 + 1.
For
example, a 20 period DPO would be:
X
= 20
T = (20/2 + 1) = 11
Close-Ref( Mov(Close, 20, Simple),11)
(Go
Top) |
Steve
Nison refers to the his Disparity Index "as a percentage
display of the latest close to a chosen moving average".
This can be defined in MetaStock using the formula:
(
( C - Mov( C ,X ,? ) ) / Mov( C ,X ,? ) ) * 100
**
where X is the number of time periods and ? is the calculation
type of the moving average.
For
example:
(
( C - Mov( C ,13,E ) ) / Mov( C ,13 ,E ) ) * 100
**
where X = 13 time periods and ? = Exponential moving average.
For interpretation on the Disparity Index refer to Steve
Nison's book Beyond Candlesticks which is available
from the Equis Direct catalogue.
(Go
Top) |
All
versions of MetaStock prior to our Windows software would
need this formula.
You
can display your security's prices in 32nds and 64ths, by
using the following custom formulas. Once plotted these
values will be displayed in the indicator window.
For 32nds:
INT(
C ) + ( ( FRAC( C ) / .03125 ) / 100 )
For
64ths:
INT(
C ) + ( ( FRAC( C ) / .015625 ) / 100 )
**Where
C is for the security's closing price and can be replaced
with O, H, or L for the open, high, or low price instead.
(Go
Top) |
The
following formula will calculate the correlation of the
Close and the MACD. It is written using a "long form" MACD
so that the time periods used by the MACD may be changed.
This indicator shows "divergence" between the close and
the indicator:
In
the Windows versions of MetaStock the formula is:
Correl(((Sum(Cum(1)*(Mov(C,12,E)-Mov(C,26,E)),100))-(Sum(Cum(1),100)*
Sum((Mov(C,12,E)-Mov(C,26,E)),100)/100))/((Sum(Power(Cum(1),2),100))-
(Power(Sum(Cum(1),100),2)/100)),((Sum(Cum(1)*C,100))-(Sum(Cum(1),100)*
Sum(C,100)/100))/((Sum(Power(Cum(1),2),100))-(Power(Sum(Cum(1),100),2)/100)),12,0)
The
interpretation of the indicator output is as follows:
-
-
.08 (80%) and lower is divergence between the Close
and the MACD.
- 1 is very strong divergence.
+ 1 is very strong correlation.
The
formula was constructed this way so that most other indicators
may be used in place of the MACD.
For
example here is the same indicator using the RSI(14)
Correl(((Sum(Cum(1)*(RSI(14)),100))-(Sum(Cum(1),100)*
Sum((RSI(14)),100)/100))/((Sum(Power(Cum(1),2),100))-(Power(Sum(Cum(1),100),2)/100)),
((Sum(Cum(1)*C,100))-(Sum(Cum(1),100)*Sum(C,100)/100))/((Sum(Power(Cum(1),2),100))-
(Power(Sum(Cum(1),100),2)/100)),12,0)
(Go
Top) |
In
July 1996 Futures magazine, E. Marshall Wall introduces
the Dynamic Momentum Oscillator (Dynamo). Please refer to
this article for interpretation.
He
describes the Dynamo Oscillator to be:
Dynamo
= Mc - ( MAo - O )
where
Mc = the midpoint of the oscillator
MAo = a moving average of the oscillator
O = the oscillator
This
concept can be applied to most any oscillator to improve
its results.
For
example:
Applying
the Dynamo Oscillator to a 5-period %K slowed 3 periods
Stochastic Oscillator would give:
50-(Mov(Stoch(5,3),21,S)-Stoch(5,3))
where:
Mc = Stochastic Oscillator's midpoint = 50
MAo = Moving average of the Stochastic = Mov(Stoch(5,3),21,S
O = Stochastic Oscillator = Stoch(5,3)
This
example applies it to an RSI oscillator:
50-(Mov(RSI(14),21,S)-RSI(14))
where:
Mc = RSI's midpoint = 50
MAo = Moving average of the RSI = Mov(RSI(14),21,S
O= RSI Oscillator = RSI(14)
(Go
Top) |
Derivative
Moving Average
The information for this test was published
in the June 1996 issue of "Technical Analysis of Stocks
and Commodities". The test appears in the article "The
Derivative Moving Average" by Adam White, page 18.
Mr. White describes this test as using a variation of the
"tried-and-true simple moving average for entry signals
and the "trend analysis index" for exit signals.
Note, first you need to create a new indicator called TAI,
using the TAI formula below - then create the new system
test.
Signal
Formulas |
Enter
Long:
When(Ref(Mov(C,28,S),-1),=,LLV(Mov(C,28,S),4)) |
Close
Long:
When(Fml("TAI"),<,0.4) AND When(Ref(Fml("TAI"),-1),>=,0.4) |
|
TAI
Formula |
((HHV(Mov(C,28,S),5)-LLV(Mov(C,28,S),5))/C)*100 |
|
(Go
Top) |
If
you have Metastock formulas you would like to share,
Please email to
We look forward to hearing from you!
To learn
more about how to use Metastock and its formula click
here.
copyright
2003 MetaStock Website Home
Metastock®
is a registered trademark of Equis International.
|