Metastock
Formulas
 P
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 StepByStep
 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 
sqrt(((buyp()/sellp())/rsi(2)))
> ref(((buyp()/sellp())/rsi(2)),1)
(Go
Top) 
Stocks
sorted on % gains over 1, 2, 3, 4, and 5 days. Rank results
for the selected day. Good for finding breakout stocks.
 CLOSE
 ROC(CLOSE,1,percent)
 ROC(CLOSE,2,percent)
 ROC(CLOSE,3,percent)
 ROC(CLOSE,4,percent)
 ROC(CLOSE,5,percent)
(Go
Top) 
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
(Go
Top) 
Chaikin's
Money Flow is a builtin MetaStock indicator, as follows:
cmf(periods)
Persistence of Money Flow (PMF%)
Pds1:= Input("CMF Periods?",1,100,21);
Pds2:= Input("PMF Periods?",10,1000,120);
Sum((cmf(Pds1)>0),Pds2)/(Pds2/100)
{from HHP}
Persistence or (PMF%) is the percentage of days over 6 months
that the Chaikin Money Flow Oscillator is above 0. The Chaikin
Money Flow Oscillator formula default uses a 21 day money
flow sum divided by the 21 day sum of daily volume. HHP
sent the correct indicator formula for persistence, tho
you can modify it by selecting 1 for "Pds1" if you prefer
to create a 120 day cumulative money flow indicator to do
what you are suggesting. The cumulative money flow indicator
often uses a 90SMA trigger.
(Go
Top) 
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.
(Go
Top) 
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.
The formula below may be close to what you want, but it
will not plot on the forward day. It will just plot the
point where tomorrow's EMA would be. The equation is based
on the MetaStock manual, page 459, concerning exponential
moving averages.
TC:=Input("Tomorrow's close",0.001,1000,1);
MAP:=Input("Moving Average Period",2,144,55);
MA1:=Mov(C,MAP,E);
EPX:=2/(MAP+1);
MA2:=(TC*EPX)+(MA1*(1EPX));
ValueWhen(1,Cum(1)=LastValue(Cum(1)),MA2)
(Go
Top) 
(a
tweaked version of the Darvis Box)
Periods:=Input("periods",1,260,100);
Topbox:=If(Ref(H,3)>=Ref(HHV(H,Periods),4)
AND Ref(H,2)<Ref(H,3) AND Ref(H,1)<Ref(H,3) AND
H< Ref(H,3),Ref(H,3),PREVIOUS);
Botbox:=If(Ref(H,3)>=Ref(HHV(H,Periods),4)
AND Ref(H,2)<Ref(H,3) AND Ref(H,1)<Ref(H,3) AND
H< Ref(H,3),LLV(L,4),PREVIOUS);
Botbox;
Topbox;
(Go
Top) 
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 intraday momentum (CO), Late Selling Pressure (LSP)
(CL), and Late Buying Pressure (LBP) (CH). The formula
is proven by constructing ideal limitup 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
((CO)+(CH)+(CL))/2
(Go
Top) 
Shows
stocks where the price increased 5% and the volume is 50%
above a 50day moving average. Rank results by % change
in price, then check the volume.
 CLOSE
 Ref(CLOSE,1)
 ROC(CLOSE,1,percent)
 VOLUME
 Mov(VOLUME,50,EXPONENTIAL)
 ((VOLUME
 Mov(VOLUME,50,EXPONENTIAL)) /Mov(VOLUME,50,EXPONENTIAL))
