Professional Documents
Culture Documents
Code Snippets
&
How To’s
David Jennings
The Performance Factory
1
http://slidepdf.com/reader/full/formule-metastock 1/554
8/6/2019 Formule - Metastock
2
http://slidepdf.com/reader/full/formule-metastock 2/554
8/6/2019 Formule - Metastock
AIQ CODE..............................................................................................................................................9
CANDLESTICKS ....................................................................................................................................9
CANDLESTICK COLOUR STUDY ............................................................................................................9
ATE OF HANGE
R ONEY M
M CANAGEMENT
.................................................................................................................................9
EXITS ............................................................................................................10
MACDI EXIT RULES ...........................................................................................................................10
CONDITIONAL RULES-SELLING PRESSURE ...................................................................................11
MOMENTUM .......................................................................................................................................12
VIDYA - TUSHAR CHANDE ...............................................................................................................13
SECTOR MOVEMENT...........................................................................................................................13
PRICE /VOLUME CRITERIA?.................................................................................................................17
HIGH JUMP CANDIDATE SELECTION ...................................................................................................17
VOLUME SPIKE ...................................................................................................................................18
VARIABLE PROFIT PROTECT STOP, LOSS STOP AND TIME STOP .........................................................19
BUY FOR STOCKS IN A SECTOR ...........................................................................................................20
BOLLINGER BANDS ............................................................................................................................20
LINEAR
INEAR REGRESSION
REGRESSIONCALCULATION
METHOD BASED USING THE LEAST
INDICATORS MEANS SQUARED METHOD ...........................21
............................................................................21
SECTOR DIVERGENCE .........................................................................................................................22
COUNTOF............................................................................................................................................23
ATR AND WILDER’S RSI ...................................................................................................................23
RELATIVE STRENGTH .........................................................................................................................24
RECURSION.........................................................................................................................................25
METASTOCK CODE..........................................................................................................................28
PRIMARY BUY SIGNAL .......................................................................................................................28
PRIMARY SELL SIGNAL ......................................................................................................................28
MARKETSPACE STOCK SYSTEM .........................................................................................................28
Primary Buy Signal.......................................................................................................................28
Primary
SMOOTH Sell Signal.......................................................................................................................29
STOCKS ................................................................................................................................29
Bressert Cycle Indicators..............................................................................................................30
EXPLANATION OF THE MCCLELLAN OSCILLATOR ..............................................................................31
THRUST OSCILATOR:..........................................................................................................................31
MIDAS VOLUME WEIGHTED AVE PRICE-SUPPORT / RESIST ...............................................................32
STOCHASTIC CROSS TRADING SYSTEM .................................................................................33
TSI AND ERGODICS INDICATORS..............................................................................................33
Trading Ergodics with the Trend – Rules ..................................................................................... 34
RELATIVE STRENGTH OF STOCK TO INDEX ..........................................................................34
FIND RSI ABOVE 80.......................................................................................................................36
KASE DEV STOP .................................................................................................................................36
WOLF WAVE PATTERNS..............................................................................................................36
THE MARKET FACILITATION INDEX ...................................................................................................37
TRUE STRENGTH INDEX..............................................................................................................38
GANN SWING HILOW ACTIVATOR......................................................................................................41
RUGGERIO'S TREND ............................................................................................................................42
AUTOMATIC METASTOCK TRENDLINE FORMULA...............................................................................42
THE RECURSIVE MOVING TREND AVERAGE.......................................................................................44
THREE INSIDE DAYS .................................................................................................................... 49
NR4 FORMULA...................................................................................................................................50
MOVAVG ASYMMETRIC VOLATILITY PRICE BANDS ..........................................................................58
REGRESSION ASYMMETRIC VOLATILE PRICE BAND ...........................................................................58
WRO AND WSO INDICATORS ..........................................................................................................152
BODY MOMENTUM.....................................................................................................................158
ST OSCILLATOR...........................................................................................................................159
LOOKBACK ......................................................................................................................................160
JACK LANDIS' WEIGHTED STOCHASTIC (SHORTENED TO LANDIS).....................................................163
3
http://slidepdf.com/reader/full/formule-metastock 3/554
8/6/2019 Formule - Metastock
4
http://slidepdf.com/reader/full/formule-metastock 4/554
8/6/2019 Formule - Metastock
ATR MODIFIED.............................................................................................................................283
HIGHEST HIGH SINCE BUY SIGNAL........................................................................................283
MINER’S STORSI..............................................................................................................................284
FORECAST OSCILLATOR SYSTEM ALTERNATIVE..............................................................287
MURREY MATH ................................................................................................................................287
ZI GZAG CODE..............................................................................................................................289
TRADE EQUITY AND TRADE STOP FORMULA UPDATE .......................................................................292
SO MUCH FOR QUICK FIXES. MY THANKS TO DAVID HOBBS FOR
LETTING ME KNOW THAT MY 'ND' VARIABLE FIX WAS ALSO FLAWED.
I'LL TRY AGAIN. IF YOU HAVE VERSION 3.X TRADE EQUITY OR TRADE
STOP FORMULAS WITH AN 'ND' THAT LOOKS LIKE EITHER OF THE LINES
BELOW, ND:=LASTVALUE(INT(FRAC(CP/100)*10)); OR
ND:=LASTVALUE(INT(FRAC(CP/99)*10)); THEN IT SHOULD BE CHANGED
TO ND:=LASTVALUE(INT(0.1+FRAC(CP/100)*10)); HOPEFULLY THIS WILL
FIX THE PROBLEM ONCE-AND-FOR-ALL. ...................................................................297
LATCHES ..........................................................................................................................................297
TRADESTATION CODE..................................................................................................................302
SLOWKCLASSIC ...............................................................................................................................302
MACD HISTOGRAM.........................................................................................................................302
HIGH OF TODAY ................................................................................................................................303
MACD CROSSOVER CHART .............................................................................................................304
COLES’S RANGE ...............................................................................................................................304
INDICATOR COLE'S RANGE DAILY ....................................................................................................305
8 PERIOD DONCHIAN CHANNEL MID-POINT LINE .............................................................................305
INDICATOR SUPP-RESIS DAILY ........................................................................................................305
ANDREW’S PITCHFORK.....................................................................................................................307
E-MINI WITH MONTE CARLO ...........................................................................................................311
HURST EXPONENT ............................................................................................................................313
ERGOTIC CSI....................................................................................................................................314
ERGOTIC MACD ..............................................................................................................................315
ENTRY & EXIT .................................................................................................................................316
STOPS IN EDS ................................................................................................................................317
TRIGGERS BASED ON ENTRY PRICES ..................................................................................................318
COUNT OF ........................................................................................................................................318
COMPARE TWO INDICES ...................................................................................................................318
COLOUR STUDIES .............................................................................................................................319
RECURSION.......................................................................................................................................320
DIFFERENT RESULTS IN TRADESTATION ..........................................................................................325
SIGNAL REVIEW – UPSIDE ................................................................................................................326
3 BAND RESEARCH SYSTEM .............................................................................................................326
MARKET PROFILE .............................................................................................................................327
T BOND SYSTEM ..............................................................................................................................334
HIGHER HIGHS...................................................................................................................................334
INDICATOR MARKS ..........................................................................................................................335
YESTERDAY’S HIGH LOW ON AN INTRADAY CHART ........................................................................336
TO COUNT THE NUMBER OF NEW HIGHS IN THE LAST N BARS ............................................................336
COMMENTARY FUNCTION ................................................................................................................337
NO PLOT() STATEMENT ....................................................................................................................338
NUMERICAL ACCURACY...................................................................................................................340
TRADESTATION: RELATIVE VIGOR INDEX ..........................................................................340
STOPS ...............................................................................................................................................341
ADAPTIVE STOP................................................................................................................................341
LINE THICKNESS WON’T RESPOND ..................................................................................................342
TEXT STUDIES ..................................................................................................................................342
@Text Current C <= .................................................................................................................. 344
5
http://slidepdf.com/reader/full/formule-metastock 5/554
8/6/2019 Formule - Metastock
@TextCurrentCText....................................................................................................................344
@TextCurrentIndic..................................................................................................................... 345
TRADESTATION INSTABILITY ...........................................................................................................346
OTHER HOW TO’S .......................................................................................................................... 347
TS4 INSTALLATION ON WIN 2K ........................................................................................................349
ATR DISCUSSION .............................................................................................................................355
CODING VELOCITY AND ACCELERATION ...........................................................................................356
WEALTHSCRIPT CODE.................................................................................................................357
DEAD CAT CATCHER ........................................................................................................................357
INTRADAY........................................................................................................................................358
WEALTHSCRIPT CODE ......................................................................................................................358
WEALTHSCRIPT CODE.................................................................................................................360
TURTLE SOUP WITH FILTER ..............................................................................................................360
WEALTHSCRIPT CODE ......................................................................................................................361
MULTI COLOUR MA ETC..................................................................................................................363
DIVERGENCE BETWEEN PRICE AND RSI OR MACD HISTO...? ...........................................................364
CHECK PEAK & CHECK VALLEY ......................................................................................................368
MOVING AVERAGES .........................................................................................................................371
FIBONACCI FORMULAS .....................................................................................................................373
JOE DINAPOLI - DINAPOLI TREND FORMULA ...................................................................................376
FORECAST OSCILLATOR ...................................................................................................................390
CHANDE'S DYNAMIC MOMENTUM INDEX.........................................................................................392
ADAPTIVE SYSTEMS .........................................................................................................................394
ON BALANCE VOLUME.....................................................................................................................399
BOOK LIST........................................................................................................................................401
GANN ...............................................................................................................................................401
LIST OF BOOKS AND COURSES:..........................................................................................................401
RWI ................................................................................................................................................. 405
KNEWPEAKINDICATOR ............................................................................................................... 406
KCD INDICATOR.............................................................................................................................407
KPERM FN.........................................................................................................................................408
PERMISSION STOCHASTIC..........................................................................................................414
6
http://slidepdf.com/reader/full/formule-metastock 6/554
8/6/2019 Formule - Metastock
XPERM LONG...................................................................................................................................414
XD ........................................................................................................................................................415
KDEVSTOPS......................................................................................................................................416
XDEV...................................................................................................................................................417
XREV...................................................................................................................................................417
DEMARK EXPERT...........................................................................................................................420
ZIG ZAG TREND INDICATOR .............................................................................................................423
Expressing Exponential averages in days...................................................................................428
FIBONACCI FORMULAS .....................................................................................................................442
JOE DINAPOLI - DINAPOLI TREND FORMULA ...................................................................................444
FORECAST OSCILLATOR ...................................................................................................................457
CHANDE'S DYNAMIC MOMENTUM INDEX.........................................................................................460
ADAPTIVE SYSTEMS .........................................................................................................................461
ON BALANCE VOLUME.....................................................................................................................466
MARKET COMMENTARY...................................................................................................................467
ACTIVE TRADER MAGAZINE CODE ..................................................................................................468
ROSS CONGESTION PAINTBAR. ......................................................................................................... 489
NARROW RANGE 4 (NR4) DAYS ......................................................................................................490
NARROW RANGE 7 (NR7) DAYS ......................................................................................................491
HISTORICAL VOLATILITY .................................................................................................................492
BOLLINGER BANDS ..........................................................................................................................493
OUTSIDE DAY, NR4 AND MOVING AVERAGE ..................................................................................494
NR7, INSIDE DAY AND BOLLINGER BAND .......................................................................................495
STOWELL’S THREE-BAR NET LINE .....................................................................................................499
NONLINEAR EHLERS FILTER .............................................................................................................505
NEW MARKET PARADIGM SYSTEM ....................................................................................................508
BETTER BOLLINGER BANDS BY DENNIS MCNICHOLL ......................................................................510
KLINGER VOLUME OSCILLATOR ......................................................................................................512
TPF_REVERSAL2002 .......................................................................................................................514
{MARKET DIRECTION}.....................................................................................................................517
REAL TIME PIVOT 2000....................................................................................................................518
VOLATILITY STOP INDICATOR ..........................................................................................................519
CLUSTER 20000................................................................................................................................521
REVERSAL INDICATOR ......................................................................................................................522
HI LO PIVOTS ...................................................................................................................................523
INTRADAY HI LO .............................................................................................................................524
PB LONG ..........................................................................................................................................525
PB SHORT ........................................................................................................................................527
RUBBER BAND2................................................................................................................................529
SFD..................................................................................................................................................530
SFK..................................................................................................................................................531
SSD..................................................................................................................................................531
CLUSTER VOLATILITY STOP – USES CLUSTER 2000 AS A FUNCTION .................................................532
CLUSTER 2000.................................................................................................................................534
7
http://slidepdf.com/reader/full/formule-metastock 7/554
8/6/2019 Formule - Metastock
8
http://slidepdf.com/reader/full/formule-metastock 8/554
8/6/2019 Formule - Metastock
AIQ Code
C
ANDLESTICKS
C
ANDLESTICK C OLOUR STUDY
!Colour Study
GreenCandle if ([Open]<=[Close]).
RedCandle if ([Open]>[Close]).
GreenBar if ([close]>=val([close],1)).
RedBar if ([close]<val([close],1)).
Island reversal
!==================================================
lowbody is min([open],[close]).
highbody is max([open],[close]).
gapup if valresult(lowbody,1) > valresult(highbody,2).
gapdn if valresult(lowbody,1) < highbody.
islandReversal if gapup and gapdn.
!===================================================
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
R ATE OF C HANGE
9
http://slidepdf.com/reader/full/formule-metastock 9/554
8/6/2019 Formule - Metastock
roc is (([close]-closexago)/closexago)*100.
rocaverage is simpleavg(roc,21).
M ONEY M ANAGEMENT E XITS
!!! Exit
!!! 1) the position
a -25% when one
max stoploss of the following 4 events occurs first:
is reached,
!!! 2) or profit target is triggered when price hits the 5-day ESA,
!!! 3) or the 1-day MF RSI turns 0,
!!! 4) or at the close of day 4.
!!! If money management does not allow you to use a -25% stop loss, then use a
smaller limit. It will decrease overall
performance, but it will make you FEEL safer.
=============================================================
MACDI EXIT RULES
MACDXEXIT if
val([macd],2)< val([macd],1)
and val([macd],1)> val([macd],0)
and val([macd],1)>0
10
http://slidepdf.com/reader/full/formule-metastock 10/554
8/6/2019 Formule - Metastock
and val([macd],2)>0
and [macd]>0
and HiVal([Macd],20)=val([macd],1).
I did more work on this and now it works for all the stocks in my
database with look
back of 22 days-all of my stocks showed at least 4 up days in a 22
day look back
period from today:
!=============================
!Selling Pressure 4 day average in 22 day lookback:
ORg is [open]-[low].
UpC if [close]>val([close],1).
A1 is Sum(ORgUpC,4)/4.
A2 is Sum(ORgUpC,5)/4.
A3 is Sum(ORgUpC,6)/4.
A4 is Sum(ORgUpC,7)/4.
A5 is Sum(ORgUpC,8)/4.
A6 is Sum(ORgUpC,9)/4.
A7 is Sum(ORgUpC,10)/4.
A8 is Sum(ORgUpC,11)/4.
A9 is Sum(ORgUpC,12)/4.
A10 is Sum(ORgUpC,13)/4.
A11 is Sum(ORgUpC,14)/4.
A12 is Sum(ORgUpC,15)/4.
A13 is Sum(ORgUpC,16)/4.
A14 is Sum(ORgUpC,17)/4.
A15 is Sum(ORgUpC,18)/4.
A16 is Sum(ORgUpC,19)/4.
A17 is Sum(ORgUpC,20)/4.
A18 is Sum(ORgUpC,21)/4.
A19 is Sum(ORgUpC,22)/4.
Cup1 if countof(UpC,4)=4.
Cup2 if countof(UpC,5)=4.
Cup3 if countof(UpC,6)=4.
Cup4 if countof(UpC,7)=4.
Cup5 if countof(UpC,8)=4.
Cup6 if countof(UpC,9)=4.
Cup7 if countof(UpC,10)=4.
Cup8 if countof(UpC,11)=4.
Cup9 if countof(UpC,12)=4.
Cup10 if countof(UpC,13)=4.
Cup11 if countof(UpC,14)=4.
Cup12 if countof(UpC,15)=4.
Cup13 if countof(UpC,16)=4.
Cup14 if countof(UpC,17)=4.
Cup15 if countof(UpC,18)=4.
Cup16 if countof(UpC,19)=4.
Cup17 if countof(UpC,20)=4.
Cup18 if countof(UpC,21)=4.
11
http://slidepdf.com/reader/full/formule-metastock 11/554
8/6/2019 Formule - Metastock
CountUp is countof(UpC,22).
Avg4day is
iff(Cup1,A1,iff(Cup2,A2,iff(Cup3,A3,iff(Cup4,A4,iff(Cup5,A5,iff(Cup6,
A6,
iff(Cup7,A7,iff(Cup8,A8,iff(Cup9,A9,iff(Cup10,A10,iff(Cup11,A11,
iff(Cup12,A12,iff(Cup13,A13,iff(Cup14,A14,iff(Cup15,A15,iff(Cup16,A16
,
iff(Cup17,A17,iff(Cup18,A18,A19)))))))))))))))))).
GoodData if HasDataFor(255)>=252
and [close]>=5 and mover and notand expavg([volume],50)>3000
ScanAny(GapDown,20) and
resetdate() and
CountUp>=4.
GapDown if Val([low],1) - [high]>2.
List if 1=1.
M OMENTUM
! prdsys@pewd.com august 2000 www.pewd.com
! momentum indicator
! sources: TA from A-Z, S. Achelis www.equis.com/free/taaz/
! MarketTrack-MX user manual, page 10-16 (Track Data Corp)
12
http://slidepdf.com/reader/full/formule-metastock 12/554
8/6/2019 Formule - Metastock
VIDYA - T USHAR C
HANDE
Here's Vidya based on a 9-period CMO, or as close as we can get given > TEP's
limitations for recursive calculations. Change VidLen to vary > the > (nominal) length
of the moving average. As an indicator it is very > slow > to calculate, but is not bad
in a scan.
> > HHP
!=============================
!===================================
S ECTOR M OVEMENT
Steve, Quite correct to point out this market has no intrinsic worth of 5000 and the
trip back to that level may take years, I meant that because it is a long trip, I'm not in a
hurry to jump on the first train that leaves. There will be plenty of opportunity to
catch a tech wave or two. The sector rotation formula is very simple, but it has
backtested better than TS for the way I am using it. It mostly fires at the beginning of
a shift in leadership, and is best with 20 day holds or so. The gifs will show you what
it looks like, and it doesn't look very good because it fires for a few days and then
drops. It is only used to fire a good sector signal, the stock sell is based on stock
action, not a drop in the sector signal.
!==========================================================
13
http://slidepdf.com/reader/full/formule-metastock 13/554
8/6/2019 Formule - Metastock
14
http://slidepdf.com/reader/full/formule-metastock 14/554
8/6/2019 Formule - Metastock
attached are the action and weighted action reports, in eds, which is real
close to the system supplied reports (report module). change the constants
to match what you usually run on reports, and don't forget to change to
whatever list you want to run for (file/properties).
2 report tabs, 1 for wa report, another for the action report, both upside
versions. i didn't code the downside reports. and i should note, AIQ
wrote the original EDS - i just fixed it and modified it slightly, the
original work is AIQ's, not mine.
note that there are a few oddities in the wa report, not reflected in the
code - this version of the code matches the report as close as i can get it,
at least till the next time someone prompts me to look at it ;)
first oddity - wa report looks back x days, action report looks back x+1
days, for looking for an up er.
next item, in the report (and attached eds) the system does not look for a
phase reversal upside followed a day or 2 later by a reversal downside,
followed by another reversal up. it does make sure phase is currently going
up, but doesn't check for whipsaws (up/down/up). if i recall correctly, you
will occasionally see stocks on the weighted action report which have had a
upside phase reversal a few days ago, followed by a downside reversal a day
or 2 later, then another up. personally, i don't trade such stocks. your
15
http://slidepdf.com/reader/full/formule-metastock 15/554
8/6/2019 Formule - Metastock
mileage may vary, disclaimer, do what you will with it , i'm not liable (too
many lawyers in my family i guess :) )
the other thing i'm not checking for in the code is an up er followed a few
days later by a down er. an example would be yhoo - up er on 1/3, down er
on 1/11, yet its on the report. same comment as above. i disagree with the
report specs in this case - i don't want to see it if an up er has been
followed by a down one, regardless of current phase direction. others
however would view the down er as unconfirmed, and thus a non signal, due to
lack of down phase action, so they remain on the report. other versions of
this EDS that i've passed around in the past do check for an intervening
down er, and exclude such stocks - this version doesn't as i tried to match
the report. same disclaimer, check your charts before pulling the trigger.
! -----------------------------------------------------------------------------------------------
! eds to match weighted action report
! modified by pewd from original version supplied by AIQ
! check what settings you have on wt act rpt if youre trying to match this eds to the
report,
! eg., make sure youre running for the same list, price, and volume filters as on the wt.
act. report
!
! ER to upside 95 or greater last 10 days confirmed by change in direction of the Price
Phase indicator in the last 3 days.
!
! modifications to original (aiq) version:
! pewd 7/99 added price filter, $10 and up
! pewd 7/99 added volume filter, 100,000 shares and up
! pewd 7/99 changed up er lookback from 10 to 6
! pewd 7/99 corrected logic error in PhaseChangeUp test, eliminate stocks that turned
phase down on report date
! pewd 7/99 added 4th day to PhaseCHANGEUPup rule to match reports module
! pewd 7/99 added er, price, and a few other columns to report
! pewd 1/01 added action report tab, cleaned up my sloppy code from 99
!-------------------------
------------------------------------------------------------------------------------------------------
16
http://slidepdf.com/reader/full/formule-metastock 16/554
8/6/2019 Formule - Metastock
! report columns
!pewd july 99
UpER is hival([ER UP],nbrdays).
Exch is MarketCode().
Change is [close]-val([close],1).
Security_name is Description().
Trend is [TS].
DeltaTrend is [DTS].
GroupSymbol is TickerUDF(RSTicker(),Symbol()).
GroupName is TickerUDF(RSTicker(),Security_name).
GroupTS is TickerUDF(RSTicker(),Trend).
GroupDTS is TickerUDF(RSTicker(),DeltaTrend).
SectorSymbol is TickerUDF(RSTicker(),GroupSymbol).
SectorName is TickerUDF(SectorSymbol,Security_name).
SectorTS is TickerUDF(SectorSymbol,Trend).
SectorDTS is TickerUDF(SectorSymbol,DeltaTrend).
P RICE /V OLUME C
RITERIA?
H IGH J UMP C
ANDIDATE S ELECTION
I wrote the HighestHighJump scan and I use it just as you do to develop a list of
trading candidates.
17
http://slidepdf.com/reader/full/formule-metastock 17/554
8/6/2019 Formule - Metastock
After I programmed the indicator in AIQ, I noticed that some stocks got to much
higher HJ numbers than others. I also noticed that most of the High Growth stocks
that Ian (and William O'Neil) define by other means (eg EPS rank, RS and Group RS
etc) could be defined by a high peak readings in their maximum HJ levels. So I wrote
the scan that looks back and picks out the highest reading over a lookback period of
five years or less if less trading history. The ones with the highest readings were
always the high growth and/or momentum stocks. What this indicator does is measure
the ability of a stock to rise rapidly. The higher the reading the faster the stock
has been able to climb.
I am working on additional ways to develop trading lists and I will post more on this
when I have time. I asked other traders to propose how they would go about
developing
a short list of stocks. I received several good suggestions and I want to thank those
who contributed.
Here is the code for the HJ (but not the Highest High Jump) for those of you who are
wondering what it is:
V OLUME S PIKE
*******************
!ER is 95 or above within last 5 days
!Strength of Group is based on trend score , or high positive value for DTS
! P-Vol is higher than yesterday and todays P-Vol is higher than its ESA.
! Spike if volume is 50% above the ESA of volume
!Buy the stock when all rules are passed.
TS is [TS].
DTS is [DTS].
Description is Description().
GroupDTS is TickerUDF(RSTicker(),DTS).
GroupTS is TickerUDF(RSTicker(),TS).
Group is TickerUDF(RSTicker(),Description).
18
http://slidepdf.com/reader/full/formule-metastock 18/554
8/6/2019 Formule - Metastock
GroupTSHigh if GroupTS>90.
GroupDTSHigh if GroupDTS>20.
ERUP if HiVal([er up],5) >= 95.
PVolUP if VAL([P-Vol],1) < [P-Vol] and [P-Vol] > [P-Vol ESA] .
VolSpike if [volume] >= [volume esa] * 1.5.
BuyMid2 if HiVal([er up],5) >= 95 and PVolUP and VolSpike and (GroupTSHigh or
GroupDTSHigh)
***********************************
V
ARIABLE P ROFIT P ROTECT STOP , LOSS STOP AND T
IME STOP
19
http://slidepdf.com/reader/full/formule-metastock 19/554
8/6/2019 Formule - Metastock
Security_nameis Description().
GroupSymbol is TickerUDF(RSTicker(),Symbol()).
GroupName is TickerUDF(RSTicker(),Security_name).
Semiconductor if GroupSymbol="ETSEMMFG".
ComputerSoftware if GroupSymbol="CSSFTETR".
Internet if GroupSymbol="INECOMM".
ComputerHardware if GroupSymbol="CPMFGS".
Biotech if GroupSymbol="MDBIOGEN".
Buy IF Price AND Vol AND HighRange AND CCIup AND (semiconductor OR
ComputerSoftware OR Internet OR ComputerHardware OR Biotech).
BOLLINGER B ANDS
> =====================================
> varudf is [close].
> variance is Variance(varudf,21).
> stddev is Sqrt(Variance).
> ma is SimpleAvg(varudf,21).
>
> UpperBB is 2 * StdDev + ma.
> LowerBB is ma - 2 * StdDev.
> =======================================
Slope etc
While I am at it...here is something that is VERY valuable to your bag of EDS tricks.
It is the calculation used to calculate the internal function "slope". The math may be
way over some peoples heads,but the most important thing about having this is the
ability to calculate the INTERCEPT point!
Alan Nathan asked about doing Standard Deviation lines based on the linear
regression line. In order to do this you must have the intercept point. So I coded the
internal Slope function in EDS so you can now have this. I put together an EDS file
20
http://slidepdf.com/reader/full/formule-metastock 20/554
8/6/2019 Formule - Metastock
that does the math, and creates "bands" based on 2 standard deviations above/below
the intercept point of the linear regression line. I hope this is close to what Alan has
asked for. You can put UpperSD and LowerSD and Intercept as Custom Indicators
and plot the bands.
day is offsettodate(month(),day(),year())+1.
dayX2 is day * day.
sx is Sum(day,days).
sx2 is Sum(dayX2,days).
sy is Sum(varudf,days).
sxy is Sum( day * varudf ,days).
d is ( days * sx2) - (sx * sx).
slope is ((days * sxy) - ( sx * sy)) / -d. ! same result as internal Slope function
b is ((sx2 * sy) - (sx * sxy)) / d.
Intercept is slope + b.
all if 1.
21
http://slidepdf.com/reader/full/formule-metastock 21/554
8/6/2019 Formule - Metastock
S ECTOR D IVERGENCE
define slopelen 20. ! determine length of lookback for slope function to see if a
divergence in price
define divpct 15. ! set divergence percentage
Sym is symbol().
Desc is description().
GroupSym is TickerUDF( RSTicker(),symbol()).
SectorSym is TickerUDF( RSTicker(),groupsym).
22
http://slidepdf.com/reader/full/formule-metastock 22/554
8/6/2019 Formule - Metastock
C OUNTOF
================================================
Tom,
Rule is true if close is greater than the 20 day sma.
Now suppose you have two days in a row of closes above 20 day sma.
Rule will be true for today and also Rule will be true for yesterday.
Thus Countof(Rule,2) will = 2 (1 + 1). Thus, Countof(Rule,2)=1 will be
FALSE.
!==========================
!!! Average True Range.
!========================
PlusDM1 is [High] - Val([High], 1).
PlusDM2 is Max(PlusDM1, 0).
PlusDM is PlusDM2 * (PlusDM2 > MinusDM2).
AvgPlusDM is ExpAvg(PlusDM, 27).
23
http://slidepdf.com/reader/full/formule-metastock 23/554
8/6/2019 Formule - Metastock
!==========================
R ELATIVE STRENGTH
!Indicatior for ranking RS of stocks, groups or sectors (you can set these up a custom
indicators on the charts)
RS4 is SLOPE([RS Indx],4)*100.
RS9 is SLOPE([RS Indx],9)*100.
RS17 is SLOPE([RS Indx],17)*100.
RS50 is SLOPE([RS Indx],50)*100.
RS200 is SLOPE([RS Indx],200)*100.
RScomposit is RS17 + RS50 + RS200.
!Is trend up or down in various time frames? my settings are st=17, it=50, lt=200
STtrend is SLOPE([st ma],5).
ITtrend is SLOPE([it ma],5).
LTtrend is SLOPE([lt ma],5).
Description is description().
Group is TickerUDF(RSTicker(),Description).
Sector is TickerUDF(RSTicker(),Group).
24
http://slidepdf.com/reader/full/formule-metastock 24/554
8/6/2019 Formule - Metastock
R ECURSION
!*******************************************
MA Long Term:
Mov(C,30,E);
Mov(C,35,E);
Mov(C,40,E);
Mov(C,45,E);
Mov(C,50,E);
Mov(C,55,E);
MA Short Term:
Mov(C,5,E);
Mov(C,8,E);
Mov(C,11,E);
Mov(C,14,E);
Mov(C,17,E);
25
http://slidepdf.com/reader/full/formule-metastock 25/554
8/6/2019 Formule - Metastock
!***********************************************
ER is Dir / Vlty.
C is Smooth * Smooth.
!=====================
! EDS Recursion. Original coding by Dale Paul.
!========================
!! AMA Filter.
26
http://slidepdf.com/reader/full/formule-metastock 26/554
8/6/2019 Formule - Metastock
!=========================
27
http://slidepdf.com/reader/full/formule-metastock 27/554
8/6/2019 Formule - Metastock
MetaStock Code
P RIMARY BUY S IGNAL
C>Mov(C,5,E)
AND C>Mov(C,15,E),-1)=FALSE),-1))
>=
BarsSince(Ref(Cross(0.955*Ref(C,-2),C),-1))
P RIMARY S ELL S IGNAL
Cross(0.955*Ref(C,-2),C) AND
BarsSince(((MACD()>Mov(MACD(),9,E) AND C>Mov(C,5,E) AND
C>Mov(C,15,E))=TRUE) AND (Ref(MACD()>Mov(MACD(),9,E) AND
C>Mov(C,5,E)
AND C>Mov(C,15,E),-1)=FALSE))
<=
BarsSince(Ref(Cross(0.955*Ref(C,-2),C),-1))
and the MarketSpace Stock System which works with daily data.
M ARKET S PACE STOCK SYSTEM
28
http://slidepdf.com/reader/full/formule-metastock 28/554
8/6/2019 Formule - Metastock
S MOOTH STOCKS
David,
Following are two explorations which will find stocks with a high percentage of relatively
"smooth" stocks that have been trending up over the last a) three months and b) twelve
months.
In the Exploration Editor, put the following in one of the "columns":
(C - Ref(C,-252)) / Ref(C,-252) *100
This will give you the percentage gain over the last twelve months.
Some of the other columns could have the current closing price, average volume or whatever
has meaning to you.
In the Filter, put one of the following, depending on whether you want a three month trend or
a twelve month trend (or modify for some other period)
For three months:
(C / (1 + ((C - Ref(C,-64)) / Ref(C,-64))))
<=
(C / (1 + ((C - Ref(C,-21)) / Ref(C,-21))))
AND
(C
<= / (1 + ((C - Ref(C,-126)) / Ref(C,-126))))
29
http://slidepdf.com/reader/full/formule-metastock 29/554
8/6/2019 Formule - Metastock
After running
12 month the exploration,
gainers I sort
on top of the list. on theof
Many twelve monthincolumn
the stocks this list(Column B) to
(not all) will beget the biggest
"smooth"
gainers and momentum stocks. Then comes the question, how to make money from these
stocks?
Jim Dawson
-----Original Message-----
From: owner-metastock@metastock.com [mailto:owner-
metastock@metastock.com]On Behalf Of David DeFina
Sent: Friday, June 08, 2001 12:07 PM
To : METASTOCK@metastock.com; Metastockusers@yahoogroups.com
Subject: Finding "smooth" stocks?
I’m interested in identifying stocks that have “smooth” transitions up and down,
meaning when a stock is increasing day to day that the lows of the previous day
aren’t violated, and vice versa. Also, stocks that have a tendency to increase or
decrease multiple days rather than reversing all the time.
I know stocks don’t behave consistently all the time, but I’m looking to rank stocks
from a specific universe that have the propensity to trade smoothly. Any input would
be appreciated.
Thanks,
David DeFina
I saw that some were interested in the Bressert cycle indicators for use in Metastock.
Here is my implementation of the cycle 10 indicator; I have been using it for more
than one year as part of explorations. If you want the cycle 5, just substitute 5 for the
10 in the formulas.
Good luck I find these cycle indicators helpful.
The below should be installed as a custom indicator. It can then be used on charts and
called for in explorations.
30
http://slidepdf.com/reader/full/formule-metastock 30/554
8/6/2019 Formule - Metastock
E XPLANATION OF THE M C C LELLAN
OSCILLATOR
T
HRUST OSCILATOR:
AI:= Security("D:\Stocks\Market
Indicators\X.NASD-A",C);
AV:= Security("D:\Stocks\Market
31
http://slidepdf.com/reader/full/formule-metastock 31/554
8/6/2019 Formule - Metastock
Indicators\X.NASD-A",V);
DecI:= Security("D:\Stocks\Market
Indicators\X.NASD-D",C);
DecV:= Security("D:\Stocks\Market
Indicators\X.NASD-D",V);
TO:=(((AI*AV)-(DecI*DecV))/((AI*AV)+(DecI*DecV)))*100;
Periods1:=Input("length1",3,100,21);
Periods2:=Input("length2",3,100,5);
IND:=Mov(TO,Periods1,S);
sig:=Mov(IND,Periods2,S);
sig;
IND;
You will have to create securities of advancing issues,declining issues,advancing
volume, declining volume first then type in the directory where they are located
Henry kaczmarczyk
THRUST OSCILLATOR
From
MIDASP.67, TASC,
Volume May 2001
Weighted Ave Price-Support/resist.}
sm:=Input("Starting Month",1,12,1);
sd:=Input("Starting day of month",1,31,1);
sy:=Input("Starting year",1980,2100,2000);
start:= sd = DayOfMonth() AND sm = Month() AND sy = Year();
pv:= MP()*V;
denom:=If(Cum(V)-ValueWhen(1,start,Cum(V))=0,1,Cum(V)-
ValueWhen(1,start,Cum(V)));
If(BarsSince(start),(Cum(pv)-ValueWhen(1,start,Cum(pv)))/denom,MP())
32
http://slidepdf.com/reader/full/formule-metastock 32/554
8/6/2019 Formule - Metastock
QUESTION
How would I write a MetaStock System Tester for:
Buy: stoch(12,3) has fallen below 36 and then crosses above its 6 day WMA.
Sell: stoch(12,3) rises above 52 and then falls below its 3 day WMA OR 3 day WMA
of stoch crosses above 55.
ANSWER
stoch(12,3)<36 and cross(stoch(12,3),mov(stoch(12,3),6,w))
stoch(12,3)>52 and cross(mov(stoch(12,3),3,w),stoch(12,3)) or
mov(stoch(12,3),3,w)>55
33
http://slidepdf.com/reader/full/formule-metastock 33/554
8/6/2019 Formule - Metastock
1. Enter or hold position only when slope of Ergodic Signal line has the same
direction as the trend
2. Stand aside when slope of Ergodic Signal Line is in the opposite direction of trend
3. Enter or exit position when Ergodic and its Signal Line cross
Slow TSI Trend = TSI(close,64,64) {? weekly looking chart - very little lag}
Thresholds set at +15 & -15
Trading Ergodics with Slow TSI Trend
1st window - Slow TSI Trend = TSI(close,64,64)
2nd window - Ergodic Osc = TSI(close,64,5)
34
http://slidepdf.com/reader/full/formule-metastock 34/554
8/6/2019 Formule - Metastock
COL B:
A: ROC(C,
BarsSince(C>Ref(C,-1)) {NUMBER OF NEG. DAYS
LastValue(BarsSince(C>Ref(C,-1))),%) )
{PERCENT}
35
http://slidepdf.com/reader/full/formule-metastock 35/554
8/6/2019 Formule - Metastock
Col A: RSI(14)
Filter colA>=80
Filter enabled Yes
Periodicity Daily
Records required 18
K
ASE D EV STOP
Hi Lino,
Here is what I found for her Kase DevStop:
{Cynthia Kase}
Per1:=Input("Max Length",2,100,30);
RWH:=(H-Ref(L,-Per1))/(ATR(Per1)*Sqrt(Per1));
RWL:=(Ref(H,-Per1)-L)/(ATR(Per1)*Sqrt(Per1));
Pk:=Mov((RWH-RWL),3,W);
AVTR:=Mov(HHV(H,2) - LLV(L,2),20, S);
SD:=Stdev(HHV(H,2) - LLV(L,2),20);
Val4:=If(Pk>0,HHV(H-AVTR-3*SD,20),LLV(L+AVTR+3*SD,20));
Val3:=If(Pk>0,HHV(H-AVTR-2*SD,20),LLV(L+AVTR+2*SD,20));
Val2:=If(Pk>0,HHV(H-AVTR-SD,20),LLV(L+AVTR+SD,20));
Val1:=If(Pk>0,HHV(H-AVTR,20),LLV(L+AVTR,20));
Val4;Val3;Val2;Val1;
Here's a simple Metastock exploration for locating Wolf Wave patterns. It doesn't hit
all that often, but when it does, it's best to pay attention.
ColA: WW
Pa:=Trough(4,LOW,5);
Pb:=Peak(3,HIGH,5);
P1:=Trough(3,LOW,5);
P2:=Peak(2,HIGH,5);
36
http://slidepdf.com/reader/full/formule-metastock 36/554
8/6/2019 Formule - Metastock
P3:=Trough(2,LOW,5);
P4:=Peak(1,HIGH,5);
P5:=Trough(1,LOW,5);
tb:=TroughBars(1,LOW,5);
tb<=4 AND
p1 > pa AND
pb < p2 AND
p1 < p2 AND
p1 < p4 AND
p1 > p3 AND
p3 > p5 AND
p4 < p2 AND
ColB: Tangents
p1:=Trough(3,LOW,5);
p3:=Trough(2,LOW,5);
p5:=Trough(1,LOW,5);
o1:=p1-p3;
o2:=p1-p5;
a1:=TroughBars(3,LOW,5)-TroughBars(2,LOW,5);
a2:=TroughBars(3,LOW,5)-TroughBars(1,LOW,5);
tan1:=o1/a1;
tan2:=o2/a2;
Abs(tan1-tan2)
Filter:
colA AND colB <= .2
T
HE M
ARKET F ACILITATION I
NDEX
In the August 1996 STOCKS & COMMODITIES, an article by Thom Hartle titled
"The Market Facilitation Index" showed how to color chart bars to identify chart
patterns based on changes in the market facilitation index and volume.
The first step is to create a new expert by choosing Expert Advisor from MetaStock's
Tool menu, and then choose New from the Expert Advisor. Name the expert "Market
Facilitation Index," enter any notes you like, and then click on the Highlights tab.
Enter the following
the following Highlights by choosing New, choosing the color and then entering
formulas:
Green Bar (Green bar)
ROC((H-L)/V,1,$) > 0 AND
ROC(V,1,$) > 0
Fade Bar (Blue bar)
ROC((H-L)/V,1,$) < 0 AND
ROC(V,1,$) < 0
Fake Bar (Dk Gray bar)
ROC((H-L)/V,1,$) > 0 AND
ROC(V,1,$) < 0
Squat Bar (Red bar)
ROC((H-L)/V,1,$) < 0 AND
37
http://slidepdf.com/reader/full/formule-metastock 37/554
8/6/2019 Formule - Metastock
ROC(V,1,$) > 0
After you have entered the four Highlights, click OK to finish editing the expert's
properties. You can now right-click on the heading or background of any chart. Next,
select Expert Advisor and then Attach from the Chart shortcut menu. Attach the
market facilitation index expert, and it will highlight the four market facilitation
patterns that were discussed in Hartle's article. Note: You can save a chart as a
template with this expert attached, and then any time you apply the template to a
chart, the market facilitation index expert will automatically attach to the chart.
from Allan J. McNichol, EQUIS International
www.equis.com Sender: blackman@hawaii.rr.com
38
http://slidepdf.com/reader/full/formule-metastock 38/554
8/6/2019 Formule - Metastock
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;
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.
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)
Mov(Mov(Mov(C,2,S),2,S),2,S)>AND
39
http://slidepdf.com/reader/full/formule-metastock 39/554
8/6/2019 Formule - Metastock
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)))
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.
40
http://slidepdf.com/reader/full/formule-metastock 40/554
8/6/2019 Formule - Metastock
trix(12)-ref((trix(12)),-1)
G ANN SWING H I LOW 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.
41
http://slidepdf.com/reader/full/formule-metastock 41/554
8/6/2019 Formule - Metastock
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 T
REND
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))
AUTOMATIC M ETASTOCK T RENDLINE 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
42
http://slidepdf.com/reader/full/formule-metastock 42/554
8/6/2019 Formule - Metastock
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
43
http://slidepdf.com/reader/full/formule-metastock 43/554
8/6/2019 Formule - Metastock
T
HE R ECURSIVE M OVING T
REND AVERAGE
44
http://slidepdf.com/reader/full/formule-metastock 44/554
8/6/2019 Formule - Metastock
>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
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.
Sum(If(C
AND V > >Ref(V,-1),
Ref(C,-1)
V * C,
If(C < Ref(C,-1)
AND V < Ref(V,-1),
Neg(V) * C,0)),7) * 4 +
45
http://slidepdf.com/reader/full/formule-metastock 45/554
8/6/2019 Formule - Metastock
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.
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)))
This indicator requires 3 sub calculations and then the totalling of all 3 to get the final
indicator:
46
http://slidepdf.com/reader/full/formule-metastock 46/554
8/6/2019 Formule - Metastock
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.
Fml( "1FrontWeighted36BarMA1" ) +
Fml( "2FrontWeighted36BarMA2" ) +
Fml( "3FrontWeighted36BarMA3" )
47
http://slidepdf.com/reader/full/formule-metastock 47/554
8/6/2019 Formule - Metastock
0.02 * Ref(P,-21) +
0.02 * Ref(P,-20) +
0.02 * Ref(P,-19) +
0.02 * Ref(P,-18)
Excel Confidence %
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.
Simple Interpretation:
Excel
of the Confidence % of
scale. A value should oscillate
0 indicates nobetween 0 and
confidence 100,market
in the usuallygoing
at theup,
extreme
whilst ends
100
48
http://slidepdf.com/reader/full/formule-metastock 48/554
8/6/2019 Formule - Metastock
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.
Excel Confidence %:
Lone Ranger
Then divide a by volume. Subtract the result of this by the value of a divided by
volume 5 days ago.
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.
49
http://slidepdf.com/reader/full/formule-metastock 49/554
8/6/2019 Formule - Metastock
Inside()-2
NR4 FORMULA
50
http://slidepdf.com/reader/full/formule-metastock 50/554
8/6/2019 Formule - Metastock
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 stocsk which have rallied, gapped upwards, and then had an inside day.
Usually leads to a resumption of the rally. The search returns 1 for Ok and 0 for not
ok.
RallyWithVol()
Inside()
GapUp()
RANGE HIGH
Looks for out of range move where the close equals the high. Suggests more buying
pressure.
The search returns 1 for Ok and 0 for not ok.
BigWhite()
CLOSE
HIGH VOLUME
Displays those where volume is above the 100 day moving average.
The search returns 1 for Ok and 0 for not ok.
VOLUME
Mov(VOLUME,100,EXPONENTIAL)
((VOLUME - Mov(VOLUME,100,EXPONENTIAL))
/Mov(VOLUME,100,EXPONENTIAL))
When(colA,>,colB) * 100
51
http://slidepdf.com/reader/full/formule-metastock 51/554
8/6/2019 Formule - Metastock
52
http://slidepdf.com/reader/full/formule-metastock 52/554
8/6/2019 Formule - Metastock
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)
53
http://slidepdf.com/reader/full/formule-metastock 53/554
8/6/2019 Formule - Metastock
54
http://slidepdf.com/reader/full/formule-metastock 54/554
8/6/2019 Formule - Metastock
55
http://slidepdf.com/reader/full/formule-metastock 55/554
8/6/2019 Formule - Metastock
The Larry Wiliams' indicator named WillSpread is quite easy to plot in MetaStock for
Windows version
Using version 6.5 6.5.
of MetaStock for Windows, please follow these steps.
56
http://slidepdf.com/reader/full/formule-metastock 56/554
8/6/2019 Formule - Metastock
1996 August TASC Trader's Tips - Connors and 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
Bands using 11 periodsPrice Bands
and 1.7 in MetaStock
standard forThen
deviations. Windows, simply
click your plot Bollinger
right-mouse
57
http://slidepdf.com/reader/full/formule-metastock 57/554
8/6/2019 Formule - Metastock
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
M OV
AVG ASYMMETRIC V OLATILITY P RICE B ANDS
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
LowerBand;:= CLOSE < (1-.18) * HHV(HIGH,Periods + 1) AND HIGH <
SellSignal1 OR SellSignal2 OR SellSignal3
STOPS
-----
Maximum Loss: LONG ONLY
10.00 Percent
R EGRESSION ASYMMETRIC V OLATILE P RICE B AND
SIGNAL FORMULAS
---------------
58
http://slidepdf.com/reader/full/formule-metastock 58/554
8/6/2019 Formule - Metastock
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 - Using 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:
Name: Isolated
Isolated Low
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
and then Menu. Youone
drag from canisolated
now choose Fibonacci
extreme Retracement
to another. from 6.5
In MetaStock the you
Insert menu,
should
59
http://slidepdf.com/reader/full/formule-metastock 59/554
8/6/2019 Formule - Metastock
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)))
60
http://slidepdf.com/reader/full/formule-metastock 60/554
8/6/2019 Formule - Metastock
61
http://slidepdf.com/reader/full/formule-metastock 61/554
8/6/2019 Formule - Metastock
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.
LONE RANGER
Then divide a by volume. Subtract the result of this by the value of a divided by
volume 5 days ago.
62
http://slidepdf.com/reader/full/formule-metastock 62/554
8/6/2019 Formule - Metastock
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.
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).
Close Long:
Cross(ForecastOsc(CLOSE,opt3),opt2)
Enter Short:
Cross(ForecastOsc(CLOSE,opt3),opt2)
Close Short:
Cross(opt1,ForecastOsc(CLOSE,opt3))
63
http://slidepdf.com/reader/full/formule-metastock 63/554
8/6/2019 Formule - Metastock
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
theand the indicator traverses between +10 (on the downside) and +90 (on
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
the attachment. be closer
What to the zero
will happen whenbasis line than
the grains, opt1.crude,
cocoa, Pleaseand
seedamn
64
http://slidepdf.com/reader/full/formule-metastock 64/554
8/6/2019 Formule - Metastock
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".
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.
Chaos BlueBlue
{Alligator BL 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);
65
http://slidepdf.com/reader/full/formule-metastock 65/554
8/6/2019 Formule - Metastock
----------------------------------------------
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 }
----------------------------------------------
Chaos AO
{ Chaos Awsome Oscillator - measures momentum }
( A very close approximation of MFI }
{ Plot as histogram }
Mov(MP(),5,S) - Mov(MP(),34,S);
----------------------------------------------
Mov(Mov(MP(),5,S) - Mov(MP(),34,S),5,S)
----------------------------------------------
Chaos AC
{ Chaos Accelerator/Decelerator Oscillator }
{ Measures acceleration }
{ Plot as histogram }
66
http://slidepdf.com/reader/full/formule-metastock 66/554
8/6/2019 Formule - Metastock
----------------------------------------------
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" ) =
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" ) =
67
http://slidepdf.com/reader/full/formule-metastock 67/554
8/6/2019 Formule - Metastock
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("BW6") + + Fml("BW7")
Fml("BW3") ++ Fml("BW4")
Fml("BW8") + Fml("BW5") +
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
it alllast step inOf
together. constructing the tema
course, I used binarysmoothing.
wave was to decide on the smoothing and put
68
http://slidepdf.com/reader/full/formule-metastock 68/554
8/6/2019 Formule - Metastock
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.
69
http://slidepdf.com/reader/full/formule-metastock 69/554
8/6/2019 Formule - Metastock
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
---------------
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)
LLV(MFI(55),5) = LLV(MFI(55),13) AND 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
70
http://slidepdf.com/reader/full/formule-metastock 70/554
8/6/2019 Formule - Metastock
---------------
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
71
http://slidepdf.com/reader/full/formule-metastock 71/554
8/6/2019 Formule - Metastock
LLV(LinRegSlope(C,34),13) AND
OPTIMIZATION VARIABLES
----------------------
OPT1: Min = -0.10 Max = 0.00 Step = 0.10
OPT2: Min = -0.10 Max = 0.00 Step = 0.10
72
http://slidepdf.com/reader/full/formule-metastock 72/554
8/6/2019 Formule - Metastock
{place the formulas above in the filter section; nothing else is required}
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)
73
http://slidepdf.com/reader/full/formule-metastock 73/554
8/6/2019 Formule - Metastock
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-Type1
Dunn-Type2
{Market swinghighs
Up = 2 higher is defined
and 2as:
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
74
http://slidepdf.com/reader/full/formule-metastock 74/554
8/6/2019 Formule - Metastock
Dunnigan Trend
{These formulas
to be used simply plot
as an indicator, butato1 if
bemarket
used asisaup or -1 if down.
subroutine, I reallyindidn't
or possibly code this
an "Expert
Adviser".
Best wishes, Adam Hefner.}
Explanation of the Dynamic Multiple Time Frame Indicator by the author, Adam
Hefner:
75
http://slidepdf.com/reader/full/formule-metastock 75/554
8/6/2019 Formule - Metastock
indicators from.
I like the Fibonacci Support & Resistance best of all, seems (IMHO)
that these support/resistance areas are very easy to visualize using
this formula."
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)
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 aon a fall
zero from a to
crossover positive peak, or Of
the downside. to buy on ayou
course zero
cancross over to
optimize andthefind
upside and buy
various sell
76
http://slidepdf.com/reader/full/formule-metastock 76/554
8/6/2019 Formule - Metastock
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.
colA CLOSE
colB ref(C,-1)
colC ref(C,-2)
filter colA > colB AND colB > colC
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)
Mc1:=BarsSince(DayOfWeek()=1);
Fc1:=BarsSince(DayOfWeek()=5);
Fc2:=Ref(BarsSince(DayOfWeek()=5),-1)-1;
{Fixed Balance Point Calculation}
77
http://slidepdf.com/reader/full/formule-metastock 77/554
8/6/2019 Formule - Metastock
78
http://slidepdf.com/reader/full/formule-metastock 78/554
8/6/2019 Formule - Metastock
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
79
http://slidepdf.com/reader/full/formule-metastock 79/554
8/6/2019 Formule - Metastock
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
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);
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);
80
http://slidepdf.com/reader/full/formule-metastock 80/554
8/6/2019 Formule - Metastock
rudolf stricker}
Lb:=Input("Look-Back Periods?",3,100,13);
ROC( LinRegSlope(C,Lb),Lb,$)
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
example, thatismost
here otherindicator
the same indicators maythe
using be RSI(14):
used in place of the MACD. For
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)
81
http://slidepdf.com/reader/full/formule-metastock 81/554
8/6/2019 Formule - Metastock
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 –
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.
offerings. Notforge
This helped unexpectedly, a few
a somewhat defects
more robustwere foundwhich
solution, with the original
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.
82
http://slidepdf.com/reader/full/formule-metastock 82/554
8/6/2019 Formule - Metastock
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 )))))
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)
Ref(H,-2) AND
> H OR Ref(H,-5)
Ref(H,-1) > H){then
> H), AND...}
(Ref(H,-4)>
Ref(H,-5),H{5th
ORday
Ref(H,-3) > H OR
back high,else...}
83
http://slidepdf.com/reader/full/formule-metastock 83/554
8/6/2019 Formule - Metastock
PREV )))))
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)
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
MA1:=Mov(C,MAP,E); Average Period",2,144,55);
84
http://slidepdf.com/reader/full/formule-metastock 84/554
8/6/2019 Formule - Metastock
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)
{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
85
http://slidepdf.com/reader/full/formule-metastock 85/554
8/6/2019 Formule - Metastock
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 ChangeAND
Scl:=If(Sd=-1 Low}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}
86
http://slidepdf.com/reader/full/formule-metastock 86/554
8/6/2019 Formule - Metastock
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;
ut:=FmlVar("GANN-Trend","TDV");
uplot:=If(BarsSince(Ut=1)<
BarsSince(Ut=-1),1,0);
uplot=1;
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:
87
http://slidepdf.com/reader/full/formule-metastock 87/554
8/6/2019 Formule - Metastock
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".
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.
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,
Mov(( H+L)/2, 5, S)- Mov(( H+L)/2, 34, S),-1),( Mov(( H+L)/2, 5, S)-
34, S )),0)
88
http://slidepdf.com/reader/full/formule-metastock 88/554
8/6/2019 Formule - Metastock
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)
Color green
Save as a template
OPEN LONG:
close>hhv(low,21)
CLOSE LONG:
close<llv(high,21)
89
http://slidepdf.com/reader/full/formule-metastock 89/554
8/6/2019 Formule - Metastock
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 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.
==========================
The
of theShark system
pattern is really
and then based on two separate events: the occurrence
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.
90
http://slidepdf.com/reader/full/formule-metastock 90/554
8/6/2019 Formule - Metastock
==========================
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);
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);
From: Brooke
=================================
For the pattern in the Indicator Builder:
Symmetry:=.28;
Apex:=(H+L)/2;
WB:=Ref(H,-2)-Ref(L,-2);
That's like
lasts for 25adays
resistance
or untillevel thatShark
a new the price hasappears.
signal to break through. It
91
http://slidepdf.com/reader/full/formule-metastock 91/554
8/6/2019 Formule - Metastock
=================================
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;
92
http://slidepdf.com/reader/full/formule-metastock 92/554
8/6/2019 Formule - Metastock
Ref(Shark,+1)=1;
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.
*}
Using the Same method as above, enter the following Symbol formula.
93
http://slidepdf.com/reader/full/formule-metastock 93/554
8/6/2019 Formule - Metastock
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.*}
=========================================================
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:
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 during
climbed positions,
the Imove
noticetothat most
a max andupthen
moves started
started when
to fall adxend
at the wasoflow
the and that adx
move.
94
http://slidepdf.com/reader/full/formule-metastock 94/554
8/6/2019 Formule - Metastock
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
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
row, what areon
theMonday?
chances itIf will
the market is uptrend
follow the or down a certain
the next number
day? Is of days
the trend on in a
95
http://slidepdf.com/reader/full/formule-metastock 95/554
8/6/2019 Formule - Metastock
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"
96
http://slidepdf.com/reader/full/formule-metastock 96/554
8/6/2019 Formule - Metastock
======================
Formula "Tuesday XO Pattern"
======================
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
MetaStock
Edition, by formula derived from calculations in Trading Systems and Methods, Third
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;
97
http://slidepdf.com/reader/full/formule-metastock 97/554
8/6/2019 Formule - Metastock
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.
This is the
Today's calculation
close for the
- yesterdays first formula (Today's Change):
close
98
http://slidepdf.com/reader/full/formule-metastock 98/554
8/6/2019 Formule - Metastock
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.
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)))
This indicator requires 3 sub calculations and then the totalling of all 3 to get the final
indicator:
99
http://slidepdf.com/reader/full/formule-metastock 99/554
8/6/2019 Formule - Metastock
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.
Front Weighted 36 Day Moving Average:
Fml( "1FrontWeighted36BarMA1" ) +
Fml( "2FrontWeighted36BarMA2" ) +
Fml( "3FrontWeighted36BarMA3" )
100
http://slidepdf.com/reader/full/formule-metastock 100/554
8/6/2019 Formule - Metastock
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)
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.
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 grailcan
how one of indicators, it does sentiment.
measure investor offer some insight into what the market is thinking and
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.
(Sum(
Mov(C * (2.5/ Sqrt(50 * V)),10,S)-
LLV(Mov(C
Sum( * (2.5/ Sqrt(50 * V)),10,S),5), 3 ) /
101
http://slidepdf.com/reader/full/formule-metastock 101/554
8/6/2019 Formule - Metastock
ColA: CLOSE
Periodicity Daily
Col A: CLOSE
Periodicity Daily
Col A: CLOSE
Col B:ROC(C,5,%)
Periodicity Daily
102
http://slidepdf.com/reader/full/formule-metastock 102/554
8/6/2019 Formule - Metastock
Col A: CLOSE
Col B: ROC(C,5,%)
Periodicity Daily
Col A: CLOSE
((HHV(C,80)-LLV(C,80))/LLV(C,80))*100
103
http://slidepdf.com/reader/full/formule-metastock 103/554
8/6/2019 Formule - Metastock
If(Ref(Fml("congestion index"),-5),<,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)
Col A: CLOSE
If(Ref(Fml("congestion index"),-5),<,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)
Col A: CLOSE
Col B: Vol(10,80)
Filter: Vol(10,80)>200
GAIN BY %
Col A: CLOSE
Col B: ROC(C,5,%)
104
http://slidepdf.com/reader/full/formule-metastock 104/554
8/6/2019 Formule - Metastock
BIGGEST LOSERS
Col A: CLOSE
Col B: ROC(C,5,%)
RSI(25)+Stoch(25,3)+Mo(25)+CCI(25)
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 Getetc.,
explorations/templates/experts, useswith
extensively. You can
this indicator; e.g.,write MetaStock
explorations to find the peaks and troughs of the 5/34 histogram.
Mov(OscP(5,34,E,$),5,S)
The peaks of the histogram help identify waves 1, 3 and 5 and troughs for
waves 2 and 4. Use
fib retracements) forMetaStock
additional line
wavestudies (both trendlines, channels
identification/analysis. and
Of course,
105
http://slidepdf.com/reader/full/formule-metastock 105/554
8/6/2019 Formule - Metastock
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}
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)
106
http://slidepdf.com/reader/full/formule-metastock 106/554
8/6/2019 Formule - Metastock
Ref(C,-2)
Filter: enabled
Periodicity: Daily
Records required: 5
----------------------------
Patrick McDonald
Enter long
GapUp()
Close long
Ref(GapUp(),-5)
107
http://slidepdf.com/reader/full/formule-metastock 107/554
8/6/2019 Formule - Metastock
ELLIOTT OSCILLATOR
Mov(C,5,S)-Mov(C,35,S)
{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))
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
from A. J. Maas
ENTER LONG:
108
http://slidepdf.com/reader/full/formule-metastock 108/554
8/6/2019 Formule - Metastock
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!}
109
http://slidepdf.com/reader/full/formule-metastock 109/554
8/6/2019 Formule - Metastock
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
Enter long:
Cross(opt1,((CLOSE-Ref(TSF(C,opt3),-1))/CLOSE*100))
Close long:
Cross(((CLOSE-Ref(TSF(C,opt3),-1))/CLOSE*100),opt2)
110
http://slidepdf.com/reader/full/formule-metastock 110/554
8/6/2019 Formule - Metastock
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.}
{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:}
{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.}
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
found this idea in Tusharmarkets,
Chande'sthey tendTechnical
"New move between theSince
Trader". bands.you
I have
have
111
http://slidepdf.com/reader/full/formule-metastock 111/554
8/6/2019 Formule - Metastock
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
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.
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)
112
http://slidepdf.com/reader/full/formule-metastock 112/554
8/6/2019 Formule - Metastock
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);
{If you want both the conditions to be satisfied in the same query, just
join the two filters by the AND operator:}
{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}
If(cum(1)=1,
{then} Close,
{else} If((C*1.1) <= PREV,
{then}(C*1.1),
{else} PREV));
113
http://slidepdf.com/reader/full/formule-metastock 113/554
8/6/2019 Formule - Metastock
{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.}
ACol:= C;
BCol:= Ref(HHV(H,59), -1);
CCol:= HHV(H,60);
SSDPBOS:= (ACol>BCol) AND (Ref(C,-1)<BCol) AND
(H=CCol);
SSDPBOS
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))
114
http://slidepdf.com/reader/full/formule-metastock 114/554
8/6/2019 Formule - Metastock
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
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 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.
===================================
SUPPORT AND RESISTANCE LEVELS
AVd:=If(CLOSE>Ref(Peak(1,H,1) ,-1),
115
http://slidepdf.com/reader/full/formule-metastock 115/554
8/6/2019 Formule - Metastock
{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
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.
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%.
116
http://slidepdf.com/reader/full/formule-metastock 116/554
8/6/2019 Formule - Metastock
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.
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:
If these
ticks three above
(18/32) conditions areclose.
today's met then buy
Enter ontomorrow
a buy stoponly if and when prices rise 18
order.
117
http://slidepdf.com/reader/full/formule-metastock 117/554
8/6/2019 Formule - Metastock
After a trade has been entered, place a sell stop at whichever of the positions below
are closest to the market price.
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
Number# ofwinning
trades 32 Percent
trades profitable
23 Number 72%trades 9
losing
118
http://slidepdf.com/reader/full/formule-metastock 118/554
8/6/2019 Formule - Metastock
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.
System Concept
Trend Indication
For the trend indicator, we employ one of our favorite trend indicators, the Directional
Movement
Directional Indicator.
Indicator),Specifically
-DI (Minuswe will use the
Directional relationship
Indicator), between
and the ADX the +DI (Plus
(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
actually measures of trendofisthe
the strength inadequate without
trend. Trend the inclusion
indicators of theonly
traditionally ADXindicate
which
119
http://slidepdf.com/reader/full/formule-metastock 119/554
8/6/2019 Formule - Metastock
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.
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
Strength indicator
Index) whichwe
wehave
use adopted is the
to identify 4-day RSIdip
a short-term (Welles
in the Wilder's Relative
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
rule. Thetest onover
tests the system with
10 years the exact
of data same
showed rules,of
a profit but$22,400
eliminating
over the 4-day RSI
51 trades, with
120
http://slidepdf.com/reader/full/formule-metastock 120/554
8/6/2019 Formule - Metastock
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.
121
http://slidepdf.com/reader/full/formule-metastock 121/554
8/6/2019 Formule - Metastock
Notice that all exits were profitable except an exit on the first close, which amounts to
exiting
with thisontrend-following
the close of thetechnique!
day of entry. Youthe
Notice certainly do not want
high accuracy ratestoofbe85day-trading
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
122
http://slidepdf.com/reader/full/formule-metastock 122/554
8/6/2019 Formule - Metastock
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 realizeWe
position overnight. thathave
this protection may as
chosen $2,500 bethe
limited if the market
dollar-stop in this gaps against
system. This the
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
123
http://slidepdf.com/reader/full/formule-metastock 123/554
8/6/2019 Formule - Metastock
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
in exits of the
after 25 days $2,500
creates dollar stop,
a unique the 25-day
exit strategy lowest
which leadslow
us stop,
to theand thefor
name switch
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
up. In spite of the strongtaking
trendlong trades
we have only
also whenthat
shown theittrend is clearly
is more and strongly
advantageous to
124
http://slidepdf.com/reader/full/formule-metastock 124/554
8/6/2019 Formule - Metastock
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.
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.
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.
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
exit the to understand
trade. It standshow it decides
alone and the when to enter a trade
other indicators andonwhether
depend it. to continue or
125
http://slidepdf.com/reader/full/formule-metastock 125/554
8/6/2019 Formule - Metastock
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.
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)
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}
126
http://slidepdf.com/reader/full/formule-metastock 126/554
8/6/2019 Formule - Metastock
{ mailto:chuck@traderclub.com }
25X25 LongEntry
127
http://slidepdf.com/reader/full/formule-metastock 127/554
8/6/2019 Formule - Metastock
EntryPrice := Abs(EntryPrice);
128
http://slidepdf.com/reader/full/formule-metastock 128/554
8/6/2019 Formule - Metastock
Stop3Price :=
If(Stop3, Min(O, EntryPrice - 2.5), 0);
Stop4Price :=
25x25 TP
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);
129
http://slidepdf.com/reader/full/formule-metastock 129/554
8/6/2019 Formule - Metastock
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));
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.
Date Time Type Cnts Price Signal Name Entry P/L Cumulative
130
http://slidepdf.com/reader/full/formule-metastock 130/554
8/6/2019 Formule - Metastock
http://www.traderclub.com/systems_25.htm
131
http://slidepdf.com/reader/full/formule-metastock 131/554
8/6/2019 Formule - Metastock
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 Up
GapUp()
132
http://slidepdf.com/reader/full/formule-metastock 132/554
8/6/2019 Formule - Metastock
BAR
If(H-L- Pivot Buy
> 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)
133
http://slidepdf.com/reader/full/formule-metastock 133/554
8/6/2019 Formule - Metastock
Reaction()
"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."
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
Iarticles
have updated
written some of theKrausz.
by Robert code since
The my
codelast
nowpost concerning
plots the TASC
on the proper days
134
http://slidepdf.com/reader/full/formule-metastock 134/554
8/6/2019 Formule - Metastock
---------------------------------------
MTF - FIXED BALANCE POINT
name: MTF-Fixed Balance Point
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
------------------------------------------------
135
http://slidepdf.com/reader/full/formule-metastock 135/554
8/6/2019 Formule - Metastock
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
------------------------------------------------
MTF-Dynamic Balance Point Step
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);
136
http://slidepdf.com/reader/full/formule-metastock 136/554
8/6/2019 Formule - Metastock
RR1:=DwP+(Wr*.5);
RR2:=DwP+(Wr*.618);
SR1:=DwP-(Wr*.5);
SR2:=DwP-(Wr*.618);
SR2;
SR1;
RR1;
RR2;
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
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.
{start week}
sw:=If(DayOfWeek()<=Ref(DayOfWeek(),-1),1,0);
yestClo:=If(sw>0,Ref(C,-1),0);
137
http://slidepdf.com/reader/full/formule-metastock 137/554
8/6/2019 Formule - Metastock
LLow:=(ValueWhen(1,sw>0,
Ref(LowestSince(5,sw>0,L),-1)));
((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);
((ValueWhen(1,sw>0,HHigh)+
ValueWhen(2,sw>0,HHigh)+
ValueWhen(3,sw>0,HHigh))-
(ValueWhen(1,sw>0,LLow)+
138
http://slidepdf.com/reader/full/formule-metastock 138/554
8/6/2019 Formule - Metastock
ValueWhen(2,sw>0,LLow)+
ValueWhen(3,sw>0,LLow)))*100;
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
by Rajat Bose}
{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
givesperiods
an early(for Bollinger
indication of Bands) using
reversals than2the
standard deviations.
Williams %R of theIt sometimes
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.}
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:
139
http://slidepdf.com/reader/full/formule-metastock 139/554
8/6/2019 Formule - Metastock
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.
{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.}
1.
2a.First
undercreate a new
"trends" tabexpert andcode
put this nameforitbullish:
whatever you want.
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
also turn on the "ribbon" option and turn off "Display Vertical Lines", I
off
140
http://slidepdf.com/reader/full/formule-metastock 140/554
8/6/2019 Formule - Metastock
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.
------------------------------------------------------
GANN-HiLo
{HiLo 4/27/99}
141
http://slidepdf.com/reader/full/formule-metastock 141/554
8/6/2019 Formule - Metastock
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;
------------------------------------------
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;
--------------------------------------------
GANN-Trend
{Gann-Trend 4/27/99}
142
http://slidepdf.com/reader/full/formule-metastock 142/554
8/6/2019 Formule - Metastock
{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
------------------------------------------
GaW-Swing
143
http://slidepdf.com/reader/full/formule-metastock 143/554
8/6/2019 Formule - Metastock
144
http://slidepdf.com/reader/full/formule-metastock 144/554
8/6/2019 Formule - Metastock
{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
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.
{ Gap percentage }
Gap := (OPEN - Ref(CLOSE,-1))/Ref(CLOSE,-1)*100;
If(LookingForGapUp,
GapIncrement, Cum(If(Gap >= MinGap AND Gap < MinGap +
145
http://slidepdf.com/reader/full/formule-metastock 145/554
8/6/2019 Formule - Metastock
Formula to determine whether the daily range crosses the previous day’s
close on a gap day:
{ Gap percentage }
Gap := (OPEN - Ref(CLOSE,-1))/Ref(CLOSE,-1)*100;
Formula to determine whether the following day’s open continues the gap
trend:
146
http://slidepdf.com/reader/full/formule-metastock 146/554
8/6/2019 Formule - Metastock
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
{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)
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
aexcellent
"short" indication
indicators-from theindex
in this StochRSI
it hadmay
4 outgive
of 5better results.StochRSI
winning signals in two13 also
year gives
period.
147
http://slidepdf.com/reader/full/formule-metastock 147/554
8/6/2019 Formule - Metastock
The time between signals is of course longer. Check this method out on your favorite
issues.
BUY -1 SELL 1
PFE Indicator:
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.
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.
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:
148
http://slidepdf.com/reader/full/formule-metastock 148/554
8/6/2019 Formule - Metastock
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)
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.
Dynamic Zones
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 whenthese
levels. However, an oscillator has moved
oscillator-driven far above
systems lackor
thebelow traditional
ability to evolvetrading
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.
149
http://slidepdf.com/reader/full/formule-metastock 149/554
8/6/2019 Formule - Metastock
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
Compare each to ordinary Dahl or some other trend indicator. Remember, I put a 21
EMA trigger on each.
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
which would indicator.
seem A longer
to defeat MA period
the purpose seems
of using to smooth it out significantly,
an oscillator.
150
http://slidepdf.com/reader/full/formule-metastock 150/554
8/6/2019 Formule - Metastock
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,
Ref((C-L)/(H-L),-1)<=.30 AND
from Styk
For Long:
HHV(H - 2.5*ATR(5),10)
For Short:
LLV(L + 2.5*ATR(5),10)
Formula:
PI:=3.1415926;
151
http://slidepdf.com/reader/full/formule-metastock 151/554
8/6/2019 Formule - Metastock
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
%%%%%%%%%%%%%
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.
S1 Indicator:
ValueWhen(1, 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:
152
http://slidepdf.com/reader/full/formule-metastock 152/554
8/6/2019 Formule - Metastock
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))
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:=
L5M:= Max(0,Min(1,Int(L4/C)));
Max(0,Min(1,Int(L5/C)));
153
http://slidepdf.com/reader/full/formule-metastock 153/554
8/6/2019 Formule - Metastock
L6M:= Max(0,Min(1,Int(L6/C)));
100*(1-(L1M+L2M+L3M+L4M+L5M+L6M)/6)
WRO Indicator:
L1:=ValueWhen(1,Ref(H,-4)=HHV(H,9),Ref(H,-4));
L2:=ValueWhen(2,Ref(H,-4)=HHV(H,9),Ref(H,-4));
L3:=ValueWhen(3,Ref(H,-4)=HHV(H,9),Ref(H,-4));
L4:=ValueWhen(4,Ref(H,-4)=HHV(H,9),Ref(H,-4));
L5:=ValueWhen(5,Ref(H,-4)=HHV(H,9),Ref(H,-4));
L6:=ValueWhen(6,Ref(H,-4)=HHV(H,9),Ref(H,-4));
L1M:= Max(0,Min(1,Int(L1/C)));
L2M:= Max(0,Min(1,Int(L2/C)));
L3M:= Max(0,Min(1,Int(L3/C)));
L4M:= Max(0,Min(1,Int(L4/C)));
L5M:= Max(0,Min(1,Int(L5/C)));
L6M:= Max(0,Min(1,Int(L6/C)));
100*(1-(L1M+L2M+L3M+L4M+L5M+L6M)/6)
The WRO and WSO oscillators are generally plotted together on a separate
scale from the price plot. It is helpful to add horizontal lines at zero and
100 on this same scale. Horizontal lines can be added by clicking on the
indicator and selecting "horizontal lines" from the Indicator Properties
menu.
These formulas run much faster (by 40 times) than the earlier formulas, and
theyÕve been tested successfully with both end-of-day data and real-time
data using MetaStock Professional Version 6.51.
%%%%%%%%%%%%%
Gap1 System
===========
{BUY}
L>Ref(H,-1) OR
Cum(1)=LastValue(Cum(1))
{SELL}
H<Ref(L,-1) OR
Cum(1)=LastValue(Cum(1))
Gap2 System
===========
{BUY}
N1:=5;
L>Ref(HHV(H,N1),-1) OR
Cum(1)=LastValue(Cum(1))
154
http://slidepdf.com/reader/full/formule-metastock 154/554
8/6/2019 Formule - Metastock
{SELL}
N1:=5;
H<Ref(LLV(L,N1),-1) OR
Cum(1)=LastValue(Cum(1))
Gap3 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))
%%%%%%%%
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)
155
http://slidepdf.com/reader/full/formule-metastock 155/554
8/6/2019 Formule - Metastock
%%%%%%%%%
Candle - Hanging Man/Hammer & 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)
%%%%%%%%%%%
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));
156
http://slidepdf.com/reader/full/formule-metastock 156/554
8/6/2019 Formule - Metastock
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;
%%%%%%%%%%%%%
CYLICAL 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).
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);
157
http://slidepdf.com/reader/full/formule-metastock 157/554
8/6/2019 Formule - Metastock
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
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
chart default
and run settings). Click OK to save the changes, and then open a
the system.}
%%%%%%%%%%%%
BODY MOMENTUM
158
http://slidepdf.com/reader/full/formule-metastock 158/554
8/6/2019 Formule - Metastock
and vice-versa for down. If this oscillator is above 70 then the whites
(Candle-sticks) dominate and below 30 the blacks are dominant.}
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)
ST OSCILLATOR
{name: StTO}
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}
%%%%%%%%%%%%%
{This system uses the momentum Commodity Channel Index (CCI) indicator to
find short-term bottoms in the market. The CCI indicator is extremely
159
http://slidepdf.com/reader/full/formule-metastock 159/554
8/6/2019 Formule - Metastock
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.}
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
LOOK B ACK
Formula: X :=
Y := Ref(X, Stdev(C, 30);
-1);
Z := 1+((X-Y)/X);
If(Cum(1)=1, 20, Min(Max(Prev*Z, 20), 60))
BuyBreak
BuyExit
160
http://slidepdf.com/reader/full/formule-metastock 160/554
8/6/2019 Formule - Metastock
SellBreak
SellExit
Formula: HHV(H, LastValue(Fml("LookBack")/2+Prev-Prev))
BreakWhere
Formula: TopB := Ref(Fml("BuyBreak"), -1);
LowB := Ref(Fml("SellBreak"), -1);
((O+H+L+C)/4 - LowB)*100/(TopB-LowB);
DBS-System
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)+StochMo
mentum
(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)+Stoc
hMome
ntum(5,3,5)+StochMomentum(8,21,13)+StochMomentum(13,25,2),13,E)
Plot 1:
161
http://slidepdf.com/reader/full/formule-metastock 161/554
8/6/2019 Formule - Metastock
Mov(CLOSE,19,EXPONENTIAL) - Mov(CLOSE,39,EXPONENTIAL)
For more
Profit, by extensive coverage of the index refer to the book Patterns for
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
Indexbeginning of a significant
crosses above bull
+1900 after marketupward
moving is indicated
more when the Summation
than 3600 points from its
162
http://slidepdf.com/reader/full/formule-metastock 162/554
8/6/2019 Formule - Metastock
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)).
%%%%%%%%%%%%%%%%%%%
J
ACK L ANDIS' WEIGHTED STOCHASTIC ( SHORTENED TO L ANDIS )
((Stoch(8,3)*.05)+(Stoch(89,21)*.43)+(Stoch(55,13)*.26)+(Stoch(34,8)*.16)+(S
toch(21,5)*.10))
L ANDIS 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)
163
http://slidepdf.com/reader/full/formule-metastock 163/554
8/6/2019 Formule - Metastock
8)*.16)+(Stoch(21,5)*.10)),5,s),2)
%%%%%%%%%%%%%%%
Barnes' Acceleration
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.
Based on the premise that closing price may be predictable based on previous
closes
%%%%%%%%%%%%%%%%
164
http://slidepdf.com/reader/full/formule-metastock 164/554
8/6/2019 Formule - Metastock
C
HANDE & K
ROLL'S R2 I
NDICATOR
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."
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)
P RICE ACTION I
NDICATOR (PAIN)
PAIN
((C-O)+(C-H)+(C-L))/2
%%%%%%%%%%%%%%%%%%%
Natenberg's Volatility
rev. 01/21/97
165
http://slidepdf.com/reader/full/formule-metastock 165/554
8/6/2019 Formule - Metastock
The above assumes Weekly Data. To utilise this with Daily Data, the
MetaStock formula would be:
For further interpretation refer to the book "Option Volatility & Pricing,"
by Sheldon Natenberg.
N
AT 'S V OLT
Std(log(c/ref(c,-1)),10)*sqr(365/7)
%%%%%%%%%%%%%%%
The Tema StochRSI formula I use is Tema smoothed and I subtract 0.5 so I
can plot it as a histogram. It's:}
%%%%%%%%%%%%%%%%%5
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.
166
http://slidepdf.com/reader/full/formule-metastock 166/554
8/6/2019 Formule - Metastock
HHV(H-AVTR-SD,20);
HHV(H-AVTR,20);
from Mikelu
%%%%%%%%%%%%
W EEKLY P IVOT POINT
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
167
http://slidepdf.com/reader/full/formule-metastock 167/554
8/6/2019 Formule - Metastock
http://slidepdf.com/reader/full/formule-metastock 168/554
8/6/2019 Formule - Metastock
Cross(ForecastOsc(C,21),0)
Exit long:
Cross(Mov(C,3,E),ForecastOsc(C,21)) AND
Cross(6,Mov(C,3,E))
%%%%%%%%%%%%%%%
EQUIVILANT TO WILDERS TR
Wilders(TR,periods) = Mov(TR,2*periods-1,E)
%%%%%%%%%%%%%%%%%%
TRUE RANGE FORMULA
from Ken
These are dynamic moving vertical lines. Each new bar causes the line to move
orward one bar.
How to Create a Vertical Line in MetaStock
n:=89;
LastLoadedBarNum:=LastValue(Cum(1));
Cum(1)=(LastLoadedBarNum-n)+1
Plot Stochastic on chart, attach Expert, then drag Expert to Stochastic inner window
169
http://slidepdf.com/reader/full/formule-metastock 169/554
8/6/2019 Formule - Metastock
I wrote this MetaStock Expert for calculating the support 1 & 2 and resistance 1 & 2
as per Futures magazine, October 1999, page 52.
----------------------------- start --------------------------
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:
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
170
http://slidepdf.com/reader/full/formule-metastock 170/554
8/6/2019 Formule - Metastock
ALLIGATOR INDICATORS
Chaos Blue BL
Ref(Wilders(MP(),13),-8);
----------------------------------------------
Chaos Red BL
Chaos Green BL
Ref(Wilders(MP(),5),-3);
----------------------------------------------
Chaos Gator
{ Chaos Alligator }
{ Plot as histogram }
171
http://slidepdf.com/reader/full/formule-metastock 171/554
8/6/2019 Formule - Metastock
C
HAOS AO
Mov(MP(),5,S) - Mov(MP(),34,S);
----------------------------------------------
Mov(Mov(MP(),5,S) - Mov(MP(),34,S),5,S)
----------------------------------------------
Chaos AC
Chaos Fractal
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);
172
http://slidepdf.com/reader/full/formule-metastock 172/554
8/6/2019 Formule - Metastock
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;
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")
Jeff
You could use the Reference (Ref) function to shift your indicator back in time and
you
shift.could add orused
I've never multiply
a timebyseries
a constant or average
moving variableso
to give your indicator a vertical
173
http://slidepdf.com/reader/full/formule-metastock 173/554
8/6/2019 Formule - Metastock
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
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();
Close Long
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.
174
http://slidepdf.com/reader/full/formule-metastock 174/554
8/6/2019 Formule - Metastock
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 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 itvolume.
modify HHP 1sent
by selecting for the correct
"Pds1" indicator
if you prefer formula
to createfor persistence,
a 120 tho you can
day cumulative
money flow indicator to do what you are suggesting. The cumulative money flow
indicator often uses a 90SMA trigger.
STOCHPVT INDICATORS
Though not directly related to the volume percent indicator, I have recently been
175
http://slidepdf.com/reader/full/formule-metastock 175/554
8/6/2019 Formule - Metastock
http://slidepdf.com/reader/full/formule-metastock 176/554
8/6/2019 Formule - Metastock
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 )
177
http://slidepdf.com/reader/full/formule-metastock 177/554
8/6/2019 Formule - Metastock
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
how to codelike a general
it. I'll problem
bet other peoplethat must
could comefrom
benefit up often but it isasnot
the answer obvious to me
well.
178
http://slidepdf.com/reader/full/formule-metastock 178/554
8/6/2019 Formule - Metastock
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
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
179
http://slidepdf.com/reader/full/formule-metastock 179/554
8/6/2019 Formule - Metastock
CHANDELIER 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/
{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))));
{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
If(HIGHentered
>= PREVbefore today. Stopped today?}
+ MoneyMgmtStop, -PREV,
180
http://slidepdf.com/reader/full/formule-metastock 180/554
8/6/2019 Formule - Metastock
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;
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}
181
http://slidepdf.com/reader/full/formule-metastock 181/554
8/6/2019 Formule - Metastock
TPH2:=C+(2*A);
TPL1:=C-A;
TPL2:=C-(2*A);
TPH1;
TPH2;
TPL1;
TPL2;
182
http://slidepdf.com/reader/full/formule-metastock 182/554
8/6/2019 Formule - Metastock
Mov(((ROC(C,12.8,%))+(ROC(C,19.2,%))),10,W)
This is Volatility%:
Lookback := Input("Time Periods",1,1000,50);
CANDLE CODE
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<=T
hBotB,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;
183
http://slidepdf.com/reader/full/formule-metastock 183/554
8/6/2019 Formule - Metastock
Periods:=Input("Enter Periods",2,13,2);
Mov(Mov(Mov(Fml("Candlecode"),Periods,S),Periods,S),Periods,S)
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
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;
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.
184
http://slidepdf.com/reader/full/formule-metastock 184/554
8/6/2019 Formule - Metastock
(Members of Chuck LeBeau's Traders Club will recognise the "Chandelier Exit".)
The exit stop is placed at a multiple of average true range 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.
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).
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.
Expert In the latter
Advisor, case,Trading
select when you
the open
Trend,a chart and on
and click plotAttach.
the trendline, click on the
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",
185
http://slidepdf.com/reader/full/formule-metastock 185/554
8/6/2019 Formule - Metastock
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).
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.
fml("VOLAInd"): Mov(ATR(21),1,W)*3;
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}
186
http://slidepdf.com/reader/full/formule-metastock 186/554
8/6/2019 Formule - Metastock
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.
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:
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
187
http://slidepdf.com/reader/full/formule-metastock 187/554
8/6/2019 Formule - Metastock
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
> "Buy at the open plus half the average true range of the last ten days?"
> "If these two moving averages cross today, buy on tomorrow's open."
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.
188
http://slidepdf.com/reader/full/formule-metastock 188/554
8/6/2019 Formule - Metastock
Mov(cum(((C-L)-(H-C)/(H-L))*V),3,E)-Mov(cum(((C-L)-(H-C)/(H-L))*V),10,E)
BIANCHI APPROACH
enter long
enter short
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
189
http://slidepdf.com/reader/full/formule-metastock 189/554
8/6/2019 Formule - Metastock
Contributed by J. Seed
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:
NB:The time periods are controlled by PERIODS in the Positive & Negative Money
Flow formulas.
190
http://slidepdf.com/reader/full/formule-metastock 190/554
8/6/2019 Formule - Metastock
Mov(cum(((C-L)-(H-C)/(H-L))*V),3,E)-Mov(cum(((C-L)-(H-C)/(H-L))*V),10,E)
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:
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?
BB H ISTOGRAM
((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
191
http://slidepdf.com/reader/full/formule-metastock 191/554
8/6/2019 Formule - Metastock
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;"
close to close
Add to positions if the indicator "repenetrates" these levels ... otherwise, reverse when
it triggers.
Steve Karnish
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))
192
http://slidepdf.com/reader/full/formule-metastock 192/554
8/6/2019 Formule - Metastock
http://slidepdf.com/reader/full/formule-metastock 193/554
8/6/2019 Formule - Metastock
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
{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)))
194
http://slidepdf.com/reader/full/formule-metastock 194/554
8/6/2019 Formule - Metastock
((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
ADX RAW
DIDif:=
DISum:=Abs(DIPlus - DIMinus);
DIPlus + DIMinus;
ADXRaw:= 100 * Wilders(DIDif/DISum, Periods);
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 :
195
http://slidepdf.com/reader/full/formule-metastock 195/554
8/6/2019 Formule - Metastock
C Miller
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
TRADE BEING 0}PRICE, WITH EXIT BEING -- ENTRY PRICE AND NO
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))));
196
http://slidepdf.com/reader/full/formule-metastock 196/554
8/6/2019 Formule - Metastock
{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))));
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 for cumulative open Equity curve without trading costs--
You can make several such equity lines and then just add them by using a yet another
custom indicator, e.g.,
from Yngvi
197
http://slidepdf.com/reader/full/formule-metastock 197/554
8/6/2019 Formule - Metastock
hardy@consulting.is
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.
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
198
http://slidepdf.com/reader/full/formule-metastock 198/554
8/6/2019 Formule - Metastock
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
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
A first. Youtowill
yoursee
Exploration. Ignore
a large white fieldthe
forupper
entry "Notes" section
of formulas and and clickfield
a small on Column
in the
199
http://slidepdf.com/reader/full/formule-metastock 199/554
8/6/2019 Formule - Metastock
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
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
XXXXXXXXXX
Vidya{P}
Periods:=Input("length of MA",5,100,20);
200
http://slidepdf.com/reader/full/formule-metastock 200/554
8/6/2019 Formule - Metastock
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
XXXXXXXXXX
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
with answer is tolike
something initialise it. For<a N,
"If(Cum(1) Vidya of the...)"
C,{else} close,
withperiod N, you
the Vidya can initialise
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
XXXXXXXXX
201
http://slidepdf.com/reader/full/formule-metastock 201/554
8/6/2019 Formule - Metastock
{Vidya (Chande)}
{from HHP}
XXXXXXXXXXXXX
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
MoneyMgmtStop:= {thisentry system,
is your eg. Cross(CLOSE,
maximum Mov(C,20,E))};
loss, in points};
202
http://slidepdf.com/reader/full/formule-metastock 202/554
8/6/2019 Formule - Metastock
{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));
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));
XXXXXX
HIGHER VOLUME EXPLORATION
Required: today's volume to be greater than the highest high over the past 21 days.
V>Ref(HHV(V,21),-1)
from HHP
XXXXXXXXXX
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/
203
http://slidepdf.com/reader/full/formule-metastock 203/554
8/6/2019 Formule - Metastock
from wsb
========================================================
where ... stands for all Ref( x,-i) with i between 2 and 18.
from Yngvi
========================================================
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:
XXXXXXXXXX
2. Stocks where the above situation hasn't occurred during the previous 60 days.
204
http://slidepdf.com/reader/full/formule-metastock 204/554
8/6/2019 Formule - Metastock
ColB = ref(barssince(V>10*ref(V,-1)),-1)
Volatility%
205
http://slidepdf.com/reader/full/formule-metastock 205/554
8/6/2019 Formule - Metastock
XXXXXXXXXX
1997 December TASC Trader's Tip - Volatility % Indicator
You can easily create the Volatility% Indicator from William Brower’s article in
MetaStock
MetaStock.for Windows.
Next Firstand
choose New choose
enterIndicator Builder
one of the fromformulas:
following the Tools menu in
Volatility%
206
http://slidepdf.com/reader/full/formule-metastock 206/554
8/6/2019 Formule - Metastock
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.
Use the following instructions to Import the MS65FORM.DTA file from the temp file
it was downloaded to.
1. Run MetaStock.
207
http://slidepdf.com/reader/full/formule-metastock 207/554
8/6/2019 Formule - Metastock
208
http://slidepdf.com/reader/full/formule-metastock 208/554
8/6/2019 Formule - Metastock
Name: H ip sum 1
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>14, Cos(360*(14/pd))*Ref(pr,-14), 0)
Name: H ip sum 2
209
http://slidepdf.com/reader/full/formule-metastock 209/554
8/6/2019 Formule - Metastock
pr:=(H+L)/2;
If(pd>24, Cos(360*(24/pd))*Ref(pr,-24), 0)
Name: H ip sum 3
pr:=(H+L)/2;
210
http://slidepdf.com/reader/full/formule-metastock 210/554
8/6/2019 Formule - Metastock
If(pd>34, Cos(360*(34/pd))*Ref(pr,-34), 0)
Name: H rp sum 1
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>14, Sin(360*(14/pd))*Ref(pr,-14), 0)
Name: H rp sum 2
pr:=(H+L)/2;
211
http://slidepdf.com/reader/full/formule-metastock 211/554
8/6/2019 Formule - Metastock
If(pd>24, Sin(360*(24/pd))*Ref(pr,-24), 0)
Name: H rp sum 3
pr:=(H+L)/2;
If(pd>34, Sin(360*(34/pd))*Ref(pr,-34), 0)
212
http://slidepdf.com/reader/full/formule-metastock 212/554
8/6/2019 Formule - Metastock
Name: H TL sum 1
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
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) +
213
http://slidepdf.com/reader/full/formule-metastock 213/554
8/6/2019 Formule - Metastock
If(value=25, Mov((H+L)/2,27,S),0)
Name: H TL sum 3
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)
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));
p1:=Atan(Abs(quad+Ref(quad,-1)),Abs(inphase+Ref(inphase,-1)));
214
http://slidepdf.com/reader/full/formule-metastock 214/554
8/6/2019 Formule - Metastock
dp2:=If(dp < 1, 1,
dp2
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)
pr:=(H+L)/2;
215
http://slidepdf.com/reader/full/formule-metastock 215/554
8/6/2019 Formule - Metastock
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.
Peter Martin
alakazam@bigpond.com
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
216
http://slidepdf.com/reader/full/formule-metastock 216/554
8/6/2019 Formule - Metastock
alakazam@bigpond.com
Regards
Peter Martin
alakazam@bigpond.com
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.
217
http://slidepdf.com/reader/full/formule-metastock 217/554
8/6/2019 Formule - Metastock
Equis put this function in for me. It uses VHF rather than CMO. Unlike the present
version, this is better.
Richard
RSI OFFSET
{from Warthog}
MACD OFFSET
{from Warthog}
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
218
http://slidepdf.com/reader/full/formule-metastock 218/554
8/6/2019 Formule - Metastock
219
http://slidepdf.com/reader/full/formule-metastock 219/554
8/6/2019 Formule - Metastock
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&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
Ref(H,-2)>=Ref(H,-1) andand PDI(14)>MDI(14)
Ref(H,-1)>=H and and
220
http://slidepdf.com/reader/full/formule-metastock 220/554
8/6/2019 Formule - Metastock
Ref(L,-2)<=Ref(L,-1) and
Ref(L,-1)<=L,LLV(L,3)-.125,IF(ADX(14)>30 and
221
http://slidepdf.com/reader/full/formule-metastock 221/554
8/6/2019 Formule - Metastock
D:{stop}L-.125+1
Filter: GapUp()>=Ref(HHV(H,40),-1) and C<=O and C<=((H-L)*.50)+L
ROC(Mov(C,13,E),21,%)
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))
222
http://slidepdf.com/reader/full/formule-metastock 222/554
8/6/2019 Formule - Metastock
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
223
http://slidepdf.com/reader/full/formule-metastock 223/554
8/6/2019 Formule - Metastock
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)
Support:=ValueWhen(1,Cross(C,Mov(C,LookBack,S)),LLV(L,LookBack));
Resistance * ((100-prcnt)/100);
Support * ((prcnt/100)+1);
224
http://slidepdf.com/reader/full/formule-metastock 224/554
8/6/2019 Formule - Metastock
{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
MACDcustom
225
http://slidepdf.com/reader/full/formule-metastock 225/554
8/6/2019 Formule - Metastock
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(
Filter: "MACDcustom , YourTrig" )
Formula:
Colb > Colc
{or
FML( "MACDcustom , MACD" ) > FML( "MACDcustom , YourTrig" )
}
Ton Maas
Submitted by warrah@comcen.com.au
226
http://slidepdf.com/reader/full/formule-metastock 226/554
8/6/2019 Formule - Metastock
if you want to identify directional movement by expressing that the ADX "is rising"
the most basic way to do it would be:
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.
Brown's Indicator.
----------------------------------------
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,
Part2:= 15,S)));
{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
227
http://slidepdf.com/reader/full/formule-metastock 227/554
8/6/2019 Formule - Metastock
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.
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)
SimpleX LONG:
SimpleX SHORT:
228
http://slidepdf.com/reader/full/formule-metastock 228/554
8/6/2019 Formule - Metastock
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
Support:=ValueWhen(1,Cross(C,Mov(C,LookBack,S)),LLV(L,LookBack));
Resistance * ((100-prcnt)/100);
Support * ((prcnt/100)+1);
Resistance
LookBack :=andInput("Look
Support 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;
229
http://slidepdf.com/reader/full/formule-metastock 229/554
8/6/2019 Formule - Metastock
Mov(C,10,E);Mov(C,12,E);Mov(C,15,E);
From superform@hotmail.com
230
http://slidepdf.com/reader/full/formule-metastock 230/554
8/6/2019 Formule - Metastock
colum will then allow you to estaboish the overall score for each stock.
MACDcustom
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 def ault 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:
Formula:MACDTrigger
FML( "MACDcustom , YourTrig" )
Filter:
Formula:
Colb > Colc
{or
FML( "MACDcustom , MACD" ) > FML( "MACDcustom , YourTrig" )
}
Ton Maas
Submitted by warrah@comcen.com.au
231
http://slidepdf.com/reader/full/formule-metastock 231/554
8/6/2019 Formule - Metastock
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.
Brown's Indicator.
----------------------------------------
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
speaks by Chuck
of the LeBeau about
actual strength trading
of a trend with theto
as opposed trend has its
merely stayed with me.
direction. He
Entry
232
http://slidepdf.com/reader/full/formule-metastock 232/554
8/6/2019 Formule - Metastock
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.
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)
SimpleX LONG:
C <= Ref(C,-1)
Ref(C, AND -2) AND
-1) <= Ref(C,
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:
233
http://slidepdf.com/reader/full/formule-metastock 233/554
8/6/2019 Formule - Metastock
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
Micks 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
ald and we thank him for his contributions. Formula writer Steve Karnish and Henry
gup78.htmgup78.htm
gup79.htmgup79.htm
gup80.htmgup80.htm
gup91.htmgup91.htm
gup96.htmgup96.htm
234
http://slidepdf.com/reader/full/formule-metastock 234/554
8/6/2019 Formule - Metastock
gup97.htmgup97.htm
gup103.htmgup103.htm
gup121.htmgup121.htm
gup128.htmgup128.htm
gup131.htmgup131.htm
gup142.htmgup142.htm
gup152.htmgup152.htm
gup153.htmgup153.htm
gup154.htmgup154.htm
gup77.htmgup77.htm
index.htmlindex.html
gup.23gup.23
gup65.htmgup65.htm
http://www.stockcentral.com.au/forum/http://www.stockcentral.com.au/forum/
gup64.htmgup64.htm
gup9.htmgup9.htm
gup59.htmgup59.htm
gup35.htmgup35.htm
asia1.htmasia1.htm
gup21.htmgup21.htm
235
http://slidepdf.com/reader/full/formule-metastock 235/554
8/6/2019 Formule - Metastock
Display notes
Columns are very wide so that each column can be copied and pasted directly into a
Metastock exploration.
A brief description of the indicator follows the name.
If you have Metastock Exploration formulas you would like to share, please email
them to 100035.406@compuserve.comWe will include the name of the person who
submitted the formula unless you instruct us otherwise. These are only a starter list.
Feel free to add to them.
We welcome your feedback, comments about the site and news of new web sites.
Ask about reciprocal links.
We answer your email usually within 1 working day. Haven't got a reply?
Limited space is available on this site for your advertising message. Contact us
for details. 100035.406@compuserve.com
This site and the original material contained in it is copyright., Guppytraders.com Pty
Ltd ACN 089 941 560 1996,1997, 1998, 1999©
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.
trade andIfput
thea stock breaches
trailing theinto
stop loss previous
play. day's close on the open, I will enter the
236
http://slidepdf.com/reader/full/formule-metastock 236/554
8/6/2019 Formule - Metastock
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
I found a problem with the %Bands formulas posted yesterday. No matter what
optional parameters are entered for EMA length or % bandwidth, the
Expert
default appears to read
parameters, the only the default
coloured values.
dots appear in As a result, when using other than
inappropriate
237
http://slidepdf.com/reader/full/formule-metastock 237/554
8/6/2019 Formule - Metastock
places. If the coloured dots are considered unnecessary the Expert can simply be
detached.
{NAME: %Bands}
MA:= Mov(C,Pds,E);
TBnd:= MA*(1+Pct/100);
LBnd:= MA*(1-Pct/100);
MA; TBnd; LBnd;
{NAME: %BandsCount}
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") >= 1price plot
Graphic tab: Dot, Small, Magenta, Below
238
http://slidepdf.com/reader/full/formule-metastock 238/554
8/6/2019 Formule - Metastock
{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);
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")
{Graphic: Dot, Small, Magenta, Below>= 1 plot}
price
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)+
239
http://slidepdf.com/reader/full/formule-metastock 239/554
8/6/2019 Formule - Metastock
((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
240
http://slidepdf.com/reader/full/formule-metastock 240/554
8/6/2019 Formule - Metastock
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.
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
ATRDays:=Input("ATR Days",1,30,10);
HighStop:= H - ATRHighMult*ATR(ATRDays);
CloseStop:= C - ATRCloseMult*ATR(ATRDays);
241
http://slidepdf.com/reader/full/formule-metastock 241/554
8/6/2019 Formule - Metastock
242
http://slidepdf.com/reader/full/formule-metastock 242/554
8/6/2019 Formule - Metastock
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 ADXA:starting
Column ADX(21)to move higher, you could try:
Column B: Ref(ADX(21),-1)
Filter: ADX(21)>ADXR(21) AND Ref(ADX(21),-1)<=Ref(ADXR(21),-1
243
http://slidepdf.com/reader/full/formule-metastock 243/554
8/6/2019 Formule - Metastock
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
or equal rally orrally
to the previous reaction day's high
or reaction day'sAND
low. the current bar's low is greater than
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
244
http://slidepdf.com/reader/full/formule-metastock 244/554
8/6/2019 Formule - Metastock
DMI EXPLORATION VERSION 3
QUESTION:
Icrossing
want to of
dothe
an two,
exploration with Directional
i.e., yesterday Movement
+DX is less than -DX,Index.
todayI +DX
want is
togreater
scan forthan
the -
DX and visa versa.
from Dan
ANSWER:
+DX(14) > -DX(14)
AND Ref(+DX(14),-1) < Ref(-DX(14),-1)
from Peter Gialames
EXCEL CONFIDENCE % INDICATOR
EXCEL CONFIDENCE % FOR METASTOCK
Simple Interpretation:
Excel Confidence % should oscillate between 0 and 100, usually at the extreme ends
of the scale. A value of 0 indicates no confidence in the market going up, whilst 100
245
http://slidepdf.com/reader/full/formule-metastock 245/554
8/6/2019 Formule - Metastock
indicates perfect confidence in the market going up. Although this obviously isn't the
holy grail of indicators, it does offer some insight into what the market is thinking and
how one can measure investor sentiment. You might like to add a slower version of
this (just increase the 3 day and 5 day calculations to something you believe to be
appropriate - try 7 & 15) and trade the crossovers, as with stochastics. You can also
just trade the values ie 90 or higher, buy, 10 or lower, sell.
Metastock code for Excel Confidence %:
(Sum(
Mov(C * (2.5/ Sqrt(50 * V)),10,S)-
LLV(Mov(C * (2.5/ Sqrt(50 * V)),10,S),5), 3 ) /
Sum(
HHV(Mov(C * (2.5/ Sqrt(50 * V)),10,S),5) -
LLV(Mov(C * (2.5/ Sqrt(50 * V)),10,S),5), 3) ) * 100
FRONT WEIGHTED MOVING AVERAGE
Simple Interpretation:
Front Weighted 36 Day Moving Average is similar to all other moving averages. The
interpretation is just as with all others, the trend is up when prices are above the
moving average and the trend is down when prices are below the moving averages.
This particular variation attempts to weight the data at the front more than that at the
back, with a sliding scale for each trading days value.
Metastock code for Front Weighted 36 Day Moving Average:
Fml( "1FrontWeighted36BarMA1" ) +
Fml( "2FrontWeighted36BarMA2" ) +
Fml( "3FrontWeighted36BarMA3" )
Where Fml( "1FrontWeighted36BarMA1" ) =
0.01 * Ref(P,-34) +
0.01 * Ref(P,-33) +
0.01 * Ref(P,-32) +
0.01 * Ref(P,-31) +
0.01 * Ref(P,-30) +
0.01 * Ref(P,-29) +
0.01 * Ref(P,-28) +
0.01 * Ref(P,-27) +
0.01 * Ref(P,-26) +
0.02 * Ref(P,-25) +
0.02 * Ref(P,-24) +
0.02 * Ref(P,-23) +
0.02
0.02 ** Ref(P,-22)
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
0.031 ** Ref(P,-12)
Ref(P,-11) +
+
246
http://slidepdf.com/reader/full/formule-metastock 246/554
8/6/2019 Formule - Metastock
0.031 * Ref(P,-10) +
0.031 * Ref(P,-9) +
0.031 * Ref(P,-8) +
0.006 * Ref(P,-7) +
0.006 * Ref(P,-6) +
0.07 * Ref(P,-5) +
0.07 * Ref(P,-4) +
0.07 * Ref(P,-3) +
0.07 * Ref(P,-2)
Where Fml( "3FrontWeighted36BarMA3" ) =
0.07 * Ref(P,-1) +
0.079 * P
SWING CHART
SWING CHART FOR METASTOCK
Among the single-handful of tech analysis indicators I've come to value in seeking out
potentially profitable trades is the good old swing chart. This is not present in the
standard MetaStock 6.5 armoury (at least my edition of it)but Equis derived the
following formula to me some time ago for the daily swing -
If( High > Ref(High,-1) AND Low > Ref(Low,-1), High, If( High <
Ref(High,-1) AND Low < Ref(Low,-1), Low, PREV))
Simple really! It certainly doesn't show up as a nice rectangular pattern, but you get
used to reading it just as fluently for just as correct interpretation. This formula is
easily adapted for any other time period by using Highest High Value and such-like
functions instead of the Ref function. Though with a little more tooling, it is also
readily adaptable to price swing charting rather than time swings.
How to filter out dead stocks
Here is how I do it (in the MetaStock Explorer filter):
y1:=2000;
m1:=7;
dt:=25;
test:=If(Year()<>y1,1,If(Month()<>m1,1,If(DayOfMonth()<>dt,1,0)));
Test=1
Since the Explorer does not allow the Input Function, you will need to enter the Year,
Month, and Day as the variables y1,m1,and dt, respectively.
from Michael
RSI of MACD
Q:=Input("Periods",1,1000,14);
Z:=Wilders(If(ROC(MACD(),1,$)>0,ROC(MACD(),1,$),0),LastValue(Q));
Y:=Wilders(If(ROC(MACD(),1,$)<0,Abs(ROC(MACD(),1,$)),0),LastValue(Q));
RS:=Z/Y;
100-(100/(1+RS))
from Pierre Tremblay
WRITING EXPERT COMMENTARY
Here's how to use MetaStock Expert function with the tab for commentary. For
example, I wrote this commentary that I can attach to any stock, and it will give me
the next day's projected high & low.
PRICES:
TODAY'S CLOSE WriteVal(CLOSE,2.3)
TOMMOROW's
PROJECTED HIGH
247
http://slidepdf.com/reader/full/formule-metastock 247/554
8/6/2019 Formule - Metastock
248
http://slidepdf.com/reader/full/formule-metastock 248/554
8/6/2019 Formule - Metastock
In his article "Normalization", Brian Bell introduces some methods for normalizing
indicators. These methods can be easily created in MetaStock 6.52 or higher.
Select Indicator Builder from the Tools Menu, click New and enter the formula for
the desired method.
Name: Simple Moving Average Oscillator
OscP(4,8,S,$)
Name: Simple MA Osc norm to Std Dev
OscP(4,8,S,$)/Stdev(C,8)
Name: Simple MA Osc norm to Ave True Range
OscP(4,8,S,$)/ATR(8)
Name: Simple MA Osc norm to Historical Range
OscP(4,8,S,$)/WillR(200)
Note: To apply these methods to different indicators replace the Simple Moving
Average Oscillator portion with the desired indicator's formula.
Cheryl C. Abram, Equis International, Inc.
Custom Relative Momentum Index (RMI) Indicator for MetaStock
Q:=Input("RSI Time Periods",1,1000,14);
M:=Input("Momentum Time Periods",1,1000,5);
B:=Input("Field: 1=Close, 2=Open, 3=High, 4=Low, 5=Volume",1,5,1);
Bval:=If(B=1,C,If(B=2,O,If(B=3,H,If(B=4,L,V))));
Mom:=Bval-Ref(Bval,-M);
Z:=Wilders(If(ROC(Mom,1,$)>0,
ROC(Mom,1,$),0),LastValue(Q));
Y:=Wilders(If(ROC(Mom,1,$)<0,
Abs(ROC(Mom,1,$)),0),LastValue(Q));
RMS:=Z/Y;
RMIcust:=100-(100/(1+RMS));
Mov(RMIcust,M,S)
from Ton Maas
RSI OF THE MACD
In the indicator builder, you can create RSI of MACD (with MS 6.5 and later) :
Q:=Input("Periods",1,1000,14);
Z:=Wilders(If(ROC(MACD(),1,$)>0,ROC(MACD(),1,$),0),LastValue(Q));
Y:=Wilders(If(ROC(MACD(),1,$)<0,Abs(ROC(MACD(),1,$)),0),LastValue(Q));
RS:=Z/Y;
100-(100/(1+RS))
From Custom Relative Strength Index (RSI) from Equis site ...
http://www.equis.com/customer/support/formulas/cf00098.html
...I just put MACD in the formula.
I hope this helps...
Pierre Tremblay
How can we calculate the RSI of MACD?
Warmest regards,
Alex Spiroglou
V OLATILITY B REAKOUT
249
http://slidepdf.com/reader/full/formule-metastock 249/554
8/6/2019 Formule - Metastock
If you want to Highlight the Winning days in one colour and the Losing days in
another, just use 'FmlVar("System - Volatility Breakout","WIN")' as the condition for
a WIN, etc.
The above
prices. is the only
I suppose way alternative
the other I can see toistest a system in MS that specifies the entry/exit
Excel!
250
http://slidepdf.com/reader/full/formule-metastock 250/554
8/6/2019 Formule - Metastock
Sean Taylor
McClellan Oscillator:
Equis' StochRSI
- Tushar Chande
(RSI(14)-LLV(RSI(14),14))/(HHV(RSI(14),14)-LLV(RSI(14),14))*100
251
http://slidepdf.com/reader/full/formule-metastock 251/554
8/6/2019 Formule - Metastock
(Sum(RSI(14)-LLV(RSI(14),14),3)/Sum(HHV(RSI(14),14)-
LLV(RSI(14),14),3))*100
StochRSI oscillator
- Craig DeHaan
{configurable formula for the StochRSI oscillator to quickly find what time
periods/method you prefer to work with. CDH's List-post.
(Sun, 15 Nov 1998 "Re: Finding the Stochastic of the Relative Strength")}
mp1:=Input("RSI Periods",1,377,13);
mp2:=Input("Stochastic Periods",1,377,13);
mp3:=Input("Smoothing Periods",1,377,8);
mat:=Input("MA Type: S, E, W",1,3,2); {1=S,2=E,3=W}
If(mat=1, Mov((RSI(mp1)-LLV(RSI(mp1),mp2))/(.0000001+
HHV(RSI(mp1),mp2)-LLV(RSI(mp1),mp2)),mp3,S)*100,
If(mat=2, Mov((RSI(mp1)-LLV(RSI(mp1),mp2))/(.0000001+
HHV(RSI(mp1),mp2)-LLV(RSI(mp1),mp2)),mp3,E)*100,
If(mat=3, Mov((RSI(mp1)-LLV(RSI(mp1),mp2))/(.0000001+
HHV(RSI(mp1),mp2)-LLV(RSI(mp1),mp2)),mp3,W)*100,0)))
{ from www.equis.com }
rev. 01/06/97
In his book The New Technical Trader, Tushar Chande defines the Stochastic RSI as:
PSYCHOLOGICAL INDEX
252
http://slidepdf.com/reader/full/formule-metastock 252/554
8/6/2019 Formule - Metastock
periods:=Cum(If(C>0,1,0));
dollars:=C-ValueWhen(1,periods=1,C);
percnt:=C/ValueWhen(1,periods=1,C);
percnt; [or] dollars;
You can quickly run an exploration and look at the buy and hold on everything in
dollars or in percentage terms.
Michael
Period := Input("Period",10,200,20);
Mov(If( CMF(Period ) > 0, 1, -1),Period,S)/Period;
0;
from Bob Sims
Doji alert
I want to signal when a Doji occurs following a four-day consecutive increasing
CLOSE. I would like this to be an ALERT, signaling if this completed pattern has
occurred within the last five days. from Barry Kales
Alert(Doji() AND
Ref(C,-1) > Ref(C,-2) AND
Ref(C,-2) > Ref(C,-3) AND
Ref(C,-3) > Ref(C,-4) AND
Ref(C,-4) > Ref(C,-5),5)
from CatLady
Sine wave
This is a 28 period sine wave. The "flaw" is that it starts from the first period loaded
in the chart rather than an absolute date. Change the -12 to shift the wave right or left.
Ref(Sin( Cum(360/28) ), -12)
There's also MetaStock's built-in cycle lines drawing tool.
from CatLady
Displaced moving average system test
Here's an example of how to specify displaced moving average in the system tester . .
..
Buy:
Cross(C,Ref(Mov(C,50,e),-15))
Sell: {uses 50ema displaced by 15 days}
Cross(Ref(Mov(C,50,e),-15),C)
from Paul Beattie
V OLATILITY E XPLORATION
ATR(20) / MOV(Close,20,Simple)
from Glen Wallace
253
http://slidepdf.com/reader/full/formule-metastock 253/554
8/6/2019 Formule - Metastock
R ELATIVE V OLATILITY I NDEX
Taken from Stocks & Commodities, V. 11:6 (253-256): The Relative Volatility
Index by Donald Dorsey
"The RVI is simply the relative strength index (RSI) with the standard
deviation over the past 10 days used in place of daily price change. Because
most indicators use price change for their calculations, we need a confirming
indicator that uses a different measurement to interpret market strength. The
RVI measures the direction of volatility on a scale of zero to 100. Readings
above 50 indicate that the volatility as measured by the 10-day standard
deviation of the closing prices is more to the upside. Readings below 50
indicate that the direction of volatility is to the downside. The initial testing
indicates that the RVI can be used wherever you might use the RSI and in the
same way, but the specific purpose of this study is to measure the RVI's
performance as a confirming indicator."
The RVI was designed to measure the direction of volatility. It calculates price
strength by measuring volatility rather than price change.
All of the following formulas are required:
@RVI Down
((PREV*13)+If(ROC(C,1,%)<0,Stdev(C,10),0))/14
@RVI Up
((PREV*13)+If(ROC(C,1,%)>0,Stdev(C,10),0))/14
@RVI
(100*Fml("@RVI Up"))/(Fml("@RVI Up")+Fml("@RVI Down"))
254
http://slidepdf.com/reader/full/formule-metastock 254/554
8/6/2019 Formule - Metastock
SmoothedStochK;
from iamken
Must be installed using the Indicator builder before Guppy Multiple Moving Average
Exploration can be run .
MMA 10/45
If(OscP(10,45,E,%)>0,+1,-1)
MMA 12/50
If(OscP(12,50,E,%)>0,+1,-1)
MMA 15/60
If(OscP(15,60,E,%)>0,+1,-1)
MMA 3/30
If(OscP(3,30,E,%)>0,+1,-1)
MMA 5/35
If(OscP(5,35,E,%)>0,+1,-1)
MMA 8/40
If(OscP(8,40,E,%)>0,+1,-1)
You just want to ask for an MA higher than yesterday, or higher than last week. So
e.g., "mov(c,20,s)>ref(mov(c,20,s),-1)" or
"mov(c,20,s)>ref(mov(c,20,s),-7)"
Malcolm Scott
Name: MyIndicator-n
255
http://slidepdf.com/reader/full/formule-metastock 255/554
8/6/2019 Formule - Metastock
Formula: Mov(c,10,s)
Now use the formula call function, e.g., create yet another indicator:
Name: MyCalls
Formula: fml (" MyIndicator-n ")
Place the above line in the formula field and repeat the line as needed.
"When I use the FML() function in a formula to call a Multiple Expression formula
my formula only sees one of the Lines. Why? "
The FML() function cannot call multiple values from one formula to another formula.
The FML function can only call one value from one formula to another. If FML()
calls a Multiple Expression formula it can only return the value of the Last Expression
in a Multiple Expression formula, from one formula to another.
For example the following formula creates a Customized MACD with 3 trigger lines.
When plotted it plots a total of 4 lines, exactly as expected.
Mov(C,11,E)-Mov(C,30,E);
Mov(Mov(C,11,E)-Mov(C,30,E),12,E);
Mov(Mov(C,11,E)-Mov(C,30,E),25,E);
Mov(Mov(C,11,E)-Mov(C,30,E),50,E)
If you need to use FML() to call multiple values into another formula it is best to
break the Multiple Expression Formula into Separate formulas. Then call each
separate formula with a separate FML() call.
The following example formula uses FML() calls but would generate multiple plots
when displayed in a chart:
FML("Mov(C,11,E)-Mov(C,30,E)");
FML("Mov(Mov(C,11,E)-Mov(C,30,E),12,E)"); FML("Mov(Mov(C,11,E)-
Mov(C,30,E),25,E)");
FML("Mov(Mov(C,11,E)-Mov(C,30,E),50,E)")
You could also assign variables to each expression and then use the FMLVAR()
function to call each of the expressions.
256
http://slidepdf.com/reader/full/formule-metastock 256/554
8/6/2019 Formule - Metastock
For example:
Formula: Multiple
One := Mov(C,11,E)-Mov(C,30,E);
Two := Mov(Mov(C,11,E)-Mov(C,30,E),12,E);
Three := Mov(Mov(C,11,E)-Mov(C,30,E),25,E);
Four := Mov(Mov(C,11,E)-Mov(C,30,E),50,E);
One;
Two;
Three;
Four
Formula: Call
FMLVAR("Multiple","One");
FMLVAR("Multiple","Two");
FMLVAR("Multiple","Three");
FMLVAR("Multiple","Four")
Refer to the MetaStock 6.5 manual and/or on-line help for more information on using
variables and the function FMLVAR().
{ fromTon Maas}
257
http://slidepdf.com/reader/full/formule-metastock 257/554
8/6/2019 Formule - Metastock
StopVal;
from J. Seed
RSI of MACD
UpCl:= C * (C > Ref(C, -1));
Sum(UpCl,14);
from HHP
ENTER SHORT
Engulfingbear()
{Means: today there was an engulfingbear signa, so enter trade.}
EXIT SHORT
Ref(Engulfingbear, -3)
{Means: as of the current day, there was an EngulfingBear three days previous, so
exit the trade today.}
258
http://slidepdf.com/reader/full/formule-metastock 258/554
8/6/2019 Formule - Metastock
{Enter long}
{System Tester options are set to enter on the Close}
BuyTrigger:=(MOV(C,10,E) - MOV(C,30,E)) / MOV(C,30,E);
BuyTrigger > 0.05
{Close long}
BuyTrigger:=(MOV(C,10,E) - MOV(C,30,E)) / MOV(C,30,E);
BuyPrice:= If(PREV <= 0,
{Then did you go long today?}
If(BuyTrigger > 0.05, CLOSE, 0),
{Else did you exit today?}
If(Close >= PREV*(1+BuyTrigger), -PREV,
PREV));
BuyPrice < 0
{In this formula, BuyPrice is the close on the date BuyTrigger exceeds your
threshold. If you are in a trade and have just received a sell signal, BuyPrice is
redefined as a negative, and System Tester is told to close your long position. If you
are not currently in a trade, BuyPrice is assigned a zero value and System Tester is
told to watch for a new long entry.}
GANN-HiLo 2
HLd:=If(CLOSE>Ref(Mov(H,3,S),-1),
{then}1,
{else}If(CLOSE<Ref(Mov(L,3,S),-1),
{then}-1,
{else}0));
HLv:=ValueWhen(1,HLd<>0,HLd);
HiLo:=If(HLv=-1,
{then}Mov(H,3,S),
{else}Mov(L,3,S));
HiLo;
Gann hi lo crossover
I took the "GANN-HiLo" indicator one step further, exploring in EOD which stocks
crossed the GANN-HiLo dots.
cola buy:
Cross(C, Fml("GANN-HiLo")) AND
CLOSE > Fml("GANN-HiLo")
colb sell:
Cross(C,
CLOSE <Fml("GANN-HiLo"))
Fml("GANN-HiLo") AND
259
http://slidepdf.com/reader/full/formule-metastock 259/554
8/6/2019 Formule - Metastock
filter:
cola=1 or colb=1
S IDEWAYS C HANNELS E XPLORATION
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
{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)
260
http://slidepdf.com/reader/full/formule-metastock 260/554
8/6/2019 Formule - Metastock
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.
BUY -1 SELL 1
PFE Indicator:
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.
FibboGatto
261
http://slidepdf.com/reader/full/formule-metastock 261/554
8/6/2019 Formule - Metastock
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)
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.
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}
Most
zonesindicators use a fixedtozone
that are responsive for buyofand
past levels thesell signals. Here's a concept based on
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.
262
http://slidepdf.com/reader/full/formule-metastock 262/554
8/6/2019 Formule - Metastock
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
Compare each to ordinary Dahl or some other trend indicator. Remember, I put a 21
EMA trigger on each.
D AHL 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.
263
http://slidepdf.com/reader/full/formule-metastock 263/554
8/6/2019 Formule - Metastock
{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,
2 D AY H AMMER E XPLORATION
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
from Styk
264
http://slidepdf.com/reader/full/formule-metastock 264/554
8/6/2019 Formule - Metastock
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
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
%%%%%%%%%%%%%
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.
S1 Indicator:
265
http://slidepdf.com/reader/full/formule-metastock 265/554
8/6/2019 Formule - Metastock
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))
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
avoids a rare that the change
but occasional for each
error when level change
the price is eitheriszero
veryorlarge
1. This
over
266
http://slidepdf.com/reader/full/formule-metastock 266/554
8/6/2019 Formule - Metastock
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 I NDICATOR:
L1:=ValueWhen(1,Ref(H,-4)=HHV(H,9),Ref(H,-4));
L2:=ValueWhen(2,Ref(H,-4)=HHV(H,9),Ref(H,-4));
L3:=ValueWhen(3,Ref(H,-4)=HHV(H,9),Ref(H,-4));
L4:=ValueWhen(4,Ref(H,-4)=HHV(H,9),Ref(H,-4));
L5:=ValueWhen(5,Ref(H,-4)=HHV(H,9),Ref(H,-4));
L6:=ValueWhen(6,Ref(H,-4)=HHV(H,9),Ref(H,-4));
L1M:= Max(0,Min(1,Int(L1/C)));
L2M:= Max(0,Min(1,Int(L2/C)));
L3M:= Max(0,Min(1,Int(L3/C)));
L4M:= Max(0,Min(1,Int(L4/C)));
L5M:= Max(0,Min(1,Int(L5/C)));
L6M:= Max(0,Min(1,Int(L6/C)));
100*(1-(L1M+L2M+L3M+L4M+L5M+L6M)/6)
The WRO and WSO oscillators are generally plotted together on a separate
scale from the price plot. It is helpful to add horizontal lines at zero and
100 on this same scale. Horizontal lines can be added by clicking on the
indicator and selecting "horizontal lines" from the Indicator Properties
menu.
These formulas run much faster (by 40 times) than the earlier formulas, and
theyÕve been tested successfully with both end-of-day data and real-time
data using MetaStock Professional Version 6.51.
267
http://slidepdf.com/reader/full/formule-metastock 267/554
8/6/2019 Formule - Metastock
%%%%%%%%%%%%%
G AP1 SYSTEM
===========
{BUY}
L>Ref(H,-1) OR
Cum(1)=LastValue(Cum(1))
{SELL}
H<Ref(L,-1) OR
Cum(1)=LastValue(Cum(1))
G AP 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))
Gap3 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}
268
http://slidepdf.com/reader/full/formule-metastock 268/554
8/6/2019 Formule - Metastock
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))
%%%%%%%%
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)
%%%%%%%%%
Ref(RSI(14),-1)>Trough(1,RSI(14),.8)
AND
Ref(CLOSE,-1)<Trough(1,CLOSE,.2)
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
269
http://slidepdf.com/reader/full/formule-metastock 269/554
8/6/2019 Formule - Metastock
(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)
%%%%%%%%%%%
D ENVELOPE (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;
270
http://slidepdf.com/reader/full/formule-metastock 270/554
8/6/2019 Formule - Metastock
dt;
but;
%%%%%%%%%%%%%
CYLICAL SYSTEM
=============================================================
=
"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).
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);
271
http://slidepdf.com/reader/full/formule-metastock 271/554
8/6/2019 Formule - Metastock
J
KCYCL
---------------------------
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
page, set the Delay
the Trade formulas, clickset
to zero, OK. Then click
Positions Options.
to "both", andOn theset
then Testing
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
272
http://slidepdf.com/reader/full/formule-metastock 272/554
8/6/2019 Formule - Metastock
ST OSCILLATOR
{name: StTO}
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}
%%%%%%%%%%%%%
273
http://slidepdf.com/reader/full/formule-metastock 273/554
8/6/2019 Formule - Metastock
{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.}
{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
LOOK B ACK
Name: BuyBreak
Formula: HHV(H, LastValue(Fml("LookBack")+Prev-Prev))
Name: BuyExit
Formula: LLV(L, LastValue(Fml("LookBack")/2+Prev-Prev))
274
http://slidepdf.com/reader/full/formule-metastock 274/554
8/6/2019 Formule - Metastock
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)+StochMo
mentum
(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)+Stoc
hMome
ntum(5,3,5)+StochMomentum(8,21,13)+StochMomentum(13,25,2),13,E)
Plot 1:
275
http://slidepdf.com/reader/full/formule-metastock 275/554
8/6/2019 Formule - Metastock
2. trend(100,100)
3. trend(-100,-100)
4. trend(0,0)
%%%%%%%%%%%%%%
M CC
LELLAN 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 .
Mov(CLOSE,19,EXPONENTIAL) - Mov(CLOSE,39,EXPONENTIAL)
M CC
LELLAN SUMMATION I NDEX
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.
276
http://slidepdf.com/reader/full/formule-metastock 276/554
8/6/2019 Formule - Metastock
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)
277
http://slidepdf.com/reader/full/formule-metastock 277/554
8/6/2019 Formule - Metastock
B ARNES' ACCELERATION
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.
B ARNES' A DAPTIVE FORECAST
Based on the premise that closing price may be predictable based on previous
closes
B ARNES' M OVING AVERAGE
278
http://slidepdf.com/reader/full/formule-metastock 278/554
8/6/2019 Formule - Metastock
%%%%%%%%%%%%%%%%
Chande & 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."
Pwr(Corr(Cum( 1 ),C,14,0),2)
Mov(Pwr(Corr(Cum( 1 ),C,14,0),2)*100,14,S)
PAIN
((C-O)+(C-H)+(C-L))/2
%%%%%%%%%%%%%%%%%%%
N
ATENBERG'S V OLATILITY
rev. 01/21/97
279
http://slidepdf.com/reader/full/formule-metastock 279/554
8/6/2019 Formule - Metastock
The above assumes Weekly Data. To utilise this with Daily Data, the
MetaStock formula would be:
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)
%%%%%%%%%%%%%%%
T
EMA STOCH
RSI FORMULA
%%%%%%%%%%%%%%%%%5
DEVSTOP
280
http://slidepdf.com/reader/full/formule-metastock 280/554
8/6/2019 Formule - Metastock
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.
from Mikelu
%%%%%%%%%%%%
W EEKLY P IVOT POINT
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;
281
http://slidepdf.com/reader/full/formule-metastock 281/554
8/6/2019 Formule - Metastock
R1;
S1;
S2;
%%%%%%
STO RSI
Here is the formula for Metastock for the StoRSI. I have made it so we can change
timeperiods of RSI and MA´s and also so that we can change the type of MA´s.
Lars.
RSIPeriod:= Input("Enter periods for RSI",2,300,8);
HLPeriod:= Input("Enter periods for HHV and LLV",2,300,8);
MAPeriod:=
mat:= Input("Input("Enter periods for Moving Average",2,300,3);
MA Typ,S,E,W,T",1,4,2);{1=S,2=E,3=W,4=T}
If(mat=1,(Mov((RSI(RSIPeriod)-
LLV(RSI(RSIPeriod),HLPeriod))/(HHV(RSI(RSIPeriod),HLPeriod)-
LLV(RSI(RSIPeriod),HLPeriod)),MAPeriod,S)*100),
If(mat=2,(Mov((RSI(RSIPeriod)-
LLV(RSI(RSIPeriod),HLPeriod))/(HHV(RSI(RSIPeriod),HLPeriod)-
LLV(RSI(RSIPeriod),HLPeriod)),MAPeriod,E)*100),
If(mat=3,(Mov((RSI(RSIPeriod)-
LLV(RSI(RSIPeriod),HLPeriod))/(HHV(RSI(RSIPeriod),HLPeriod)-
LLV(RSI(RSIPeriod),HLPeriod)),MAPeriod,W)*100),
If(mat=4,(Mov((RSI(RSIPeriod)-
LLV(RSI(RSIPeriod),HLPeriod))/(HHV(RSI(RSIPeriod),HLPeriod)-
LLV(RSI(RSIPeriod),HLPeriod)),MAPeriod,T)*100),0))))
Here is one that works for TS6. Should work for yours.
Randy
Input: Price(close),RSILen(5),Length(3);
Var:StochRSI1(0), Value2(0), Value3(0);
{StochRSI1 =
(Summation(RSI(Price, RSILen) -
Lowest(RSI(Price, RSILen), Length),3)) /
(Summation(Highest(RSI(Price, RSILen), Length) -
Lowest(RSI(Price, RSILen), Length),3));}
Value2=(Summation(RSI(Price, RSILen) -
Lowest(RSI(Price, RSILen), Length),3));
Value3=(Summation(Highest(RSI(Price, RSILen), Length) -
Lowest(RSI(Price, RSILen), Length),3));
StochRSI1 = Iff(Value2=0,0,Value2/Value3);
Plot1(StochRSI1 *100,"StochRSI");
282
http://slidepdf.com/reader/full/formule-metastock 282/554
8/6/2019 Formule - Metastock
Plot2(80);
Plot3(20);
RSIVal=RSI(C,LENGTH);
Value1=Highest(RSIVal,Length);
Value2=Lowest (RSIVal,Length);
Value3=Value1-Value2;
If CurrentBar>Length and Value3>0
then StochRSI_Lee = (RSIVal-Value2)/Value3*100
else StochRSI_Lee = 50 ;
ATR MODIFIED
{
%%%%%%%%%%%%%%%%%
from Ken
%%%%%%%%%%%%%%%%%%
283
http://slidepdf.com/reader/full/formule-metastock 283/554
8/6/2019 Formule - Metastock
M INER’S STO RSI
This indicator came out a number of years ago now and was a hot topic on
compuserve. Sorry, but the thread I saved on it seems to be gone.
Haven't spoken to John Yurko in years but here are two of John's original posts on
StochRsi from CompuServe circa 1995. I backtested the heck out of his "rules" but
found the results inconclusive.
Earl
It was discussed in Chande & Kroll's book 'The New Technical Trader'. Pub
1994 by John Wiley & Sons ISBN 0-471-59780-5 $49.95
It took me only one scan of the book before I decided to buy it, as I saw the potential
of this one indicator at helping identify low risk long and short entry points. Like I
said, I took the simple-minded approach and applied this indicator's ability to define
when a security is strongly trending, by tracking it over a longer time frame (14
week), and looking for 'oversold' or 'overbought' readings with a shorter time frame
(14 day). I've not yet tried to optimize those time frames, or the definitions of
'strongly trending', 'oversold' or 'overbought'.
I wrote the formula quite easily in MSW 5.0, but you have to work with the direct
definition of Stochastics. Remember, StochasticsRSI doesn't calculate the Stochastics
of PRICE values, it calculates Stochastics of RSI values. In essence, in MetaStock's
language, wherever you see a Price, usually the Close, in the Stochastics formula,
284
http://slidepdf.com/reader/full/formule-metastock 284/554
8/6/2019 Formule - Metastock
You could of course use a 3-period slowing instead of the 15-period slowing as I
have, but I thought it more "logical" to multiply all the terms in the 14-period
StochasticsRSI by 5 to arrive at the 70-period StochasticsRSI.
Enjoy!
John
First of all, StochRSI gives relatively _few_ buy signals. If you get a half dozen in a
year for a particular stock, that's a lot. Remember, the stock (or market) has to be
trending or beginning to trend before StochRSI will give you low risk buy points.
BTW, I never said in any of my messages that I use StochRSI for _sell signals,
although the occasional super obvious divergence does show itself now and again.
You can use a 50-day MA crossing if you're shorter term oriented as your sell signal,
or the stock's 150-day SMA if you're long term oriented, and test that as an exit rule
for StochRSI. I don't though, at least not by itself. <g> However, if I told you what I
_do_ use, I'd be revealing details of my proprietary Bell Ringer system, which does
use a 150-day SMA as a 'just in case' sell signal.
The first two are created through the _interaction_ of the StochRSI-14 and
StochRSI-70 oscillators.
Footnote: You _can_ determine a day in advance what stock price will cause the
StochRSI-14 value to cross the 20 level, while keeping the StochRSI-70 above the 80
level. That way, you _can buy near the close of that trading day as opposed to waiting
till the next trading day's opening to exceute your purchase. It's not an especially
easy exercise to do that though, unless you don't mind spending some time in
Algorithm Alley. up
by StochRSI-14, <g>gapI did though,
openings aresimply due to thethan
more common factnormal,
that on such
and incrossings of 20
fact so are
situations where the next day's low is above today's high.
2. IF StochRSI-70 > 50.0 and previous day's StochRSI-14 <= 20.0 and today's
StochRSI-14 > 20.0 AND HHV(ROC(StochRSI-70,1,Points),21) > 3.0 then BUY.
There is also a provision that LLV(StochRSI-70,21) <= 20.0 In other words, the
stock has been (and may still be) in a basing pattern, but it's upside 70 day
momentum, as defined by StochRSI-70, is sufficiently strong that the odds highly
favor an upside breakout in the stock's price, and the stock is short-term oversold as
285
http://slidepdf.com/reader/full/formule-metastock 285/554
8/6/2019 Formule - Metastock
measured by the StochRSI-14, and has just given the first sign that it's about to run to
the upside, by its breaking above the 20 level in StochRSI-14.
That first condition using HHV basically means that within the previous 21 trading
days, there was at least one trading day where the one-day Change of the StochRSI-
70 exceeded 3 points, i.e., it rose more than 3 points from the prior day's value. You
can set a higher level to test, rather than use 3.0, but I've found that the 3.0 value
doesn't add much if any 'less accurate' potential buying situations into the stock
selection process.
That second condition using LLV basically means that within the previous 21 trading
days, StochRSI-70 was at or below the 20 level. In other words, it was long-term
oversold. I added this condition later on, but it's not absolutely necessary. I just
wanted to reduce the number of potential buy candidates a bit.
This last BUY signal is different from the other two, as it uses the interaction between
the oscillator which is the SUM of the StochRSI-14 and StochRSI-70 values, and the
150-day SMA of the stock. I call this oscillator my "StochRSI-14 + StochRSI-70"
oscillator. Obviously,something a little more intuitive name is required! Maybe I
should call it the SUMStochRSI(14,70) oscillator. Naming suggestions are more than
welcome!
The buy criteria is simplicity itself. The stock MUST close at or above its 150-day
SMA AND yesterday's SUMStochRSI(14,70) < 50.0 and today's StochRSI(14,70) >
50.0
Basically what I'm doing here with this buy signal is I'm saying that whatever level of
selling pressure that developed in a stock, it did NOT have enough staying power to
drive the stock below its 150-day SMA, which is after all a trendline. Not only that,
but that selling pressure has shown it's first sign of abating, by the fact that the
SUMStochRSI(14,70) has broken above the 50 level, which I consider it to be the
level where a stock is long-term deeply oversold.
{*********************STOCHRSI**********************}
Input: RSILen(13), LBLen(8), WAvgLen(5);
Var: RS(0),RSIL(0),RSIH(0),StochRSI(0);
RS=RSI(C,RSILen);
RSIL = Lowest(RS,LBLen);
RSIH = Highest(RS,LBLen);
286
http://slidepdf.com/reader/full/formule-metastock 286/554
8/6/2019 Formule - Metastock
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.}
%%%%%%%%%%%%%%%%%%%%
Exit long:
Cross(Mov(C,3,E),ForecastOsc(C,21)) AND
Cross(6,Mov(C,3,E))
%%%%%%%%%%%%%%%
EQUIVILANT TO WILDERS TR
Wilders(TR,periods) = Mov(TR,2*periods-1,E)
%%%%%%%%%%%%%%%%%%
M URREY M
ATH
287
http://slidepdf.com/reader/full/formule-metastock 287/554
8/6/2019 Formule - Metastock
>
> >>If(Hi>25,If(Log(0.4*Hi)/Log(10)-
Int(Log(0.4*Hi)/Log(10))>0,
> >Exp(Log(10)*(Int(Log(0.4*Hi)/Log(10))+1)),
> >Exp(Log(10)*(Int(Log(0.4*Hi)/Log(10))))),
> >100*Exp(Log(8)*(Int(Log(0.005*Hi)/Log(8)))));
> >
> >N:=
> >If(Log(Sf/(Hi-Lo))/Log(8)<=0,0,
> > If(Frac(Log(Sf/(Hi-Lo))/Log(8))=0,
> > Int(Log(Sf/(Hi-Lo))/Log(8)),
> > Int(Log(Sf/(Hi-Lo))/Log(8))+1));
> >
> >Si:=Sf*Exp(-N*Log(8));
> >
> >M:=Int(((1/Log(2))*Log((Hi-Lo)/Si))+.00001);
> >
> >I:=Round(((Hi+Lo)*.5)/(Si*Exp((M-1)*Log(2))));
> >
> >B:=(I-1)*Si*Exp((M-1)*Log(2));
> >TT:=(I+1)*Si*Exp((M-1)*Log(2));
> >
> >Er:=If(Hi-TT>0.25*(TT-B) OR
> > B-Lo>0.25*(TT-B),1,0);
> >
> >MM:=If(Er=0,M,If(Er=1 AND M<2,M+1,0));
> >NN:=If(Er=0,N,If(Er=1 AND M<2,N,N-1));
> >
> >Si:=Sf*Exp(-NN*Log(8));
> >
> >I:=Round(((Hi+Lo)*.5)/
> > (Si*Exp((MM-1)*Log(2))));
> >
> >B:=ValueWhen(1,Cum(1)>=S0,
> > (I-1)*Si*Exp((MM-1)*Log(2)));
> >
> >TT:=ValueWhen(1,Cum(1)>=S0,
> > (I+1)*Si*Exp((MM-1)*Log(2)));
> >
> >B;
> >
> >{L1:=}ValueWhen(1,Cum(1)>=S0,
> > B+(0.125*(TT-B)));
288
http://slidepdf.com/reader/full/formule-metastock 288/554
8/6/2019 Formule - Metastock
> >
> >{L2:=}ValueWhen(1,Cum(1)>=S0,
> > B+(2.0*(0.125*(TT-B))));
> >
> >{L3:=}ValueWhen(1,Cum(1)>=S0,
>
> >
>TT;
Z IG Z AG C ODE
Since there are many users who showed interest in my indicator, I provide
here the code for a complete Expert. It uses Trends, Highlights, Symbols,
Alerts and a simple Commentary.
______________________________________________________
------------------------------------------------------
Trends
Bullish:
Zig(CLOSE ,10 ,% ) > Ref(Zig(CLOSE ,10 ,% ),-1)
AND Fml("ZigZag validity") = 1
Bearish:
Zig(CLOSE ,10 ,% ) < Ref(Zig(CLOSE ,10 ,% ),-1)
AND Fml("ZigZag validity") = 1
------------------------------------------------------
289
http://slidepdf.com/reader/full/formule-metastock 289/554
8/6/2019 Formule - Metastock
------------------------------------------------------
------------------------------------------------------
Alerts (there are 3 alerts using the same code as the Symbols section)
290
http://slidepdf.com/reader/full/formule-metastock 290/554
8/6/2019 Formule - Metastock
------------------------------------------------------
Commentary
<expert>
by Spyros Raftopoulos
___________________________________________
Cheers
Spyros
____________________________________________
291
http://slidepdf.com/reader/full/formule-metastock 291/554
8/6/2019 Formule - Metastock
T
RADE EQUITY AND T
RADE STOP FORMULA UPDATE
A number of small changes have been incorporated in the following indicators, and the version
numbersrestrictions
Several have been adjusted
now limitaccordingly. Most
the execution changes relate
of intra-day trades,toand
thethese
handling of intra-day
are really trades.of
just a matter
common sense.
TE will inhibit intra-day trades, i.e. not currently in a trade and receives concurrent entry and exit
signals, when;
1. entry option =2 (enter on close)
2. exit option =1 (exit on open)
3. entry and exit options are the same but neither =5
TS will enforce similar restrictions, and it can also terminate a trade intra-day if either target price is
met. The ‘exit on next open’ timing option is precluded when using price exit signals (exit option =5).
Indicators
Trade Equity LE V2.7
Trade Equity LE V3.3
Trade Equity SE V2.7
Trade Equity SE V3.3
Trade Stop LE V3.3
Trade Stop SE V3.3
From my perspective the TE v2.7 indicators are close to “bullet proof”, and the TE v3.3 indicators
almost as robust. The TS indicators are less robust but I would still expect them to be very accurate
under normal usage (whatever that is). By providing a wide range of user options I have also greatly
increased the number of things that can go wrong. I would really appreciate any feedback that anyone
can offer (I’m not looking for bouquets but problems with usage or function).
292
http://slidepdf.com/reader/full/formule-metastock 292/554
8/6/2019 Formule - Metastock
293
http://slidepdf.com/reader/full/formule-metastock 293/554
8/6/2019 Formule - Metastock
294
http://slidepdf.com/reader/full/formule-metastock 294/554
8/6/2019 Formule - Metastock
295
http://slidepdf.com/reader/full/formule-metastock 295/554
8/6/2019 Formule - Metastock
N:=If(No=5,If(Ns>0,Max(L,Ns),0),N);
X:=If(Xd=0,X,Alert(X,Xd+1) AND Alert(X,Xd)=0);
X:=If(X>0,If(Xo=1,O,If(Xo=3,H,If(Xo=4,L,C))),0);
X:=If(Xs>0 AND Xo=5,Max(L,Xs),X);
Pf:=(Cp*(1+Pt)+Cx)/(Cp-Cm);
Lf:=Min(1,(Cp*(1-Ls)+Cx)/(Cp-Cm));
Tr:=If(PREV=0,If(N>0
(If(Xa<3,C,H)<Pf*N AND AND X=0 AND (No=2 OR If(X>0
If(Xc<3,C,L)>Lf*N)),N,0),
OR (BarsSince(PREV=0)=Pd AND Pd<>99) OR
(If(Xa<3,C,H)>=Pf*PREV AND Pt<>.99) OR
(If(Xc<3,C,L)<=Lf*PREV AND Ls<>.99),0,PREV));
Tr:=If(Alert(Tr>0,2)=0 AND N>0 AND
(((If(Xa<3,C,H)>=Pf*N OR If(Xc<3,C,L)<=Lf*N)
AND No<>2) OR (X>0 AND Nd+Xd<1 AND No<>2 AND
Xo>1 AND (Max(No,Xo)>4 OR No<>Xo))),-N,Tr);
Xb:=(Tr=0 AND Alert(Tr>0,2)) OR (Tr<0 AND Alert(Tr=0,2));
Cx:=ValueWhen(1,Cum((N+Ns+X+Xs)>-1)=1 OR Tr<>0,Abs(Tr));
Cp:=If(Xb,If(Xa<3 AND C>=Cx*Pf,C,If(Xa>2 AND H>=Cx*Pf,Cx*Pf,0)),0);
Cp:=If(Cp>0,If(Cp>=.5,PREC(Cp,2),If(Cp<.1,PREC(Cp,3),PREC(Cp*2,2)/2)),0);
Cp:=If(Xa=4
Cp:=If(Xa=3 AND
Cp>0,If(Tr<0,Cp,Max(O,Cp)),Cp);
AND Cp>0,C,If(Xa=1 AND Xo<5,Ref(Cp,-1),Cp));
Cp:=If(Xa=1 AND Cp>0 AND Xo<5,O,Cp);
Cm:=If(Xb,If(Xc<3 AND C<=Cx*Lf,C,If(Xc>2 AND L<=Cx*Lf,Cx*Lf,0)),0);
Cm:=If(Cm>0,If(Cm>=.5,PREC(Cm,2),If(Cm<.1,PREC(Cm,3),PREC(Cm*2,2)/2)),0);
Cm:=If(Xc=4 AND Cm>0,Max(L,Min(If(Tr<0,H,O),Cm)),Cm);
Cm:=If(Xc=3 AND Cm>0,C,If(Xc=1 AND Xo<5,Ref(Cm,-1),Cm));
Cm:=If(Xc=1 AND Cm>0 AND Xo<5,O,Cm);
Pd:=Pd<99 AND Xb AND BarsSince(Ref(Tr,-1)=0)=Pd;
Cx*Alert(Tr<>0,2);Cx*Pf*Alert(Tr<>0,2);Cx*Lf*Alert(Tr<>0,2);
If(Cm>0,Cm,If(Cp>0,Cp,If(Xs>0 AND Xo=5,X,If(Pd>0,C,0))));
296
http://slidepdf.com/reader/full/formule-metastock 296/554
8/6/2019 Formule - Metastock
So much for quick fixes. My Thanks to David Hobbs for letting me know that
my 'Nd' variable fix was also flawed. I'll try again.
If you have version 3.X Trade Equity or Trade Stop formulas with an 'Nd' that looks
like either of the lines below,
Nd:=LastValue(Int(Frac(Cp/100)*10));
or
Nd:=LastValue(Int(Frac(Cp/99)*10));
then it should be changed to
Nd:=LastValue(Int(0.1+Frac(Cp/100)*10));
L ATCHES
Using latches (or flags as I prefer to call them) in MetaStock is a simple, convenient
and accurate way of remembering certain conditions or events. Many MS users find
these concepts are difficult to grasp and apply to their own formulas. This post is an
attempt to explain the various uses and nuances of latches, but it is by no means all
there is to say on the matter.
297
http://slidepdf.com/reader/full/formule-metastock 297/554
8/6/2019 Formule - Metastock
In the following discussion ‘one’ is interchangeable with ‘true’ ‘on’, and ‘zero’ with
‘false’ or ‘off’.
Example 1 is the simplest form of a latch. It requires two different signals to operate –
a ‘set’ signal, and a ‘reset’ signal. You could think of these signals as the ‘on’ switch
and the ‘off’ switch. By using the BarsSince() function we are able to decide which
signal occurred most recently, and therefore whether the current state of the latch
should be ‘on’ or ‘off’. MetaStock processes a chart from the first bar on the left to
the last bar on the right. And this means that the latch condition is checked and
updated as each new bar is processed.
{Example 1}
N:=Fml("set signal");
X:=Fml("reset signal");
BarsSince(N)<BarsSince(X);
One problem to be overcome with this simple code is that the output line (using
BarsSince) can have an extended invalid signal period. In other words it will return
N/A instead of a legitimate value. This N/A period will extend until the ‘set’ signal is
true and the ‘reset’ signal is valid. The extended N/A problem can be addressed by
adding an ‘initialized’ variable into the output line. I normally use ‘I’ to name this
variable, and its purpose is to inform any code after ‘N’ and ‘X’ that the set and reset
signals are valid – i.e. are not returning N/A. In a latch configuration it also serves to
provide ‘fake’ set and reset signals that provide a specific start-of-signal bar for the
latch.
It is also convenient to name the output line variable since additional code usually
follows. Example 2 is a complete binary latch and as such it can store only two values
– zero and one.
{Example 2}signal");
N:=Fml("set
X:=Fml("reset signal");
I:=Cum(N+X>-1)=1;
Tr:=BarsSince(I OR N)<BarsSince(I OR X);
Tr;
The ‘I’ variable confuses many people. It will be true (one) for the first bar when both
set and reset signals are valid, and false (zero) for every bar thereafter. Until both set
and reset signals are valid it will be invalid too, and return N/A. ‘I’ being true for one
bar provides the ‘fake’ set and reset signals used to kick the latch into action. Notice
that the construction
and ‘X’ are VALID. if ‘I’sum
The is not
ofconcerned with actual
the two cannot values,
be tested but whether
as being or not
greater than –1‘N’
298
http://slidepdf.com/reader/full/formule-metastock 298/554
8/6/2019 Formule - Metastock
until both return a value of at least zero (hence both are valid). Since ‘N’ and ‘X’ are
binary signals (zero or one), by definition they will never be less than zero. The
Cum() count equal to one ensures that this signal is true for the first valid bar only,
and false after that.
It is possible to assign values other than zero and one to the latch output, but be
warned that this latch can’t be used to store prices. The reason is that multiple set
signals will allow the stored price to change. However the If() function can be used to
select the two values that that latch can swing between.
{Example 3}
N:=Fml("set signal");
X:=Fml("reset signal");
I:=Cum(N+X>-1)=1;
Tr:=If(BarsSince(I OR N)<BarsSince(I OR X),1,0);
Tr;
Now that we are able to assign different values to the ‘Tr’ variable one needs to be
aware that not all methods of making ‘Tr’ are equal.
The difference is in the use of “=” with “>” or “<” symbols. Written the wrong way
the section of the flag prior to the first ‘set’ signal will be true instead of false. This
may be only a small point but to my mind it is still the difference between right and
wrong.
__ _
__/ \_____/\_______________/ \__ set (N)
__
N/A ___/\____________/ \________ reset (X)
A PREV version
remember of the latch value.
a user determined offers more options
This value canfor MSbecoding
then because
accessed fromitwithin
can the
299
http://slidepdf.com/reader/full/formule-metastock 299/554
8/6/2019 Formule - Metastock
latch to manage a number of resets that could be related to set timing. The one down
side to using PREV is that it is resource hungry and it will significantly slow the
execution time of any code using it. Each additional PREV increases the resource
burden.
{Example 4}
N:=Fml("set signal");
X:=Fml("reset signal");
Tr:=If(N,1,If(X,0,PREV));
Tr;
Example 4 is the simplest form of a PREV based latch, and here it is still being used
to give a binary result because it has no way of discriminating between the first and
subsequent ‘set’ signals. By also checking the previous state of ‘Tr’ we can ensure
that only the FIRST entry signal and bar is used to decide what value to store in the
latch. Notice that the ‘I’ variable is not used here. It is not needed to provide a starting
point, and neither is there any problem (other than lack of skill) in setting the correct
polarity of the output signal ‘Tr’.
I suggest that all PREV variables be named – I have had some unpredictable results
when using PREV as an unnamed output line.
{Example 5}
N:=Fml("set signal");
X:=Fml("reset signal");
Tr:=If(PREV=0,If(N,CLOSE,0),If(X,0,PREV));
Tr;
Example 5 has expanded the role of the latch to that of a true price latch, and here it is
storing the CLOSE from the initial ‘set’ bar. The only time the latch will set to
something other than zero is when the previous bar of the latch was zero (latch not
active) and the ‘N’ variable (set) is active for the current bar. When these conditions
are not both met the latch can either retain its previous value, or it can reset to zero
when the ‘X’ variable is active.
From here it is an easy step to creating a latch that can monitor its own value and be
self-resetting when specific latch-set related criteria is met. Example 6 shows how to
rest theinlatch
Notice thiswhen the closing
example that the price rises tois20%
reset signal above
‘Ored’ withthat
thewhen
price the latch was
condition set.
to reset
the latch (reset signal OR price condition). Either condition true will force a reset.
{Example 6}
N:=Fml("set signal");
X:=Fml("reset signal");
Tr:=If(PREV=0,If(N,CLOSE,0),If(X OR C>=PREV*1.2,0,PREV));
Tr;
The independent reset signal may well be unnecessary with this type of latch when
both positive
Example and negative movements can be checked against the stored value, as in
7 below.
300
http://slidepdf.com/reader/full/formule-metastock 300/554
8/6/2019 Formule - Metastock
{Example 7}
N:=Fml("set signal");
Tr:=If(PREV=0,If(N,CLOSE,0),If(C>=PREV*1.2 OR C<=Prev*0.9,0,PREV));
Tr;
I hope this explanation has cleared away some of the mystery regarding the
construction and potential use of binary and price latches. A binary latch forms the
heart of all my ‘Trade Equity’ indicators, and a price latch fills a very similar role in
all of my ‘Trade Stop’ indicators.
Roy Larsen
rlarsen@man.quik.co.nz
301
http://slidepdf.com/reader/full/formule-metastock 301/554
8/6/2019 Formule - Metastock
TradeStation Code
S LOW
KC
LASSIC
{********************************************************}
{*******************************************************************
Description : This Function returns Slow Stochastic %K Classic
Provided By : Omega Research, Inc. (c) Copyright 1999
********************************************************************}
{************************************************************}
MACD H ISTOGRAM
-------------------------------------------
{MACD red/green Hist edited from TS4}
{MaxBarsBack set to 1}
inputs: FastMA(12),SlowMA(26),MacdMA(9);
Plot1(MACD(Close,FastMA,SlowMA),"MACD");
{green line}
Plot2(XAverage(MACD(Close,FastMA,SlowMA),MacdMA),"MACDAvg"); {red
line}
value1=MACD(Close,FastMA,SlowMA)-
(XAverage(MACD(Close,FastMA,SlowMA),MacdMA));
{Note that the MACD calculation here is not optimized for speed. It
should be... }
302
http://slidepdf.com/reader/full/formule-metastock 302/554
8/6/2019 Formule - Metastock
end;
H IGH OF TODAY
Hi
Try this :
value1 = highd(0) ;
value2 = lowd(0) ;
value3 = (value1 + value2)/2 ;
plot1(value1,"HIGH");
plot2(value2,"LOW") ;
plot3(value3,"MID") ;
Cheers Stuart
From: kjh129@runbox.com
To: omega-list@eskimo.com
Subject: EL help please.
Date: Tue, 24 Apr 2001 21:08:29 GMT
plot1(TrueHigh, "HighofToday");
Plot2(((High+low) /2), "Mid");
Plot3(TrueLow, "LowofToday");
KJH
303
http://slidepdf.com/reader/full/formule-metastock 303/554
8/6/2019 Formule - Metastock
The following code was used to produce the two indicator lines shown
in the MACD crossover chart. The trades shown on the chart were
generated at the moment the two indicator lines crossed.
The default input parameters have been replaced with an asterisk (*).
We encourage you to find parameter values that best suits your
particular trading needs.
Note: FOR Supercharts 4 and TradeStation 4 ....
-----------------------------------------------------------------
Input: series(close),
len1(*), phase1(*),
len2(*), phase2(*),
len3(*), phase3(*);
C OLES’S R ANGE
304
http://slidepdf.com/reader/full/formule-metastock 304/554
8/6/2019 Formule - Metastock
I
NDICATOR C OLE'S R ANGE D AILY
8 P ERIOD DONCHIAN C HANNEL M ID- POINT LINE
var: median8(0);
median8 = (highest(H,8) + lowest(L,8))*.5;
plot1(median8,"median8);
> I am looking for coding help. I want to calculate the 8 Period Donchian
> Channel Mid-point line.
I
NDICATOR SUPP-R ESIS D AILY
Plot1(Resis2[1],"R2");
Plot2(Resis1[1],"R1");
Plot3(Supp1[1],"S1");
305
http://slidepdf.com/reader/full/formule-metastock 305/554
8/6/2019 Formule - Metastock
Plot4(Supp2[1],"S2");
Indicator Supp-ResisPivotDaily
{ Indicator Supp-ResisPivotDaily }
Vars: Pivot(0);
Pivot = ((H+L+C)/3);
Plot1(Pivot[1],"S-Rpivot");
Undefined
Undefined 2
Inputs: Stp1(0.14);
Vars: Top(0), Bot(0);
If Condition3
Value1 = Top;then begin {......go short.......}
If Condition7 then Value1 = Top;
If Condition4 then Value1 = Bot;
end;
306
http://slidepdf.com/reader/full/formule-metastock 306/554
8/6/2019 Formule - Metastock
A NDREW ’S P ITCHFORK
If you extend it, or adapt it to other uses, I'd appreciate a look at what you've
done. Thanks.
Gregory Wood
SwissFranc@worldnet.att.net
12/18/96 v1.0 - Initial distribution
01/08/96 v1.1 - Added median lines
01/15/96 v1.2 - Added TL_Thick, user-customizable colors (see "SET COLORS
HERE")
01/16/96 v1.3 - Removed projections to make room for up to 7 pitchforks
USAGE
Use the text tool to label swing high/lows with "A", "B" and "C", then refresh
the indicator
Be sure to put(clicking
the label"Status" twice
above the bar'scauses the aindicator
high for to recalculate).
swing high, and below the
low for a swing low.
You can display other groups of points by using labels "Ax", "Bx" and "Cx",
where 'x' is 1, 2, or 3, e.g. "A3", "B3", "C3".
Note that you can use the pointer tool to move the points anytime.
Then to view the new Pitchfork, refresh the indicator.
307
http://slidepdf.com/reader/full/formule-metastock 307/554
8/6/2019 Formule - Metastock
array:nums[7](""); { The way to distinguish one series of points from another, A-B-
C, A1-B1-C1, etc }
nums[0] = "";
nums[1] = "1";
nums[2] = "2";
nums[3] = "3";
nums[4] = "4";
nums[5] = "5";
nums[6] = "6";
var: inums(7);
array: MyColor[7](0);
MyColor[0] = tool_blue; { <=========== SET COLORS HERE }
MyColor[1] = tool_red;
MyColor[2] = tool_yellow;
MyColor[3] = tool_cyan;
MyColor[4] = tool_green;
MyColor[5] = tool_white;
MyColor[6] = tool_magenta;
end;
array:dd[3,7](0),tt[3,7](0),vv[3,7](0),bb[3,7](0),hh[3,7](0);
array:fb[7,4](0),fv[7,4](0);
var: tft(0), fdd(0), fvv(0), ptt(0), pdd(0), pvv(0), fbb(0), pbb(0), pvv2(0);
var: ii(0), jj(0), mm(0);
var: handl(0), handlA(0), handlB(0), handlC(0), handlB1(0), handlC1(0), handlB2(0),
handlC2(0);
var: ss("");
var: y1(0), y2(0);
if currentbar = 1 then begin { examine all the text strings and save some info about
the ones we recognize }
handl = text_getfirst(2);
while handl >= 0 begin
ss = text_getstring(handl);
ss = UpperStr(ss);
for ii = 0 to inums - 1 begin
for jj = 0 to 2 begin { look for well-formed strings }
308
http://slidepdf.com/reader/full/formule-metastock 308/554
8/6/2019 Formule - Metastock
if ss = abc[jj] + nums[ii] then begin { save the item's date, time, value and handle
}
tt[jj,ii] = text_gettime(handl);
dd[jj,ii] = text_getdate(handl);
vv[jj,ii] = text_getvalue(handl);
hh[jj,ii] = handl;
end;
end;
end;
handl = text_getnext(handl,2); { IMPORTANT -- infinite loop if this is
missing! }
end;
end;
309
http://slidepdf.com/reader/full/formule-metastock 309/554
8/6/2019 Formule - Metastock
{DRAW CENTERLINE}
handlA = TL_New(dd[0,ii],tt[0,ii],vv[0,ii],date,time,pvv);
TL_SetExtRight(handlA,TRUE);
TL_SetColor(handlA,MyColor[ii]);
TL_SetSize (handlA, TL_Thick);
handlB = TL_New(dd[1,ii],tt[1,ii],vv[1,ii],date,time,pvv);
TL_SetExtRight(handlB,true);
TL_SetColor(handlB, MyColor[ii]);
TL_SetSize(handlB, TL_Thick);
if Median then begin { save for later }
handlB1 = TL_New(dd[1,ii],tt[1,ii],vv[1,ii],date,time,pvv);
TL_SetExtRight(handlB1,true);
TL_SetColor(handlB1, MyColor[ii]);
TL_SetSize(handlB1, TL_Thick);
handlB2 = TL_New(dd[1,ii],tt[1,ii],vv[1,ii],date,time,pvv);
TL_SetExtRight(handlB2,true);
TL_SetColor(handlB2, MyColor[ii]);
TL_SetSize(handlB2, TL_Thick);
end;
pvv = TLValue(vv[0,ii]-(fvv-vv[2,ii]),bb[0,ii]+(bb[2,ii]-
fbb),vv[2,ii],bb[2,ii],bb[1,ii]);
handlC = TL_New(dd[1,ii],tt[1,ii],pvv,date,time,vv[2,ii]);
TL_SetExtRight(handlC,true);
TL_SetColor(handlC, MyColor[ii]);
TL_SetSize(handlC, TL_Thick);
value99=TL_New(dd[1,ii],tt[1,ii],vv[1,ii],dd[2,ii],tt[2,ii],vv[2,ii]);
TL_SetExtLeft(Value99,false);
TL_SetExtRight(Value99,false);
TL_SetColor(Value99,MyColor[ii]);
TL_SetSize (Value99, TL_Thick+1);
if Median then begin { save for later }
handlC1 = TL_New(dd[1,ii],tt[1,ii],pvv,date,time,vv[2,ii]);
TL_SetExtRight(handlC1,true);
TL_SetColor(handlC1, MyColor[ii]);
TL_SetSize(handlC1, TL_Thick);
handlC2 = TL_New(dd[1,ii],tt[1,ii],pvv,date,time,vv[2,ii]);
TL_SetExtRight(handlC2,true);
TL_SetColor(handlC2, MyColor[ii]);
TL_SetSize(handlC2, TL_Thick);
end;
310
http://slidepdf.com/reader/full/formule-metastock 310/554
8/6/2019 Formule - Metastock
if Median then begin { sorry these are hard-coded... you know what they say
about quick + dirty! }
{ show the median lines }
y1 = TL_GetValue(handlB, dd[1,ii], tt[1,ii]);
y2 = TL_GetValue(handlA, dd[1,ii], tt[1,ii]);
TL_SetBegin(handlB1, dd[1,ii], tt[1,ii], (y1 + y2) / 2);
y1 = TL_GetValue(handlB, dd[2,ii], tt[2,ii]);
y2 = TL_GetValue(handlA, dd[2,ii], tt[2,ii]);
TL_SetEnd(handlB1, dd[2,ii], tt[2,ii], (y1 + y2) / 2);
y1 = TL_GetValue(handlB, dd[1,ii], tt[1,ii]);
y2 = TL_GetValue(handlA, dd[1,ii], tt[1,ii]);
TL_SetBegin(handlB2, dd[1,ii], tt[1,ii], y1 + y1- (y1 + y2) / 2);
y1 = TL_GetValue(handlB, dd[2,ii], tt[2,ii]);
y2 = TL_GetValue(handlA, dd[2,ii], tt[2,ii]);
TL_SetEnd(handlB2, dd[2,ii], tt[2,ii], y1 + y1 - (y1 + y2) / 2);
y1 = TL_GetValue(handlC, dd[1,ii], tt[1,ii]);
y2 = TL_GetValue(handlA, dd[1,ii], tt[1,ii]);
TL_SetBegin(handlC1, dd[1,ii], tt[1,ii], (y1 + y2) / 2);
y1 = TL_GetValue(handlC, dd[2,ii], tt[2,ii]);
y2 = TL_GetValue(handlA, dd[2,ii], tt[2,ii]);
TL_SetEnd(handlC1, dd[2,ii], tt[2,ii], (y1 + y2) / 2);
y1 = TL_GetValue(handlC, dd[1,ii], tt[1,ii]);
y2 = TL_GetValue(handlA, dd[1,ii], tt[1,ii]);
TL_SetBegin(handlC2, dd[1,ii], tt[1,ii], y1 + y1 - (y1 + y2) / 2);
y1 = TL_GetValue(handlC, dd[2,ii], tt[2,ii]);
y2 = TL_GetValue(handlA, dd[2,ii], tt[2,ii]);
TL_SetEnd(handlC2, dd[2,ii], tt[2,ii], y1 + y1 - (y1 + y2) / 2);
end;
end;
end;
end;
end;
{ EasyEmini A simple short-term e-mini breakout system to illustrate the use of
Monte Carlo simulation for position sizing. System: Buy at a fraction of yesterday's
range from yesterday's high. Hold 1 day then look to exit on the first profitable open.
Use a fixed money management stop (nominally $1000 in the e-mini). WARNING:
This system looks ahead one day to the next day's open to decide whether to exit the
311
http://slidepdf.com/reader/full/formule-metastock 311/554
8/6/2019 Formule - Metastock
open position. Consequently, the system never executes on the last bar of data on the
chart. This means that the entry order for the next day will not appear in the
TradeStation Tracking Center. ATTENTION TRADESTATION 2000i USERS This
system includes a call to function MonteCarlo, which performs Monte Carlo
simulation for position sizing. MonteCarlo only works in TradeStation 2000i because
it uses built-in function Random, which is new to 2000i. I have commented out the
call to MonteCarlo so that this system will work properly for TradeStation 4.0 users.
If you are a TradeStation 2000i user, you can download function MonteCarlo for free
from my web site (address below). Remove the comment braces {..} from the call to
the line below that begins "Value1 = ...". This will enable the call to MonteCarlo. The
MonteCarlo code records the profits and losses from the trading system and generates
random sequences of the trades. For each sequence, it calculates the return and
drawdown assuming a fixed percent of the account is risked on each trade. The output
is the probability that with a given account size and risk percentage you can meet
given rate of return and drawdown goals. For example, it might calculate the
probability that you can achieve a rate of return of 50% with 30% drawdown by
risking 10% on each trade. I have developed a version of MonteCarlo with additional
functionality and several input and output options that will work with either
TradeStation 2000i or 4.0. This version can be purchased on my web site. Copyright
2001 Breakout Future www.BreakoutFutures.com mrb@BreakoutFutures.com }
Input: ASize (30000), { account size, $ } RetGoal (50), { rate of return goal, %}
DDGoal (30), { max closed out trade drawdown, % } RiskPer (10), { percentage risk
per trade } EntFrac (0.75), { multiple of prior day's range for entering } MMStop
(1000), { money management stop, $ } NRand (1000); { number of random
sequences } Var: EntPr (0), { Entry target price } XitPr (0), { mm stop exit price }
TrRisk (0); { trade risk, $ } TrRisk = MMStop; { Entry conditions } EntPr = H +
EntFrac * (H - L); If C C[1] then Buy next bar at EntPr Stop; { Exit conditions }
Exitlong("MMStop") next bar at EntryPrice - MMStop/BigPointValue stop; If
BarsSinceEntry = 1 and open of next bar EntryPrice then ExitLong("ProfOpen") next
bar at market; { Perform Monte Carlo analysis: MonteCarlo only works in
TradeStation 2000i } {Value1 = MonteCarlo(ASize, RetGoal, DDGoal, RiskPer,
TrRisk, NRand); }
{ User function: MonteCarlo Monte Carlo simulation for position sizing. This
function records the profits and losses from the trading system that calls it and
generates
and drawdownrandom sequences
assuming of the
a fixed trades.ofFor
percent theeach sequence,
account it calculates
is risked the return
on each trade. The
result is the probability that with a given account size and risk percentage you can
meet given rate of return and drawdown goals. For example, it might calculate the
probability that you can achieve a rate of return of 50% with 30% drawdown by
risking 10% on each trade. ATTENTION TRADESTATION 4.0 USERS Because this
function calls the built-in function Random, which is new to TradeStation 2000i, this
function will not work in TradeStation 4.0. I have developed a version of MonteCarlo
with additional functionality and several input and output options that will work with
either TradeStation 2000i or 4.0. This version can be purchased on my web site.
Copyright 2001 Breakout Future www.BreakoutFutures.com
mrb@BreakoutFutures.com
RetGoal (NumericSimple), {}rate
Input: ASize goal,
of return (NumericSimple), { account size, $ }{
%} DDGoal (NumericSimple),
312
http://slidepdf.com/reader/full/formule-metastock 312/554
8/6/2019 Formule - Metastock
max closed out trade drawdown, % } RiskPer (NumericSimple), { percentage risk per
trade } TrRisk (NumericSeries), { risk for current trade, $ } NRand (NumericSimple);
{ number of random sequences } Array: Trades[200](0), { Trades, $ (win +; loss -) }
TrRisks[200](0), { trade risks, $ (+) } RandNums[200](0), { array of random numbers
} RandIndx[200](-1); { randomly chosen indices for trade array } Var: NTrades (0), {
Number of trades } iSeq (0), { sequence number } MaxNum (0), { max number left in
random number array RandNums } iMax (0), { index (location) of MaxNum in array
RandNums } NCon (0), { number of contracts } Equity (0), { account equity }
NewEquity (0), { account equity } EqtyHigh (0), { highest equity } DD (0), { closed
trade drawdown } DDmax (0), { worst case closed trade drawdown } PReturn (0), {
percent return } AveRet (0), { average percent return } ProbRet (0), { probability of
return goal } ProbDD (0), { probability of drawdown goal } ProbComb(0), {
probability of return & DD goals } ii (0), { loop counter } jj (0), { loop counter } k
(0); { loop counter } { Collect profit/loss and risk } If TotalTrades NTrades then
Begin If TotalTrades - NTrades MaxNum then Begin MaxNum = RandNums[jj];
iMax = jj; end; end; RandIndx[ii] = iMax; { record location of max number }
RandNums[iMax] = -1; { "remove" max number from array } end; { Calculate
account balance and drawdown for current sequence of trades } Equity = ASize;
EqtyHigh = Equity; DDmax = 0; For ii = 0 to NTrades - 1 Begin NCon =
IntPortion(RiskPer/100 * Equity/TrRisks[RandIndx[ii]]); NewEquity = Equity +
NCon * Trades[RandIndx[ii]]; { Calculate closed trade percent drawdown } If
(NewEquity EqtyHigh) then EqtyHigh = NewEquity else Begin DD = 100 *
(EqtyHigh - NewEquity)/EqtyHigh; if (DD DDmax) then DDmax = DD; end; Equity
= NewEquity; end; { for ii } PReturn = 100 * (Equity - ASize)/ASize; { Accumulate
results for probability calculations } AveRet = AveRet + PReturn; if (PReturn =
RetGoal) then ProbRet = ProbRet + 1; if (DDmax <= DDGoal) then ProbDD =
ProbDD + 1; if (PReturn = RetGoal and DDmax <= DDGoal) then ProbComb =
ProbComb + 1; End; { for iSeq } { Calculate probabilities by dividing sums by
number of sequences } AveRet = AveRet/NRand; ProbRet = 100 * ProbRet/NRand;
ProbDD = 100 * ProbDD/NRand; ProbComb = 100 * ProbComb/NRand;
MessageLog("RiskPer=", RiskPer:5:1," RetGoal=", RetGoal:5:1," DDGoal=",
DDGoal:5:1, " ProbRet=",ProbRet:5:1," ProbDD=",ProbDD:5:1," ProbComb=",
ProbComb:5:1); MessageLog("Average Return = ", AveRet:6:2); end; MonteCarlo =
1;
URST XPONENT
H E
{
*********************************************************************
**
Function : Hurst
313
http://slidepdf.com/reader/full/formule-metastock 313/554
8/6/2019 Formule - Metastock
*********************************************************************
***}
Inputs: Len(Numeric);
Vars: Mean(0), j(0), k(1.253314), SumSqr(0), Scale(0), MaxY(0),
MinY(0), Rng(0);
Arrays: X[100](0), Y[100](0);
E RGOTIC CSI
{Format: Ergotic_CSI(r)
SinglaLine(r); }
Plot1(Value1, "ErgCSI");
Plot2(Value2, "SigLin");
Plot3(ZeroLine, "Zero");
314
http://slidepdf.com/reader/full/formule-metastock 314/554
8/6/2019 Formule - Metastock
E RGOTIC MACD
{Format: Ergotic_MACD(r)
SignalLine(r) }
Plot1(Value1, "ErgMACD");
Plot2(Value2, "SigLin");
Plot3(ZeroLine, "Zero");
315
http://slidepdf.com/reader/full/formule-metastock 315/554
8/6/2019 Formule - Metastock
E NTRY & E XIT
Next, there are days where the exit combination will not properly work. NOTE: This
applies only to those entry days where the entry AND exit happen on the same day.
In other words, where the date of entry is an outside day. As an example, take a look
at IBM on 8/05/99.
You have no idea whether your entry was triggered first and then the stock fell and
triggered your stop loss and then went up again, OR it fell first before you got in, then
went up and triggered your entry and then just stayed up without triggering your the
stop loss. NOTE AGAIN: This applies to the entry day ONLY.
SIDE NOTE: Don't pay attention to the Entry Date and Exit Date columns of the
backtest report under "Positions". Entry Date shows 1 day ahead of actual entry date,
and Exit Date shows 2 days ahead of actual exit date.
!!========================================================
Allworks if setdate(1) and (put your final rule here) and resetdate() and entrytrigger.
Another helpful idea is to double click on the P&F indicator and change the
colors. I have mine set to upside black and down side dayglo green. Much
easier to see. Try several colors and find the ones you like.
Vance
316
http://slidepdf.com/reader/full/formule-metastock 316/554
8/6/2019 Formule - Metastock
To: <aiq@yahoogroups.com>
Sent: Friday, April 13, 2001 8:16 PM
Subject: [aiq] Another Point & Figure Question
> I have used the "Z" zoom feature to view point &
> figure formations. However, in many cases, this is
> still too small. Is there a way to zoom in even more
> since I am really interested in the most recent 5 or
> 10 columns, not the entire 30 to 50 column view? Or
> is there a way to spread out the point & figure
> information like you can do on the price chart
> information?
>
> Thanks, Joe
>
STOPS IN EDS
I made some assumptions since you didn't specify how much higher or lower should
the stops be placed for entry and exit. So I assumed a 1/8 point entry/exit stop. You
can change this number to your liking. Next, there are days where the exit
combination will not properly work. NOTE: This applies only to those entry days
where the entry AND exit happen on the same day. In other words, where the date of
entry is an outside day. As an example, take a look at IBM on 8/05/99. You have no
idea whether your entry was triggered first and then the stock fell and triggered your
stop loss and then went up again, OR it fell first before you got in, then went up and
triggered your entry and then just stayed up without triggering your the stop loss.
NOTE AGAIN: This applies to the entry day ONLY. SIDE NOTE: Don't pay
attention to the Entry Date and Exit Date columns of the backtest report under
"Positions". Entry Date shows 1 day ahead of actual entry date, and Exit Date shows 2
days ahead of actual exit date.
!!========================================================
Allworks if setdate(1) and (put your final rule here) and resetdate() and entrytrigger.
entrytrigger if [high] >= val([high],1) + 0.125.
Bill S.
317
http://slidepdf.com/reader/full/formule-metastock 317/554
8/6/2019 Formule - Metastock
T
RIGGERS BASED ON ENTRY PRICES
C OUNT O F
! define the second thing to look for UpDay if [Close] > [Open].
! count the number of times the 2nd thing happened, since the 1st thing occurred.
count is CountOf( UpDay, ^numDaysAgo + 1,0 ).
=====================================================
C OMPARE T WO I
NDICES
Stan,
MyRule3 if TickerRule("DJIA",DojiAprox).
DnRule1 if MyRule1 and MyRule3.
Thanks,
318
http://slidepdf.com/reader/full/formule-metastock 318/554
8/6/2019 Formule - Metastock
Ron
C OLOUR STUDIES
Colour chart
319
http://slidepdf.com/reader/full/formule-metastock 319/554
8/6/2019 Formule - Metastock
Enter if (val([st esa],1) < val([it esa],1)) and [st esa] > [it
esa].
Exit if (val([st esa],1) > val([it esa],1)) and [st esa] < [it esa].
SetDate
Note that WMR must be a UDF and not a rule (because rules don't have values like
90-they are true or false) to use it the way you describe, eg
WMR is [stochastic].
Alert if WMR<90 and setdate(1) and WMR>90 and resetdate().
WMR if [stochastic]>90.
Alert if not WMR and setdate(1) and WMR and resetdate().
R ECURSION
close is [close].
alpha is 2/(1+UserDays).
beta is 1-alpha.
!This esa will crash EDS as it is recursive. However, it is the standard way of
computing many Indicators.
! Do not add this as a column UNLESS you want EDS to crash.
320
http://slidepdf.com/reader/full/formule-metastock 320/554
8/6/2019 Formule - Metastock
! This method will allow the recursion and not crash EDS. It will go back 240 days
! and start calculating the current days ESA value from there.
! to stop the recursion we just return the value of [close] after we have looped 240
times into this routine.
stopesa is iff(stop,[close], myesa).
myesa is alpha * [close] + beta * valresult( stopesa, 1 ).
everything if 1.
321
http://slidepdf.com/reader/full/formule-metastock 321/554
8/6/2019 Formule - 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
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
322
http://slidepdf.com/reader/full/formule-metastock 322/554
8/6/2019 Formule - Metastock
-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
323
http://slidepdf.com/reader/full/formule-metastock 323/554
8/6/2019 Formule - Metastock
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.
324
http://slidepdf.com/reader/full/formule-metastock 324/554
8/6/2019 Formule - Metastock
D IFFERENT R ESULTS IN T
RADESTATION
You can try something like this. Create an indicator that computes the 14
> period RSI of 10 bars ago. The two ways of doing this are to put the [10]
> inside the function or outside the function. If they were the same the
> difference should be zero. Plot the following code in an indicator and
> look at the results in the debug window. You will see that early on, the
> difference is not zero but gets smaller over time. If you use TS4.0, you
You are right, the 2 different calls give different results. This
is because the code uses an exponential moving average and the 2
different calls start calculating on different bars;
RSI(C[10],14) gives results 10 bars before RSI(C,14)[10]. The
difference
what issuesinlurk
thisincase seems
other acceptable to me, but who knows
functions.
325
http://slidepdf.com/reader/full/formule-metastock 325/554
8/6/2019 Formule - Metastock
S IGNAL R EVIEW – U
PSIDE
Vance,
Excellent! I must admit, I've used AIQ for 3-4 years and have never
worked with that particular report before. But it seems to be a really
good one to use for short-term trading. One good feature is that, with
two mouse-clicks, you can generate a list of stock on the report and
easily scroll through their daily charts in AIQ, looking for good
setups. Thanks for bringing this to my attention. I'm attaching a copy
of today's report for anyone not using AIQ and interested in seeing how
this feature works.
Bill
> I have been doing fair by selecting stocks from the Stock Reports =
> Signal Review upside. This signal has a fairly good record with some
> stocks reaching 83% in a few days, of course there losers too, but I
> watch moving averages and cut my loses quick and ride the ones that
> stay above my moving average. This report uses the ER signal and then
> posts a date when it has signal a buy using a price phase direction
> change. The report keeps 2 weeks info and one can track the results by
> scrolling down. Works so far for me. And it requires minimal
> studying and work, as Bill stated, some times I get in my on way and
> miss trades, because I'm trying to incorporate too many tech. and
> fundamentals. Vance
3 B AND R ESEARCH SYSTEM
Here is research dept code for the bands that can be adjusted via inputs
for other securities.
Prosper
Inputs: Pcnt1(1.025),Pcnt2(.975),Offset(1);
326
http://slidepdf.com/reader/full/formule-metastock 326/554
8/6/2019 Formule - Metastock
vars:bandup(0),banddn(0),av(0);
av=average(c,21);
bandup=av*Pcnt1;
banddn=av*Pcnt2;var:
aa(0),bb(0),cc(0),dd(0);
Print(File("C:\xitami\root\mod\SPBand.txt"),d:6:0,", ",c:3:2,",
C>UpperBand",", ","L>MiddleBand, ",aa:0," Days");
print(d:6:0,", ",c:3:2,", C>UpperBand",", ","L>MiddleBand, ",aa:0,"
Days");end;
if l<=av then value1=0;
if l<=av then aa=0;
Print(File("C:\xitami\root\mod\SPBand.txt"),d:6:0,", ",c:3:2,",
C<LowerBand",", ","H<MiddleBand, ",bb:0," Days");
print(d:6:0,", ",c:3:2,", C<LowerBand",", ","H<MiddleBand, ",bb:0,"
Days");end;
if h>=av then value2=0;
if h>=av then bb=0;
plot1(av,"21MA");
plot2(bandup,"bandup");
plot3(banddn,"banddn");
M ARKET P ROFILE
Here's a neat Market Profile .ela that stopped working for some strange
reason. Worked fine until a couple of days ago on both TS4 and TS2000i...
but now... everything is jumbled. You have to set the scale to "screen" or
entire data series when using it (unless some ela wizard can correct it,
too).
input:compress(1),len(30),letter1(1),txtcolr(7),opncol(6),closcol(6),lastcol(6),VAprcnt
327
http://slidepdf.com/reader/full/formule-metastock 327/554
8/6/2019 Formule - Metastock
(.70),Valcol(5),
Valsize(3),Stime(Sess1StartTime);
vars:lett("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"),t
1(0),vsize(0),cpt(0),dl(0),
lcount(1),fp(0),daynum(0),d0(0),mid(0),dlo(0),pc(0),pc2(0),skp(0),labl(0),vala(0),vap
(0),cp(0),t0(0),nuflag(0),
hh(0),ll(0),x(0),et(0),
clet(""),curtxt(""),th(0),tl(0),tpstr("00"),tot(0),va(0),d2p(0),oldclet(""),
barhi(0),barlo(0),mintick(0),xpts(0),price(0),up(0),dn(0),oldup(0),olddn(0),flag(0),fla
g2(0)
;
array:pri[1000](0),tpo[1000](0),pristr[1000]("");
nuflag=0;
if t0 <= Sess1EndTime and t > Sess1EndTime and Sess2StartTime <> 0 then
nuflag=1;
if d <> d0 and Sess2StartTime = Sess2EndTime then nuflag=1;
if t0=sess1endtime then nuflag=1;
if currentbar=1 or nuflag=1 then begin
if currentbar=1 then begin
if VAprcnt < 0 or VAprcnt >= 1 then vap=0 else vap=VAprcnt;
vsize=mod(valsize+7,7);
if vsize < 2 then value88=5 else value88=vsize;
mintick = 1 point * minmove * compress;
xpts=500*mintick;
end;
lcount=letter1; if lcount < 0 or lcount > 52 then lcount=1;
if currentbar > 1 then begin
if valcol <> 0 and flag2=0 then begin
mid=0;value23=0;
cpt=tl;cp=tl + (th-tl)/2; {center of dist.}
for x = tl to th begin
if pristr[x] <> "" then begin
pristr[x]=nutpstr(tpo[x],pristr[x],pri[x]);
value23=value23
if tpo[x]=mid and+x tpo[x]; {totalcpt=x;
<= cp then tpo count}
if tpo[x]=mid and x>cp and(x-cp) < AbsValue(cp-cpt) then cpt=x;
if tpo[x] > mid then begin
cpt=x;
mid = tpo[x];
end;
end;
end;
va=value23 * vap;
labl= text_new(d2p,t1,dl-mintick,NumToStr(value23,0)+" TPO's");
TEXT_SETSTYLE(labl,0,2);
TEXT_SETCOLOR(labl,valcol);
328
http://slidepdf.com/reader/full/formule-metastock 328/554
8/6/2019 Formule - Metastock
329
http://slidepdf.com/reader/full/formule-metastock 329/554
8/6/2019 Formule - Metastock
pristr[value1]="";
tpo[value1]=0;
end;
clet=curletstr(stime,len,letter1);
oldclet=clet;
dlo=l;
fp=o;
tpo[500]=1;
th=500;tl=500;
flag=0;
pri[500]= text_new(d,t1,o," >"+clet);
pristr[500]=" >"+clet;
TEXT_SETSTYLE(pri[500],0,2);
TEXT_SETCOLOR(pri[500],opncol);
hh=o;ll=o;mid=1;tot=1;value22=currentbar;
dl=l;
if d= JulianToDate(LastCalcJDate) then flag2=1;
end;
if t <> t0 then clet=curletstr(stime,len,letter1) ;{this does not work -
always is true}
t0=t;d0=d;pc=c;
barhi=intportion((xpts+h-fp+(mintick/10))/mintick);
barlo=ceiling((xpts+l-fp-(mintick/10))/mintick);
if barhi > th then th=barhi;
if barlo < tl then tl=barlo;
if l < dl then dl=l;
IF datacompression=0 and currentbar > value22 then begin
lcount=lcount+1;
if lcount=53 then lcount=1;
clet=midstr(lett,lcount,1) ;
hh=o;ll=o;flag=flag+1;
end;
value22=currentbar;
IF datacompression = 1 and oldclet <> clet then begin
hh=o;ll=o;flag=flag+1;
end;
{skp=0;
if h > hh or l < ll then begin
skp=1;}
for value4=barlo to barhi begin
price=fp+((value4-500)*mintick);
curtxt=pristr[value4];
if curtxt = "" then begin
tpo[value4]=1;
pri[value4]= text_new(d2p,t1,price," "+clet);
pristr[value4]=" "+clet;
TEXT_SETSTYLE(pri[value4],0,2);
TEXT_SETCOLOR(pri[value4],txtcolr);
end else begin
330
http://slidepdf.com/reader/full/formule-metastock 330/554
8/6/2019 Formule - Metastock
pristr[value4]=curtxt+clet;
tpo[value4]=tpo[value4]+1;
end;
end;
end;
if h>hh then hh=h;
if l < ll then ll = l;
{end;}
if valcol <> 0 {and skp =1} and {d= JulianToDate(LastCalcJDate)}
lastbaronchart then begin
mid=0;value16=0;value23=0;
cpt=tl;cp=tl + (th-tl)/2; {center of dist.}
for x = tl to th begin
if pristr[x] <> "" then begin
pristr[x]=nutpstr(tpo[x],pristr[x],pri[x]);
value23=value23 + tpo[x]; {total tpo count}
if tpo[x]=mid and x <= cp then cpt=x;
if tpo[x]=mid and x>cp and(x-cp) < AbsValue(cp-cpt) then cpt=x;
if tpo[x] > mid then begin
cpt=x;
mid = tpo[x];
end;
end;
end;
va=value23 * vap;
if l < dlo then begin
dlo=l;
price=fp+((tl-501)*mintick);
if labl <> 0 then Text_SetLocation(labl,d2p,t1,price);
end;
if labl =0 then begin
price=fp+((tl-501)*mintick);
labl= text_new(d2p,t1,price,"-");
TEXT_SETSTYLE(labl,0,2);
TEXT_SETCOLOR(labl,valcol);
end;
Text_SetString(labl,NumToStr(value23,0)+" TPO's");
if va <> 0 then begin
value61=value19;
value19=cpt;
x=mid;up=value19+1;dn=value19-1;
while x < va begin
if tpo[up] = tpo[dn] then begin
x=x+tpo[up];
up=up+1;
if x < va then begin
x=x+tpo[dn];
331
http://slidepdf.com/reader/full/formule-metastock 331/554
8/6/2019 Formule - Metastock
dn=dn-1;
end;
end else begin
332
http://slidepdf.com/reader/full/formule-metastock 332/554
8/6/2019 Formule - Metastock
end;
value52=value50;value53=value51;
value50=d;value51=t;
end;
plot1(l-mintick,"dummy");
plot2(vala,"dummy");
333
http://slidepdf.com/reader/full/formule-metastock 333/554
8/6/2019 Formule - Metastock
T BOND SYSTEM
Hi everyone,
Here's a simple little EOD system for TBonds which seems to
perform well over a wide range of years, has a low DD and reasonably high
win/loss and profit factor percentage figures:
You can experiment with the barssinceentry setting - 0, 1, 2 etc - and set
the system to close all trades at end of day.
Can anyone say what's wrong with this or would you be happy to trade it?
Cheers,
Ian
HIGHER HIGHS
>here is what i came up with and i would appreciate it if anyone could help me just a
little more... when this is put on the chart it works for the first couple of bars but then
doesn't "reset" to continue to count the new highs.
>
>What i'm looking for is an indicator that will count the number of higher highs (a
high higher than the prior bar but not necessarily consecutive to the last higher high)
in a set number of bars.
The attached code is my best guess as to what you are looking for. You still didn't
specify "new Highs since when" so I assumed you meant since the beginning of the
N-bar interval. A gif picture is attached.
This is a pretty brute force method, just searching for new highs from N bars ago.
There are faster ways by keeping track of things as you move forward through the
bars but they take a lot more code.
Bob Fulks
{ *******************************************************************
334
http://slidepdf.com/reader/full/formule-metastock 334/554
8/6/2019 Formule - Metastock
Indicator : NewHighsLows
********************************************************************}
Input: N(20);
HHigh = High[N];
LLow = Low[N];
NHigh = 0;
NLow = 0;
for j = N - 1 downto 0 begin
if High[j] > HHigh then begin
HHigh = High[j];
NHigh = NHigh + 1;
end;
if Low[j] < LLow then begin
LLow = Low[j];
NLow = NLow + 1;
end;
end;
Plot1(NHigh, "NHigh");
Plot2(-NLow, "NLow");
Plot4(0, "zero");
"
I
NDICATOR M
ARKS
Does anyone on the list know if one must use a strategy to draw the
>up/down arrows used to denote buy and sell signals? Is there a way to
335
http://slidepdf.com/reader/full/formule-metastock 335/554
8/6/2019 Formule - Metastock
Try:
Y ESTERDAY ’S H IGH LOW ON AN I
NTRA D AY CHART
Use the HighD(1) / LowD(1) functions although make sure you assign them to
variables
Cheers Stuart
Here asking for help. Would like to create a indicator that has two plots. I would like
to count the number of new highs in the last "N" number of bars, which would be plot
1, and plot 2 would be the number of new lows for last "N" number of bars. Would
anyone know how to do this? Not sure how to code a "counter" in EL. I would really
appreciate anyone's help trying to code this.
I can think of a couple of methods off hand. You do not say how you ever reset the
new-high level. You probably do not want it to just keep getting higher forever...
The following illustrates a couple of ideas. (These are not tested.) See the comments
for a description. These do not ever reset the new high level so you will need to
decide when you would like to do that.
336
http://slidepdf.com/reader/full/formule-metastock 336/554
8/6/2019 Formule - Metastock
Bob Fulks
{Method 1}
Input: N(14);
-------
{Method 2}
C OMMENTARY FUNCTION
The use of commentary together with stop and limit orders for the next bar is not very
complicated. Simply insert a comentary function with the comentary you want to have
after the stop/limit order.
Look at this code for example:
337
http://slidepdf.com/reader/full/formule-metastock 337/554
8/6/2019 Formule - Metastock
When you use commetary function the system shows you your active orders. But
don't forget that stop/limit orders are active only for the next bar and have to be
placed again to remain active.
N O P LOT () STATEMENT
<< Does anyone have experience with the NoPlot() statement in EasyLanguage?
I
believe this is new to TS2000i.
Basically, at times the areas where I used NoPlot come up blank -- as I'd
expect. But if I scroll left or right, "sometimes" those areas fill in
with a straight line between the points on either side of the gap.
Thanks,
Dave
>>
Dave,
I use it frequently. After the frustration resulting from the 'symptoms' you
described, I took the easy way out and plotted those 'indicators' for which I
was
solveusing 'noplot' statements
the problem as but
you bring up points
it atrather than rid
least gets lines. This doesn't
of those 'nasty'
lines connecting the 'gaps' you mention. For me this has proved an adequate
but not perfect solution to the problem.
Lee Scharpen
Example:
338
http://slidepdf.com/reader/full/formule-metastock 338/554
8/6/2019 Formule - Metastock
val1[1] > 0
THEN BEGIN
VAR: foo(0);
foo = TL_New(date[1], TIME[1], val1[1], DATE, TIME, val1);
END;
If anyone else has ideas, I'd love to hear them.
339
http://slidepdf.com/reader/full/formule-metastock 339/554
8/6/2019 Formule - Metastock
N UMERICAL ACCURACY
340
http://slidepdf.com/reader/full/formule-metastock 340/554
8/6/2019 Formule - Metastock
Length2( 0 ) ;
Length1 = Floor( ( Length + 1 ) * .5 ) ;
Length2 = Ceiling( ( Length + 1 ) * .5 ) ;
TriAverage_gen =
Average( Average( Price, Length1 ), Length2 ) ;
STOPS
Buy/sell/exit orders are issued at the *end* of the current bar, and
are in effect only for the next bar. For stops you manage yourself,
you need to issue the order on EVERY bar.
But it sounds like you're concerned about getting stopped out in the
same bar you entered in. One choice is to use TS's built-in MM stop,
which should be in effect immediately after entry. Another choice is
to issue the MM stop on the bar BEFORE you enter the trade. I.e. if
you have
should a "buy"
also order
issue an MMonstop
bar order
X, which enters
on bar on bar
X. That wayX+1, thenalso
it will you
be in effect on bar X+1. You might want to modify the MM stop after
you've entered, since your actual fill might be different than the
theoretical fill you anticipated in bar X.
A DAPTIVE STOP
Just fiddle with the hard coded numbers to meet your needs.
341
http://slidepdf.com/reader/full/formule-metastock 341/554
8/6/2019 Formule - Metastock
var: xprice(0);
if mp <> mp[1] then xprice=0;
if NumLosTrades > 0 and OpenPositionProfit < (GrossLoss/NumLosTrades)*3 and
xprice=0 then xprice = close;
if mp = 1 and xprice<>0 then exitlong("lx1") next bar at xprice - 30 points stop;
if mp = -1 and xprice<>0 then exitShort("sx1") next bar at xprice + 30 points stop;
if mp=0 then begin
exitlong("lx2") next bar at close - TR*2 stop;
exitShort("sx2") next bar at close + TR*2 stop;
end;
> I'm using TS2ki (latest) & I've been unable to change the line thickness
> (weight) in my indicators no matter which one I select. Is this a bug?
>
> Michael
Are your bars spaced widely enough to allow the change to occur? Try
expanding the width between bars and see it the bar size adjusts.
This one drove me nuts for a month before I finally figured it out, so I'm happy to
be able to pass on the answer (one of these days I'll be able to answer someone's
question about TRADING...)
In TS2Ki, go to the View/Chart Options dialog, General tab, and turn off "Auto-size
bar width when bar spacing changes." Voila, line thickness will work again. As far
as I'm concerned, this is for sure a bug. According to Help, this is what the
option is supposed to do:
T
EXT STUDIES
342
http://slidepdf.com/reader/full/formule-metastock 342/554
8/6/2019 Formule - Metastock
Notes ---
343
http://slidepdf.com/reader/full/formule-metastock 343/554
8/6/2019 Formule - Metastock
arrow. One work-around for this would be to set "Bars to the Right" to
an appropriately large number.
Black = 1 White = 8
Blue = 2 Dark = 9
Cyan = 3 Dark = 10
Green = 4 Dark = 11
Magenta = 5 Dark = 12
Red = 6 Dark = 13
Yellow = 7 dark = 14
DkGrey = 15 LightGrey = 16 }
@TextCurrentCText
344
http://slidepdf.com/reader/full/formule-metastock 344/554
8/6/2019 Formule - Metastock
Text_SetStyle(ID,0,2);
Text_SetColor(ID,6);
@TextCurrentIndic
Var: MA(0),
Arrow(" <="),
ID(-1);
MA = Average(C,10);
Plot1(MA,"Avg");
IF BarNumber = 1 THEN ID =
Text_New(Date,Time,Close,Arrow+NumToStr(MA,2));
Text_SetString(ID,Arrow+NumToStr(MA,2));
Text_SetLocation(ID,D,T,MA);
Text_SetStyle(ID,0,2);
Text_SetColor(ID,6);
Black
Blue ==21 White
Dark ==98
Cyan = 3 Dark = 10
Green = 4 Dark = 11
Magenta = 5 Dark = 12
Red = 6 Dark = 13
Yellow = 7 dark = 14
DkGrey = 15 LightGrey = 16 }
345
http://slidepdf.com/reader/full/formule-metastock 345/554
8/6/2019 Formule - Metastock
T RADE STATION I NSTABILITY
James
I had constant crashes with Ts2ki under Win98, occasional crashes under
NT4/SP6 and ZERO crashes since I switched to Win2k. Get Win2k, it is far
more stable than NT. Also I run 256mb ram which I believe is the minimum
necessary for trouble free operation of Ts2k running real time. Also
whenever you have mysterious gremlins like self-modifying toolbars I suggest
a clean install of your O/S and Ts2k. When I have had similar problems I
did not reuse old workspaces or data because prior attempts to do so caused
the gremlins to return. Export your data before reinstall and import it
back and recreate your workspaces manually. This gives you a dead clean
install and in every case that eliminated my gremlins. None have returned
since I went on Win2k. Other folks get away with copying back data and
workspaces onto a clean install of Ts2k but I was not that lucky.
Good luck
Bill Wood
346
http://slidepdf.com/reader/full/formule-metastock 346/554
8/6/2019 Formule - Metastock
Trend Squelch
347
http://slidepdf.com/reader/full/formule-metastock 347/554
8/6/2019 Formule - Metastock
348
http://slidepdf.com/reader/full/formule-metastock 348/554
8/6/2019 Formule - Metastock
http://slidepdf.com/reader/full/formule-metastock 349/554
8/6/2019 Formule - Metastock
350
http://slidepdf.com/reader/full/formule-metastock 350/554
8/6/2019 Formule - Metastock
e. One or more files should be found. Click on Edit | Select All, then File
| Delete. Confirm deletion to the Recycle Bin and close the Find window.
9. If these steps are unsuccessful, you will need to change the BIOS
settings in your computers setup utility. If you have never edited the BIOS
settings, please refer to your computer's documentation or ask a qualified
technician to help you make changes. The computer will usually display a
message when booting that will explain how to enter the computer's setup
utility. Once you have entered the setup utility, navigate to the section
where you will be able to edit the Parallel port settings. In the BIOS, you
will need to change the settings for the Parallel port to use ECP mode and
Enabled if applicable. Once the mode for the parallel port has been changed,
try to access the program again. If the security block message is still
displayed, it will be necessary to try each different mode setting for the
Parallel port to find a combination that will work properly. The Parallel
port may be setup to use Bi-Directional and Auto or OS Controlled. These
settings will usually not allow the security block to function.
DocumentID: 10
Last Updated on: 10/12/98
Security Block Problems with Windows NT (Also OS/2 and PS/2 machines)
Security Block Access Using Windows NT
The directory X:\Omega\Prog\Drivers\NT, where X is the drive where the
Omega Research product was installed, contains the drivers necessary for
accessing the Activator(/M)or Aegis(/M) under Windows NT.
*** IMPORTANT NOTE ***
In order to make the following changes, Windows NT MUST be started with an
account with ADMINISTRATIVE privileges.
**********************
For native NT applications, only the physical device driver (SSIPDDP.SYS) is
needed. For DOS and Windows applications running in a compatibility box
under NT, both the physical and virtual device drivers are necessary. See
REGISTRY.DOC on how these files should be installed.
There are 2 additional
automatically programs,
install/modify SSIREGI.EXE
the SSIPDDP driverand
intoSSIREGM.EXE, which will
NT's Registry database.
Refer to the REGISTRY.DOC for details on how the programs are used, and what
directories the files should be copied to.
** IMPORTANT NOTE **
The virtual device driver needs the physical device driver to operate. On
some computers (if you run NT 3.5 or later version), the physical drivers
are loaded continuously, but the user may log on before all of them are
loaded.
In this case, during the log on process, the virtual device driver may be
loaded BEFORE NT has finished loading the physical (SSIPDDP.SYS) driver, and
the user getsError:
"SSIVDDP the message:
SSIPDDP.SYS device driver not loaded"
351
http://slidepdf.com/reader/full/formule-metastock 351/554
8/6/2019 Formule - Metastock
If you encounter this during the first log on or after a boot, don't panic:
Either log out and log in again, or wait longer (approximately one minute)
352
http://slidepdf.com/reader/full/formule-metastock 352/554
8/6/2019 Formule - Metastock
C:\> \OMEGA\
C:\OMEGA>CD PROG\
C:\OMEGA\PROG>CD DRIVERS\NT\
C:\OMEGA\PROG\DRIVERS\NT>SSIREGI
CreateService SUCCESS install
353
http://slidepdf.com/reader/full/formule-metastock 353/554
8/6/2019 Formule - Metastock
C:\OMEGA\PROG\DRIVERS\NT>
then I rebooted and the security block allowed opening of server and
charting.
Thankyou very much for your help. After having spent hours trying various
combinations of the Omega Knowledge base string and getting "not a valid
path" your suggestion of altering the string led to the 'fix' above. The
space after "CD" is definitely required. Why Omega cannot publish this
correctly, one will never know!
> John,
>
> Looking at the instructions below and your .gif that you had sent with the
> posting, it seems that the error is in the syntax of this last command
>
> It should read
> CD OMEGA\PROG\DRIVERS\NT\SSIREGI install
>
> That is CD is followed by a space.
>
> Also, you might want to follow the procedure for checking your SSI_ACT
> Settings for the Autoexec.bat as described in the MS Word file I'm
> attaching.
>
> Dave Nadeau
>
> > -----Original Message-----
> > From: Jon Macmichael [mailto:jonmac@bigpond.com]
> > Step 4
>>
>
>>> which
Locateyour
yourOmega
MS-DOS prompt.resides
directory At thefollowed
prompt type thecolon
by the letterand
of the
thedrive in
354
http://slidepdf.com/reader/full/formule-metastock 354/554
8/6/2019 Formule - Metastock
pressing
> > Enter or Return key.
>>
> > Then Type in the following line followed by pressing the Enter or Return
> > key.
>>
> > CD\OMEGA\PROG\DRIVERS\NT\SSIREGI install
>>
>
>
ATR D ISCUSSION
> The problem results when moving from yesterday's last bar close to today's
> open bar low or high. If there is a large gap up or down from yesterday,
it
> distorts TR. It appears that the distance from yesterday's close to
today's
> high or low should be excluded.
Maybe I've missed the point of your message, since I have not
really been following this threat, but that was kind of the whole point
355
http://slidepdf.com/reader/full/formule-metastock 355/554
8/6/2019 Formule - Metastock
about ATR--to take into account the gaps that a standard range
indicator misses. The theory being that by capturing those gaps,
ATR more accurately reflects price movements.
Granted, this might not be convenient for day trading, but ATR
was designed for interday use, with days of limited length and
limits to the daily price movement. In day trading, apparent gaps
almost always result from the length of the bar, rather than from real
voids in the price movement. Same with 24-hour trading, when
there is enough late-night volume to provide an orderly market.
It sounds like whatever problem you are trying to solve comes from
trying to apply ATR to the wrong kind of trading, rather than any
defect in ATR itself.
Kaufman has a section on this type of calculation in Trading Systems and Methods.
356
http://slidepdf.com/reader/full/formule-metastock 356/554
8/6/2019 Formule - Metastock
WealthScript Code
D EAD C AT C ATCHER
CMOPeriod := #OptVar4;
holdPeriod := #OptVar5;
longROCLimit := #OptVar6;
shortROCLimit := #OptVar7;
{ Install AutoStops }
if #OptVar2 > 0 then InstallStopLoss( #OptVar2 );
if (#OptVar2 > 0) and (#OptVar3 > 0) then InstallTrailingStop(
#OptVar2, #OptVar4 );
if PositionLong( LastPosition()
if ( Bar >= BarSave ) then
+ holdPeriod begin
) then begin
SellAtMarket( Bar + 1, LastPosition() );
end;
end
else begin
if ( Bar >= BarSave + holdPeriod ) then begin
CoverAtMarket( Bar + 1, LastPosition() );
end
end;
end
else
begin
if (#OptVar1 >= 0)
and (CMO(Bar,#Close,CMOPeriod) < -99.0)
then
begin
Print(Format('Long %f',ROC(Bar, #Close, CMOPeriod)));
BuyAtMarket( Bar + 1, 5000 );
BarSave := Bar + 1;
end
else if (#OptVar1 <= 0)
and (CMO(Bar,#Close,CMOP eriod) > 99.0)
357
http://slidepdf.com/reader/full/formule-metastock 357/554
8/6/2019 Formule - Metastock
then
begin
Print('Short');
ShortAtMarket( Bar + 1, 5000 );
BarSave := Bar + 1;
end;
end;
end;
I
NTRA D AY
WealthScript Code
Below is the WealthScript code for this ChartScript.
{ Create CMOPane Pane }
CMOPane := CreatePane( 50, TRUE, FALSE );
SetPaneMinMax( CMOPane, -60, 60 );
DrawHorzLine( 0, CMOPane, #Gray, 1 );
DrawHorzLine( 50, CMOPane, #Navy, 1 );
DrawHorzLine( -50, CMOPane, #Navy, 1 );
{ Plot Indicators }
PlotSeries( CMO( #Close, 20 ), CMOPane, 009, 2 );
Dec( AT );
end;
358
http://slidepdf.com/reader/full/formule-metastock 358/554
8/6/2019 Formule - Metastock
Inc( AT );
end;
end;
359
http://slidepdf.com/reader/full/formule-metastock 359/554
8/6/2019 Formule - Metastock
WealthScript Code
InstallTrailingStop( 10, 50 );
InstallProfitTarget(15);
InstallStopLoss(7);
for Bar := 21 to BarCount() - 1 do
begin
ApplyAutoStops( Bar );
if LastPositionActive() then
begin
if PositionLong( LastPosition() ) then
CoverAtStop( Bar + 1, xStopLevel, LastPosition() )
end
else
begin
if ( PriceLow( Bar) <= Lowest( Bar, #Low ,20 ) ) AND
( PriceLow(Bar -1) > Lowest( Bar -1, #Low, 20) ) AND
( PriceLow(Bar -2) > Lowest( Bar -2, #Low, 20) ) AND
( ATR(Bar,14) / PriceClose( Bar ) > 0.20 ) AND
( CMO(Bar,#Close,14) < -5 )
then begin
{ search previous 20 - day low }
PrevLowPrice := PriceLow(Bar);
for i := 3 to 20 do
begin
if PriceLow(Bar-i) <= Lowest(Bar-i,#Low,20) then
begin
PrevLowPrice := PriceLow(Bar-i);
i := 20;
end;
end;
BuyAtStop(Bar+1, 5000, PrevLowPrice);
xStopLevel := 0.99 * PriceLow(Bar);
if PriceLow(Bar+1) < PriceLow(Bar) then
xStopLevel := 0.99 * PriceLow(Bar+1);
end;
end;
end;
In the March, 2001 issue of Stocks & Commodities magazine, Viktor Likhovidov
shares a method of coding candlesticks.
This ChartScript uses Mr. Likhovidov's CandleCode formulation with one simple
360
http://slidepdf.com/reader/full/formule-metastock 360/554
8/6/2019 Formule - Metastock
The CandleCode method expresses a candlestick value as a binary number, coding the
body, upper shadow, and lower shadow in different "bits" of the number. One
principal of binary numbers is that we can use the highest bit as a sign. In our
adaptation this is what we do. Rather than adding 64 to the CandleCode value, we
simply make black candles have negative values. This simplifies the code because we
do not have to reverse the bits values when calculating black candlesticks.
On a technical note, we use 20 day Bollinger Bands with 0.5 Standard Deviations to
determine whether the body and shadow sizes are small, medium or large. A value
above the upper BBand indicates large, within the BBands medium, and below the
lower BBand small. The ChartScript displays the candle body size, with
corresponding Bollinger Bands, to illustrate this technique.
We also present a trading system based on the sign-modified CandleCode. The system
presented takes a 20 day simple moving average of CandleCode. When this value
crosses below -25, an extreme reading occurs and a long position is established. When
it crosses above 25 a short position is opened. The system exits at a 20% stop loss,
and 15% profit target.
WealthScript Code
Below is the WealthScript code for this ChartScript.
{ PriceSeries to hold candle body/shadow sizes, and CandleCode }
BodySize := CreateSeries();
UpperShadowSize
LowerShadowSize :=
:= CreateSeries();
CreateSeries();
CandleCode := CreateSeries();
361
http://slidepdf.com/reader/full/formule-metastock 361/554
8/6/2019 Formule - Metastock
DrawLabel( 'Candle Body Size with 20 day, 0.5 STD Bollinger Bands',
BollPane );
begin
{ Body }
nSize := GetSeriesValue( Bar, BodySize );
nUpper := BBandUpper( Bar, BodySize, 20, 0.5 );
nLower := BBandLower( Bar, BodySize, 20, 0.5 );
if nSize > nUpper then
nCode := 32 + 16
else if nSize < nLower then
nCode := 16
else
nCode := 32;
{ Upper Shadow }
nSize := GetSeriesValue( Bar, UpperShadowSize );
nUpper
nLower :=
:= BBandUpper(
BBandLower( Bar,
Bar, UpperShadowSize,
UpperShadowSize, 20,
20, 0.5
0.5 );
);
if nSize > nUpper then
nCode := nCode + 8 + 4
else if nSize < nLower then
nCode := nCode + 4
else
nCode := nCode + 8;
{ Lower Shadow }
nSize := GetSeriesValue( Bar, LowerShadowSize );
nUpper := BBandUpper( Bar, LowerShadowSize, 20, 2 );
nLower := BBandLower( Bar, LowerShadowSize, 20, 2 );
if nSize > nUpper then
nCode := nCode + 2 + 1
else if nSize < nLower then
nCode := nCode + 1
else
nCode := nCode + 2;
{ Set sign for black candles }
if PriceClose( Bar ) < PriceOpen( Bar ) then
nCode := nCode * -1;
{ Store in CandleCode PriceSeries }
SetSeriesValue( Bar, CandleCode, nCode );
end;
362
http://slidepdf.com/reader/full/formule-metastock 362/554
8/6/2019 Formule - Metastock
"Party Girl I, Optimized" has the same code for identifying bull and bear trends than
the already public CharScript "Party Girl".
Some of our colleagues encouraged me to improve the old script because, although
"Party Girl" is often listed among the top ten systems for ISDEX, the returns - both in
terms of RAR and profits - were not so high as they were at release date in October
2000.
You can play around with OptVar1 to OptVar4 if you are already working with
Wealth-Lab Desktop.
Having introduced above components, returns (RAR and profits) are again more than
100% as they were before. It seems that the system works a lot better at bear trends
(going short) than at bull trends (going long).
As of today (25 th of November 2000) Gross Profits are today impressive (over
300%) butofwe
100% +/- also
real have a lot of gross losses (about -200%) so we end up with poor
profits.
On the other hand, this means that we have chances to better the results. Please email
me suggestions to improve this system series.
M ULTI C OLOUR MA ETC .
VALUE1=whatever;
if value1<>0 then
363
http://slidepdf.com/reader/full/formule-metastock 363/554
8/6/2019 Formule - Metastock
Laura,
regards
michael
{*******************************************************************}
Input:OSC(slowkclassic(5,
3)),Mingap(3),MaxOfset(3),OscDif(.01),PrcDif(1),MinPeak(30),
MinPeak2(30),MaxVal(70),MaxVal2(70),MaxNum(10);
Array:OscH[51](0),OscHBar[51](0),OscL[51](0),OscLBar[51](0);
Var:OscVal(0),LastH(0),LastL(0),Loop(0),FoundH(0),FoundL(0),
StrtBar(0),EndBar(0),StrtVal(0),IncVal(0),NewPeak(false),NewVal(false),
LastPeak(0),LastVal(0),EndVal(0);
{MaxOfset - Number of bars away (in price chart) from corresponding peak
or valley invalid
considered Stochastic that is allowable and still
Zero - tight, will produce fewest trades, the greater the
number,
the more trades that will be generated.
MinGap - Minimun number of bars needed between peaks or valleys.
OscDif - Minimum difference needed between points of Stochastic in
order to be greater or less than.
PrcDif - Minimun number of points between highs or lows of bars in
order to be greater or less than.
MinPeak - The minimum value needed for the first peak (of the
stochastic)
MaxVal - The Maximum value allowed for the first valley (of the
364
http://slidepdf.com/reader/full/formule-metastock 364/554
8/6/2019 Formule - Metastock
stochastic)}
OscVal = OSC;
NewPeak=false;
NewVal=false;
OscH[1] = OscVal;
OscHBar[1] = BarNumber;
365
http://slidepdf.com/reader/full/formule-metastock 365/554
8/6/2019 Formule - Metastock
OscL[Loop] = OscL[Loop-1];
OscLBar[Loop] = OscLBar[Loop-1];
end;
end;
end;
end ELSE LastL = 1; {first entry}
{Look for the first part of a sell divergence, the second stochastic
peak is
Lower than the previous stochastic peak by one full % point. Also,
the first peak has to
be >= the MinPeak value. Take the first occurance}
if NewPeak or barnumber-OscHBar[2] <= MaxOfset then
begin
FoundH = 0;
for loop = 3 to lastH
begin
if FoundH=0 and (OscH[loop]-OscH[2]>=1) and
OscHBar[2]-OscHBar[loop]>=MinGap
and OscH[loop]>=MinPeak and
OscH[2]>=MinPeak2
then FoundH = Loop;
{ negative slope}
end;
If StrtBar > 0 and EndBar > 0 and EndVal >= StrtVal and
StrtBar - EndBar >= MinGap then
begin
{Found match, have true Divergence}
{ if OscHBar[2]<>LastPeak then }
if EndVal = StrtVal then IncVal = 0 else
IncVal = (EndVal-StrtVal)/(StrtBar-EndBar);
value2 = 0;= StrtBar downto EndBar
for value1
366
http://slidepdf.com/reader/full/formule-metastock 366/554
8/6/2019 Formule - Metastock
begin
Plot1[value1](StrtVal+value2*IncVal,"SDIVERG");
value2 = value2 + 1;
end;
{ LastPeak = OscHBar[2]; }
end;
end;
end;
{Look for the first part of a buy divergence, the second stochastic
valley is
Higher than the previous stochastic Valley by one full % point.
Also, the first valley
has to be<=the MaxVal value.Take the first occurance}
if NewVal or barnumber-OscLBar[2] <= MaxOfset then
begin
FoundL = 0;
for loop = 3 to lastL
begin
if FoundL=0 and (OscL[2]-OscL[Loop]>=1) and
OscLbar[2]-OscLBar[loop]>=MinGap
and OscL[loop] <= MaxVal and
OscL[2]<=MaxVal2
then FoundL = Loop;
{ positive slope}
end;
if foundL > 0 then
begin
{FOUND FIRST PART OF BUY DIVERGENCE, CHECK PRICE BARS FOR
MATCH}
EndBar = RB_CheckValley(OscLBar[2],MaxOfset,PrcDif);
StrtBar = RB_CheckValley(OscLBar[FoundL],MaxOfset,PrcDif);
StrtVal
EndVal == low[StrtBar];
low[EndBar];
if StrtBar>0 and EndBar>0 and EndVal <= StrtVal and
StrtBar - EndBar >= MinGap then
begin
{Found match, have true Divergence}
{ if OscLBar[2]<>LastVal then }
367
http://slidepdf.com/reader/full/formule-metastock 367/554
8/6/2019 Formule - Metastock
begin
Plot2[value1](StrtVal-value2*IncVal,"BDIVERG");
value2 = value2 +1;
end;
{ LastVal = OscLBar[2]; }
end;
end;
end;
{******************************************************************}
C
HECK P EAK & C
HECK V
ALLEY
Gary,
see below.
nope. but it works pretty good. you can use different indicators as an
input.
> Gary
michael
Function: RB_CheckValley
{*****************************************************************}
Inputs:PkNmbr(NumericSimple),MaxOfset(NumericSimple),
PrcDif(numericsimple);
Vars:Last(0),First(0),TstVal(0),NextVal(0),PrevVal(0);
Will return the offset bar number (bars back from current bar) of the
valley bar or will return a Zero if there is no matching valley}
368
http://slidepdf.com/reader/full/formule-metastock 368/554
8/6/2019 Formule - Metastock
{
{***Check For Equal Bars***}
value2 = 2;
while TstVal = PrevVal
begin
PrevVal = Low[value1+value2];
value2 = value2+1;
end;
value2 = 2;
while TstVal = NextVal and value1-value2>= 0
begin
NextVal = Low[value1-value2];
value2=value2+1;
end;
}
Function: RB_CheckPeak
{*************************************************************}
Inputs:PkNmbr(NumericSimple),MaxOfset(NumericSimple),
PrcDif(numericsimple);
Vars:Last(0),First(0),TstVal(0),PrevVal(0),NextVal(0);
369
http://slidepdf.com/reader/full/formule-metastock 369/554
8/6/2019 Formule - Metastock
Will return the offset bar number (bars back from current bar) of the
{
{***Check For Equal Bars***}
value2 = 2;
while TstVal = PrevVal
begin
PrevVal = High[value1+value2];
value2 = value2+1;
end;
value2 = 2;
while TstVal = NextVal and value1-value2>= 0
begin
NextVal = High[value1-value2];
value2=value2+1;
end;
}
{*******************************************************************}
H IGHEST H IGH
>Thanks for your comments. I substituted highest high and lowest low but
>that didn't seem to work either. Any ideas? I get multiple buys and sells all
>clumped together.
>
>Inputs: BZ(2), SZ(1);
370
http://slidepdf.com/reader/full/formule-metastock 370/554
8/6/2019 Formule - Metastock
>
>Sell at highest(high,50) - (highest(high,50)* (sz*.01)) stop;
>
>buy at lowest(low,50) + (lowest(low,50)* (bz*.01)) stop;
But I am guessing that you want to sell at some amount below the tops, etc.
The trouble with the Highest(High, XX) function is that it searches back in time to a
high. What I think you want is to move forward in time keeping track of new highs.
Bob Fulks
---
MP = MarketPosition;
M OVING AVERAGES
•
Tillman T3
• volume-weighted average or Buff average
• sine-weighted moving average
• adaptive moving average by Perry Kaufman
• DEMA
• TEMA
Juriks moving average has very little noise so it should not be used
371
http://slidepdf.com/reader/full/formule-metastock 371/554
8/6/2019 Formule - Metastock
directly to generate trading signals. It is more useful to smooth time series for instance
a rsi of a jma of the closes.
{Trailing Stop}
OptVar1 := 10;
OptVar2 := 80;
{Stop Loss}
OptVar3 := 50;
{Profit Target}
OptVar4 := 20;
begin
BullTrend := true;
SetBackgroundColor( Bar, 898 );
end;
InstallStopLoss( OptVar3 );
InstallTrailingStop( OptVar1, OptVar2);
InstallProfitTarget( OptVar4 );
if LastPositionActive() then
begin
ApplyAutoStops(Bar);
{ Test for closing Long Positions }
if PositionLong( LastPosition() ) then
372
http://slidepdf.com/reader/full/formule-metastock 372/554
8/6/2019 Formule - Metastock
begin
if not BullTrend then
SellAtStop( Bar + 1, PriceLow(Bar) , LastPosition() );
end
else
{ Test for closing Short Positions }
begin
if not BearTrend then
CoverAtStop( Bar + 1, PriceHigh(Bar), LastPosition() );
end;
end
else
begin
{ Trigger long/short trades }
if BullTrend then
begin
if ( PriceClose( Bar ) > SMA( Bar, #High, 5 ) )
and ( SMA( Bar, #High, 5 ) > SMA( Bar - 1, #High, 5 ) )
then
F IBONACCI FORMULAS
Hi Shashi,
Many thanks for your help. I've come up with the following - not exactly to
your suggestion in every detail, but hopefully in the spirit of it. I
haven't tested it much yet - all feedback and improvements welcome (coding
is not my strong point!). Anyone testing it please vary V1 especially to
your preference - I have it set very low for a 5-minute chart.
V1:=0.5; {ZigZag reversal amount}
V2:=0.50; {Minimum Retracement %}
V3:=0.618; {Maximum Retracement %}
PeakBars(1,C,V1) <
373
http://slidepdf.com/reader/full/formule-metastock 373/554
8/6/2019 Formule - Metastock
AND
C= LowestSince(1, C=Peak(1,C,V1), C)
AND
AND
Thanks again,
Nick
At one time I had created a pullback/ Fib. retracement formula but can't
seem to find it now. I then gave up using it, not because it didn't work
(it
did!), but I could never tell in real time whether the retracement would
be
38%, 50%, or 62% (the commonest ratios)! Thus, for example, I would buy on
a38% retracement just to see it fall to 62% retracement. Or I would buy at
62% retracement just to see it fall even further and the trend get
reversed.
I guess that's a limitation we have to live with; of course, once the
trend
resumes, it is very easy with 20/20 hindsight to see how much the
retracement was.
374
http://slidepdf.com/reader/full/formule-metastock 374/554
8/6/2019 Formule - Metastock
indicator. As for the % amount you would choose, that depends on your
trading time frame - larger % for longer time frame and vice versa. (Note:
zigzag is a tricky function; read the online help. In particular, note
this
section from online help: "Be forewarned, that the last leg (i.e.,
segment)
of the Zig Zag is dynamic, meaning that it can change. Therefore, be
careful when designing system tests, experts, etc. based on the Zig Zag
indicator". But don't let this scare you. I got used to it over time, and
so
can you.)
2) Define a recent high implying that the trend is continuing e.g.
HHV(C,20)
most recent swing high (e.g. HHV(C,20) Peak(1,C,10)).
3) Define a pullback e.g. C < HHV(C,20)
4) Define most recent swing e.g. Swing:= HHV(C,20) - Trough(1,C,10) (using
10% swing as an example);
4) Define extent of pullback e.g. for a pullback between 50% & 68% of
recent
swing, it would be something like: C < (Trough(1,C,10) + 0.51*Swing) AND C
(Trough(1,C,10) + 0.31*Swing).
Use filters as needed.
There you have it. Metastock programming is not very easy, but its not
rocket science either. Once you start doing it yourself, AND UNDERSTAND
THE
LOGIC BEHIND YOUR ARGUMENTS, you will catch on pretty fast. Try it - I
have
done most of the work for you above. Just make sure you use the parameters
appropriate for your trading.
Shashi
----------------------------------------------------------
----- Original Message -----=20
From: Maurice Cruz=20
To:
Sent:metastock@metastock.com=20
Friday, February 01, 2002 6:46 AM
Subject: Fibonacci Formulas
Group,
Maurice
375
http://slidepdf.com/reader/full/formule-metastock 375/554
8/6/2019 Formule - Metastock
To: metastock@metastock.com=20
Sent: Thursday, January 31, 2002 8:53 PM
Subject: Fibonacci Formulas
Hi Group,
Many thanks,
Nick
J OE D I N APOLI - D I N
APOLI T
REND FORMULA
From: Krzysztof.Kowczur@brebank.com.pl
Subject: "Joe DiNapoli - DiNapoli Trend formula
Date: 30/01/2002 11:35:09
To: metastock@metastock.com
Hi Guys
Does anyone have this system formula???
Dinapoli Trends
{UP}C=Ref(Mov(C,3,S),-3) AND
(Mov( CLOSE, 8.3896, E) - Mov( CLOSE, 17.5185, E))=(PREV+(0.199*((Mov(
CLOSE, 8.3896, E) - Mov( CLOSE, 17.5185, E))-PREV))) AND
(Mov( CLOSE, 8.3896, E) - Mov( CLOSE, 17.5185, E))=Ref((Mov( CLOSE, 8.3896,
E) - Mov( CLOSE, 17.5185, E)),-1)
{DOWN}{DOWN}C<=Ref(Mov(C,3,S),-3) AND
(Mov( CLOSE, 8.3896, E) - Mov( CLOSE, 17.5185, E))<=(PREV+(0.199*((Mov(
CLOSE, 8.3896, E) - Mov( CLOSE, 17.5185, E))-PREV))) AND
(Mov( CLOSE, 8.3896, E) - Mov( CLOSE, 17.5185, E))<=Ref((Mov( CLOSE,
8.3896, E) - Mov( CLOSE, 17.5185, E)),-1){jimt}
Thanks Peter,
376
http://slidepdf.com/reader/full/formule-metastock 376/554
8/6/2019 Formule - Metastock
I use this formula much differently than Chande suggests. I've had a lot of
success with a 13 period FO. I plot the formula and establish equidistant
levels (from zero) that trigger buy and sell signals. Simple, but effective. This
approach is graphically displayed in the attachment. I like the FO because it
can be somewhat "adaptive" (and it can pull twenty bucks out of crude).
Thanks again, Equis doesn't "trust" us with the formula. If you "click" on the
little "arrow&?", on the task bar, in MetaStock and drop it on the Forecast
Oscillator you get the following blurb:
"The oscillator is above zero when the forecast price is greater than the actual
price. Conversely, it's less than zero if its below."
Of course, this is totally false (the opposite is true). Which of edition of
MetaStock do you believe they might correct their mistake?
Take Care,
Steve
----- Original Message -----
Peter Gialames
Using linear regression as a crystal ball for forecasting the market? After all,
if you were
changes andtoplacement
be able to of
determine tomorrow's
stop points, it would high, lowyour
simplify and life
close for trend
immeasurably. Can it work? Tushar Chande explains how it can be done.
Wouldn't you trade better It you could "see" the future? A simple linear
regression can provide an objective forecast for the next day's high, low and
close. These ingredients are essential for a trading game plan, which can help
you trade more mechanically and less emotionally. Best of all, a regression
forecast oscillator, %F, gives early warning of impending trend changes. The
linear regression method is well known for finding a "best-fit" straight line for
a given set of data. The output of the regression are the slope (m) and constant
(c) of the equation
(1)Y = mX + c
Here, m and c are derived from a known set of values of the independent
variable X and dependent variable Y. The relative strength of the linear
relationship between X and Y is measured by the coefficient of determination
r 2 , which is the ratio of the variation explained by the regression line to the
total variation in Y. Here is a table to help interpret the values of r 2 , which
range from 0 to 1:
The coining of the term "regression" can be attributed to Sir Francis Galton,
who observed in the late 1800s that tall fathers appeared to have as a rule short
sons, while short fathers appeared to have as a rule tall sons. Galton suggested
377
http://slidepdf.com/reader/full/formule-metastock 377/554
8/6/2019 Formule - Metastock
that the heights of the sons "regressed" or reverted to the average. Technician
Arthur Merrill also had a good explanation in a recent issue of STOCKS &
COMMODITIES, and Patrick Lafferty recently wrote on an application of
multiple regression to gold trading. Virtually all introductory books on
statistics have a detailed discussion of the linear regression method.
Successful professional traders emphasize the importance of having a trading
plan. A trading game plan, much like that of a football team, clearly defines
specific actions under different conditions. The linear regression method is
very useful in developing a forecast for the next trading day's high, low and
close based on the last five trading sessions. The method is general and broad-
based enough so that it can be used with stocks, indices or commodities. The
forecast is the basis of my trading plan: I can define what I should do if the
market rises above the forecast high, falls below the forecast low or stays
within the forecast range. This way, I can avoid being emotional and trade as
mechanically as possible by having a plan to rely on.
FORECASTING WITH LINEAR REGRESSION
I like to use at least 10 days of data and develop a forecast for the high, low
and close. The five-day regression is a good choice for short-term trading. You
can use any length of regression you like. Here are the calculations with the
daily close in a spreadsheet format:
1 Perform a linear regression with the first five days of data to obtain the slope
m and constant c such that
378
http://slidepdf.com/reader/full/formule-metastock 378/554
8/6/2019 Formule - Metastock
where Y is the close for Day 6 and Y(Forecast) is the forecast for Day 6 from
step 2 (from Day 5).
7 Record the oscillator on the same line as Day 6.
8 Step the calculations ahead one day at a time until the most recent day.
Technically, we can use the linear regression to develop a point forecast
(single value) for the next day (as in step 2) or a range (interval) of values with
a certain confidence level. The interval widens, greater the variation in the
data and greater the desired confidence level.
I use the forecast oscillator, %F, to determine if my forecast is above or below
the actual market data. Since
%F = ((Y-Yforecast)/Y)*100
where Y can
measures the be any market
percent variable
deviation of thefor stocks,
actual indices
value fromor
itscommodities,
forecast. In a %F
trading market, %F changes its sign before a significant trend change. In
trending markets, %F tends to change sign early in the trend. I interpret %F in
the context of the r 2 Of the regression. A low value of r 2 plus a change in
sign of %F is a good signal of a change in trend. Market extremes and
periodicity can also be observed on the %F charts.
DEVELOPING A TRADING PLAN
You can use the forecasts to develop a specific trading plan to suit your
trading style. I use the forecasts in several ways.
Forecasts as stops. I use the high and the low as action points. If the market
exceeds the forecast high, it wants to go up. To trade with the trend, I put a
buy stop a few ticks above the high. If the market falls below the forecast low,
it wants to go down. Hence, I set a sell stop a few ticks below the forecast low.
If you want to trade against the trend, sell short near the forecast high and buy
near the forecast low.
Forecasts as intraday range scale. The forecasts provide a scale for
evaluating the trading day. The market can stay within the expected range or
go outside. On a down day, the intraday high is well below the forecast high
and may
above thebeforecast
below low
the forecast close.
and often aboveOnthe
anforecast
up day, close.
the market stays well
General rules for trading with forecasts. Here are some general rules:
• Use the forecasts only if r 2 is greater than 0.1. Higher the value of r 2 , the
greater the confidence in the forecasts.
• A trend change is imminent when r 2 falls below 0.1. Prepare to close longs.
• A trend is in place if r 2 is greater than 0.6. As a trend follower, you could
wait for this value to be exceeded before opening positions. This would keep
you out of short-term fluctuations.
379
http://slidepdf.com/reader/full/formule-metastock 379/554
8/6/2019 Formule - Metastock
I have developed a forecast for the high, low and close for January 20, 1992,
from the previous five trading days, seen in Figure 1. The market was making
new highs the previous week. Was a downward movement imminent? Let's
look at the data from Friday, January 17, 1992:
The market was trending moderately (0.4<= r 2 <0.6), but the forecast
oscillator %F was negative for high, low and close, warning of a possible
change in trend. The relatively small slope of the regression for the high meant
the market was meeting resistance. The slope of the regression for the close
had turned down from the high values during the recent strong uptrend. The
forecast, however, called for a strong close near the highs of the day, but that
seemed doubtful, given the low slopes in a moderating trend. The plan was to
watch for a change in trend. If the market opened weak, a bearish strategy was
called for. For example, I would consider buying the Standard & Poor's 100
Index OEX January 390 puts, or selling short the S&P 500 March futures
contract.
The high daily volume of OEX index options traded makes the S&P
The market opened at the Friday close and weakness was evident at the open,
as thewould
trend S&P 500 futuresasopened
be down, lower.
the market It waswell
traded clear in early
below trading that
the forecast highthe
and
close. Clearly, the forecast range provided a good scale, since it reinforced the
concept that the market was weaker than the trend of the prior five days. A
bearish stance would have been profitable.
THE NATURE OF REGRESSION FORECASTS
The high daily volume of OEX index options traded makes the S&P 100 index
an interesting application of the regression forecast approach. I have examined
a time period from early October 1991 to mid-January 1992. The OEX close
and its forecast are in Figure 2; the r 2 values in Figure 3; %F in Figure
4, and Figure 5 has %F around the mid-November plunge.
380
http://slidepdf.com/reader/full/formule-metastock 380/554
8/6/2019 Formule - Metastock
Several observations can be made from the OEX analysis. First, the forecast
lags the OEX in an uptrend or in a downtrend. Second, the close and the
forecast cross over several days before a trend change. This crossover can be
seen as a zero crossing in the %F chart. Significant trend changes are preceded
by trendless periods with values of r 2 near zero. Strong trends are
accompanied by high values of r 2 and regression slope. These observations
support the general rules of interpretation noted above. As Figure 5 shows, %F
provided a timely warning of an impending trend change just before the OEX
fell 15.68 points.
I have included data for wheat (cash) from 1989 to indicate the use of this
approach with commodities.
The market showed significant trends during this period with good periodicity,
as shown in Figures 6, 7
and 8. The %F zero crossings were timely indicators of trend change. Features
observed with OEX charts are also seen here; note in particular how %F can
be used to identify extremes in the market from Figures 4 and 8.
Simple linear regression yields forecasts of the high, low and close for stocks,
indices or commodities. These forecasts can be used to develop a trading plan.
You can trade with the trend, against the trend, intraday or interday. The
forecast oscillator, %F, provides early warning of trend changes taken together
with the regression slope and coefficient of determination. This approach
works best in trending markets or trading range markets; it is only moderately
useful in volatile markets with choppy price action. These objective forecasts
will let you trade less emotionally and more mechanically. Profits will look up
when you can look ahead.
Tushar Chande holds a doctorate in engineering from the University of
Illinois and a master's degree in business administration from the University
of Pittsburgh.
REFERENCES
381
http://slidepdf.com/reader/full/formule-metastock 381/554
8/6/2019 Formule - Metastock
List,
Does anyone have the math formula for Chande's Forecast Oscillator?
Thanks,
Steve
382
http://slidepdf.com/reader/full/formule-metastock 382/554
8/6/2019 Formule - Metastock
Steve,
J.
{Forecast Osc-Chande}
{from jseed}
Pds:=Input("Time Periods",1,1000,5);
Fld:=Input("Price Field 1=C 2=O 3=H 4=L",1,4,1);
PFld:=If(Fld=1,C,If(Fld=2,O,If(Fld=3,H,L)));
Sig:=Input("Signal MA Periods",1,200,3);
ForO:=((Pfld-(Ref(LinearReg(Pfld,Pds),-1)+
Ref(LinRegSlope(Pfld,Pds),-1)))*100)/Pfld;
ForO;
Mov(ForO,Sig,E);
{end}
383
http://slidepdf.com/reader/full/formule-metastock 383/554
8/6/2019 Formule - Metastock
List,
Does anyone have the math formula for Chande's Forecast Oscillator?
Thanks,
Steve
Not sure if this is what you are looking for but ...
Peter Gialames
Here is the text from S&C V. 10:5 (220-224): Forecasting Tomorrow's Trading
Day by Tushar S. Chande, Ph.D.
Using linear regression as a crystal ball for forecasting the market? After all, if you
were to be able to
determine tomorrow's high, low and close for trend changes and placement of stop
points, it would
simplify your life immeasurably. Can it work? Tushar Chande explains how it can be
done.
Wouldn't you trade better It you could "see" the future? A simple linear regression can
provide an
objective forecast for the next day's high, low and close. These ingredients are
essential for a trading
game plan, which can help you trade more mechanically and less emotionally. Best of
all, a regression
forecast oscillator, %F, gives early warning of impending trend changes. The linear
regression method is
well known for finding a "best-fit" straight line for a given set of data. The output of
the regression are
the
(1)Yslope
= mX (m)
+ and
c constant (c) of the equation
Here, m and c are derived from a known set of values of the independent variable X
and dependent
variable Y. The relative strength of the linear relationship between X and Y is
measured by the
coefficient of determination r 2 , which is the ratio of the variation explained by the
regression line to the
total variation in Y. Here is a table to help interpret the values of r 2 , which range
from 0 to 1:
The coining of the term "regression" can be attributed to Sir Francis Galton, who
observed in the late
384
http://slidepdf.com/reader/full/formule-metastock 384/554
8/6/2019 Formule - Metastock
1800s that tall fathers appeared to have as a rule short sons, while short fathers
appeared to have as a rule
tall sons. Galton suggested that the heights of the sons "regressed" or reverted to the
average. Technician
Arthur Merrill also had a good explanation in a recent issue of STOCKS &
COMMODITIES, and Patrick
Lafferty recently wrote on an application of multiple regression to gold trading.
Virtually all introductory
books on statistics have a detailed discussion of the linear regression method.
Successful professional traders emphasize the importance of having a trading plan. A
trading game plan,
much like that of a football team, clearly defines specific actions under different
conditions. The linear
regression method is very useful in developing a forecast for the next trading day's
high, low and close
based on the last five trading sessions. The method is general and broad-based enough
so that it can be
used with stocks, indices or commodities. The forecast is the basis of my trading plan:
I can define what I
should do if the market rises above the forecast high, falls below the forecast low or
stays within the
forecast range. This way, I can avoid being emotional and trade as mechanically as
possible by having a
plan to rely on.
FORECASTING WITH LINEAR REGRESSION
I like to use at least 10 days of data and develop a forecast for the high, low and close.
The five-day
regression is a good choice for short-term trading. You can use any length of
regression you like. Here
are the calculations with the daily close in a spreadsheet format:
1 Perform a linear regression with the first five days of data to obtain the slope m and
constant c such
that
X Value Daily Close
1 Day 1
2 Day 2
....
52 Forecast
Day 5 the next day's close with the slope m and constant c from step 1:
(2) Forecast close (Day 6) = 6m + c
3 Record m, c and r 2 on the same line as Day 5. Record the forecast from step 2 one
day ahead, with
Day 6. Note when we are using five days' data, the first forecast is for Day 6.
4 Step the calculation ahead one day such that
5 Record m, c and r 2 as in step 3.
6 Calculate the regression forecast oscillator, %F, as
(3)
%F = ((Y-Yforecast)/Y)*100
where Y is 5).
(from Day the close for Day 6 and Y(Forecast) is the forecast for Day 6 from step 2
385
http://slidepdf.com/reader/full/formule-metastock 385/554
8/6/2019 Formule - Metastock
386
http://slidepdf.com/reader/full/formule-metastock 386/554
8/6/2019 Formule - Metastock
387
http://slidepdf.com/reader/full/formule-metastock 387/554
8/6/2019 Formule - Metastock
crossover can be seen as a zero crossing in the %F chart. Significant trend changes are
preceded by
trendless periods with values of r 2 near zero. Strong trends are accompanied by high
values of r 2 and
regression slope. These observations support the general rules of interpretation noted
above. As Figure 5
shows, %F provided a timely warning of an impending trend change just before the
OEX fell 15.68 points.
I have included data for wheat (cash) from 1989 to indicate the use of this approach
with commodities.
The market showed significant trends during this period with good periodicity, as
shown in Figures 6, 7
and 8. The %F zero crossings were timely indicators of trend change. Features
observed with OEX charts
are also seen here; note in particular how %F can be used to identify extremes in the
market from Figures
4 and 8.
Simple linear regression yields forecasts of the high, low and close for stocks, indices
or commodities.
these forecasts can be used to develop a trading plan. You can trade with the trend,
against the trend,
intraday or interday. The forecast oscillator, %F, provides early warning of trend
changes taken together
with the regression slope and coefficient of determination. This approach works best
in trending markets
or trading range markets; it is only moderately useful in volatile markets with choppy
price action. These
objective forecasts will let you trade less emotionally and more mechanically. Profits
will look up when
you can look ahead.
Tushar Chande holds a doctorate in engineering from the University of Illinois and a
master's degree in
business administration from the University of Pittsburgh.
REFERENCES
Lafferty, Patrick [ 1991 ]. "A regression-based oscillator," Technical Analysis of
STOCKS & COMMODITIES,
Volume 9: September.
Merrill,
STOCKSArthur [1991]. "Fitting a trendline by least squares," Technical Analysis of
& COMMODITIES,
Volume 9: December.
Pfaffenberger, Roger, and James Patterson [1987]. Statistical Methods for Business
and Economics,
Irwin.
-----Original Message-----
From: owner-metastock@metastock.com [mailto:owner-
metastock@metastock.com]On Behalf Of Steve Karnish
Sent: Thursday, January 10, 2002 10:34 AM
To : metastock@metastock.com
Subject:
Forecast Oscillator
388
http://slidepdf.com/reader/full/formule-metastock 388/554
8/6/2019 Formule - Metastock
List,
Does anyone have the math formula for Chande's Forecast Oscillator?
Thanks,
Steve
From my archives.....I found three different formulas for the True Strength Index:
1. rr:= Input("first smoothing r" ,1 ,100 ,25 );
ss:= Input("second smoothing s" ,1 ,100 ,13 );
uu:= Input("third smoothing u",1,100,1);
numerator:=100*(Mov(Mov(Mov(ROC(C,1,$),rr,E),ss,E),uu,E));
denominator:=Mov(Mov(Mov(Abs(ROC(C,1,$)),rr,E),ss,E),uu,E);
If(denominator<0,numerator/denominator,0);
2.
100*(Mov(Mov(ROC(C,1,$),40,E),20,E)/Mov(Mov(Abs(ROC(C,1,$)),40,E),20,E))
3. rc:=Mov(Mov(ROC(C,1,$),40,E),20,E);
rc1:=If(rc=0,1,Mov(Mov(Abs(ROC(C,1,$)),40,E),20,E));
100*(rc/rc1)
Take your pick. <g
Claud
neo wrote:
Would you mind posting the formula?Thanks
-----Original Message-----
From: owner-metastock@metastock.com [mailto:owner-
metastock@metastock.com]On Behalf Of William Gross
Sent: Wednesday, January 02, 2002 2:23 PM
To : metastock@metastock.com
Subject: True Strength Index
Has anyone system tested to see if the 25/13 periods used in the formula for
theTrue Strength Index in the Active Trader Magazine article this month is
better or worse than some alternatives (like 17/9)? Especially on a 15 minute
chart... William GrossVenice CA
389
http://slidepdf.com/reader/full/formule-metastock 389/554
8/6/2019 Formule - Metastock
FORECAST OSCILLATOR
ForecastOsc
or
{Forecast Osc-Chande}
{from jseed}
Pds:=Input("Time Periods",1,1000,5);
Fld:=Input("Price Field 1=C 2=O 3=H 4=L",1,4,1);
PFld:=If(Fld=1,C,If(Fld=2,O,If(Fld=3,H,L)));
Sig:=Input("Signal MA Periods",1,200,3);
ForO:=((Pfld-(Ref(LinearReg(Pfld,Pds),-1)+
Ref(LinRegSlope(Pfld,Pds),-1)))*100)/Pfld;
ForO;
Mov(ForO,Sig,E);
{end}
Jeff,
Try applying this method to Nokia (8% band around the FO), Intel (7%),
Goldman Sachs (6%-see attachment). Don't forget to set system tester to -1
and open. This will initiate your trades on the opening of the following
day you trigger a signal.
Time travel into the next quarter and you will find the above issues being
traded as part of the 50-75 "single stock futures". Then, with a ~$135 in
profits (GS over the last two years), imagine how much fun it would be with
only 20% margin. I can't wait until the "series 7" idiots start to trade in
this arena.
Take care,
Steve
----- Original Message -----
From: Jeff Haferman <Jeff_Haferman@yahoo.com
To: <metastock@metastock.com
Sent: Wednesday,
Subject: January
Re: Forecast 23, 2002 8:50 AM
Oscillator
Thanks Steve,
I'll study this.
I'm very familiar with your site, I've been learning from it for
the last couple of years ;)
Jeff
390
http://slidepdf.com/reader/full/formule-metastock 390/554
8/6/2019 Formule - Metastock
Jeff,
Chande has the finest indicators (my humble, subjective opinion) I have
ever
"eyeballed". Unfortunately, I have never read or seen anything that
would
suggest that Chande knows how to apply "rules" to his fine work. I'm
sure
he uses them well, but I can find nothing that hints at his approach.
The Forecast Oscillator can be a real gem. I like to use a 13 period FO.
Typically, stocks that fluctuate more than 10% from the Forecast
Oscillator
seem to perform the best under testing. A simple optimisation would look
like:
Enter Long:
Cross(opt1,ForecastOsc(CLOSE,opt3))
Close Long:
Cross(ForecastOsc(CLOSE,opt3),opt2)
I like to use 13 as a default for opt3 (or you can test). opt1 is the
trigger level to trigger a long trade and opt2 triggers the sell to
offset
the position. If you are testing commodities or the Q's, just change the
"Close Long" to Enter Short. If I know a stock ranges up to 15% from the
linear regression formed by the Forecast Oscillator, I will test for
points
between 1 and 15, stepping up a point (1) and -1 to -15. Because of the
way
the formula is written, you must change the optimisation levels for each
test. Some stocks don't trade beyond a percent or two of their price.
Testing whole numbers above "one" wouldn't do you any good (under those
circumstances).
Take care,
Steve
391
http://slidepdf.com/reader/full/formule-metastock 391/554
8/6/2019 Formule - Metastock
C
HANDE'S DYNAMIC M OMENTUM I
NDEX
392
http://slidepdf.com/reader/full/formule-metastock 392/554
8/6/2019 Formule - Metastock
HTH, Andreas
-----Ursprungliche Nachricht-----
Von: owner-metastock@metastock.com
[mailto:owner-metastock@metastock.com]Im Auftrag von rudolf stricker
Gesendet: Sonntag, 3. Februar 2002 17:38
An: metastock@metastock.com
Betreff: Re: momentum indicators, using also o-h-l
393
http://slidepdf.com/reader/full/formule-metastock 393/554
8/6/2019 Formule - Metastock
A DAPTIVE SYSTEMS
Adaptive systems is pretty complicated matter. There are several known ways of
doing it, at least about 4. The math is not too complicated but arcane and the concept
is hard to comprehend. There are several questions:
• what does adaptive system mean?
• what do you adapt it to?
• what to adapt?
• what do you adapt it based on? how do you do it?
• what is the math?
• how to you implement it in code?
• is it doable?
Adaptive means the system's algorithm tunes itself up as the "market footprint"
changes to maximise the performance criterion which is max reward at min risk. If
you want to discuss adaptive first you have to discuss non adaptive systems like the
ones you can code in TSs. The main objective of any system is to find the balance in
between the risk and the reward - which is the main criteria. in TS we do that by
running optimisation and finding the suitable peak in the optimisation function.
Optimisation function (OF) has a dependent and independent variables. Dependent
variables are Max Profit (MP) and Min Risk (MR), independent are your parameters /
inputs ( I )
example: if you have 3 inputs 3 Is your OF will is 4 or 5 dimensional ( 3 Is + MR +
MP ). this could be graphically representing as a multidimensional surface. the key is
to find the peak of that surface( that's why if system has more
than 3 inputs I toss it ) - hard to do because it's hard to visualise. You can see now that
if a system does not adapt you have to find the peak manually or you have to
compromise. *most systems fail because they are not
adaptive - curvefitted!!!
So, the purpose of adaptive system is to find that peak in OF in real time. To know the
peak you need to know the OF. to know OF you have to know: MR, MP, and all Is.
let's break it down. MR and MP: you have to calculate systems performance in real
time. But the system does not know how it performs itself. it needs some criteria to go
by. how can a system know if it works on all cylinders and bangs out max profit at
min reward or just barely making it? you have to give it a reference to go by. this ref
performance is called system efficiency (SE). SE is calculated in % by comparing in
real time the performance of real system to the performance of ideal system. Another
term needs to be introduced - ideal system. Ideal system buys the very top and sells
the very bottom. you can easily calculate that buy coding a function that will sell and
buy in hindsight and give you max possible profit at zero risk. now, then you take
394
http://slidepdf.com/reader/full/formule-metastock 394/554
8/6/2019 Formule - Metastock
Next is how to adapt it. well, the first thing that should pop into your mind is that you
need a feedback loop of some sort. The rational loop is this:
footprint changed -adjust parameters -
to maximise SE ratio -if SE drops means
footprint changed -repeat.
if you examine this loop you'll notice that
you need at least 2 functions ( transfer functions )
to do that:
1. parameters = f ( footprint )
2. SE = f( parameters )
of you can rewrite it as:
SE = f ( f ( footprint ) ); tells you systems
efficiency will fluctuate based on changing
market conditions.
so where do you get those functions:
a. from a sample run: you do a pass over data, build your OF function and then build
your parameter = f( footprint ) function. log it in and use it for the real time run. you
can keep updating those functions in real time. this is similar to manual optimisation
where you do sample runs but in addition to that the OF gets updated in real time.
b. ramp up period. you start with a ramp up period and update your 1 and 2 functions
as you go along
your SE will start with 0% and will be improving as those functions will be more and
more accurate.
the system like this will start trading real bad and then improve it's performance as it
adapts
stabiliseand
as learns to trade better
those functions and better. the performance will taper off and
are saturated.
395
http://slidepdf.com/reader/full/formule-metastock 395/554
8/6/2019 Formule - Metastock
c. multiple parallel models: you run multiple systems based on different parameters
and find the best performing one under changing market footprint and trade that best
one. This approach however does not guarantee that the best performing current
model will continue to be the best tomorrow.
John Clayburg implemented this approach by running parallel performance functions
in TS. It showed a little bit of improvement but not much. The reason again that you
are chasing the best performing model that will not necessarily continue to perform
good tomorrow ( best fit today is not necessarily will be the best fit tomorrow )
define market footprint ( which market variables hurt or improve your systems
performance ) then:
• use those as your parameters so that the market will itself adjust those for you then
-specify how your trading algorithm should change based on that parameter.
that's it. it becomes self adaptive.
an example:
• market footprint = noise level
• noise level = your parameter
•
more noise -less profit
• less noise -more profit.
if more noise then increase risk and lengthen time horizon to maximise profit
and minimise loss.
if less noise then decrease risk and shorten time horizon to maximise profit
and minimise
loss.
396
http://slidepdf.com/reader/full/formule-metastock 396/554
8/6/2019 Formule - Metastock
define market footprint? possibly can. that's why ATR often referred to as
"adaptive" variable - changing. but even ATR can vary based on lookback
used. so, it's semi adaptive, you still have the lookback to deal with.
It is self evident that the first step in designing adaptive systems is to define market
footprint in variables that require no parameters or allow only parameters will not
affect variable measurement itself. If you try to define noise through ATR then ATR
is dependent on lookback unless the lookback value is high. If lookback value is high,
ATR will not be sensitive to it's most recent change. :-) go figure.
Volatility also requires lookback. Almost everything there needs a damn lookback or
a factor. However if you isolate the most recent swing (current trade) in the price and
find pivot high and pivot low and find the duration of that swing and use that duration
as a lookback then what your saying is that I only want to measure noise during the
most current trade that I am in.. This becomes adaptive lookback and ATR becomes
adaptive. then your market variable can be called - ATR of last tradable swing... and
not ATR of some arbitrary lookback that you think is suitable.
At the end it all comes down to about 4-5 market variables that you need to define and
most of them have to do with
volatility in one form of the other. Volatility is the main market variable!
max tradable
positive volatilityprofit
and negative = vector volatility( =profitable
differentials max signaland=unprofitable
trend = sum trades
of all - risk
and reward )= your total P&L.
• find noise then you can find the signal
• find the signal then you can find the trend.
• find the trend then you are done just don't use any fixed lookbacks and factors :-)
List,
using an adaptive system for day-to-day trading of DAX options, I wonder, which
397
http://slidepdf.com/reader/full/formule-metastock 397/554
8/6/2019 Formule - Metastock
criteria might be helpful to define "the best" time window to deal with ...
Presently, I use a 5 years window, where the rating criteria to select an appropriate
system are weighted something like exponentially over time.
But at these rapidly changing markets, I get some unsatisfactory results: While my
system shows nice results e.g. for long puts over the last year or so, this potential
couldn't be used: my money management (based on 5 years) nearly stops me out
from trading these system results, because the strategy working well for the last
year
doesn't show good results for at least some of the years before.
So my questions are:
• What time period may be appropriate to construct a(n adaptive) trading system for
a given equity?
• What criterions (to read from the equity's historical data) could help to define "the
best" time period?
• What other aspects may be important to define an appropriate time window?
398
http://slidepdf.com/reader/full/formule-metastock 398/554
8/6/2019 Formule - Metastock
O N B ALANCE V OLUME
You will get a better feeling for open interest influence if you combine it with
an on-balance-volume indicator. The best combination I found is OBVtd=
OBVyest.+((
Close-open/ high-low)*VOLtoday). Try it, you'll like it. Ira
Hi Stig;
Over a long period (like on the gold chart) I suspect that it is more an
indication of lack of interest than anything else... funds don't employ
margin in markets that are in trading ranges and markets in long-long
trading ranges don't attract the trading publics attention.
The good news... low levels of OI suggest that there is margin available to
be deployed and support the trend (which ever way it materializes).
Stew.
I brushed up on Drummond this morning to check open Interest. And he is very clear
when he says that falling OI at bottoms are very bullish (all the shorts are closing their
poitions
Check outand
thenew longs
lower don't have
histogram andthe
howcourage
OI hastodeclined
buy - yet)
since the 1999 low The
middle indicator STRSI shows a very promising "hidden Divergence" very reliable
and bullish.
The pink histogram is Robert Miners Dynamic time Projection, which projects trend
changes with the help if past tops/bottom and fib ratios. Looks like the next top will
be around March 15 (Spring Equinox March 20 which is notorious for trend changes
in Gold!!)
399
http://slidepdf.com/reader/full/formule-metastock 399/554
8/6/2019 Formule - Metastock
To cut out the noise I have used closing prices, which gave sone surprising result not
evident on Bar charts.
If you use bar charts you get quite different meaningless result -try it out. Since
most people use barcharts today (I guess), what you see in the close only chart is
not so evident. Fridays are good days for explosions - let's see what happens
today....
Regards
Stig
400
http://slidepdf.com/reader/full/formule-metastock 400/554
8/6/2019 Formule - Metastock
Book List
G ANN
401
http://slidepdf.com/reader/full/formule-metastock 401/554
8/6/2019 Formule - Metastock
402
http://slidepdf.com/reader/full/formule-metastock 402/554
8/6/2019 Formule - Metastock
403
http://slidepdf.com/reader/full/formule-metastock 403/554
8/6/2019 Formule - Metastock
M. Walker – How to identify High Profit Elliott Wave Trades in Real Time
B. Warrick – Event Trading
R. Wasendorf – Foreign Currency Trading
D. Weis – Trading with Elliott Wave Principle
N. Weintraub – Tricks of floor trader
R. Weist – You can’t loose trading commodities
W. Wilder – The Delta Phenomenon Book plus software
B. Williams – Trading Chaos
B. Williams – New Trading Dementions
L. Williams – Long Term Secrets to Short – Term Trading
L. Williams – Sure Thing Commodity Trading
L. Williams – How I made 1 million trading commodities
L. Williams – The Money Tree course
L. Williams – The secret of selecting stocks for immediate and substantial gains
L. Williams – The Definitive Guide to Futures Trading vol. 1
L. Williams – The Definitive Guide to Futures Trading vol. 2
B & B Wolfe – Seeing the Future ( Trading the Wolfe Wave)
C. Wright – Trading is a business
404
http://slidepdf.com/reader/full/formule-metastock 404/554
8/6/2019 Formule - Metastock
RWI
405
http://slidepdf.com/reader/full/formule-metastock 405/554
8/6/2019 Formule - Metastock
KNewPeakindicator
value50 = kpo(password,n1,n2);
value1= (AVERAGE(absvalue(value50),50))
+ (F*(StdDev(absvalue(value50),50)));
value4 = maxlist(100,value1);
value2 =minlist(100,value1);
Plot1(value50, "PeakOsc");
if value50[1] > 0 and value50[1] >value50 and value50[1] >= value50[2] and
value50[1] >= value4 then begin
plot3(value50[1],"PeakConfirm");
end;
if value50[1] < 0 and value50[1] < value50 and value50[1] <= -value4 and
value50[1] <= value50[2] then begin
plot3(value50[1],"PeakConfirm");
end;
KPeak Oscillator
value50 = xpo(password);
value1= (AVERAGE(absvalue(value50),50)) + (F*(StdDev(absvalue(value50),50)));
value4 = maxlist(100,value1);
value2 =minlist(100,value1);
Plot1(value50, "PeakOsc");
if value50[1] > 0 and value50[1] >value50 and value50[1] >= value50[2] and
value50[1] >= value4 then begin
plot3(value50[1],"PeakConfirm");
406
http://slidepdf.com/reader/full/formule-metastock 406/554
8/6/2019 Formule - Metastock
end;
if value50[1] < 0 and value50[1] < value50 and value50[1] <= -value4 and
value50[1] <= value50[2] then begin
plot3(value50[1],"PeakConfirm");
end;
KCD Indicator
Inputs:password(5);
value1 = xkcd(password);
407
http://slidepdf.com/reader/full/formule-metastock 407/554
8/6/2019 Formule - Metastock
Kperm Fn
Inputs:LENGTH(9),X(5),password(5);
Plot1(XPermLong(LENGTH,X,PASSWORD), "PermLong");
Plot2(XPermShort(LENGTH,X,PASSWORD),"PermShort");
Inputs:password(5);
if xAvg(password) = 011784021852 then begin
Vars:
Value1TrK(0),TrDF(0), TrDS(0),factor(0);
= Lowest(Low,(5*9));
Value2 = Highest(High,(5*9)) - Value1;
Value3 = Close;
value1 =average(average(trDS,3),2);
value2 =average(average(TrDF,3),2);
condition1 = value1>85 and value2>85 and (absvalue(value2-value1) <2);
condition2 = value1<(100-85) and value2<(100-85) and ((value2-value1) > 2);
condition3 = value2>(100-85) and ( value2>value1);
value99 = MACD(Close,5,34) -
XAverage(MACD(Close,5,34),8);
408
http://slidepdf.com/reader/full/formule-metastock 408/554
8/6/2019 Formule - Metastock
value50 = slowk(21);
value51 = slowd(21);
Inputs:password(5);
Vars: TrK(0),TrDF(0), TrDS(0),factor(0);
if xAvg(password) = 011784021852 then begin
Value1 = Lowest(Low,(5*9));
Value2 = Highest(High,(5*9)) - Value1;
Value3 = Close;
If
TrKValue2 > 0 then
= (Value3 - Value1) / Value2 * 100
Else
TrK = 0;
value99 = MACD(Close,5,34) -
409
http://slidepdf.com/reader/full/formule-metastock 409/554
8/6/2019 Formule - Metastock
XAverage(MACD(Close,5,34),8);
VALUE98 = (RSI(CLOSE,9)) - (AVERAGE(RSI(CLOSE,9),15));
value50 = slowk(21);
value51 = slowd(21);
end;
KCDL Piercing
Inputs:Thold(75),password(5);
Vars:BodySize(0),x(0);
if xavg(password)= 011784021852 then begin
x = 0.2*Average((high-low),5);
{============================================================
===}
if open < close then value1 = close;
if open < close then value2 = open;
if open > close then value1 = open;
if open > close then value2 = close;
if open = close then value1 = open;
if open = close then value2 = open;
{BULLISH P IERCING }
410
http://slidepdf.com/reader/full/formule-metastock 410/554
8/6/2019 Formule - Metastock
{B EARISH P IERCING }
if slowk(13) >(Thold) and
close < open and
open > value1[1] and
close < ((value2[1] + value1[1])/2)
AND CLOSE > VALUE2[1]then
plot2(high+x,"piercing");
end;
end;
inputs:password(5);
Inputs: password(5);
value1 =average(average(trDS,3),2);
value2 =average(average(TrDF,3),2);
411
http://slidepdf.com/reader/full/formule-metastock 411/554
8/6/2019 Formule - Metastock
value3 = close/100;
value99 = MACD(Close,5,34) -
XAverage(MACD(Close,5,34),8);
end;
412
http://slidepdf.com/reader/full/formule-metastock 412/554
8/6/2019 Formule - Metastock
TrK = 0;
value1 =average(average(trDS,3),2);
value2 =average(average(TrDF,3),2);
value3 = close/100;
value99 = MACD(Close,5,34) -
xAverage(MACD(Close,5,34),8);
VALUE98 = (RSI(CLOSE,9)) - (AVERAGE(RSI(CLOSE,9),15));
413
http://slidepdf.com/reader/full/formule-metastock 413/554
8/6/2019 Formule - Metastock
end;
Permission stochastic
XPERMD
Inputs: Length(numericsimple),x(numericsimple),password(numericsimple);
if xAvg(password) = 011784021852 then begin
XPermD = average(average(XTDS(length,x,password),3),2);
END;
XPERM K
Inputs: Length(numericsimple),x(numericsimple),password(numericsimple);
if xAvg(password) = 011784021852 then begin
XPermK = average(average(XTDF(length,x,password),3),2);
END;
XPERM LONG
Input:length(numeric),x(numeric),password(numericsimple);
if xAvg(password) = 011784021852 then begin
condition1 = XPermd(length,x,password)>85 and
XPermk(length,x,password)>85
XPermd(length,x,password)) <2);and (absvalue(XPermk(length,x,password)-
condition2 = XPermd(length,x,password)<(15) and
XPermk(length,x,password)<(15) and ((XPermk(length,x,password)-
XPermd(length,x,password)) > 2);
condition3 = XPermk(length,x,password)>(15) and
( XPermk(length,x,password)>XPermd(length,x,password));
;END;
414
http://slidepdf.com/reader/full/formule-metastock 414/554
8/6/2019 Formule - Metastock
XPERM Short
Input:length(numeric),x(numeric),password(numeric);
if xAvg(password) = 011784021852 then begin
condition11 = XPermd(length,x,password) < (15) and XPermk(length,x,password) <
(15) and (absvalue(XPermk(length,x,password)-XPermd(length,x,password)) <2);
condition12 = XPermd(length,x,password)>85 and XPermk(length,x,password)>85
and ((XPermd(length,x,password)-XPermk(length,x,password)) > 2);
condition13 = XPermk(length,x,password)<85 and (XPermk(length,x,password)<
XPermd(length,x,password));
XD
inputs: password(numeric);
value1 =average(average(trDS,3),2);
value2 =average(average(TrDF,3),2);
condition1 = value1<(100-85)
condition2 value1>85 and value2>85 and (absvalue(value2-value1)
and value2<(100-85) <2);> 2);
and ((value2-value1)
415
http://slidepdf.com/reader/full/formule-metastock 415/554
8/6/2019 Formule - Metastock
XKCD
INPUTS:password(numericsimple);
if xAvg(password) = 011784021852 then begin
xkcd=
xpo(password) - average(xpo(password),8);
end;
KpermissionFn
Inputs:LENGTH(9),X(5),password(5);
Plot1(XPermLong(LENGTH,X,PASSWORD), "PermLong");
Plot2(XPermShort(LENGTH,X,PASSWORD),"PermShort");
KdevStops
Inputs : L1(30), v1(2.2), v2(3.6), L2(10), L3(21), p1(close),
p2(high),p3(low),password(5);
416
http://slidepdf.com/reader/full/formule-metastock 416/554
8/6/2019 Formule - Metastock
XDEV
Avg1 = @Average(P1,L2);
Avg2 = @Average(P1,L3);
end;
end;
XREV
417
http://slidepdf.com/reader/full/formule-metastock 417/554
8/6/2019 Formule - Metastock
if date> date[1] and datacompression < 2 and value1[1] > 0 then value1= value1[1]
else
if date > date[2] and datacompression < 2 and value1[2] > 0 then value1= value1[2]
else
value1 = trd;
ATR = Average(TRD,l1);
DTR = stddev(trd, l1);
CDDrive=LeftStr(CDDrvLet, 1);
TrendDirec=TDirec;
Value1=Ring;
if Close<Low[1] then SlamDay=1 else SlamDay=0;
if Close>High[1] then SlamDayDn=1 else SlamDayDn=0;
418
http://slidepdf.com/reader/full/formule-metastock 418/554
8/6/2019 Formule - Metastock
PctR=PercentR(PctRLen);
PCTR5=PctR[3];
If Close<Close[5] then DnClose=DnClose+1
Else DnClose=0;
If Close>Close[5] then UpClose=UpClose+1
Else UpClose=0;
KRFake= High>High[1] and Low>Low[1] and Close<Open and Close[1]>Open[1];
KRFakeFail=KRFake[1] and High<High[1];
DistDay=Close > High[1] and Close<Open;
DistDayFail=DistDay[1] and High<High[1];
RingLow=Value1>=1 and Value1<=6 and Low>Low[Value1+1];
RingLowFail=RingLow[1] and RingLow=false and High<High[1];
SmlRng=Average(Range,2)<Average(Range,7);
SmlRngPrev=SmlRng[1];
OutDayBear=High > High[1] and Low < Low[1] and Close<Low[1] and
Close[1]>Open[1];
HTwenty=High=Highest(High,20);
HFifty=High=Highest(High,50);
LTwenty=Low=Lowest(Low,20);
LFifty=Low=Lowest(Low,50);
ExtremeUp=Close>=High-(range*.10) and Close>Close[5] ;
ExtremeDn=Close<=Low+(range*.10) and Close<Close[5] ;
STTop=Close>Highest(High,10)[1] and High-Close < Range*.10;
STBot=Close<Lowest(Low,10)[1] and Close-Low < Range*.10;
InDay=High<High[1] and Low>Low[1];
Decl=Low<=Low[5];
Rally=High>=High[5] and Close>Open;
RallyDnC=High>=High[5] and Close<Open;
TDChgBull=TrendDirec=1 and TrendDirec[1]<>1;
TDChgBear=TrendDirec=-1 and TrendDirec[1]<>-1;
PctRUp=PctR>Pctr[1];
PctRDn=PctR<Pctr[1];
SDHFail=SlamDay[1]=1 and High<High[1];
SDLFail=SlamDayDn[1]=1 and Low>Low[1];
MVPos=1;
MVRef=MakeNewMovieRef;
419
http://slidepdf.com/reader/full/formule-metastock 419/554
8/6/2019 Formule - Metastock
DeMark Expert
{*******************************************************************
Description : This Indicator plots the Thomas DeMark Expert
Provided By : Omega Research, Inc. (c) Copyright 1999
********************************************************************}
CDDrive=LeftStr(CDDrvLet, 1);
TDSEQ = TDC.SEQ.SetUp (4, 9, False, Close, 4, False) ;
REIval = TDC.REI (REI_Bars, 2, 7, 5, True) ;
hiChannel = TDC.Channel2.hi (High, 3, 1.0050, AvgLen) ;
loChannel = TDC.Channel2.lo (Low, 3, .9950, AvgLen) ;
REIBars=REI_Bars;
If
If REIval
REIval >
> OverBght
OverBght and
thenREIval[1]
Counter =<= OverBght
Counter + 1 ;then Counter = 0 ;
REIvot = 0 ;
If REIval > REIval[1] and REIval < OverSold then REIvot = -3 ;
If REIval <= REIval[1] and REIval < OverSold then REIvot = -2 ;
If REIval < REIval[1] and REIval <= OverBght and REIval >= OverSold then
REIvot = -1 ;
If REIval = REIval[1] and REIval <= OverBght and REIval >= OverSold then
REIvot = 0 ;
420
http://slidepdf.com/reader/full/formule-metastock 420/554
8/6/2019 Formule - Metastock
If REIval > REIval[1] and REIval <= OverBght and REIval >= OverSold then
REIvot = +1 ;
If REIval >= REIval[1] and REIval > OverBght then REIvot = +2 ;
If REIval < REIval[1] and REIval > OverBght then REIvot = +3 ;
chavot = 0 ;
If Close > hiChannel then chavot = -2 ;
If High > hiChannel and Close <= hiChannel then chavot = -1 ;
If Low < loChannel and Close >= loChannel then chavot = +1 ;
If Close < loChannel then chavot = +2 ;
ReiValCond1= REIval >= OverSold and REIval[1] < OverSold;
ReiValCond2= REIval <= OverBght and REIval[1] > OverBght;
str3="";
str3=createcommentary(Str1, &TDSEQ, &REIval, &REIvot, &REIBars,
&Counter, &hiChannel, &loChannel, &chavot,
Reivalcond1, reivalcond2, chavotcond1, chavotcond2);
Commentary(NewLine+NewLine+"For More Information on the 'DeMark
Indicators' contact: "+NewLine+"Duane Davis"+Newline+"P.O. Box
736"+NewLine+"Fairview, NC 28730"+NewLine+"(828)
Voice"+NewLine+"(828) 628-3100 Fax"); 628-4222
MVPos=1;
MVRef=MakeNewMovieRef;
for MVLoop=1 to (StrLen(Str3)/12) begin
MVCond=
AddToMovieChain(MVRef,CDDrive+":\vid2\"+MidStr(Str3,MVPos,12));
MVPos=MVPos+12;
End;
MVCond = PlayMovieChain(MVRef);
End;
421
http://slidepdf.com/reader/full/formule-metastock 421/554
8/6/2019 Formule - Metastock
k = counter
For LowestBar(Low,Len);
= 0 to k - 1 Begin
x = TrueRange2(H,L,C)[counter] + x;
End;
If k <> 0 then
AverageRange = x / k;
If AverageRange * SquareRoot(k) <> 0 then
RWI_Up = (High[0] - Lowest(Low,Len)) / (AverageRange *
SquareRoot(k));
End;
signal:
Inputs: Len(25);
Value1 = RWI_Up(Len);
Value2 = RWI_Down(Len);
If CurrentBar > 1 then begin
If Value1 >= 1 and Value2 < 1 then Buy on close;
If Value1 < 1 and Value2 >= 1 then ExitLong;
end;
If CurrentBar > 1 then begin
If Value1 < 1 and Value2 >= 1 then Sell on close;
If Value1 >= 1 and Value2 < 1 then ExitShort;
End;
March 2002
Formula for the system dicussed in "Putting stops to the test," by Thomas Stridsman
(p. 82):
If High[1] < High[3] and Close[1] < Open[1] and Open < High[1] and High > High[1] Then
Plot1(High * 1.01, “”);
If Low[1] > Low[3] and Close[1] > Open[1] and Open > Low[1] and Low < Low[1] Then
Plot2(Low * 0.99, “”);
Inputs: TestRuns(9), ExitLevels(0);
Variables: EntryTrigger(0), LongStopLoss(0), ShortStopLoss(0), ExitTrigger(0);
EntryTrigger = IntPortion(Random(2));
422
http://slidepdf.com/reader/full/formule-metastock 422/554
8/6/2019 Formule - Metastock
Z IG Z AG T
REND I
NDICATOR
423
http://slidepdf.com/reader/full/formule-metastock 423/554
8/6/2019 Formule - Metastock
into many different ones (for example cases of missed zigzags during
confirmed trends, cases of fluctuations of prices during doubtful trends
etc.). Now, I think that dealing with all these cases is almost as hard or
even harder than developing a new zigzag indicator from scratch.
1. Use the Zigzag indicator and the SR ZigZag Trend with the same percent of
close (say 10%).
2.
3. Add a second
During a long more
trend sensitive
indicatedZigzag indicator
by the 10% (say
Zig (a 3 %)
long line) find a few
424
http://slidepdf.com/reader/full/formule-metastock 424/554
8/6/2019 Formule - Metastock
minor zigzags of the 3% Zig and mark them with vertical lines.
4. Keep a note of the dates when these marks appear and of the readings of
both the 10% ZigZag and the SR ZigZag Trend on those dates. You are making a
table with 3 columns: Date, 10%Zig (up or down), SR ZigZag Trend (1 or -1).
5. Close the chart and re-open it using the first date you have noted as the
LAST date of the chart.
6. Observe the behavior of the 10% Zigzag: In some cases it should be
heading towards the opposite direction of what you had previously noted. On
the contrary, the SR ZigZag Trend should NOT reconsider its value. If it is
like I say, then repeat steps #5 and #6 until all the dates you have marked
are examined. If you notice any revisions in the values of SR ZigZag Trend
then you have caught a mistake (bad luck for all of us but especially for
me). Take a detailed note of it, stop testing and contact me.
If everything seems ok with the cases you have examined, this still doesn't
mean that everyone else had the same experience. So, please post your
results and read what the others have to say.
You will notice that the indicator follows Zig's changes of direction with a
delay, which is necessary for the confirmation of the trend. Hopefully, once
a new trend is detected and confirmed, SR ZigZag Trend will not be revised,
until the next (opposite) trend's confirmation. Due to this delay, the
values returned by SR ZigZag Trend do not always coincide with profitable
buy and sell signals, though in many cases they really do! But this is the
old well-known sad story of any trend-following system. What is new here, is
that the fans of ZigZag, MAY have now a kind of Zig, which they can play
with harmlessly. And maybe the results are not so exciting as when playing
ball with Zig, but here one kicks a real ball not a balloon!
A few notes before going to the code. I have no reason to doubt anyone's
good will, intentions and honesty. But I have to repeat what is usually said
about intellectual property. I hope you all understand. So here we go:
Please don't change the indicator's name, its comments or its code, if in
the future you need to post it to someone. My name and e-mail address should
be present in case someone wants to contact me directly. Any changes made to
my formula should be discussed with me before being published (outside this
group). It may
permission, not beasused
neither for commercial
it is nor reasons
as part of other without
products. Anymyformulas,
written
systems, experts, explorations, plug-ins or stand-alone applications, which
use the whole code or important parts of it, or reference it, should mention
my name. I am not responsible for any losses.. ..blah blah, though I will
take your profits if you succeed :)
Good luck
425
http://slidepdf.com/reader/full/formule-metastock 425/554
8/6/2019 Formule - Metastock
Spyros
perc:=Input("percent",1,100,10);
tr:=ValueWhen(1,Zig(C,perc,%)>Ref(Zig(C,perc,%),-1) AND
Ref(Zig(C,perc,%),-1)<Ref(Zig(C,perc,%),-2),Ref(Zig(C,perc,%),-1));
tr:=If( (C-tr)*100/tr>= perc ,tr,0);
tr:=If( tr=0, ValueWhen(1,tr<>0,tr), tr);
pk:=ValueWhen(1,Zig(C,perc,%)<Ref(Zig(C,perc,%),-1) AND
Ref(Zig(C,perc,%),-1)>Ref(Zig(C,perc,%),-2),Ref(Zig(C,perc,%),-1));
pk:=If((C-pk)*100/pk <=-perc , pk, 0);
pk:=If( pk=0, ValueWhen(1,pk<>0,pk), pk);
res:=If(pk<>Ref(pk,-1), -1,
If(tr<>Ref(tr,-1), 1, 0));
res:=If(res=0,ValueWhen(1,res<>0,res),res);
res
J OE DUFFY TS
> I forgot to add fml("rel") which is simply c/p. Sorry for the
>
> inconvenience.
> --- In torontometastockusers@y..., "morluk2000"
> <borakizilirmak@s...> wrote:
> > You are going to like it. Give me a credit when you use it. Before
> > running browser for the last indicator defined below you must
> select
> > ( with your mouse) underlying index (which is becoming variable P)
> > in Metastock.
>>
> > TS_C:(If(C>=Ref(C,-11),1,-1)+
>
>>> If(C>=Ref(C,-12),1,-1)+
If(C>=Ref(C,-13),1,-1)+
426
http://slidepdf.com/reader/full/formule-metastock 426/554
8/6/2019 Formule - Metastock
427
http://slidepdf.com/reader/full/formule-metastock 427/554
8/6/2019 Formule - Metastock
w = 2 / (length + 1)
length = 2 / w - 1
Did anyone try to code the more complicated formula for the case where
there are ties?
ysk
> ...Also, just look in Numerical Recipes to see that the rank correln is
> equal to "value1" only when there are no ties (i.e. Ties=1). Otherwise, you
> need to compute the correln among the ranks explicitly or use a much more
> complicated expression that requires storing all the informn about ties...
> (see http://lib-www.lanl.gov/numerical/bookcpdf/c14-6.pdf )
>
> Hope this helps.
>
> -Alex
>
> -----Original Message-----
> From: Alex Dannenberg [mailto:alex@pinemountaincapital.com]
> Sent: Saturday, March 02, 2002 10:24 AM
> To: Michael E Songer; Omega-list (E-mail)
>
> Subject: RE: Rank Correlation Function for Arrays
428
http://slidepdf.com/reader/full/formule-metastock 428/554
8/6/2019 Formule - Metastock
>
> ...Just to make the thing a bit more efficient, you can replace
>
>
> If Ties=1 then myRank=HiCount;
> If Ties>1 then begin
> Tot=0;
> For z=1 to Ties-1 begin
> Num=HiCount+1;
> Tot=Tot+Num;
> HiCount=Num;
> End;
> myRank=Tot/(Ties-1);
> End;
>
>
> with
>
> myRank=HiCount+(Ties-1)/2
>
> -Alex
>
>
> -----Original Message-----
> From: Michael E Songer [mailto:songer@speedsite.com]
> Sent: Friday, March 01, 2002 2:16 PM
> To: Omega-list (E-mail)
> Subject: Rank Correlation Function for Arrays
>
>
> List,
> Several people expressed an interest in a rank correlation function to be
> used with arrays. Here is the function: msCorrel_Rank_a. I have also
> included a sample indicator.
> Mike
>
>
> {SAMPLE INDICATOR}
>
{********************************************************************
*****}
> Arrays: IndArray[50](0), DepArray[50](0);
> VARS: x(0);
>
>
> for x=0 to 50 begin
> IndArray[x]=c[x] of data2;
> DepArray[x]=c[x] of data1;
> End;
429
http://slidepdf.com/reader/full/formule-metastock 429/554
8/6/2019 Formule - Metastock
>
430
http://slidepdf.com/reader/full/formule-metastock 430/554
8/6/2019 Formule - Metastock
> HiCount=Num;
> End;
> myRank=Tot/(Ties-1);
> End;
> DepRankArray[x]=myRank;
> End;
>
> {Fill IndRankArray}
> For x = 0 to Isize Begin
> HiCount=1;
> Ties=0;
> For y= 0 to Isize begin
> If IndArray[x]>IndArray[y] then HiCount=HiCount+1;
> If IndArray[x]=IndArray[y] then Ties=Ties+1;
> End;
> If Ties=1 then myRank=HiCount;
> If Ties>1 then begin
> Tot=0;
> For z=1 to Ties-1 begin
> Num=HiCount+1;
> Tot=Tot+Num;
> HiCount=Num;
> End;
> myRank=Tot/(Ties-1);
> End;
> IndRankArray[x]=myRank;
> End;
>
> {CALCULATE RANK CORRELATION}
> Sum=0;
> For x=0 to Dsize begin
> Diff=IndRankArray[x]-DepRankArray[x];
> Diff2=square(Diff);
> Sum=Sum+Diff2;
> End;
> N=Dsize+1;
>
> value1= 1 - ( ( 6*Sum ) / ( N*(square(N)-1) ) );
>
> msCorrel_Rank_a=value1;
>
>
{*******************************************************************}
>
431
http://slidepdf.com/reader/full/formule-metastock 431/554
8/6/2019 Formule - Metastock
Hi all,
Thanks to all who responded to my earlier post with the subject line:
"Brain teasers (are these known TradeStation bugs?"
I thought I'd let folks know what I discovered about one of the three
problems (and hopefully save others from tripping across an obscure
TradeStation bug).
Well, I was wrong about the loops. It turns out my study was
making a call to a function I wrote to implement Dick Arms' Volume
Adjusted Moving Average. That function _does_ contain a WHILE loop
of the form:
Line 1: Index = 0;
Line 2: RemainingIncr = Length;
Line 3: while RemainingIncr > 0 begin
Line 4: VolRatio = Volume[Index] / VolIncr;
Line 5: Factor = MinList(VolRatio, RemainingIncr);
Line 6: Sum = Sum + Factor * Price[Index];
Line 7: RemainingIncr = RemainingIncr - Factor;
Line 8: Index = Index + 1;
Line 9: end;
By scattering print statements within the code, I was able to see that
the
thatinfinite loop
point, on occurs
Line 4 thewhen
loop isthesupposed
value of to
Index is equal to 34. At
calculate:
432
http://slidepdf.com/reader/full/formule-metastock 432/554
8/6/2019 Formule - Metastock
feature doesn't work if the previous max bars back is exceeded while
within a loop.
Since, the actual max bars back value for the function depends on the
length of the volume adjusted average and the volume values
themselves, I can't just assign a fixed max bars back value to the
study. In order to get the auto-detect facility to work, I ended up
adding the following assignment to a dummy variable right after the
end of the loop:
Since this assignment is outside the loop, the auto detect mechanism
works. It's not pretty but I no longer see infinite loop errors when
applying the study to a chart.
Cheers,
Rich
Heat Maps
433
http://slidepdf.com/reader/full/formule-metastock 433/554
8/6/2019 Formule - Metastock
I sure did. :-\ Anybody who wants to send me $500 for this is
welcome to do so!! :-)
Gary
System Quality
{Function _SystemQuality
by Alex Matulich
Copyright (c) 2002 by Unicorn Research Corporation.
All rights reserved.
where
expectancy = (AW*PW + AL*PL) / AL
= expected profit per dollar risked
434
http://slidepdf.com/reader/full/formule-metastock 434/554
8/6/2019 Formule - Metastock
(In reality the market maker earns something like 5 cents per $1
risked, 100 times a day. A market maker's quality score is
sky-high, higher than anything else, which is why they cannot
be beaten.)
orders. Position
finding the sizing
optimum rules
quality destroy
this the measurement.
way, re-enabling After
the position
sizing rules will result in better performance than before,
especially if the sizing is a function of trade risk and equity.
3. Make sure the output file is deleted. Every time your strategy
is recalculated the output file grows. You want to delete it to
start afresh before running an optimization. Also, setting the
filename parameter to "" (empty string) will disabled the output.
4. Run the optimization. Try to set up your parameters so that
less than 65,535 results are generated (you will have to import
it all into Excel).
5. When the optimization completes, load your file into Excel and
sort by the last column, the one you want optimized, in descending
order. The top result will be the optimum. The columns in the
file are:
435
http://slidepdf.com/reader/full/formule-metastock 435/554
8/6/2019 Formule - Metastock
inputs:
filename(string), {full pathname for .csv file}
dontsave(NumericSimple),{don't save scores less than this}
{WARNING: avoid \hb, \he, \pb, \pe, \wb, or \we, in the file
name. TS interprets these as "jump commands." For example,
436
http://slidepdf.com/reader/full/formule-metastock 436/554
8/6/2019 Formule - Metastock
p = PositionProfit(j);
if p <= 0 then begin
if p >= scratchtrade then begin
scratches = scratches + 1;
scratchloss = scratchloss + p;
end else
losses = losses + 1;
end else
wins = wins + 1;
end;
nclosed = totaltrades;
end;
{Calculate
if wins > 1results to be
and losses optimized,
> 0 and output them}
then begin
j = wins - 1 + losses; {total trades excl scratches &
max win}
AW = (GrossProfit-LargestWinTrade)/(wins-1); {avg
win}
PW = (wins-1) / j; {%
wins}
AL = (GrossLoss - scratchloss) / losses; {avg
loss}
PL = losses / j; {%
losses}
end else begin {handle division by zero cases}
j = wins + losses;
if wins <= 1 then AW = 0 else AW = GrossProfit;
if j = 0 then begin
PW = 0; PL = 0;
end else begin
PW = wins / j; PL = losses / j;
end;
if losses = 0 then AL = 0
else AL = (GrossLoss - scratchloss) / losses;
end;
numtostr(p1,3)+","+numtostr(p2,3)+","+numtostr(p3,3)+","+
numtostr(p4,3)+","+numtostr(p5,3)+","+numtostr(p6,3)+","+
numtostr(p7,3)+","+numtostr(p8,3)+","+numtostr(p9,3)+","+
numtostr(p10,3)+","+numtostr(p11,3)+","+numtostr(p12,3)+","+
numtostr(p13,3)+","+numtostr(p14,3)+","+numtostr(p15,3)+","+
437
http://slidepdf.com/reader/full/formule-metastock 437/554
8/6/2019 Formule - Metastock
numtostr(p16,3)+","+numtostr(p17,3)+","+numtostr(p18,3)+",");
numtostr(losses,0)+","+numtostr(GrossLoss,2)+","+
numtostr(scratches,0)+","+numtostr(scratchloss,2)+","+
numtostr(LargestWinTrade,2)+","+numtostr(LargestLosTrade,2)+"
,"+
numtostr(MaxIDDrawDown,2)+",");
System History
{_SystemHistory
by Alex Matulich
Copyright (c) 2002 by Unicorn Research Corporation.
All rights reserved.
inputs:
filename(string), {full pathname for .csv file}
{WARNING: avoid \hb, \he, \pb, \pe, \wb, or \we, in the file
name. TS interprets these as "jump commands." For example,
the filenames "c:\hello.csv" or "c:\data\performance.csv"
will
result in an error message because they contain \he and \pe,
respectively.}
438
http://slidepdf.com/reader/full/formule-metastock 438/554
8/6/2019 Formule - Metastock
MinList(BigPointValue*(EntryPrice
end else begin - High), 0);
MAE = MinList(positionprofit, 0);
risk = AbsValue(EntryPrice - tstop) *
BigPointValue;
mktvolat = mktvolatility * BigPointValue;
end;
end else begin {we're past the first bar in the open
position}
risk = risk[1]; {save initial
risk}
mktvolat = mktvolat[1]; {save initial
volatility}
if marketposition>0 then {calculate new MAE}
MAE = MinList(MAE[1], BigPointValue*(Low -
EntryPrice), 0)
else
MAE = MinList(MAE[1],
BigPointValue*(EntryPrice - High), 0);
end;
end;
nclosed = nclosed[1];
end;
_SystemHistory = 1; {dummy return value}
439
http://slidepdf.com/reader/full/formule-metastock 439/554
8/6/2019 Formule - Metastock
{_LinRegSlopeSFC
by Alex Matulich- Linear Regression Slope Super Fast Calc
Copyright (c) 2002 by Unicorn Research Corporation. All rights
reserved.
if xLen xLen
<> Length or CurrentBar <= Length then begin
= Length;
m1 = 6 / (Length * (Length + 1));
m2 = 2 / (Length - 1);
sumP = 0; sumIP = 0;
for ix = 0 to length-1 begin
sumP = sumP + Price[ix];
sumIP = sumIP + ix * Price[ix];
end;
end else begin
sumIP = sumIP + sumP - Length * Price[Length];
sumP = sumP + Price - Price[Length];
end;
_LinRegSlopeSFC = m1 * (sumP - m2 * sumIP);
{calculate sums over all X values (bars) and over all X^2 values}
440
http://slidepdf.com/reader/full/formule-metastock 440/554
8/6/2019 Formule - Metastock
Inputs:
price(NumericSeries), {price}
length(NumericSimple); {"lookback" length}
Vars: w(0);
w = 2 / (length + 1);
_xStdDev = SquareRoot(w*price*price + (1-w)*_xStdDev[1]*_xStdDev[1]);
variable lookback.
441
http://slidepdf.com/reader/full/formule-metastock 441/554
8/6/2019 Formule - Metastock
F IBONACCI FORMULAS
Hi Shashi,
Many thanks for your help. I've come up with the following - not exactly to
your suggestion in every detail, but hopefully in the spirit of it. I
haven't tested it much yet - all feedback and improvements welcome (coding
is not my strong point!). Anyone testing it please vary V1 especially to
your preference - I have it set very low for a 5-minute chart.
PeakBars(1,C,V1) <
TroughBars(1,C,V1) {the previous peak is later than the previous trough}
AND
C < Peak(1,C,V1) {price dropped below last Peak}
AND
C= LowestSince(1, C=Peak(1,C,V1), C)
AND
AND
Thanks again,
Nick
442
http://slidepdf.com/reader/full/formule-metastock 442/554
8/6/2019 Formule - Metastock
At one time I had created a pullback/ Fib. retracement formula but can't
seem to find it now. I then gave up using it, not because it didn't work
(it
did!), but I could never tell in real time whether the retracement would
be
38%, 50%, or 62% (the commonest ratios)! Thus, for example, I would buy on
a
38% retracement just to see it fall to 62% retracement. Or I would buy at
62% retracement just to see it fall even further and the trend get
reversed.
I guess that's a limitation we have to live with; of course, once the
trend
resumes, it is very easy with 20/20 hindsight to see how much the
retracement was.
(Trough(1,C,10) + 0.31*Swing).
Use filters as needed.
There
rocket you haveeither.
science it. Metastock programming
Once you start doing itisyourself,
not very AND
easy, UNDERSTAND
but its not
443
http://slidepdf.com/reader/full/formule-metastock 443/554
8/6/2019 Formule - Metastock
THE
LOGIC BEHIND YOUR ARGUMENTS, you will catch on pretty fast. Try it - I
have
done most of the work for you above. Just make sure you use the parameters
appropriate for your trading.
Shashi
----------------------------------------------------------
----- Original Message -----=20
From: Maurice Cruz=20
To: metastock@metastock.com=20
Sent: Friday, February 01, 2002 6:46 AM
Subject: Fibonacci Formulas
Group,
I would also be interested in this, or any other
fibonacci-related indicators.
Maurice
Hi Group,
Many
Nick thanks,
J OE D I N APOLI - D I N
APOLI T
REND FORMULA
From: Krzysztof.Kowczur@brebank.com.pl
Subject: "Joe DiNapoli - DiNapoli Trend formula
Date: 30/01/2002 11:35:09
To: metastock@metastock.com
444
http://slidepdf.com/reader/full/formule-metastock 444/554
8/6/2019 Formule - Metastock
Hi Guys
Does anyone have this system formula???
Dinapoli Trends
{UP}C=Ref(Mov(C,3,S),-3) AND
(Mov( CLOSE, 8.3896, E) - Mov( CLOSE, 17.5185, E))=(PREV+(0.199*((Mov(
CLOSE, 8.3896, E) - Mov( CLOSE, 17.5185, E))-PREV))) AND
(Mov( CLOSE, 8.3896, E) - Mov( CLOSE, 17.5185, E))=Ref((Mov( CLOSE, 8.3896,
E) - Mov( CLOSE, 17.5185, E)),-1)
{DOWN}{DOWN}C<=Ref(Mov(C,3,S),-3) AND
(Mov( CLOSE, 8.3896, E) - Mov( CLOSE, 17.5185, E))<=(PREV+(0.199*((Mov(
CLOSE, 8.3896, E) - Mov( CLOSE, 17.5185, E))-PREV))) AND
(Mov( CLOSE, 8.3896, E) - Mov( CLOSE, 17.5185, E))<=Ref((Mov( CLOSE,
8.3896, E) - Mov( CLOSE, 17.5185, E)),-1){jimt}
This message was sent through MyMail http://www.mymail.com.au
Thanks Peter,
I use this formula much differently than Chande suggests. I've had a lot of
success with a 13 period FO. I plot the formula and establish equidistant
levels (from zero) that trigger buy and sell signals. Simple, but effective. This
approach is graphically displayed in the attachment. I like the FO because it
can be somewhat "adaptive" (and it can pull twenty bucks out of crude).
Thanks again, Equis doesn't "trust" us with the formula. If you "click" on the
little "arrow&?", on the task bar, in MetaStock and drop it on the Forecast
Oscillator you get the following blurb:
"The oscillator is above zero when the forecast price is greater than the actual
price. Conversely, it's less than zero if its below."
Of course, this is totally false (the opposite is true). Which of edition of
MetaStock do you believe they might correct their mistake?
Take Care,
Steve
----- Original Message -----
From: Peter Gialames To: metastock@metastock.com Cc:
kernish@turbonet.com Sent: Thursday, January 10, 2002 9:45 AM Subject:
RE: Forecast Oscillator
Not sure if this is what you are looking for but ...
Peter Gialames
445
http://slidepdf.com/reader/full/formule-metastock 445/554
8/6/2019 Formule - Metastock
Using linear regression as a crystal ball for forecasting the market? After all,
if you were to be able to determine tomorrow's high, low and close for trend
changes and placement of stop points, it would simplify your life
immeasurably. Can it work? Tushar Chande explains how it can be done.
Wouldn't
regressionyou
cantrade better
provide an It you could
objective "see" for
forecast the the
future?
nextAday's
simple linear
high, low and
close. These ingredients are essential for a trading game plan, which can help
you trade more mechanically and less emotionally. Best of all, a regression
forecast oscillator, %F, gives early warning of impending trend changes. The
linear regression method is well known for finding a "best-fit" straight line for
a given set of data. The output of the regression are the slope (m) and constant
(c) of the equation
(1)Y = mX + c
Here, m and c are derived from a known set of values of the independent
variable X and dependent variable Y. The relative strength of the linear
relationship between X and Y is measured by the coefficient of determination
r 2 , which is the ratio of the variation explained by the regression line to the
total variation in Y. Here is a table to help interpret the values of r 2 , which
range from 0 to 1:
The coining of the term "regression" can be attributed to Sir Francis Galton,
who observed in the late 1800s that tall fathers appeared to have as a rule short
sons, while short fathers appeared to have as a rule tall sons. Galton suggested
that the heights of the sons "regressed" or reverted to the average. Technician
Arthur Merrill also had a good explanation in a recent issue of STOCKS &
COMMODITIES, and Patrick Lafferty recently wrote on an application of
multiple regression to gold trading. Virtually all introductory books on
statistics have a detailed discussion of the linear regression method.
Successful professional traders emphasize the importance of having a trading
plan. A trading game plan, much like that of a football team, clearly defines
specific actions under different conditions. The linear regression method is
very useful in developing a forecast for the next trading day's high, low and
close based on the last five trading sessions. The method is general and broad-
based enough so that it can be used with stocks, indices or commodities. The
forecast is the basis of my trading plan: I can define what I should do if the
market rises above the forecast high, falls below the forecast low or stays
within the forecast range. This way, I can avoid being emotional and trade as
mechanically as possible by having a plan to rely on.
FORECASTING WITH LINEAR REGRESSION
I like to use at least 10 days of data and develop a forecast for the high, low
and close. The five-day regression is a good choice for short-term trading. You
can use any length of regression you like. Here are the calculations with the
daily close in a spreadsheet format:
1mPerform a linear
and constant regression
c such that with the first five days of data to obtain the slope
446
http://slidepdf.com/reader/full/formule-metastock 446/554
8/6/2019 Formule - Metastock
....
5 Day 5
2 Forecast the next day's close with the slope m and constant c from step 1:
(2) Forecast close (Day 6) = 6m + c
3 Record m, c and r 2 on the same line as Day 5. Record the forecast from step
2 one day ahead, with
Day 6. Note when we are using five days' data, the first forecast is for Day 6.
4 Step the calculation ahead one day such that
5 Record m, c and r 2 as in step 3.
6 Calculate the regression forecast oscillator, %F, as
(3)
%F = ((Y-Yforecast)/Y)*100
where Y is the close for Day 6 and Y(Forecast) is the forecast for Day 6 from
447
http://slidepdf.com/reader/full/formule-metastock 447/554
8/6/2019 Formule - Metastock
You can use the forecasts to develop a specific trading plan to suit your
trading style. I use the forecasts in several ways.
Forecasts as stops. I use the high and the low as action points. If the market
exceeds the forecast high, it wants to go up. To trade with the trend, I put a
buy stoptoa few
it wants ticks above
go down. Hence,the high.
I set If the
a sell stopmarket
a few falls
ticks below
belowthe
the forecast
forecastlow,
low.
If you want to trade against the trend, sell short near the forecast high and buy
near the forecast low.
Forecasts as intraday range scale. The forecasts provide a scale for
evaluating the trading day. The market can stay within the expected range or
go outside. On a down day, the intraday high is well below the forecast high
and may be below the forecast close. On an up day, the market stays well
above the forecast low and often above the forecast close.
General rules for trading with forecasts. Here are some general rules:
• Use the forecasts only if r 2 is greater than 0.1. Higher the value of r 2 , the
greater the confidence in the forecasts.
• A trend change is imminent when r 2 falls below 0.1. Prepare to close longs.
• A trend is in place if r 2 is greater than 0.6. As a trend follower, you could
wait for this value to be exceeded before opening positions. This would keep
you out of short-term fluctuations.
• An early warning of a trend change is provided by a zero-crossing of %F, the
forecast oscillator.
Prepare to tighten stops and look for changes in slope and coefficient of
determination for
confirmation.
•A change in trend is confirmed by a change in slope of the regression. Open
positions in direction of trend change. To trade against the trend, look for
peaks in slope and strength of the linear trend.
•The trend will usually change in the direction of %F.
•Always be prepared for a market move against the forecast. Use stops!
A SAMPLE TRADING PLAN
I have developed a forecast for the high, low and close for January 20, 1992,
from the previous five trading days, seen in Figure 1. The market was making
new highs the previous week. Was a downward movement imminent? Let's
look at the data from Friday, January 17, 1992:
The market was trending moderately (0.4<= r 2 <0.6), but the forecast
oscillator %F was negative for high, low and close, warning of a possible
change in trend.
the market The relatively
was meeting smallThe
resistance. slope of the
slope regression
of the forfor
regression thethe
high meant
close
448
http://slidepdf.com/reader/full/formule-metastock 448/554
8/6/2019 Formule - Metastock
had turned down from the high values during the recent strong uptrend. The
forecast, however, called for a strong close near the highs of the day, but that
seemed doubtful, given the low slopes in a moderating trend. The plan was to
watch for a change in trend. If the market opened weak, a bearish strategy was
called for. For example, I would consider buying the Standard & Poor's 100
Index OEX January 390 puts, or selling short the S&P 500 March futures
contract.
The high daily volume of OEX index options traded makes the S&P
The market opened at the Friday close and weakness was evident at the open,
as the S&P 500 futures opened lower. It was clear in early trading that the
trend would be down, as the market traded well below the forecast high and
close. Clearly, the forecast range provided a good scale, since it reinforced the
concept that the market was weaker than the trend of the prior five days. A
bearish stance would have been profitable.
THE NATURE OF REGRESSION FORECASTS
The high daily volume of OEX index options traded makes the S&P 100 index
an interesting application of the regression forecast approach. I have examined
a time period from early October 1991 to mid-January 1992. The OEX close
and its forecast are in Figure 2; the r 2 values in Figure 3; %F in Figure
4, and Figure 5 has %F around the mid-November plunge.
Several observations can be made from the OEX analysis. First, the forecast
lags the OEX in an uptrend or in a downtrend. Second, the close and the
forecast cross over several days before a trend change. This crossover can be
seen as a zero crossing in the %F chart. Significant trend changes are preceded
by trendless periods with values of r 2 near zero. Strong trends are
accompanied by high values of r 2 and regression slope. These observations
support the general rules of interpretation noted above. As Figure 5 shows, %F
provided a timely warning of an impending trend change just before the OEX
fell 15.68 points.
I have included data for wheat (cash) from 1989 to indicate the use of this
approach with commodities.
The market showed significant trends during this period with good periodicity,
as shown in Figures 6, 7
and 8. The %F zero crossings were timely indicators of trend change. Features
observed with OEX charts are also seen here; note in particular how %F can
be used to identify extremes in the market from Figures 4 and 8.
Simple linear regression yields forecasts of the high, low and close for stocks,
indices or commodities. These forecasts can be used to develop a trading plan.
You can trade with the trend, against the trend, intraday or interday. The
forecast
with the oscillator,
regression%F,
slopeprovides early warning
and coefficient of trend changes
of determination. taken together
This approach
449
http://slidepdf.com/reader/full/formule-metastock 449/554
8/6/2019 Formule - Metastock
Tushar and
Illinois Chande holds adegree
a master's doctorate in engineering
in business from thefrom
administration University of
the University
of Pittsburgh.
REFERENCES
List,
Does anyone have the math formula for Chande's Forecast Oscillator?
Thanks,
Steve
Steve,
J.
{Forecast Osc-Chande}
450
http://slidepdf.com/reader/full/formule-metastock 450/554
8/6/2019 Formule - Metastock
{from jseed}
Pds:=Input("Time Periods",1,1000,5);
Fld:=Input("Price Field 1=C 2=O 3=H 4=L",1,4,1);
PFld:=If(Fld=1,C,If(Fld=2,O,If(Fld=3,H,L)));
Sig:=Input("Signal MA Periods",1,200,3);
ForO:=((Pfld-(Ref(LinearReg(Pfld,Pds),-1)+
Ref(LinRegSlope(Pfld,Pds),-1)))*100)/Pfld;
ForO;
Mov(ForO,Sig,E);
{end}
List,
Does anyone have the math formula for Chande's Forecast Oscillator?
Thanks,
Steve
451
http://slidepdf.com/reader/full/formule-metastock 451/554
8/6/2019 Formule - Metastock
Not sure if this is what you are looking for but ...
Peter Gialames
Here is the text from S&C V. 10:5 (220-224): Forecasting Tomorrow's Trading
Day by Tushar S. Chande, Ph.D.
Using linear regression as a crystal ball for forecasting the market? After all, if you
were to be able to
determine tomorrow's high, low and close for trend changes and placement of stop
points, it would
simplify your life immeasurably. Can it work? Tushar Chande explains how it can be
done.
Wouldn't you trade better It you could "see" the future? A simple linear regression can
provide an
objective forecast for the next day's high, low and close. These ingredients are
essential for a trading
game plan, which can help you trade more mechanically and less emotionally. Best of
all, a regression
forecast oscillator, %F, gives early warning of impending trend changes. The linear
regression method is
well known for finding a "best-fit" straight line for a given set of data. The output of
the regression are
the slope (m) and constant (c) of the equation
(1)Y = mX + c
Here, m and c are derived from a known set of values of the independent variable X
and dependent
variable Y. The relative strength of the linear relationship between X and Y is
measured by the
coefficient of determination r 2 , which is the ratio of the variation explained by the
regression line to the
total variation in Y. Here is a table to help interpret the values of r 2 , which range
from 0 to 1:
The coining of the term "regression" can be attributed to Sir Francis Galton, who
observed in the late
1800s that tall fathers appeared to have as a rule short sons, while short fathers
appeared to havesuggested
tall sons. Galton as a rule that the heights of the sons "regressed" or reverted to the
average. Technician
Arthur Merrill also had a good explanation in a recent issue of STOCKS &
COMMODITIES, and Patrick
Lafferty recently wrote on an application of multiple regression to gold trading.
Virtually all introductory
books on statistics have a detailed discussion of the linear regression method.
Successful professional traders emphasize the importance of having a trading plan. A
trading game plan,
much like that of a football team, clearly defines specific actions under different
conditions. The linear
452
http://slidepdf.com/reader/full/formule-metastock 452/554
8/6/2019 Formule - Metastock
regression method is very useful in developing a forecast for the next trading day's
high, low and close
based on the last five trading sessions. The method is general and broad-based enough
so that it can be
used with stocks, indices or commodities. The forecast is the basis of my trading plan:
I can define what I
should do if the market rises above the forecast high, falls below the forecast low or
stays within the
forecast range. This way, I can avoid being emotional and trade as mechanically as
possible by having a
plan to rely on.
FORECASTING WITH LINEAR REGRESSION
I like to use at least 10 days of data and develop a forecast for the high, low and close.
The five-day
regression is a good choice for short-term trading. You can use any length of
regression you like. Here
are the calculations with the daily close in a spreadsheet format:
1 Perform a linear regression with the first five days of data to obtain the slope m and
constant c such
that
X Value Daily Close
1 Day 1
2 Day 2
....
5 Day 5
2 Forecast the next day's close with the slope m and constant c from step 1:
(2) Forecast close (Day 6) = 6m + c
3 Record m, c and r 2 on the same line as Day 5. Record the forecast from step 2 one
day ahead, with
Day 6. Note when we are using five days' data, the first forecast is for Day 6.
4 Step the calculation ahead one day such that
5 Record m, c and r 2 as in step 3.
6 Calculate the regression forecast oscillator, %F, as
(3)
%F = ((Y-Yforecast)/Y)*100
where Y is the close for Day 6 and Y(Forecast) is the forecast for Day 6 from step 2
(from Day 5).
78 Record
Step thethe oscillator ahead
calculations on the one
same line
day at as Day until
a time 6. the most recent day.
Technically, we can use the linear regression to develop a point forecast (single value)
for the next day
(as in step 2) or a range (interval) of values with a certain confidence level. The
interval widens, greater
the variation in the data and greater the desired confidence level.
I use the forecast oscillator, %F, to determine if my forecast is above or below the
actual market data.
Since
%F = ((Y-Yforecast)/Y)*100
where Y can be any market variable for stocks, indices or commodities, %F measures
the percent
453
http://slidepdf.com/reader/full/formule-metastock 453/554
8/6/2019 Formule - Metastock
deviation of the actual value from its forecast. In a trading market, %F changes its
sign before a
significant trend change. In trending markets, %F tends to change sign early in the
trend. I interpret %F in
the context of the r 2 Of the regression. A low value of r 2 plus a change in sign of %F
is a good signal of a
change in trend. Market extremes and periodicity can also be observed on the %F
charts.
DEVELOPING A TRADING PLAN
You can use the forecasts to develop a specific trading plan to suit your trading style.
I use the forecasts
in several ways.
Forecasts as stops. I use the high and the low as action points. If the market exceeds
the forecast high, it
wants to go up. To trade with the trend, I put a buy stop a few ticks above the high. If
the market falls
below the forecast low, it wants to go down. Hence, I set a sell stop a few ticks below
the forecast low. If
you want to trade against the trend, sell short near the forecast high and buy near the
forecast low.
Forecasts as intraday range scale. The forecasts provide a scale for evaluating the
trading day. The
market can stay within the expected range or go outside. On a down day, the intraday
high is well below
the forecast high and may be below the forecast close. On an up day, the market stays
well above the
forecast low and often above the forecast close.
General rules for trading with forecasts. Here are some general rules:
• Use the forecasts only if r 2 is greater than 0.1. Higher the value of r 2 , the greater
the confidence in the
forecasts.
• A trend change is imminent when r 2 falls below 0.1. Prepare to close longs.
• A trend is in place if r 2 is greater than 0.6. As a trend follower, you could wait for
this value to be
exceeded before opening positions. This would keep you out of short-term
fluctuations.
• An early warning of a trend change is provided by a zero-crossing of %F, the
forecast
Prepare tooscillator.
tighten stops and look for changes in slope and coefficient of determination
for
confirmation.
•A change in trend is confirmed by a change in slope of the regression. Open
positions in direction of
trend change. To trade against the trend, look for peaks in slope and strength of the
linear trend.
•The trend will usually change in the direction of %F.
•Always be prepared for a market move against the forecast. Use stops!
A SAMPLE TRADING PLAN
Iprevious
have developed
five a forecast for the high, low and close for January 20, 1992, from the
454
http://slidepdf.com/reader/full/formule-metastock 454/554
8/6/2019 Formule - Metastock
trading days, seen in Figure 1. The market was making new highs the previous week.
Was a downward
movement imminent? Let's look at the data from Friday, January 17, 1992:
The market was trending moderately (0.4<= r 2 <0.6), but the forecast oscillator %F
was negative for
high, low and close, warning of a possible change in trend. The relatively small slope
of the regression
for the high meant the market was meeting resistance. The slope of the regression for
the close had turned
down from the high values during the recent strong uptrend. The forecast, however,
called for a strong
close near the highs of the day, but that seemed doubtful, given the low slopes in a
moderating trend. The
plan was to watch for a change in trend. If the market opened weak, a bearish strategy
was called for. For
example, I would consider buying the Standard & Poor's 100 Index OEX January 390
puts, or selling
short the S&P 500 March futures contract.
The high daily volume of OEX index options traded makes the S&P
100 index an interesting application of me regression forecast
approach.
The market opened at the Friday close and weakness was evident at the open, as the
S&P 500 futures
opened lower. It was clear in early trading that the trend would be down, as the
market traded well below
the forecast high and close. Clearly, the forecast range provided a good scale, since it
reinforced the
concept that the market was weaker than the trend of the prior five days. A bearish
stance would have
been profitable.
THE NATURE OF REGRESSION FORECASTS
The high daily volume of OEX index options traded makes the S&P 100 index an
interesting application
of the regression forecast approach. I have examined a time period from early October
1991 to
mid-January 1992. The OEX close and its forecast are in Figure 2; the r 2 values in
Figure 3; %F in Figure
4, and Figure
Several 5 has %F
observations canaround the from
be made mid-November plunge. First, the forecast lags the
the OEX analysis.
OEX in an uptrend
or in a downtrend. Second, the close and the forecast cross over several days before a
trend change. This
crossover can be seen as a zero crossing in the %F chart. Significant trend changes are
preceded by
trendless periods with values of r 2 near zero. Strong trends are accompanied by high
values of r 2 and
regression slope. These observations support the general rules of interpretation noted
above. As Figure 5
shows, %F
OEX fell provided
15.68 a timely warning of an impending trend change just before the
points.
455
http://slidepdf.com/reader/full/formule-metastock 455/554
8/6/2019 Formule - Metastock
I have included data for wheat (cash) from 1989 to indicate the use of this approach
with commodities.
The market showed significant trends during this period with good periodicity, as
shown in Figures 6, 7
and 8. The %F zero crossings were timely indicators of trend change. Features
observed with OEX charts
are also seen here; note in particular how %F can be used to identify extremes in the
market from Figures
4 and 8.
Simple linear regression yields forecasts of the high, low and close for stocks, indices
or commodities.
these forecasts can be used to develop a trading plan. You can trade with the trend,
against the trend,
intraday or interday. The forecast oscillator, %F, provides early warning of trend
changes taken together
with the regression slope and coefficient of determination. This approach works best
in trending markets
or trading range markets; it is only moderately useful in volatile markets with choppy
price action. These
objective forecasts will let you trade less emotionally and more mechanically. Profits
will look up when
you can look ahead.
Tushar Chande holds a doctorate in engineering from the University of Illinois and a
master's degree in
business administration from the University of Pittsburgh.
REFERENCES
Lafferty, Patrick [ 1991 ]. "A regression-based oscillator," Technical Analysis of
STOCKS & COMMODITIES,
Volume 9: September.
Merrill, Arthur [1991]. "Fitting a trendline by least squares," Technical Analysis of
STOCKS & COMMODITIES,
Volume 9: December.
Pfaffenberger, Roger, and James Patterson [1987]. Statistical Methods for Business
and Economics,
Irwin.
-----Original Message-----
From: owner-metastock@metastock.com [mailto:owner-
metastock@metastock.com]On Behalf
Sent: Thursday, January 10, 2002 Of Steve
10:34 AM Karnish
To : metastock@metastock.com
Subject: Forecast Oscillator
List,
Does anyone have the math formula for Chande's Forecast Oscillator?
Thanks,
Steve
456
http://slidepdf.com/reader/full/formule-metastock 456/554
8/6/2019 Formule - Metastock
From my archives.....I found three different formulas for the True Strength Index:
1. rr:= Input("first smoothing r" ,1 ,100 ,25 );
ss:= Input("second smoothing s" ,1 ,100 ,13 );
uu:= Input("third smoothing u",1,100,1);
numerator:=100*(Mov(Mov(Mov(ROC(C,1,$),rr,E),ss,E),uu,E));
denominator:=Mov(Mov(Mov(Abs(ROC(C,1,$)),rr,E),ss,E),uu,E);
If(denominator<0,numerator/denominator,0);
2.
100*(Mov(Mov(ROC(C,1,$),40,E),20,E)/Mov(Mov(Abs(ROC(C,1,$)),40,E),20,E))
3. rc:=Mov(Mov(ROC(C,1,$),40,E),20,E);
rc1:=If(rc=0,1,Mov(Mov(Abs(ROC(C,1,$)),40,E),20,E));
100*(rc/rc1)
Take your pick. <g
Claud
neo wrote:
Would you mind posting the formula?Thanks
-----Original Message-----
From: owner-metastock@metastock.com [mailto:owner-
metastock@metastock.com]On Behalf Of William Gross
Sent: Wednesday, January 02, 2002 2:23 PM
To : metastock@metastock.com
Subject: True Strength Index
Has anyone system tested to see if the 25/13 periods used in the formula for
theTrue Strength Index in the Active Trader Magazine article this month is
better
chart...or worse GrossVenice
William than some alternatives
CA (like 17/9)? Especially on a 15 minute
FORECAST OSCILLATOR
ForecastOsc
or
{Forecast Osc-Chande}
{from jseed}
457
http://slidepdf.com/reader/full/formule-metastock 457/554
8/6/2019 Formule - Metastock
Pds:=Input("Time Periods",1,1000,5);
Fld:=Input("Price Field 1=C 2=O 3=H 4=L",1,4,1);
PFld:=If(Fld=1,C,If(Fld=2,O,If(Fld=3,H,L)));
Sig:=Input("Signal MA Periods",1,200,3);
ForO:=((Pfld-(Ref(LinearReg(Pfld,Pds),-1)+
Ref(LinRegSlope(Pfld,Pds),-1)))*100)/Pfld;
ForO;
Mov(ForO,Sig,E);
{end}
Jeff,
Try applying this method to Nokia (8% band around the FO), Intel (7%),
Goldman Sachs (6%-see attachment). Don't forget to set system tester to -1
and open. This will initiate your trades on the opening of the following
day you trigger a signal.
Time travel into the next quarter and you will find the above issues being
traded as part of the 50-75 "single stock futures". Then, with a ~$135 in
profits (GS over the last two years), imagine how much fun it would be with
only 20% margin. I can't wait until the "series 7" idiots start to trade in
this arena.
Take care,
Steve
----- Original Message -----
From: Jeff Haferman <Jeff_Haferman@yahoo.com
To: <metastock@metastock.com
Sent: Wednesday, January 23, 2002 8:50 AM
Subject: Re: Forecast Oscillator
Thanks Steve,
I'll study this.
I'm very familiar with your site, I've been learning from it for
the last couple of years ;)
Jeff
Jeff,
Chande
ever has the finest indicators (my humble, subjective opinion) I have
458
http://slidepdf.com/reader/full/formule-metastock 458/554
8/6/2019 Formule - Metastock
would
suggest that Chande knows how to apply "rules" to his fine work. I'm
sure
he uses them well, but I can find nothing that hints at his approach.
The Forecast Oscillator can be a real gem. I like to use a 13 period FO.
Typically, stocks that fluctuate more than 10% from the Forecast
Oscillator
seem to perform the best under testing. A simple optimisation would look
like:
Enter Long:
Cross(opt1,ForecastOsc(CLOSE,opt3))
Close Long:
Cross(ForecastOsc(CLOSE,opt3),opt2)
I like to use 13 as a default for opt3 (or you can test). opt1 is the
trigger level to trigger a long trade and opt2 triggers the sell to
offset
the position. If you are testing commodities or the Q's, just change the
"Close Long" to Enter Short. If I know a stock ranges up to 15% from the
linear regression formed by the Forecast Oscillator, I will test for
points
between 1 and 15, stepping up a point (1) and -1 to -15. Because of the
way
the formula is written, you must change the optimisation levels for each
test. Some stocks don't trade beyond a percent or two of their price.
Testing whole numbers above "one" wouldn't do you any good (under those
circumstances).
Take care,
Steve
459
http://slidepdf.com/reader/full/formule-metastock 459/554
8/6/2019 Formule - Metastock
C
HANDE'S DYNAMIC M OMENTUM I
NDEX
HTH, Andreas
-----Ursprungliche Nachricht-----
Von: owner-metastock@metastock.com
[mailto:owner-metastock@metastock.com]Im Auftrag von rudolf stricker
Gesendet: Sonntag, 3. Februar 2002 17:38
An: metastock@metastock.com
Betreff: Re: momentum indicators, using also o-h-l
460
http://slidepdf.com/reader/full/formule-metastock 460/554
8/6/2019 Formule - Metastock
A DAPTIVE SYSTEMS
Adaptive systems is pretty complicated matter. There are several known ways of
doing it, at least about 4. The math is not too complicated but arcane and the concept
is hard to comprehend. There are several questions:
• what does adaptive system mean?
• what do you adapt it to?
• what to adapt?
• what do you adapt it based on? how do you do it?
•
what is the math?
• how to you implement it in code?
• is it doable?
Adaptive means the system's algorithm tunes itself up as the "market footprint"
changes to maximise the performance criterion which is max reward at min risk. If
you want to discuss adaptive first you have to discuss non adaptive systems like the
ones you can code in TSs. The main objective of any system is to find the balance in
between the risk and the reward - which is the main criteria. in TS we do that by
running optimisation and finding the suitable peak in the optimisation function.
Optimisation function (OF) has a dependent and independent variables. D dependent
variables are Max Profit (MP) and Min Risk (MR), independent are your parameters /
inputs ( I )
example: if you have 3 inputs 3 Is your OF will is 4 or 5 dimensional ( 3 Is + MR +
MP ). this could be graphically representing as a multidimensional surface. the key is
to find the peak of that surface( that's why if system has more
than 3 inputs I toss it ) - hard to do because it's hard to visualise. You can see now that
if a system does not adapt you have to find the peak manually or you have to
compromise. *most systems fail because they are not
adaptive - curvefitted!!!
So, the purpose of adaptive system is to find that peak in OF in real time. To know the
peak you need to know
the OF. to know OF you have to know: MR, MP, and all Is. let's break it down.
461
http://slidepdf.com/reader/full/formule-metastock 461/554
8/6/2019 Formule - Metastock
MR and MP: you have to calculate systems performance in real time. But the system
does not know how
it performs itself. it needs some criteria to go by. how can a system know if it works
on all cylinders and bangs
out max profit at min reward or just barely making it? you have to give it a reference
to go by. this ref performance
is called system efficiency (SE). SE is calculated in % by comparing in real time the
performance of real system to
the performance of ideal system. Another term needs to be introduced - ideal system.
Ideal system buys the very top and sells the very bottom. you can easily calculate that
buy coding a function that will sell and buy in hindsight and give you max possible
profit at zero risk. now, then you take ideal system as 100% efficiency, then your
SE = real performance / ideal performance. say your average SE = 30% that means
you are pulling out 30% or what you can pull out of the market. this becomes the
criterion to go by in adaptation or Max SE. this can fluctuate from Min allowable SE
say 20% to 100% ( will never be 100%). Based on statistical runs you can then
calculate
mean SE to go by, say 30%. now you know what to adapt to.
Next is how to adapt it. well, the first thing that should pop into your mind is that you
need a feedback loop of some sort. The rational loop is this:
footprint changed -adjust parameters -
to maximise SE ratio -if SE drops means
footprint changed -repeat.
if you examine this loop you'll notice that
you need at least 2 functions ( transfer functions )
to do that:
1. parameters = f ( footprint )
2. SE = f( parameters )
of
SEyou
= f (can
f ( rewrite it )as:
footprint ); tells you systems
462
http://slidepdf.com/reader/full/formule-metastock 462/554
8/6/2019 Formule - Metastock
market conditions.
so where do you get those functions:
a. from a sample run: you do a pass over data, build your OF function and then build
your parameter = f( footprint ) function. log it in and use it for the real time run. you
can keep updating those functions in real time. this is similar to manual optimisation
where you do sample runs but in addition to that the OF gets updated in real time.
b. ramp up period. you start with a ramp up period and update your 1 and 2 functions
as you go along
your SE will start with 0% and will be improving as those functions will be more and
more accurate.
the system like this will start trading real bad and then improve it's performance as it
adapts and learns to trade better and better. the performance will taper off and
stabilise as those functions are saturated.
c. multiple parallel models: you run multiple systems based on different parameters
and find the best performing one under changing market footprint and trade that best
one. This approach however does not guarantee that the best performing current
model will continue to be the best tomorrow.
define market footprint ( which market variables hurt or improve your systems
performance ) then:
• use those as your parameters so that the market will itself adjust those for you then
-specify how your trading algorithm should change based on that parameter.
463
http://slidepdf.com/reader/full/formule-metastock 463/554
8/6/2019 Formule - Metastock
It is self evident that the first step in designing adaptive systems is to define market
footprint in variables that require no parameters or allow only parameters will not
affect variable measurement itself. If you try to define noise through ATR then ATR
is
ATRdependent
will noton
belookback
sensitive unless the lookback
to it's most value is:-)high.
recent change. If lookback value is high,
go figure.
Volatility also requires lookback. Almost everything there needs a damn lookback or
a factor. However if you isolate the most recent swing (current trade) in the price and
find pivot high and pivot low and find the duration of that swing and use that duration
as a lookback then what your saying is that I only want to measure noise during the
most current trade that I am in.. This becomes adaptive lookback and ATR becomes
adaptive. then your market variable can be called - ATR of last tradable swing... and
not ATR of some arbitrary lookback that you think is suitable.
At theofend
most themit all comes
have to dodown
with to about 4-5 market variables that you need to define and
volatility in one form of the other. Volatility is the main market variable!
464
http://slidepdf.com/reader/full/formule-metastock 464/554
8/6/2019 Formule - Metastock
http://slidepdf.com/reader/full/formule-metastock 465/554
8/6/2019 Formule - Metastock
strongly trending stock will probably have a long cycle length while that same stock
may have a very short cycle length if it is in a trading range. The problem with cycle
lengths is that they are based on the past and not the future but they may provide a
best guess as to the future cycle length.
O N B ALANCE V OLUME
You will get a better feeling for open interest influence if you combine it with
an on-balance-volume indicator. The best combination I found is OBVtd=
OBVyest.+((
Close-open/ high-low)*VOLtoday). Try it, you'll like it. Ira
Hi Stig;
My interpretation of the OI drop is a bit different than yours. I consider
a drop in OI as potentially bullish when it accompanies a violent/spike low
or after a long trend.. hthe main requirement is that it occur over a
relatively short period of time... My interpretation is that the last long
that needed to capitulate capitulated and made the low and now buyers can
begin to operate.
Over a long period (like on the gold chart) I suspect that it is more an
indication of lack of interest than anything else... funds don't employ
margin in markets that are in trading ranges and markets in long-long
trading ranges don't attract the trading publics attention.
The good news... low levels of OI suggest that there is margin available to
be deployed and support the trend (which ever way it materializes).
Stew.
I brushed up on Drummond this morning to check open Interest. And he is very clear
when he says that falling OI at bottoms are very bullish (all the shorts are closing their
poitions and new longs don't have the courage to buy - yet)
Check out the lower histogram and how OI has declined since the 1999 low The
middle indicator STRSI shows a very promising "hidden Divergence" very reliable
and bullish.
466
http://slidepdf.com/reader/full/formule-metastock 466/554
8/6/2019 Formule - Metastock
The pink histogram is Robert Miners Dynamic time Projection, which projects trend
changes with the help if past tops/bottom and fib ratios. Looks like the next top will
be around March 15 (Spring Equinox March 20 which is notorious for trend changes
in Gold!!)
If you use bar charts you get quite different meaningless result -try it out. Since
most people use barcharts today (I guess), what you see in the close only chart is
not so evident. Fridays are good days for explosions - let's see what happens
today....
Regards
Stig
M ARKET C OMMENTARY
In TS2000i and TS6 you can cut and past the following code for the "Analysis
Commentary" which helps for debugging.
====================================
Commentary("", newline, newline ,
"timetrade=", timetrade, newline,
"marketposition =", marketposition , newline,
"TradeOK=", TradeOK, newline,
"date =", date , newline,
"date[1] =", date[1], newline,
"High =", High , newline,
467
http://slidepdf.com/reader/full/formule-metastock 467/554
8/6/2019 Formule - Metastock
1- the left side is a label that appears on the chart when you
activate the "Analysis Commentary". It identifies the value that will print
out
on the chart. Just change the words, but keep the quotes and
keep the = sign.
2- the middle is the condition, or variable or piece of info you want
the value of.
3- the word 'newline' is just a line carriage to make the "Analysis
Commentary" more readable when you open it on the chart.
If
BuyMarketPosition = 0 Then Begin
tomorrow at BuyValue + LowValue Stop;
468
http://slidepdf.com/reader/full/formule-metastock 468/554
8/6/2019 Formule - Metastock
October 2000
The following TradeStation code is from "Moving beyond the closing price" in the
issue.
Variable: PercChange(0),
NewLevel(0),
AvgPercChange(0);
PercChange = (Close -
Close[1])/Close[1];
AvgPercChange =
Average(PercChange,20);
NewLevel = Close *
(1 + AvgPercChange);
Plot1[1](NewLevel,þþ);
**
Inputs: StDevs(1);
Variable:StdDevChange(0),
UpLevel(0), DownLevel(0);
StdDevChange =
StdDev(PercChange, 20);
UpLevel = Close *
(1 + AvgPercChange +
StDevs * StdDevChange);
DownLevel = Close *
(1 + AvgPercChange -
StDevs * StdDevChange);
Plot2[-1](UpLevel,þþ);
Plot3[-1](DownLevel,þþ);
469
http://slidepdf.com/reader/full/formule-metastock 469/554
8/6/2019 Formule - Metastock
**
**
Input: VSStd(1);
Array: VS[20](0);
{Then we‰re using a loop function to fill it with the different price changes}
End;
If SumArr = 0 Then
SumVS = 0;
If SumArr = 19 Then
If DiffArr = 0 Then
DiffVS = 0;
If DiffArr = 19 Then
End;
End;
{Finally, we add the moving average (and the standard deviations) to the latest close for an
indication of tomorrow‰s trading range}
470
http://slidepdf.com/reader/full/formule-metastock 470/554
8/6/2019 Formule - Metastock
VSMid = C * (1 + AvgVS);
471
http://slidepdf.com/reader/full/formule-metastock 471/554
8/6/2019 Formule - Metastock
Jan./Feb. 2001
TotTr = TotalTrades;
If TotTr > TotTr[1] Then Begin
{Make sure that you have a temp directory on your hard drive, or re-write the path
inside the FileAppend command to an exsisting directory of your choice.}
FileAppend("C:\Temp\Chap1-2.csv", TradeStr2);
End;
472
http://slidepdf.com/reader/full/formule-metastock 472/554
8/6/2019 Formule - Metastock
Array: VS[20](0);
End;
If SumArr = 0 Then
SumVS = 0;
If DiffArr = 0 Then
DiffVS = 0;
If DiffArr = 19 Then
StdVS = SquareRoot(DiffVS / 20);
End;
End;
RiskReward = VSMid-VSLow;
End;
If MarketPosition = 1 Then
If MarketPosition = 1 Then
473
http://slidepdf.com/reader/full/formule-metastock 473/554
8/6/2019 Formule - Metastock
March 2001
Ratio2 = C / C Data2;
Ratio3 = C / C Data3;
If MarketPosition = 0 and BarsSinceExit(1) > 1 and ProdDiff > UpperProdDiff and ProdDiff >
ProdDiff[2] Then
Buy ("Go Long") at Close;
If MarketPosition = 0 and BarsSinceExit(1) > 1 and ProdDiff < LowerProdDiff and ProdDiff <
ProdDiff[2] Then
Sell ("Go Short") at Close;
ExitShort
End; at Market;
April 2001
"Trading the VIX," by Price Headley: This is the system code (written in
EasyLanguage for TradeStation), where Data1 is the OEX and Data2 is the VIX
index.
{Code by Price Headley, BigTrends.com}
If Close of Data1 > Average(Close of Data1, 10) and Close of Data2[5] < BollingerBand(Close
of Data2, 21, 2)[5] and Close of Data2[6] > BollingerBand(Close of Data2, 21, 2)[6] Then
Buy on Close of Data1;
474
http://slidepdf.com/reader/full/formule-metastock 474/554
8/6/2019 Formule - Metastock
If Close of Data1 < Average(Close of Data1, 10) and Close of Data2[10] >
BollingerBand(Close of Data2, 21, -2)[10] and Close of Data2[11] < BollingerBand(Close of
Data2, 21, -2)[11] Then
Sell on Close of Data1;
If BarsSinceEntry = 5 and Close of Data1 > Close of Data1[5] Then
ExitShort on Close of Data1;
May 2001
Inputs: Len(63);
475
http://slidepdf.com/reader/full/formule-metastock 475/554
8/6/2019 Formule - Metastock
June 2001
For the Trading System Lab:
Input: VSStd(1);
Vars: SumVS(0), AvgVS(0), DiffVS(0), StdVS(0), SetArr(0), SumArr(0), DiffArr(0), VSLow(0),
VSMid(0), VSHigh(0), RiskReward(0);
Array: VS[20](0);
For SetArr = 0 To 4 Begin
VS[SetArr * 4 + 0] = (O[SetArr] - C[SetArr + 1]) / C[SetArr + 1];
VS[SetArr * 4 + 1] = (H[SetArr] - C[SetArr + 1]) / C[SetArr + 1];
VS[SetArr * 4 + 2] = (L[SetArr] - C[SetArr + 1]) / C[SetArr + 1];
VS[SetArr * 4 + 3] = (C[SetArr] - C[SetArr + 1]) / C[SetArr + 1];
End;
For SumArr = 0 To 19 Begin
If SumArr = 0 Then
SumVS = 0;
SumVS = SumVS + VS[SumArr];
If SumArr = 19 Then
AvgVS = SumVS / 20;
For DiffArr = 0 To 19 Begin
If DiffArr = 0 Then
DiffVS = 0;
DiffVS = DiffVS + Square(VS[DiffArr] - AvgVS);
If DiffArr = 19 Then
StdVS = SquareRoot(DiffVS / 20);
End;
End;
VSLow = C * (1 + (AvgVS - StdVS * VSStd));
VSMid = C * (1 + AvgVS);
VSHigh = C * (1 + (AvgVS + StdVS * VSStd));
Input: Len(10);
Vars: Diff(0), MyConst(0), MyAdx(0), Varma(0), EmaIndex(0);
{… Index of EMA …}
If Len > 0 then EmaIndex = (2 / (1 + Len)) else EmaIndex = 0.20;
476
http://slidepdf.com/reader/full/formule-metastock 476/554
8/6/2019 Formule - Metastock
MyAdx = ADX(20);
Diff = Highest(MyAdx, 20) - Lowest(MyAdx, 20);
If Diff > 0 then MyConst = (MyAdx - Lowest(MyAdx, 20))/Diff else MyConst = EmaIndex;
Plot1(Varma, “VarMA”) ;
Plot2(XAverage(Close, Len), ”XAvg”
July 2001
August 2001
477
http://slidepdf.com/reader/full/formule-metastock 477/554
8/6/2019 Formule - Metastock
September 2001
Beta values spreadsheet (Note: If prompted to update links within the spreadsheet when
Excel opens, click "No.")
Programming code for 3L-R and GAP-2H patterns (from "Keeping it simple," by Michael
Harris).
{*****************************************************
Description : 3L-R Pattern Entry Signal
Developed By : Michael Harris, Tradingpatterns.com
*****************************************************}
if l[1] < l[2] and l[2] < l[3] and h[0] > h[3] then
buy ("3L-R") next bar on the open;
{*****************************************************
Description : 3L-R Pattern Long Exit Signal
Developed By : Michael Harris, Tradingpatterns.com
Comments: ptarget and stopl are in percentage terms
*****************************************************}
variables: profitprice(0), stopprice(0);
input: ptarget(8), stopl(8);
profitprice = entryprice*(1+ptarget/100);
stopprice = entryprice*(1-stopl/100);
**
{***********************************************
Description : GAP-2H Pattern Entry Signal
Developed By : Michael Harris, Tradingpatterns.com
478
http://slidepdf.com/reader/full/formule-metastock 478/554
8/6/2019 Formule - Metastock
***********************************************}
if h[0] > h[1] and h[2] > l[2] and l[0] > l[1] and l[1] > h[2] and
h[1] > l[0] then
buy ("GPA-2H") next bar on the open;
{***********************************************
Description : GAP-2H Pattern Long Exit Signal
Developed By : Michael Harris, Tradingpatterns.com
Comments: ptarget and stopl are in percentage terms
***********************************************}
variables: profitprice(0), stopprice(0);
input: ptarget(7), stopl(7);
profitprice = entryprice*(1+ptarget/100);
stopprice = entryprice*(1-stopl/100);
exitlong
end; ("GAP-2H Stop") at stopprice stop;
**
October 2001
Formula for the Beta Value system found in the Trading System Lab (p. 82)
If IndPrice > Average(IndPrice, Length) and iBeta > 1 and MarketPosition <> 1 Then
Buy 1 Contract Tomorrow at Lowest(Low, 5) Limit;
If IndPrice < Average(IndPrice, Length) and iBeta < 1 and MarketPosition <> -1 Then
SellShort 1 Contract Tomorrow at Highest(High, 5) Limit;
479
http://slidepdf.com/reader/full/formule-metastock 479/554
8/6/2019 Formule - Metastock
November 2001
Formula for the Harris 3L-R pattern variation system found in the Trading System Lab
(p. 74)
December 2001
Formula for the Deep Pockets system found in the Trading System Lab (p. 58)
Inputs: MaxLength(5);
Variables: MarPos(0), LongLoss(0), ShortLoss(0);
If BarsSinceEntry >= (MaxLength - 2) Then
SetExitOnClose;
If MarketPosition <> 1 and Close < AvgPrice and AvgPrice < AvgPrice[5] Then Begin
If Open Tomorrow < AvgPrice Then Begin
Buy ("Long") tomorrow at AvgPrice Stop;
End;
End;
If MarketPosition <> -1 and Close > AvgPrice and AvgPrice > AvgPrice[5] Then Begin
If Open Tomorrow > AvgPrice Then Begin
SellShort ("Short") tomorrow at AvgPrice Stop;
End;
End;
MarPos = MarketPosition;
If MarPos <> MarPos[1] and MarPos = 1 Then
LongLoss = Low[1];
If MarPos <> MarPos[1] and MarPos = -1 Then
ShortLoss = High[1];
If EntryPrice > 0 Then Begin
If BarsSinceEntry >= 1 Then Begin
LongLoss = MaxList(LongLoss, Low);
ShortLoss = MinList(ShortLoss, High);
End
Else Begin
LongLoss = MaxList(LongLoss, Low);
ShortLoss = MinList(ShortLoss, High);
End;
If MarketPosition = 1 Then Begin
Sell ("LS") tomorrow at LongLoss Stop;
Sell ("LT") tomorrow at Highest(High, 5) Limit;
End;
If MarketPosition = -1 Then Begin
BuyToCover ("SS") tomorrow at ShortLoss Stop;
BuyToCover ("ST") tomorrow at Lowest(Low, 5) Limit;
End;
End;
480
http://slidepdf.com/reader/full/formule-metastock 480/554
8/6/2019 Formule - Metastock
January 2002
Formula for the Pair-trade system found in the Trading System Lab
Then Begin
Buy Next Bar at Market;
RiskCalc = AvgTrueRange(5);
End;
TSI(close,r,s) = 100*EMA(EMA(mtm,r),s)/EMA(EMA(|mtm|,r),s)
r = 25, s = 13
**
For MetaStock, use the Indicator Builder:
For CQGNet, you first create the momentum (MTM) value, then create the TSI indicator
in the custom studies module.
Under the User Values tab create a new User Value "MTM" (Figure 2):
481
http://slidepdf.com/reader/full/formule-metastock 481/554
8/6/2019 Formule - Metastock
Next, under the Custom Studies tab create the new Custom Study TSI (Figure 3):
February 2002
Formula for the Pair-trade II system found in the Trading System Lab
March 2002
Formula for the system dicussed in "Putting stops to the test," by Thomas Stridsman
(p. 82):
482
http://slidepdf.com/reader/full/formule-metastock 482/554
8/6/2019 Formule - Metastock
RC4
RC5 =
= RateOfChange(Close
RateOfChange(Close Data4,
Data5, LenRC);
LenRC);
RC6 = RateOfChange(Close Data6, LenRC);
RC7 = RateOfChange(Close Data7, LenRC);
RC8 = RateOfChange(Close Data8, LenRC);
RC9 = RateOfChange(Close Data9, LenRC);
RC10 = RateOfChange(Close Data10, LenRC);
TrendFilter = Average(Close Data11, 80);
483
http://slidepdf.com/reader/full/formule-metastock 483/554
8/6/2019 Formule - Metastock
If BarsSinceEntry
ExitLong Next Bar>=
at TradeLenRC
Market; Then Begin
ExitShort Next Bar at Market;
End;
Formula for the system dicussed in "Balancing stop size and trade length" by Thomas
Stridsman (p. 66):
If
BuyHigh < High[2]
Next and Close
Bar at High Stop; < Open and Open Next Bar < High Then Begin
LongStopLoss = 1 - ExitTrigger;
End;
If Low > Low[2] and Close > Open and Open Next Bar > Low Then Begin
Sell Next Bar at Low Stop;
ShortStopLoss = 1 + ExitTrigger;
End;
End;
If MarketPosition = 1 Then
ExitLong Next Bar at EntryPrice * LongStopLoss Stop;
If MarketPosition = -1 Then
ExitShort Next Bar at EntryPrice * ShortStopLoss Stop;
If BarsSinceEntry
ExitLong Next Bar=atBarsInTrade+1
Market; Then Begin
ExitShort Next Bar at Market;
End;
NoTrades = TotalTrades;
MarPos = MarketPosition;
If NoTrades > NoTrades[1] Then Begin
If MarPos[1] = 1 Then
TrProfit = (ExitPrice(1) - EntryPrice(1)) * 100 / EntryPrice(1);
If MarPos[1] = -1 Then
TrProfit = (EntryPrice(1) - ExitPrice(1)) * 100 / EntryPrice(1);
SumTrProfit = SumTrProfit + TrProfit;
End;
May 2002
484
http://slidepdf.com/reader/full/formule-metastock 484/554
8/6/2019 Formule - Metastock
Formula for the system discussed in "Looking for a target," by Thomas Stridsman (p.
84):
NoTrades = TotalTrades;
MarPos = MarketPosition;
If NoTrades > NoTrades[1] Then Begin
If MarPos[1] = 1 Then
TrProfit = (ExitPrice(1) - EntryPrice(1)) * 100 / EntryPrice(1);
If MarPos[1] = -1 Then
TrProfit = (EntryPrice(1) - ExitPrice(1)) * 100 / EntryPrice(1);
SumTrProfit = SumTrProfit + TrProfit;
End;
If LastCalcDate = Date + 2 Then Begin
AvgTrade = SumTrProfit / NoTrades;
TestString = LeftStr(GetSymbolName, 5) + "," + NumToStr(BarsInTrade+1, 2) + "," +
NumToStr(LimitExit*100, 2) + "," +
NumToStr(StopExit*100, 2) + "," + NumToStr(AvgTrade, 2) + NewLine;
FileString = "D:\Temp\StopTest-" + RightStr(NumToStr(CurrentDate, 0), 4) + ".csv";
FileAppend(FileString, TestString);
End;
{Three black
If High < candle
High[1] andsticks for <entry:}
High [1] High[2] and High[2] < High[3] and
485
http://slidepdf.com/reader/full/formule-metastock 485/554
8/6/2019 Formule - Metastock
Close < Open and Close[1] < Open[1] and Close[2] < Open[2] Then
Buy Tomorrow at High Stop;
{Trailing stop:}
ExitLong Tomorrow at Low Stop;
{ Retracement bar:}
If High > High[1] and Close < Close[1] Then
SetExitOnClose;
(Sum(RSI(5)-LLV(RSI(5),3),3)/Sum(HHV(RSI(5),3)-LLV(RSI(5),3),3))*100
June 2002
{Long positions only, profit target = 1 point, stop-loss = 1 point, entry at the open of next day}
486
http://slidepdf.com/reader/full/formule-metastock 486/554
8/6/2019 Formule - Metastock
variables:
If c[5]>c[4]profitprice(0),
and c[4]>c[3] stopprice(0);
and c[3]>c[2] and c[2]>c[0] and c[0]>c[1] then begin
Buy next bar on the open;
If marketposition = 0 then begin
exitlong next bar at open of tomorrow+ (targetpoints * multiplier) points limit;
exitlong next bar at open of tomorrow- (stoppoints * multiplier) points stop;
end;
end:
if marketposition = 1 then begin
profitprice = entryprice + (targetpoints * multiplier) points;
stopprice = entryprice - (stoppoints * multiplier) points;
exitlong at profitprice limit;
exitlong at stopprice stop:
end;
S&P 500 C-6 PATTERN
MetaStock Code
{Long positions only, profit target = 3%, stop-loss = 3% (of entry price), entry at the open of
next day}
input:ptarget(0), stop1(0);
variables: profitprice(0), stopprice(0);
If c[0]>c[2] and c[2]>c[1] and c[1]>c[3] and c[3]>c[4] and c[4]>c[5] then begin
Buy next bar on the open;
If marketposition = 0 then begin
exitlong next bar at open of tomorrow * (1 + ptarget/100) limit;
exitlong next bar at open of tomorrow * (1 - stop1/100) stop;
end;
end:
if marketposition = 1 then begin
profitprice = entryprice * (1 + ptarget/100) points;
stopprice = entryprice * (1 - stop1/100) points;
exitlong at profitprice limit;
exitlong at stopprice stop:
end;
{Long positions only, profit target = 10%, stop-loss = 10% (of entry price), entry at the open of
next day}
487
http://slidepdf.com/reader/full/formule-metastock 487/554
8/6/2019 Formule - Metastock
input:ptarget(0), stop1(0);
variables: profitprice(0), stopprice(0);
If c[1]>c[0] and c[0]>c[2] and c[2]>c[3] and c[3]>c[4] and c[4]>c[5] then begin
Buy next bar on the open;
If marketposition = 0 then begin
exitlong next bar at open of tomorrow * (1 + ptarget/100) limit;
exitlong next bar at open of tomorrow * (1 - stop1/100) stop;
end;
end:
if marketposition = 1 then begin
profitprice = entryprice * (1 + ptarget/100) points;
stopprice = entryprice * (1 - stop1/100) points;
exitlong at profitprice limit;
exitlong at stopprice stop:
end;
The EntryTrigger at the top of the code ensures that each signal will be traded at random so
Top = High;
LongStop = 1 - StopExit;
LongTarget = 1 + LimitExit;
End;
If Low > Low[2] and Close > Open and Open Next Bar > Low Then Begin
Sell Next Bar at Low Stop;
Bottom = Low;
ShortStop = 1 + StopExit;
ShortTarget = 1 - LimitExit;
End;
End;
If MarketPosition = 1 Then Begin
Top = MaxList(Top, High);
ExitLong
ExitLong Next
Next Bar
Bar at
at Top * LongStop
EntryPrice Stop; Limit;
* LongTarget
End;
If MarketPosition = -1 Then Begin
Bottom = MinList(Bottom, Low);
ExitShort Next Bar at Bottom * ShortStop Stop;
ExitShort Next Bar at EntryPrice * ShortTarget Limit;
End;
If BarsSinceEntry = BarsInTrade+1 Then Begin
ExitLong Next Bar at Market;
ExitShort Next Bar at Market;
End;
488
http://slidepdf.com/reader/full/formule-metastock 488/554
8/6/2019 Formule - Metastock
NoTrades = TotalTrades;
MarPos = MarketPosition;
If NoTrades > NoTrades[1] Then Begin
If MarPos[1] = 1 Then
TrProfit = (ExitPrice(1) - EntryPrice(1)) * 100 / EntryPrice(1);
If MarPos[1] = -1 Then
TrProfit = (EntryPrice(1) - ExitPrice(1)) * 100 / EntryPrice(1);
SumTrProfit = SumTrProfit + TrProfit;
End;
July 2002
Formula for the July Trading System Lab (p. 70):
Variables: RiskCalc(0);
If MarketPosition <> 1 and Average(Close, 9) Crosses above Average(Close, 36) Then Begin
RiskCalc = 4 * AvgTrueRange(10);
Buy Next Bar at Market;
End;
August 2002
ExitLong
ExitLong Next
Next Bar
Bar at
at EntryPrice
EntryPrice -+ AvgTrueRange(5) Stop;
2 * AvgTrueRange(5) Limit;
End;
If MarketPosition = -1 Then Begin
ExitShort Next Bar at EntryPrice + AvgTrueRange(5) Stop;
ExitShort Next Bar at EntryPrice - 2 * AvgTrueRange(5) Limit;
End;
489
http://slidepdf.com/reader/full/formule-metastock 489/554
8/6/2019 Formule - Metastock
Inputs:Option(1);
Vars:x(0),Counter(0),BarBack(0),Str("");
Counter=0;
For x=0 to 3 begin
If Option<=1 Or Option>3 then begin
{Refer the closes in
the condition}
If (C[x]>=L[BarBack]) and (C[x]<=H[BarBack]) then
Counter=Counter+1;
end;
If Option=2 then begin
{Refer the opens in the
condition}
If (O[x]>=L[BarBack]) and (O[x]<=H[BarBack]) then
Counter=Counter+1;
end;
If Option=3 then begin
{Refer both in the condition}
If (C[x]>=L[BarBack]) and (C[x]<=H[BarBack]) and
(O[x]>=L[BarBack])
and (O[x]<=H[BarBack]) then Counter=Counter+1;
end;
end;
If Counter=4 then begin {If the condition is
true
plot the congestion
bars}
For x=0 to 3 begin
Plot1[x](H[x],"H");
Plot2[x](L[x],"L");
end;
end;
If Counter=4 then Barback=BarBack+1 else BarBack=4;
N
ARROW R ANGE 4 (NR4) D AYS
A Narrow Range 4 day occurs when the range of today's prices (the high minus the
low) is the smallest range of the past four days. A Narrow Range 4 day appears as
follows:
490
http://slidepdf.com/reader/full/formule-metastock 490/554
8/6/2019 Formule - Metastock
As you can see, the price range (high - low) of the most recent day on the right is
smaller than the price range of the previous three days.
Unlike some of the other patterns discussed here, the Narrow Range 4 day occurs with
moderate frequency. Here is a chart of November 2001 soybeans, with each Narrow
Range 4 Day colored in red and marked by an upward pointing arrow beneath the bar.
Similar to an Inside Day, the Narrow Range 4 day signals a period of reduced price
volatility that may be the prelude to a significant price move in the market. When an
NR4 day occurs, traders should position themselves to trade in the direction of a price
breakout
N
ARROW R ANGE 7 (NR7) D AYS
A Narrow Range 7 day occurs when the range of today's prices (the high minus the
low) is the smallest range of the most recent seven days. A Narrow Range 7 day
appears as follows:
491
http://slidepdf.com/reader/full/formule-metastock 491/554
8/6/2019 Formule - Metastock
As you can see, the price range (high - low) of the most recent day on the right is
smaller than the price range of all the other price bars.
Here is a chart of November 2001 soybeans, with each Narrow Range 7 Day colored
in red and marked by an upward pointing arrow beneath the bar.
Similar to an Inside Day, the Narrow Range 7 day signals a period of reduced price
volatility that may be the prelude to a significant price move in the market. When an
NR7 day occurs, traders should position themselves to trade in the direction of a price
breakout.
H ISTORICAL V OLATILITY
Just as markets
increased will trade
or reduced higherThis
volatility. or lower in price,
relative markets
volatility of thealso entercan
market periods of as an
be used
indicator of future market expansion or contraction. When the market enters into a
period of contraction, prices don't move significantly, the overall range is low and
volatility is reduced. Periods of contraction invariably lead to periods of price
expansion, when price moves in a defined price trend and changes in price are
substantial.
One way of identifying periods of market expansion and contraction is by calculating
a ratio of recent volatility over long term volatility, and then forecasting a period of
market expansion when the short-range volatility drops below 50% of the long-range
volatility. The chart below of the Eurodollar market shows the ratio of 10 day
historical volatility to 100 day historical volatility. When this ratio (marked in red on
the chart) crosses below the 50% threshold (marked in green), the market has entered
492
http://slidepdf.com/reader/full/formule-metastock 492/554
8/6/2019 Formule - Metastock
into a short-term period of significant contraction. Traders may anticipate that the
market is about to expand significantly and enter into a pronounced price trend, so the
traders can plan accordingly.
As you can see from the chart above, in the middle of June, the ratio of 10 day
historical volatility to 100 day historical volatility dropped below 50% (the green
line). It persisted there for about ten market days, and then exploded higher, as the
Eurodollar market dropped significantly.
BOLLINGER B ANDS
Standard Deviation or Bollinger Bands are price bands that are used to monitor trends
in prices as well as overall market volatility. The upper Bollinger band represents a
fixed number of standard deviations above the average, and the lower Bollinger band
represents a fixed number of standard deviations below the average. By using
standard deviations rather than a fixed percentage, the bands adjust for volatility.
During volatile periods, the bands move further away from the average, while during
market lulls, the bands move closer to the average.
For those who don't recall high school statistics, the Standard Deviation is a measure
of how widely values are dispersed from the average value (the mean). The
calculation for standard deviation is:
Bollinger bands are usually included in most charting software. Here is a chart of
November 2001 soybeans, with the 20 day Bollinger bands colored in red with a 20
day moving average colored in green.
493
http://slidepdf.com/reader/full/formule-metastock 493/554
8/6/2019 Formule - Metastock
The area
should between
trade most the higher and
frequently. lower Bollinger
Consequently, whenbands
priceishits
theeither
area in
thewhich
higherprices
or lower
Bollinger band, it tends to reverse direction and go to the other Bollinger Band,
especially if the Bollinger bands themselves do not appear to reflect a major trend
(they are flat or sideways). Bollinger bands can also be used to identify periods of
market contraction and reduced volatility. When the higher and lower Bollinger bands
are very close together, traders should be ready for market action that boosts volatility
back to average levels - i.e., some kind of significant price move is about to take
place.
494
http://slidepdf.com/reader/full/formule-metastock 494/554
8/6/2019 Formule - Metastock
At the point marked #1, we see that although both the Bollinger Bands and the
Moving Averages have been moving higher, the market has moved lower on a short-
term basis, closing below the 20 day moving average (marked in blue). The
subsequent day is an NR4 day. The third day opens below the low of the NR4 day but
immediately begins trading higher.
In anticipation of an Outside Day formation, traders could have bought the market
while protecting themselves by placing their stop loss order at the low of the day. As
markets traded higher and penetrated the 20 day moving average, the opportunity for
a rebound has grown stronger. Traders could have added to their long positions the
following day as the market traded above the high of the outside day, again while
maintaining their stop loss at the low of the Outside Day.
As prices move up towards the upper Bollinger Band (marked in red, point #1), the
market experiences a day of consolidation that is both an Inside Day and an NR7 day.
At this point, traders should expect a significant price breakout. In this case, the next
day
two traded
patternslower andthe
offered although the long-term
opportunity trend
for a trade withwas higher,
lower risk the confluence
as the stop-lossoforder
these
could have been placed just above the high of the NR7 day.
One of the most compelling features of the Trader's Toolbox is the fact that it can
identify a wide range of trading setups in a given market. In the following example,
we explore a number of trade setups that occurred in the November 2001 Soybean
market.
495
http://slidepdf.com/reader/full/formule-metastock 495/554
8/6/2019 Formule - Metastock
Trade Setup #1
Following a period when the upper and lower Bollinger Bands became extremely
close to one another, the soybean market gapped lower in price towards the end of
December 2000. Soon after the gap move, the market had an inside day (marked by
the yellow #1). Following the pattern interpretation described in the Toolbox, traders
could seek to get short in the direction of the prevailing trend the following day by
placing a sell stop at a tick below the low of the inside day and a protective buy stop
at a tick above the high of the inside day. The trade would be filled that day, as the
market proceeded to trade lower throughout the day.
When
tick it comes
above to managing
the high the trade,
of the inside day forthethree
protective
days atbuy stoptime
which could
thebe maintained
trader at a
could re-
assess the trading situation. At that time, the trader may wish to take off part of the
trading position (if multiple contracts were used), adjust their protective buy stop
lower to protect some of their open profits or exit the position all together. It's
important to note, however, that with this type of setup, the trade is allowed to run for
three days before the trader seeks to exit with profits. Of course, the trade could be
stopped out at any time should the market reverse action. There is one caveat to this
"three day rule" - should the lower Bollinger Band be pointing at an angle that is 45
degrees or more - that is, a very steep angle, the trader might wait FIVE DAYS before
re-assessing the trade, moving up stops or taking profits. This is because the market
has entered
extended into aofpronounced
period time. trend move and may continue moving lower for an
The market continued to hug the lower Bollinger band for about two and a half weeks
before entering into a consolidation phase (signified by the yellow #2). The market
then experienced an Outside Day that closed higher. Given the sharp decline
experienced in the previous weeks, this could be used as the signal to exit the trade
and lock in profits.
496
http://slidepdf.com/reader/full/formule-metastock 496/554
8/6/2019 Formule - Metastock
Trade Setup #2
On the second day following the Outside Day that had prompted an exit from the first
trade setup, the market puts in another Inside Day (marked in yellow #3). Again, like
the first trade, a sell stop is placed one tick below the low of the Inside Day while a
protective buy stop is placed above the high of the Inside Day (note that we're only
looking to sell here, not buy, since the longer-term trend of the market is obviously
lower). We are filled on the final day and maintain our protective stop order at one
tick above the high of the Insiday Day for three days at which time we re-appraise the
situation (marked in yellow, #4). The trader could decide to exit the trade completely,
move their protective stop lower in order to lock in some profits or exit the position
partially.
Trade Setup #4
As the market rebounds from its latest downmove, it begins to approach the 20 period
moving average. As the market has been moving in a pronounced downtrend for the
past month, traders could look for this opportunity to get short the market as
oftentimes the price will approach the moving average but not penetrate, instead
continuing downward to the lower Bollinger band in a continuation of the downtrend.
497
http://slidepdf.com/reader/full/formule-metastock 497/554
8/6/2019 Formule - Metastock
At the point marked #5 in yellow, the market attempted to trade higher than the
moving average but failed to hit it, instead turning downward and forming an Outside
Day in the process. Traders could have gotten short at the low of the previous day in
anticipation of this reversal, placing a protective buy stop just above the high of the
day. As the market continued lower, the trader should wait for the third day to re-
appraise the trade: deciding either to move their stops, take partial profits or get out of
the trade all together. Note that since the lower Bollinger Band is NOT demonstrating
a sharp decline (in fact, it's pointing up a little bit), you would wait only THREE
DAYS and not FIVE DAYS to re-appraise the situation.
Trade Setup #4
At the point marked in yellow, #7, we have an Outside Day where the market opened
above the high of the previous day but then traded lower below the low fo the
previous day. This bearish formation should have been traded on the short side, with
the trade being entered at a tick below the low of the previous day with the protective
stop at the high of the Outside Day.
Unfortunately, two days after entering this trade, the market gapped higher, stopping
out the trade at a loss.
498
http://slidepdf.com/reader/full/formule-metastock 498/554
8/6/2019 Formule - Metastock
Trade Setup #5
At point #9 marked in yellow, the market puts in another Inside Day. Again, to
position ourselves, we place a buy stop above the high of the Insiday Day and a
protective sell stop below the low of the Inside Day. Because the market is trading
above the 20 day moving average (in blue), we are willing to take a buy signal
whereas earlier, when the market was trading below the 20 day moving average, we
would be more reluctant to do so.
The next is an Outside Day and the buy signal is taken while the sell stop is
maintained as a protective measure. The market trades higher over the next couple of
days.
up theAfter three days,
protective theexit
stop, or trader
the can re-assess
position whether to maintain the position, move
partially.
Many winning trading strategies rely on two technical indicators — one to determine a
market’s underlying trend and another to time a trade. The Powertool strategy is a good
example: It uses Joseph Stowell’s three-bar net line as the trend indicator and Dr. Alexander
Elder’s bull power/bear power as the timing indicator.
Together, the two indicators create synergy — i.e., a whole greater than the sum of its parts:
Trading with the three-bar net line is more precise when trades are timed with bull power/bear
power; and trading with bull power/bear power is more consistent when trades are taken in
the direction of the three-bar net line.
To draw a three-bar net line (see Figures 1 and 2, below) when price has been rising recently,
first find the highest high for the current upswing and label it bar 1. Next, look to the left and
499
http://slidepdf.com/reader/full/formule-metastock 499/554
8/6/2019 Formule - Metastock
find the most recent low that is lower than the low of bar 1 and label it bar 2. Finally, look left
again and find the most recent low that is lower than the low of bar 2 and label it bar 3. The
three-bar net line is a horizontal line extending right from bar 3’s low. The trend is up until
price closes below the current three-bar net line.
The process is inverted for drawing a three-bar net line when prices have been falling (see
Figures 1 and 3, below). Bar 1 is the lowest low of the downswing. Look to the left: The most
recent high that is higher than the high of bar 1 is bar 2. Look left again: The most recent high
that is higher than the high of bar two is bar 3. Now, draw the three-bar net line to the right
500
http://slidepdf.com/reader/full/formule-metastock 500/554
8/6/2019 Formule - Metastock
across the chart from the high of bar 3. The trend is down until price closes above the current
three-bar net line.
One note: Inside bars (those with lower highs and higher lows than the bars preceding them)
don’t count, so just skip over them.
Dr. Elder’s bull power measures the bulls’ ability to pull price higher; his bear power measures
the bears’ ability to push price lower.
Bull power is the current price bar’s high minus a 13-bar exponential moving average (EMA)
of closing prices. Bear power is the current price bar’s low minus the 13-bar EMA.
The logic behind bull power/bear power is that the price high represents the maximum power
of bulls, the price low represents the maximum power of bears, and the EMA represents, in
Dr. Elder’s words, the “average consensus of value.” The distance between the high and the
EMA defines bull power, while the distance between the low and the EMA defines bear power
(see Figure 4, below).
501
http://slidepdf.com/reader/full/formule-metastock 501/554
8/6/2019 Formule - Metastock
Bull power and bear power are plotted as separate histograms below a bar chart (see Figure
5, below).
In a neutral (sideways) market, bull power is usually above zero (i.e., the high is above the
EMA), and bear power is usually below zero (i.e., the low is below the EMA.) In an uptrend,
however, both bull and bear power are frequently above zero (the high and low are both
above the EMA). In a downtrend, both bull and bear power are frequently below zero (the
high and low are both below the EMA). Figure 5 illustrates this.
502
http://slidepdf.com/reader/full/formule-metastock 502/554
8/6/2019 Formule - Metastock
You probably won’t want to buy a market when price has already climbed so steeply that the
low is above the EMA, or sell it short when it has already declined so sharply that the high is
below the EMA.
Instead, when price is in an uptrend, wait for bear power to cross below zero (e.g., for the low
to fall below the EMA) to avoid buying when the market is overbought. Then wait for bear
power
declinetohas
ticklost
up its
(todownward
be greatermomentum.
than it was yesterday), which
With that setup in indicates the an
effect, place countertrend
order to buy
above the previous price bar’s high.
Similarly, in a downtrend, wait for bull power to cross above zero (e.g., for the high to rise
above the EMA) so you won’t be selling short when the market is oversold. Then wait for bull
power to tick down (to be less than it was yesterday), suggesting the countertrend rally has
run its course. With the setup in effect, place an order to sell short below the previous price
bar’s low.
Traders use oscillators such as rate-of-change (ROC), the relative strength index (RSI) and
stochastics to identify exhaustion points in a market. These indicators typically fluctuate
above and below a neutral axis (hence the name oscillator) as the market swings, with high
oscillator
conditions.values reflecting overbought conditions and low oscillator values reflecting oversold
Oscillators are most effective in trading ranges. If the range of values for an oscillator is
between zero and 100 (as is the case for the RSI), overbought is typically (i.e., for a default
14-bar indicator) defined as 70 or higher while oversold is 30 or lower. If the market is moving
sideways, these levels often correspond closely to swing highs and lows and provide
excellent trade points.
However, if the market is trending, the oscillator values will shift, reflecting the power of the
trend. During an uptrend, oscillator values are usually skewed to the upside and often never
reach oversold levels; similarly, during downtrends, oscillators are pushed to the downside
and may not reach their overbought levels. For example, in a strong downtrend, the
overbought level may be closer to 55 and the oversold level closer to 15
Figure 1 (below) is a daily chart with a five-day RSI. Notice that during the downtrend the RSI
values are persistently near the oversold level of 30 and never reach the overbought level of
70. Similarly, when the stock was trending up, the RSI never dropped to the oversold level of
30. Ultimately, had you been waiting for the oscillator to indicate an overbought reading in the
downtrend (which would have given a sell signal), or an oversold reading during the uptrend
(generating a buy signal), you would have missed out.
503
http://slidepdf.com/reader/full/formule-metastock 503/554
8/6/2019 Formule - Metastock
Despite these drawbacks, it is nevertheless apparent the RSI tended to behave in an orderly
manner relative to the trend. The shorter-term swings were still reflected in the RSI and there
were somewhat identifiable oversold-overbought ranges during the downtrend (approximately
20-45) and the uptrend (approximately 45-85); the range simply shifted up while Microsoft
was in the uptrend.
What is necessary
adapting is a toolsuch
to trend changes that will reflect
as the onerelative overbought
in Figure and oversold
1. The Stochastic levels by which
RSI (StochRSI),
was developed by Tushar Chande, combines elements of the stochastic oscillator and the
RSI to create an indicator that captures price turns more effectively in different market
conditions.
Formula for the system discussed in "Looking for a target," by Thomas Stridsman (p.
84):
LimitExit
StopExit == (LossExit
(ProfitExit//52++0.2)
0.5)// 100;
100;
If EntryTrigger = 1 and MarketPosition = 0 Then Begin
If High < High[2] and Close < Open and Open Next Bar < High Then Begin
Buy Next Bar at High Stop;
LongStop = 1 - StopExit;
LongTarget = 1 + LimitExit;
End;
If Low > Low[2] and Close > Open and Open Next Bar > Low Then Begin
Sell Next Bar at Low Stop;
ShortStop = 1 + StopExit;
ShortTarget = 1 - LimitExit;
End;
End;
If MarketPosition = 1 Then Begin
ExitLong Next Bar at EntryPrice * LongStop Stop;
ExitLong Next Bar at EntryPrice * LongTarget Limit;
End;
If MarketPosition = -1 Then Begin
ExitShort Next Bar at EntryPrice * ShortStop Stop;
ExitShort Next Bar at EntryPrice * ShortTarget Limit;
End;
If BarsSinceEntry = BarsInTrade+1 Then Begin
ExitLong Next Bar at Market;
ExitShort Next Bar at Market;
End;
NoTrades = TotalTrades;
MarPos = MarketPosition;
If NoTrades > NoTrades[1] Then Begin
If MarPos[1] = 1 Then
TrProfit = (ExitPrice(1) - EntryPrice(1)) * 100 / EntryPrice(1);
If MarPos[1] = -1 Then
TrProfit = (EntryPrice(1) - ExitPrice(1)) * 100 / EntryPrice(1);
SumTrProfit = SumTrProfit + TrProfit;
End;
504
http://slidepdf.com/reader/full/formule-metastock 504/554
8/6/2019 Formule - Metastock
{Trailing stop:}
ExitLong Tomorrow at Low Stop;
If MarketPosition
ExitLong Tomorrow <> at
0 and Open Tomorrow > High Then
Open;
{ Retracement bar:}
If High > High[1] and Close < Close[1] Then
SetExitOnClose;
Sum(RSI(5)-LLV(RSI(5),3),3)/Sum(HHV(RSI(5),3)-LLV(RSI(5),3),3)
(
N ONLINEAR E HLERS F ILTER
)
Type :
Indicator,
Name :
Nonlinear
Ehlers
Filter
Coef[count]
- Price[Count = AbsValue(Price[count]
+ 5]);
{The line above is all that needs to be
505
http://slidepdf.com/reader/full/formule-metastock 505/554
8/6/2019 Formule - Metastock
Plot1(Filt, "Ehlers");
506
http://slidepdf.com/reader/full/formule-metastock 506/554
8/6/2019 Formule - Metastock
This exemplary filter has 15 coefficients ["Length(15)"], although the array of coefficients is dimensio
experimentation using a longer filter. If you want a filter longer than 25, the dimension of the Coef arr
In the first calculation, you find each coefficient in the filter as the five-bar momentum. The next com
as the product of each coefficient and the price (the x's in the general equation) at each corresponding
alone. Finally, the filter is completed by taking the ratio of the numerator to the coefficient sum. The p
2 in the article.
If you'd rather use a spreadsheet, an example done in Microsoft Excel is shown in Figure 1.
FIGURE 1: EXCEL SPREADSHEET. Starting from the prices on the left, here is a way to compute a
momentum as the embedded filter.
--John Ehlers
The EasyLanguage for both the function and indicator will be available for download at www.tradesta
"EhlersFilter.ELS."
507
http://slidepdf.com/reader/full/formule-metastock 507/554
8/6/2019 Formule - Metastock
Znalezione na/w/od:
http://www.traders.com
N
EW MARKET PARADIGM SYSTEM
Home
New M
To implement the strategi
generate studies and syste
indicators, paintbars and s
standard deviation functio
Input: Price(NumericS
value1 = BollingerBan
value2 = BollingerBan
Condition1 = value1 <
-WD}
Condition2 = value1 >
Condition3 = Conditio
IF Condition1 then Ne
IF Condition2 then Ne
IF Condition3 then Ne
Input: Price(close),L
Vars: NmpC(0),NmpE(0)
{*1.}
If NewMarketParadigm(
508
http://slidepdf.com/reader/full/formule-metastock 508/554
8/6/2019 Formule - Metastock
use
{*2.}it. No Counter is
Condition1 = NmpE > 1
If Condition1 then be
Trigger = 1;
End;
{*3.}
If Trigger = 1 then b
Buy Highest(High,10)
Sell Lowest(Low,10) -
End;
509
http://slidepdf.com/reader/full/formule-metastock 509/554
8/6/2019 Formule - Metastock
The original
Setting CISfor
Defaults bow-tie
NM
Name: NMP SYSTEM
Stops: None
Properties: Check "Do n
Input: Price(close),L
value1 = StdDev(Price
If value1 = Lowest(va
If SlowD(Length) > 75
IncludeSystem: "Parab
End;
End;
Znalezione na/w/od:
http://www.traders.com
Home _____________________
B ETTER BOLLINGER B ANDS BY D ENNIS M C N
ICHOLL
{Denvelope Indicator}
inputs:
lookback(20),
mult(2);
510
http://slidepdf.com/reader/full/formule-metastock 510/554
8/6/2019 Formule - Metastock
vars:
alpha(0),
mt(0),
ut(0),
dt(0),
mt2(0),
ut2(0),
dt2(0),
but(0),
blt(0);
dt2 =
but = dt
((2+-mult
alpha) * mt2 - ut2) / (1 - alpha);
* dt2;
blt = dt - mult * dt2;
plot1(dt,"CenterB");
plot2(but,"UpperB");
plot3(blt,"LowerB");
511
http://slidepdf.com/reader/full/formule-metastock 511/554
8/6/2019 Formule - Metastock
Znalezione na/w/od:
http://www.empire-systems.com
Home ____________________________________________________________________________
K
LINGER V OLUME OSCILLATOR
Klinger
Volume
Oscillator
by
Stephen
Klinger
In "Identifying trends with volume analysis" in this issue, Stephen Kling
using volume. The TradeStation Traders' Tip this month is based on the
presented in the article. For TradeStation and SuperCharts, we'll call the
indicator can plot both the short-term and long-term versions of the osci
The indicator uses a total of four inputs: FastX determines the length of
moving average of the volume force; SlowX determines the length of th
moving averagethe
used to smooth of the
KVO volume force;
line; and Trigger
Smooth determines
determines thethe lengthofofsm
amount th
lines using a summation of the values. The Smooth input allows for the
for longer-term analysis. If the Smooth input is set to 1 or zero, no smoo
The process of developing this indicator begins with the creation of two
These two functions basically provide supporting calculations, which wi
be easily referenced from other custom studies. The two functions shoul
presented below, using their assigned names.
512
http://slidepdf.com/reader/full/formule-metastock 512/554
8/6/2019 Formule - Metastock
Trend = 1
Else
Trend = -1;
IF Trend = Trend[1] Then
CM = CM + Range
Else
CM = Range + Range[1];
IF CM <> 0 Then
VForce = Volume * AbsValue(2 * (DM/CM) -1) * Trend * 100;
Inputs:
FastX(Numeric),
SlowX(Numeric);
Vars:
FXAvg(0),
SXAvg(0);
Once the two functions have been created and verified, the indicator can
should be scaled to "screen."
Inputs:
FastX(34),
SlowX(55),
TrigLen(13),
Smooth(1);
Vars:
Trigger(0);
Plot2(Summation(Trigger,
End; Smooth), "KVO Trigger");
513
http://slidepdf.com/reader/full/formule-metastock 513/554
8/6/2019 Formule - Metastock
Plot3(0, "Zero");
IF Plot1 Crosses Above Plot2 OR Plot1 Crosses Below Plot2
Plot2 Crosses Above Plot3 OR Plot2 Crosses Below Plot3 The
Alert = True;
TPF_R EVERSAL 2002
Inputs: Sens(numeric);
514
http://slidepdf.com/reader/full/formule-metastock 514/554
8/6/2019 Formule - Metastock
If jfcbmb = 0 and d = currentdate and t = Sess1FirstBarTime then Value97 =
Text_New(CurrentDate,Sess1FirstBarTime,O, "STUDY HAS EXPIRED. Call
712.684.5239 for new password " );
end;
515
http://slidepdf.com/reader/full/formule-metastock 515/554
8/6/2019 Formule - Metastock
{E XHAUSTION
+++++++++++++++++++++++++++++++++++++++++++}
Input: L1(21),SU(1),SD(-1), L2(8);
Vars: PassFlag(0);
DefineDLLFunc: "JCB1Lock.dll",FLOAT,
"LTCalcRef",LPFloat,LPFloat,LPFloat,LPFloat,LPSTR;
DefineDLLFunc: "JCB1lock.dll", FLOAT, "LTCalcVal", FLOAT, FLOAT, FLOAT,
FLOAT, LPSTR;
DefineDLLFunc: "JCB1Lock.dll",INT,"LTInitializeFromIni";
If PassFlag = 0 and d = currentdate and t = Sess1FirstBarTime then Value97 =
Text_New(CurrentDate,Sess1FirstBarTime,O, "STUDY HAS EXPIRED. Call
712.684.5239 for new password " );
end;
{ E XHAUSTION 2
+++++++++++++++++++++++++++++++++++++++++++}
Input: L1(21),SU(1),SD(-1), L2(8);
Vars: LRV(0);
Vars: PassFlag(0);
DefineDLLFunc: "JCB1Lock.dll",FLOAT,
"LTCalcRef",LPFloat,LPFloat,LPFloat,LPFloat,LPSTR;
516
http://slidepdf.com/reader/full/formule-metastock 516/554
8/6/2019 Formule - Metastock
If PassFlag = 0 and d = currentdate and t = Sess1FirstBarTime then Value97 =
Text_New(CurrentDate,Sess1FirstBarTime,O, "STUDY HAS EXPIRED. Call
712.684.5239 for new password " );
LRV = LinearRegValue(C,L2,0);
If LRV[1] > BollingerBand(H,L1,SU) and LRV < LRV[1] then begin
Plot1(LRV[1],"EHigh");
end;
If LRV[1] < BollingerBand(L,L1,SD) and LRV > LRV[1] then begin
Plot2(LRV[1],"ELow");
end;
end;
{M
ARKET D IRECTION
}
DefineDLLFunc: "JCB1Lock.dll",FLOAT,
"LTCalcRef",LPFloat,LPFloat,LPFloat,LPFloat,LPSTR;
DefineDLLFunc: "JCB1lock.dll", FLOAT, "LTCalcVal", FLOAT, FLOAT, FLOAT,
FLOAT, LPSTR;
DefineDLLFunc: "JCB1Lock.dll",INT,"LTInitializeFromIni";
517
http://slidepdf.com/reader/full/formule-metastock 517/554
8/6/2019 Formule - Metastock
end;
end;
R EAL T IME P IVOT 2000
========================
}
Inputs: BB(numeric), SS(numeric);
Vars: rtp(0);
518
http://slidepdf.com/reader/full/formule-metastock 518/554
8/6/2019 Formule - Metastock
RealTimePivot2000 = rtp;
end ;
V OLATILITY STOP I NDICATOR
=========================
}
{
Programmed by Dr. John F. Clayburg
Registered Commodity Trading Advisor
Omega Research Solution Provider
Omega Research EasyLanguage Expert
29568 Hwy 141
Coon Rapids, Iowa 50058-7178
(712)
684-5239 Voice & Fax
Volatility Stop
Indicator}
Vars: PassFlag(0);
519
http://slidepdf.com/reader/full/formule-metastock 519/554
8/6/2019 Formule - Metastock
DefineDLLFunc: "JCB1Lock.dll",FLOAT,
"LTCalcRef",LPFloat,LPFloat,LPFloat,LPFloat,LPSTR;
DefineDLLFunc: "JCB1lock.dll", FLOAT, "LTCalcVal", FLOAT, FLOAT, FLOAT,
FLOAT, LPSTR;
DefineDLLFunc: "JCB1Lock.dll",INT,"LTInitializeFromIni";
If PassFlag = 0 and d = currentdate and t = Sess1FirstBarTime then Value97 =
Text_New(CurrentDate,Sess1FirstBarTime,O, "STUDY HAS EXPIRED. Call
712.684.5239 for new password " );
HClose = UNuHi;
LClose = DNuLo;
520
http://slidepdf.com/reader/full/formule-metastock 520/554
8/6/2019 Formule - Metastock
{Print("D",d,"T",t,"VUP",VolUp(21,4),"VDN",VolDn(21,4));}
{Print("D",d,"UP",up,"DN",dn,"UNuHi",Unuhi,"DNuLo",dnulo);}
If Up and UVL > 0 then Plot1(uvl,"UVL");
If Dn and DVL < 999999 then Plot2(dvl,"DVL");
C
LUSTER 20000
===============
}
Vars: PassFlag(0), LRV(0), BRT(false), SRT(false), BE(false), SE(false), BR(false),
SR(false),{ BB(12), SS(88),} BRS(5), sss(false), bbb(false);
Vars: BRTBar(0);
{********exhaustion indicator********}
521
http://slidepdf.com/reader/full/formule-metastock 521/554
8/6/2019 Formule - Metastock
LRV = LinearRegValue(C,L2,0);
REVERSAL INDICATOR
522
http://slidepdf.com/reader/full/formule-metastock 522/554
8/6/2019 Formule - Metastock
end;
If BBS and SE and SRT then sss = true else sss = false;
If cl = -1 and cl[1] = -1 then cl = 0;
If sss and sss[1] = false then cl = -1 ;
If BBC and BE and BRT then bbb = true else bbb = false;
If cl = 1 and cl[1] = 1 then cl = 0;
If bbb and bbb[1] = false then cl = 1 ; {plot1(L-plt,"BUY");}
cluster2000 = cl;
{
H I LO P IVOTS
}
{Programmed by Dr. John F. Clayburg
Omega Research Solution Provider
Omega Research EasyLanguage Expert
29568 Hwy 141
Coon Rapids, Iowa 50058-7178
(712) 684-5239 Voice & Fax
ehttp://elwood.pionet.net/~clayburg/
mail: clayburg@pionet.net }
Inputs: Strength(2);
DefineDLLFunc: "JCB1Lock.dll",INT,"LTInitializeFromIni";
Vars: PassFlag(0);
523
http://slidepdf.com/reader/full/formule-metastock 523/554
8/6/2019 Formule - Metastock
PassFlag = LTInitializeFromINI;
end;
If PassFlag = 0 and d = currentdate and t = Sess1FirstBarTime then Value97 =
Text_New(CurrentDate,Sess1FirstBarTime,O, "STUDY HAS EXPIRED. Call
712.684.5239 for new password " );
end;
end;
{
I
NTRADAY HI LO
===============
}
Inputs: Pts(3);
Vars: PassFlag(0);
DefineDLLFunc: "JCB1Lock.dll",FLOAT,
"LTCalcRef",LPFloat,LPFloat,LPFloat,LPFloat,LPSTR;
DefineDLLFunc: "JCB1lock.dll", FLOAT, "LTCalcVal", FLOAT, FLOAT, FLOAT,
FLOAT, LPSTR;
DefineDLLFunc: "JCB1Lock.dll",INT,"LTInitializeFromIni";
524
http://slidepdf.com/reader/full/formule-metastock 524/554
8/6/2019 Formule - Metastock
If PassFlag = 0 and d = currentdate and t = Sess1FirstBarTime then Value97 =
Text_New(CurrentDate,Sess1FirstBarTime,O, "STUDY HAS EXPIRED. Call
712.684.5239 for new password " );
end;
PB LONG
=======
}
DefineDLLFunc: "JCB1Lock.dll",FLOAT,
"LTCalcRef",LPFloat,LPFloat,LPFloat,LPFloat,LPSTR;
DefineDLLFunc: "JCB1lock.dll", FLOAT, "LTCalcVal", FLOAT, FLOAT, FLOAT,
FLOAT, LPSTR;
DefineDLLFunc: "JCB1Lock.dll",INT,"LTInitializeFromIni";
525
http://slidepdf.com/reader/full/formule-metastock 525/554
8/6/2019 Formule - Metastock
PassFlag = 0;
PassFlag = LTInitializeFromINI;
end;
If PassFlag = 0 and d = currentdate and t = Sess1FirstBarTime then Value97 =
Text_New(CurrentDate,Sess1FirstBarTime,O, "STUDY HAS EXPIRED. Call
712.684.5239 for new password " );
MultX = {X}5 ;
condition1 = TrDSavg > v2 and TrDFavg > v2 and (absvalue ( TrDFavg - TrDSavg )
<2);
condition2 = TrDSavg < ( 100 - v2) and TrDFavg < ( 100 - v2 ) and ( ( TrDFavg -
TrDSavg ) > 2 ) ;
if condition1 = true
or
or condition2
condition3 =
= true
true
then value8 = 10
else value8 = 0 ;
value99 = MACD(Close,{FastMA}5,{SlowMA}34) -
XAverage(MACD(Close,{FastMA}5,{SlowMA}34),{MacdMA}8);
value50 = slowk(21);
526
http://slidepdf.com/reader/full/formule-metastock 526/554
8/6/2019 Formule - Metastock
value51 = slowd(21);
condition11 = value50 > v2 and value51 > v2 and ( absvalue ( value50 - value51 ) < 2
);
condition12 = value51 < ( 100-v2 ) and value50 < ( 100 - v2 ) and ( ( value50 -
value51 ) > 2 );
if condition11 = true
or condition12 = true
or condition13 = true
then value18 = 10
else value18 = 0;
PB S HORT
=========
}
Vars:FastMA(5),SlowMA(34),MacdMA(8),Length(9),x(5),v2(85);
527
http://slidepdf.com/reader/full/formule-metastock 527/554
8/6/2019 Formule - Metastock
DefineDLLFunc: "JCB1Lock.dll",FLOAT,
"LTCalcRef",LPFloat,LPFloat,LPFloat,LPFloat,LPSTR;
DefineDLLFunc: "JCB1lock.dll", FLOAT, "LTCalcVal", FLOAT, FLOAT, FLOAT,
FLOAT, LPSTR;
DefineDLLFunc: "JCB1Lock.dll",INT,"LTInitializeFromIni";
If PassFlag = 0 and d = currentdate and t = Sess1FirstBarTime then Value97 =
Text_New(CurrentDate,Sess1FirstBarTime,O, "STUDY HAS EXPIRED. Call
712.684.5239 for new password " );
MultX = {X}5 ;
condition1
<2); = TrDSavg > v2 and TrDFavg > v2 and (absvalue ( TrDFavg - TrDSavg )
condition2 = TrDSavg < ( 100 - v2) and TrDFavg < ( 100 - v2 ) and ( ( TrDFavg -
TrDSavg ) > 2 ) ;
if condition1 = true
or condition2 = true
or condition3 = true
then value8
else = 10
value8 = 0 ;
528
http://slidepdf.com/reader/full/formule-metastock 528/554
8/6/2019 Formule - Metastock
value99 = MACD(Close,{FastMA}5,{SlowMA}34) -
XAverage(MACD(Close,{FastMA}5,{SlowMA}34),{MacdMA}8);
value50 = slowk(21);
value51 = slowd(21);
condition11 = value50 > v2 and value51 > v2 and ( absvalue ( value50 - value51 ) < 2
);
condition12 = value51 < ( 100-v2 ) and value50 < ( 100 - v2 ) and ( ( value50 -
value51 ) > 2 );
condition13 = value50 > ( 100 - v2 ) and ( value50 > value51 ) ;
if condition11 = true
or condition12 = true
or condition13 = true
then value18 = 10
else value18 = 0;
RUBBER B AND 2
============
}
529
http://slidepdf.com/reader/full/formule-metastock 529/554
8/6/2019 Formule - Metastock
If PassFlag = 0 and d = currentdate and t = Sess1FirstBarTime then Value97 =
Text_New(CurrentDate,Sess1FirstBarTime,O, "STUDY HAS EXPIRED. Call
712.684.5239 for new password " );
Plot1(XAverage(C,13),"Plot1");
Plot2(XAverage(C,21),"Plot2");
Plot3(XAverage(C,34),"Plot3");
Plot4(XAverage(C,55),"Plot4");
end;
SFD
===
}
Vars: PassFlag(0);
DefineDLLFunc: "JCB1Lock.dll",FLOAT,
"LTCalcRef",LPFloat,LPFloat,LPFloat,LPFloat,LPSTR;
DefineDLLFunc: "JCB1lock.dll", FLOAT, "LTCalcVal", FLOAT, FLOAT, FLOAT,
FLOAT, LPSTR;
DefineDLLFunc: "JCB1Lock.dll",INT,"LTInitializeFromIni";
530
http://slidepdf.com/reader/full/formule-metastock 530/554
8/6/2019 Formule - Metastock
{
SFK
===
}
{Vars: PassFlag(0);
DefineDLLFunc: "JCB1Lock.dll",FLOAT,
"LTCalcRef",LPFloat,LPFloat,LPFloat,LPFloat,LPSTR;
DefineDLLFunc: "JCB1lock.dll", FLOAT, "LTCalcVal", FLOAT, FLOAT, FLOAT,
FLOAT, LPSTR;
DefineDLLFunc: "JCB1Lock.dll",INT,"LTInitializeFromIni";
SSD
===
}
531
http://slidepdf.com/reader/full/formule-metastock 531/554
8/6/2019 Formule - Metastock
Vars: PassFlag(0);
DefineDLLFunc: "JCB1Lock.dll",FLOAT,
"LTCalcRef",LPFloat,LPFloat,LPFloat,LPFloat,LPSTR;
DefineDLLFunc: "JCB1lock.dll", FLOAT, "LTCalcVal", FLOAT, FLOAT, FLOAT,
FLOAT, LPSTR;
DefineDLLFunc: "JCB1Lock.dll",INT,"LTInitializeFromIni";
C
LUSTER VOLATILITY STOP – USES C
LUSTER 2000 AS A FUNCTION
=========================================
}
Input: Fac(3),
ATRLen(10),
Plt(.5);
532
http://slidepdf.com/reader/full/formule-metastock 532/554
8/6/2019 Formule - Metastock
PassFlag = LTInitializeFromINI;
end;
If PassFlag = 0 and d = currentdate and t = Sess1FirstBarTime then Value97 =
Text_New(CurrentDate,Sess1FirstBarTime,O, "STUDY HAS EXPIRED. Call
712.684.5239 for new password " );
}
If PassFlag = 1 and jfcbmb = 431 then begin
end;
If Lng then Plot1(MaxChand,"LongStop");
end;
533
http://slidepdf.com/reader/full/formule-metastock 533/554
8/6/2019 Formule - Metastock
C
LUSTER 2000
Vars: BRTBar(0);
If RealTimePivot2000(12,88) = 1 then begin
BRT = true;
BRTBar = barnumber;
end;
{********exhaustion indicator********}
534
http://slidepdf.com/reader/full/formule-metastock 534/554
8/6/2019 Formule - Metastock
REVERSAL INDICATOR
If BBS and SE and SRT then sss = true else sss = false;
If cl = -1 and cl[1] = -1 then cl = 0;
If sss and sss[1] = false then cl = -1 ;
If BBC and BE and BRT then bbb = true else bbb = false;
535
http://slidepdf.com/reader/full/formule-metastock 535/554
8/6/2019 Formule - Metastock
cluster2000 = cl;
C
ANDLESTICK P ATTERN R ECOGNITION
{*******************************************************************
Description : This Indicator plots CandleStick Patterns
Provided By : Omega Research, Inc. (c) Copyright 1999
MODIFIED BY BSS-- IE: HANGING MAN; also added gaps: up gap with blue dot;
down gap with magenta dot
********************************************************************}
536
http://slidepdf.com/reader/full/formule-metastock 536/554
8/6/2019 Formule - Metastock
End;
537
http://slidepdf.com/reader/full/formule-metastock 537/554
8/6/2019 Formule - Metastock
Condition2 = True;
End;
If CommentaryEnabled Then
String2 = ("DJ = Doji "+newline+"Ha = Hammer"+Newline+"HM =
HangingMan"+Newline+"SS = ShootingStar"+
Newline + "BeE= BearishEngulfing"+ Newline+ "BuE= BullishEngulfing"+
NewLine+ "DC = DarkCloud"+ Newline+
"MS = MorningStar"+ Newline+ "ES = EveningStar"+Newline+Newline);
538
http://slidepdf.com/reader/full/formule-metastock 538/554
8/6/2019 Formule - Metastock
If AtCommentaryBar Then
Commentary(String2);
End;
{gap up}
Condition5 = Low > High of 1 bar ago;
{gap down}
Condition6 = High < Low of 1 bar ago;
Inputs: PLOTINCR(1);
If condition5 then
plot3(low - PLOTINCR*MINMOVE POINTS, "Gap Up", yellow, default, 2);
If condition6 then
plot4(high + PLOTINCR*MINMOVE POINTS, "Gap down", yellow, default, 2);
=============================================================
===============
=========
{*******************************************************************
Description : This Function returns Dark Cloud
Provided By : Omega Research, Inc. (c) Copyright 1999
Added additional criteria per page 258 of Steve Nison's book "Beyond
Candlesticks"
********************************************************************}
Input: Length(Numeric);
Variables: LongBody(False), OCRange(0);
539
http://slidepdf.com/reader/full/formule-metastock 539/554
8/6/2019 Formule - Metastock
=============================================================
===============
========
{*******************************************************************
Description : This Function returns HangingMan
Provided By : Omega Research, Inc. (c) Copyright 1999
Added additional criteria per page 258 of Steve Nison's book "Beyond
Candlesticks"
********************************************************************}
If Condition1 and condition2 and Min[1] > MedianPrice[1] AND Open[1] <>
Close[1] Then Begin
If Min[1] - Low[1] > (Max[1] - Min[1]) * Tail AND High[1] - Max[1] <
Max[1] - Min[1]= Then
_HangingMan True;
End;
=============================================================
===============
========
{*******************************************************************
Description : This Function returns Shooting Star
Provided By : Omega Research, Inc. (c) Copyright 1999
540
http://slidepdf.com/reader/full/formule-metastock 540/554
8/6/2019 Formule - Metastock
_Shootingstar = false;
=============================================================
===============
========
{ *******************************************************************
Description : This Function returns Bearish Engulfing
Provided By : Omega Research, Inc. (c) Copyright 1999
Inputs: Length(Numeric);
=============================================================
===============
=========
{*******************************************************************
Description : This Function returns Bullish Engulfing
Provided By : Omega Research, Inc. (c) Copyright 1999
541
http://slidepdf.com/reader/full/formule-metastock 541/554
8/6/2019 Formule - Metastock
Inputs: Length(Numeric);
AND Close[1] < Open[1] AND Close > Open[1] AND Open < Close[1] Then
_BullishEngulfing = True
Else
_BullishEngulfing = False;
=============================================================
===============
========
{*******************************************************************
Description : This Function returns Evening Star
Provided By : Omega Research, Inc. (c) Copyright 1999
Added additional criteria per page 258 of Steve Nison's book "Beyond
Candlesticks"
********************************************************************}
Inputs: Length(Numeric);
Variables: LongBody(False), OCRange(0), Hollow(False), Filled(False),
Shortbody(false);
OCRange = AbsValue(Open-Close);
LongBody = OCRange > Average(OCRange,Length);
ShortBody = OCRange < Average(OCRange, Length);
_EveningStar = False;
=============================================================
542
http://slidepdf.com/reader/full/formule-metastock 542/554
8/6/2019 Formule - Metastock
===============
=========
{ *******************************************************************
Description : This Function returns Hammer
Provided By : Omega Research, Inc. (c) Copyright 1999
********************************************************************}
=============================================================
===============
=========
{*******************************************************************
Description : This Function returns Doji
Provided By : Omega Research, Inc. (c) Copyright 1999
********************************************************************}
Inputs: Tolernce(Numeric);
{*******************************************************************
Description : This Function returns the MorningStar pattern
Provided By : Omega Research, Inc. (c) Copyright 1999
********************************************************************}
Inputs: Length(Numeric);
543
http://slidepdf.com/reader/full/formule-metastock 543/554
8/6/2019 Formule - Metastock
OCRange = AbsValue(Open-Close);
LongBody = OCRange > Average(OCRange,Length)MorningStar = False;
John
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
++++++
+++++
{ *******************************************************************
544
http://slidepdf.com/reader/full/formule-metastock 544/554
8/6/2019 Formule - Metastock
Description :
Variation of the function from the June 2000 edition of S&C
Magazine,Bryan Strain, Author.
********************************************************************}
Vars: VolOsc(0);
If Close > Open then
VolOsc = Volume;
T ETHER L INE
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+++++
{ *******************************************************************
545
http://slidepdf.com/reader/full/formule-metastock 545/554
8/6/2019 Formule - Metastock
Description :
This function is from the June 2000 edition of S&C Magazine.
********************************************************************}
Plot1((Highest(High, 50) + Lowest(Low, 50)) / 2);
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
++++++
++
V OLUME OSCILLATOR
{ *******************************************************************
Description :
This function is from the June 2000 edition of S&C Magazine.
********************************************************************}
Vars: VolOsc(0);
DOUBLE STOCHASTIC
Hello Spot,
try of %R of %R
546
http://slidepdf.com/reader/full/formule-metastock 546/554
8/6/2019 Formule - Metastock
Indicator:
>
> Inputs: DStLen(21),SellLine(80),BuyLine(20),Smooth(3);
>
> Vars: DStoc(0);
>
> {DStoc}
> DStoc=_DStoc(DStLen);
>
>
> {Plots}
> Plot1(DStoc,"DStoc");
> Plot2(SellLine,"Upper");
> Plot3(BuyLine,"Lower");
> Plot4(average(DStoc,Smooth),"Smooth");
>
> **************************************************
> Function:
>
> {_DStoc: Double Stochastic}
>
> Inputs: DStLen(NumericSimple);
>
> Vars: Num(0),Denom(0),Ratio(0),PctK(0),DNum(0),DDenom(0),
> DRatio(0),DPctK(0);
>
> {Stoc}
> Num=C-_Lst(L,DStLen);
> Denom=_Hst(H,DStLen)-_Lst(L,DStLen);
> Ratio=IFF(Denom>0,(Num/Denom)*100,Ratio[1]);
> PctK=IFF(CurrentBar=1,Ratio,PctK[1]+(.5*(Ratio-PctK[1])));
>
> {DStoc}
> DNum=PctK-_Lst(PctK,DStLen);
> DDenom=_Hst(PctK,DStLen)-_Lst(PctK,DStLen);
> DRatio=IFF(DDenom>0,(DNum/DDenom)*100,DRatio[1]);
> DPctK=IFF(CurrentBar=1,DRatio,DPctK[1]+(.5*(DRatio-DPctK[1])));
>
> _DStoc=DPctK;
>
Hi List:
547
http://slidepdf.com/reader/full/formule-metastock 547/554
8/6/2019 Formule - Metastock
The below code has been extremely helpful for us in data collection. It
was provided to us FREELY by Rina Systems, and should be noted as such. We
use it with their PortfolioStream software and both come highly recommended.
The purpose of this TradeStation Strategy code is to create text files with
each data bar on the chart stored in it. When applied to a TS6.0 chart,
you will then create a txt file at the OutputPath input location. These
text files can then be accessed by 2000i by creating a new 3rd party
Directory Symbol list, which allows for us to continue our offline testing
on secondary computers.
Any suggestions for using other software that stores more intradata data?
Esignal has 60 days, and i heard MetaStock stores more but not sure how
much.
Looking for around 5 years of intraday stock data for testing.
David
Inputs:
StartDTE(701210),EndDTE(1011231),OutputPath("C:\Data\"),FileExtension(".txt"
),UseDateRange(false),HeaderAndFooter(false),IncludeVOI(false),DecimalPlaces
548
http://slidepdf.com/reader/full/formule-metastock 548/554
8/6/2019 Formule - Metastock
(8);
if UseDateRange = true then {Set Condition1 if you are using the date range}
begin;
Condition1 = date >= StartDTE and date <= EndDTE; {set Condition 1 to
export only inclusively between the two input dates}
end;
if UseDateRange = false then {Set Condition1 if you are not using the date
range}
begin;
Condition1 = open > 0; {Export all price data}
end;
ifPadTime
time < 0010 then {Pad thenumtostr(0,0)+numtostr(0,0)+numtostr(time,0);
= numtostr(0,0)+ Time with zeros as needed}
if time > 0009 and time < 0100 then
PadTime = numtostr(0,0)+numtostr(0,0)+numtostr(time,0);
if time > 0059 and time < 1000 then
PadTime = numtostr(0,0)+numtostr(time,0);
if time > 0959 then
Padtime = numtostr(time,0);
549
http://slidepdf.com/reader/full/formule-metastock 549/554
8/6/2019 Formule - Metastock
PadMonth = numtostr(0,0)+numtostr(month(date),0);
if month(date) > 9 then
PadMonth = numtostr(month(date),0);
if year(date) < 100 then {Pad the Year with zeros as needed}
PadYear = numtostr(19,0)+numtostr(year(date),0);
if year(date) > 99 then
PadYear = numtostr(200,0)+numtostr(year(date)-100,0); {takes care of the
non y2k compliancy problem with EasyLanguage}
{Last but not least the printing. 8 decimal places should be sufficient
for most markets.
The file outputs to the specified OutputPath input.
The format in the comma delimited output file is as follows:
Date, Time, Open, High, Low, Close}
{End Condition1}
end;
550
http://slidepdf.com/reader/full/formule-metastock 550/554
8/6/2019 Formule - Metastock
W ILL S PREAD
John,
Here is a version of the WillSpread indicator that you can cut and paste:
The points make it easier to see the crossovers of the L/Tmoving average.
Regards,
Barry Silberman
==================================================
{Will-Spread per Larry Williams pages 138 - 141 of book "Long-Term Secrets
to Short-Term Trading}
{Barry Silberman interpretation}
{plots 1 and 2 should be lines. Plots 3 and 4 should be points}
MAMA FAMA
+++++++++++++++++++++++++++++++++++
551
http://slidepdf.com/reader/full/formule-metastock 551/554
8/6/2019 Formule - Metastock
Smooth(0),
Detrender(0),
I1(0),
Q1(0),
jI(0),
jQ(0),
I2(0),
Q2(0),
Re(0),
Im(0),
Period(0),
SmoothPeriod(0),
Phase(0),
DeltaPhase(0),
alpha(0),
MAMA(0),
FAMA(0);
If CurrentBar>5 then begin
Smooth=(4*Price+3*Price[1]+2*Price[2]+Price[3])/10;
Detrender=(0.0962*Smooth+0.5769*Smooth[2]-0.5769*
Smooth[4]-0.0962*Smooth[6])*(0.075*Period[1]+0.54);
{Compute InPhase and Quadrature components}
Q1=(0.0962*Detrender+0.5769*Detrender[2]-0.5769*
Detrender[4]-0.0962*Detrender[6])*(0.075*Period[1]+0.54);
I1=Detrender[3];
{Advance the phase of I1 and Q1 by 90 degrees}
jI=(0.0962*I1+0.5769*I1[2]-0.5769*I1[4]-0.0962*I1[6])*(0.075*Period[1]+0.54)
;
jQ=(0.0962*Q1+0.5769*Q1[2]-0.5769*Q1[4]-0.0962*Q1[6])*(0.075*Period[1]+0.54)
;
{Phasor addition for 3-bar averaging}
I2=I1-jQ;
Q2=Q1+jI;
{Smooth the I and Q components before applying the discriminator}
I2=0.2*I2+0.8*I2[1];
Q2=0.2*Q2+0.8*Q2[1];
{Homodyne Discriminator}
Re=I2*I2[1]+Q2*Q2[1];
Im=I2*Q2[1]-Q2*I2[1];
Re=0.2*Re+0.8*Re[1];
Im=0.2*Im+0.8*Im[1];
If Im<>0 and Re<>0 then Period=360/ArcTangent(Im/Re);
If Period>1.5*Period[1] then Period=1.5*Period[1];
If Period<0.67*Period[1] then Period=0.67*Period[1];
If Period<6 then Period=6;
If Period>50 then Period=50;
Period=0.2*Period+0.8*Period[1];
SmoothPeriod=0.33*Period+0.67*SmoothPeriod[1];
If I1<>0 then Phase=(ArcTangent(Q1/I1));
DeltaPhase=Phase[1]-Phase;
If DeltaPhase<1 then DeltaPhase=1;
552
http://slidepdf.com/reader/full/formule-metastock 552/554
8/6/2019 Formule - Metastock
alpha=FastLimit/DeltaPhase;
If alpha<SlowLimit then alpha=SlowLimit;
If alpha>FastLimit then alpha=FastLimit;
MAMA=alpha*Price+(1-alpha)*MAMA[1];
FAMA=0.5*alpha*MAMA+(1-0.5*alpha)*FAMA[1];
Plot1(MAMA,"MAMA");
Plot2(FAMA,"FAMA");
End;
+++++++++++++++++++++++++++++++++++
ACTIVE INVESTING
!**********************
!SuperCharts Code:
!**********************
!((6.854*LinearRegValue(close,13,0))+(4.236*LinearRegValue(LinearRegV
alue(close,13,0),11,0))+(2.618*
!LinearRegValue(LinearRegValue(LinearRegValue(close,13,0),11,0),7,0))
+(1.618*LinearRegValue(LinearR
!egValue(LinearRegValue(LinearRegValue(close,13,0),11,0),7,0),5,0)) +
!(1*LinearRegValue(LinearRegValue(LinearRegValue(LinearRegValue(Linea
rRegValue(close,13,0),11,0),7
!,0),5,0),3,0)) )/16.326,2)
!********************************************************************
*****************************
!Range Indicator for Alan Hull's Active Investing Channel System:
553
http://slidepdf.com/reader/full/formule-metastock 553/554
8/6/2019 Formule - Metastock
http://slidepdf.com/reader/full/formule-metastock 554/554