* 100
 **When(colC
>= 5) AND When(colD >= colE*1.5)
(Go
Top) 
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: KST1
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 KST1
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)
(Go
Top) 
From
"Lyn Maine"
This is
Tom DeMark's Projected Range:
TPH1:=(H+C+2*L)/2L;
TPH2:=(2*H+L+C)/2L;
TPH3:=(H+L+2*C)/2L;
TPL1:=(H+C+2*L)/2H;
TPL2:=(2*H+L+C)/2H;
TPL3:=(H+L+2*C)/2H;
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+(1SC*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+(1SC*K)*Ref(C,1);
UpperBand:=Vidya+2*.5*K;
LowerBand:=Vidya2*.5*K;
UpperBand;
LowerBand;
Vidya;
This is Tushar Chande's target price:
A:=Mov(Abs(CRef(C,1)),10,S);
TPH1:=C+A;
TPH2:=C+(2*A);
TPL1:=CA;
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(HL)*1.75)),((H(HL)*2.33))),((H(HL)*3.5))),(H(HL)))
This is rule of 7 up objective:
If((ROC(C,12,%)>1.5),If((ROC(C,12,%)>3),
If((ROC(C,12,%)>4.5),(((HL)*1.75)+L),(((HL)*2.33)+L)),(((HL)*3.5)+L)),((HL)+L))
This is rule of 7 Osc:
Fml("Rule of 7 UP Objective") 
Fml("Rule of 7 DOWN Objective")
This is %f Osc:
100*((CRef(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))
(Go
Top) 
(oscp(1,30,E,%))
(Go
Top) 
To
plot Alpha and Beta in MetaStock follow the steps below.
**The custom indicator named Beta is required to plot Alpha.
In
the Windows versions of MetaStock:
To
plot Alpha:

Create
the custom formulas Alpha and Beta (see below for formula
syntax).

Open
a chart of the desired security.

Drag
the price plot of the index you are comparing, into
the chart of the security and close the chart of the
index. **Maximize the security chart if needed.

Drag
the custom indicator Alpha from the Quick List and drop
it onto the price plot of the index. **The index plot
will turn a purplish color when you are plotting on
top of it.
**Note,
this formula is set to calculate Alpha over 21 periods.
To change the time periods replace each instance of 21 in
the formula with the desired number of periods and also
change the time periods in the Beta custom indicator.
(
Sum( ROC( CLOSE ,1 ,% ) ,21 )  ( Fml( "Beta" ) * Sum( ROC(
INDICATOR,1,%) ,21 ) ) ) / 21
To
plot Beta:

Open
a chart of the desired security.

Drag
the price plot of the index your comparing, into the
chart of the security.

Drag
this custom indicator from the Quick List and drop it
onto the price plot of the index.
Note,
this formula is set to calculate beta over 21 periods. To
change the time periods replace each instance of 21 in the
formula with the desired number of periods.
(
( 21 * Sum( ROC( CLOSE ,1 ,% ) * ROC( INDICATOR ,1 ,% )
,21 ) ) 
(
Sum( ROC( CLOSE ,1 ,% ) ,21) * Sum( ROC( INDICATOR ,1 ,%
) ,21 ) ) ) /
(
(21 * Sum( Pwr( ROC( INDICATOR ,1 ,% ) ,2 ) ,21 ))  Pwr(
Sum( ROC( INDICATOR ,1 ,% ) ,21 ) ,2 ))
**Beta
is a measure of volatility of one security against another.
This is typically used to measure the volatility of a stock
against an index like the S&P 500. A value greater than
one indicates the stock is more volatile than the index.
(Go
Top) 
The
January 1994 issue of Stocks & Commodities featured
an article by Hans Hannula on Polarized Fractual Efficiency.
Here is the custom formula for creating the fiveperiod
smoothed 10day PFE using MetaStock:
Mov(If(C,>,Ref(C,9),Sqr(Pwr(Roc(C,9,$),2)
+ Pwr(10,2)) /
Sum(Sqr(Pwr(Roc(C,1,$),2)+1),9),
Sqr(Pwr(Roc(C,9,$),2) + Pwr(10,2)) /
Sum(Sqr(Pwr(Roc(C,1,$),2)+1),9))*100,5,E)
(Go
Top) 
if(ref(oscp(3,15,S,%),1),<,0,1,0)
(Go
Top) 
Taken
from Stocks & Commodities, V. 12:6 (235239): PriceVolume
Rank by Anthony J. Macek
"Imagine
receiving a warning when the market was likely to collapse
or being alerted when one of your favorite stocks was about
to rally. What if these signals came from analysis that
was simple enough to do without a computer and took only
a few minutes a day to update, using just two pieces of
information found in virtually any newspaper? Is this a
dream? Maybe not. Anthony Macek explains.
The
old adage about keeping things simple applies even to the
investment world. Methods of analysis such as polarized
fractal efficiency and price oscillator divergences do a
great job, but for those with neither the time nor the inclination
to master the techniques necessary to monitor every blip
and sputter that the market produces may be served just
as well by noting only two very important market variables:
price and volume."
For
interpretation refer to the June 94 issue of Technical
Analysis of Stocks & Commodities.
You
need to create all of the following custom formulas in order
for the PV Rank to calculate properly.
PV
Rank:
Fml( "PV1" ) + Fml( "PV2" )
PV1:
If( C ,> ,Ref( C ,1 ) ,If( V ,> ,Ref( V ,1 ) ,1
,If( V ,< ,Ref(V ,1 ) ,2 ,0 ) ) ,0 )
PV2:
If( C ,< ,Ref( C ,1 ) ,If( V ,< ,Ref( V ,1 ) ,3
,If( V ,> ,Ref( V ,1 ) ,4 ,0 ) ) ,0 )
PV
Biggie: (This combines all formulas into one formula)
If( C ,> ,Ref( C ,1 ) ,If( V ,> ,Ref( V ,1 ) ,1
,If( V ,< ,Ref( V ,1 ) ,2 ,0 ) ) ,If( C ,< ,Ref(
C ,1 ),If( V ,< ,Ref( V ,1 ) ,3 ,If( V ,> ,Ref(
V ,1 ) ,4 ,0 ) ) ,0 ) )
(Go
Top) 
{Fast
line}
Mov((PVT()LLV(PVT(),19))/
(HHV(PVT(),19)LLV(PVT(),19)), 5, S)
{Slow Line}
Mov(Mov((PVT()LLV(PVT(),19))/
(HHV(PVT(),19)LLV(PVT(),19)), 5, S),3,S)
(Go
Top) 
To
recreate the Pathfinder currency trading system (described
in the October 1996 interview with Nelson Freeburg) in MetaStock
for Windows, open two charts, one of the desired currency
and the other of Treasury bonds. For this example, I used
the Swiss Franc. Choose Tile from the Window menu so both
charts are visible. Drag the Tbonds price bar and drop
it on the heading of the currency chart. Your currency chart
should now have Tbonds plotted in the top inner window
of the chart. Click on the Tbonds plot in the currency
chart so it's selected (that is, little squares appear on
the price bars). You will need to select the Tbonds plot
each time before running a system test. The selected plot
tells the MetaStock System Tester what to use for "P". Next,
choose System Tester from the Tools menu, and then New to
create a new system. Enter the following system rules, stops,
and options and then run the test.
Signal
Formulas 
Enter
Long:
Mov(C,6,S) > Ref(Mov(C,6,S),1) AND
Mov(P,3,S) > Mov(P,25,S) AND
Alert(Cross(Mov(C,9,S),Mov(C,18,S)),10) 
Close
Long
Cross(Mov(C,18,S),Mov(C,9,S)) 
Enter
Short
Mov(C,6,S) < Ref(Mov(C,6,S),1)
AND
Mov(P,3,S) < Mov(P,25,S) AND
Alert(Cross(Mov(C,18,S),Mov(C,9,S)),10) 
Close
Short
Cross(Mov(C,9,S),Mov(C,18,S)) 

Stops 
Maximum
Loss Stop:
Long and short positions
Maximum loss of 0.016 points. 

 Initial
equity Points Only
 Positions:
Long and short
 Trade
price: Open
 Trade
delay: 1
Note
that the maximum stop loss amount should be changed to 0.032
for the British Pound and 0.02 for the Australian and Canadian
dollars when testing these contracts.
(Go
Top) 
by
Glenn Wallace
 Futures Magazine, Vol.29 No.6, June 2000, P.48
There was an overbought/oversold indicator described in
the June 2000 Futures Magazine called the Psychological
Index. It looked sort of interesting, so I wrote the MetaStock
code for it:
LookBack:= Input("Number of lookback periods",
2, 100, 12);
UThreshold:= Input("Upper threshold (%)", 0, 100,
75);
LThreshold:= Input("Lower threshold (%)", 0, 100,
25);
UpDay:= If(CLOSE > Ref(CLOSE,1), 1, 0);
PsychIndex:= Sum(UpDay,LookBack) / LookBack * 100;
PsychIndex; UThreshold; LThreshold
(Go
Top) 
{
Chart periodicity detector }{ References indicator "Calendar
Week counter" }{ ©Copyright 20032004 Jose Silva
}{ [email protected] }
dummy:=Input("Chart detected: (1) Daily,
(2) Weekly, ",0,0,0);
dummy:=Input(" (3) Monthly, (4) Quarterly,
(5) Yearly",0,0,0);
Wk:=Fml("Calendar Week counter");
{FortnightCount:=Int((Wk+1)/2);}
m:=Month();
Mth:=Cum(m<>ValueWhen(2,1,m));
q:=If(m=1 OR m=2 OR m=3,1,
If(m=4 OR m=5 OR m=6,2,
If(m=7 OR m=8 OR m=9,3,4)));
Qtr:=Cum(q<>ValueWhen(2,1,q));
Yr:=Cum(Year()<>ValueWhen(2,1,Year()));
chart:=If(LastValue(Cum(Wk=ValueWhen(2,1,Wk)))=0,2,1);
chart:=If(LastValue(Cum(Mth=ValueWhen(2,1,Mth)))=0,3,chart);
chart:=If(LastValue(Cum(Qtr=ValueWhen(2,1,Qtr)))=0,4,chart);
chart:=If(LastValue(Cum(Yr=ValueWhen(2,1,Yr)))=0,5,chart);
chart
Periodicity detector app example
{Chart periodicity detector application example}{Automatically
adjusts EMA to chart periodicity}{ References indicator
"Calendar Week counter" }{ ©Copyright 20032004
Jose Silva }{ [email protected] }
Wk:=Fml("Calendar Week counter");
{Frt:=Int((Wk+1)/2);}
m:=Month();
Mth:=Cum(m<>ValueWhen(2,1,m));
q:=If(m=1 OR m=2 OR m=3,1,
If(m=4 OR m=5 OR m=6,2,
If(m=7 OR m=8 OR m=9,3,4)));
Qtr:=Cum(q<>ValueWhen(2,1,q));
Yr:=Cum(Year()<>ValueWhen(2,1,Year()));
chart:=If(LastValue(Cum(Wk=ValueWhen(2,1,Wk)))=0,2,1);
chart:=If(LastValue(Cum(Mth=ValueWhen(2,1,Mth)))=0,3,chart);
chart:=If(LastValue(Cum(Qtr=ValueWhen(2,1,Qtr)))=0,4,chart);
chart:=If(LastValue(Cum(Yr=ValueWhen(2,1,Yr)))=0,5,chart);
pds:=Input("daily EMA periods",1,25200,126);
x:=Input("use Open=1 High=2 Low=3 Close=4 Volume=5
P=6",1,6,6);
shift:=1+Input("EMA vertical shift %",
100,100,0)/100;
plot:=Input("EMA=1, Crossover signals=2",1,2,1);
x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,If(x=6,P,C)))));
pds:=If(chart=1,pds,If(chart=2,pds/5,
If(chart=3,pds/21,If(chart=4,pds/63,pds/252))));
pds:=If(pds<1,1,pds);
pds:=If(pds>Cum(IsDefined(x)),
Cum(IsDefined(x)),pds);
Ema:=x*2/(pds+1)+PREV*(12/(pds+1));
Ema:=Ema*shift;
signals:=Cross(x,Ema)Cross(Ema,x);
If(plot=2,signals,Ema)
Calendar Week counter
{ Week counter v2.0, Gregorian calendar }{ Count is independent
of any missing chart data }{ ©Copyright 20032004 Jose
Silva }{ [email protected] }
limit:=2000; {do not change limit year}
LimLeap:=Frac(limit/4)=0 AND Frac(limit/100)<>0
OR Frac(limit/400)=0;
NoCount:=limit*365+Int(limit/4)
Int(limit/100)+Int(limit/400)LimLeap;
leap:=Frac(Year()/4)=0 AND Frac(Year()/100)<>0
OR Frac(Year()/400)=0;
y:=Year()*365+Int(Year()/4)
Int(Year()/100)+Int(Year()/400)NoCount;
m:=
If(Month()=2,31leap,
If(Month()=3,59,
If(Month()=4,90,
If(Month()=5,120,
If(Month()=6,151,
If(Month()=7,181,
If(Month()=8,212,
If(Month()=9,243,
If(Month()=10,273,
If(Month()=11,304,
If(Month()=12,334,
leap)))))))))));
DayNr:=y+m+DayOfMonth();
WkCount:=Int((DayNr1)/7)+(Year()>=limit);
WkCount
(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.
