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
(Go
Top) |
Use of Tema PV Binary Wave and Tema QStick Formulas in
MetaStock, from "JimG"
There are really two different ways to use these formulas.
Since the Binary Wave is a smoothed addition of several
technical indicators that each give +1 when bullish, 0 when
neutral and -1 when negative, it makes sense that a positive
number is bullish and rising numbers are bullish. Similarly
negative numbers and falling numbers are bearish.
The QStick is really a candlestick type indicator, but can be
read as bullish or bearish in same way as the Binary Wave.
The two traditional ways to play them are to buy on a rise
from a negative peak and sell on a fall from a positive peak, or
to buy on a zero cross over to the upside and sell on a zero
crossover to the downside. Of course you can optimize and find
various buy and sell levels as long as you understand what is
bearish and what is bullish.
My own MetaStock system tests alerts on the BW crossing a
moving average of itself and buys or sells on a confirmation of
Qstick turning positive or negative respectively. Having said
that, I don't make my buy an sell decisions from the indicators
or the system test. I do use the system test as an initial
screen and use a buy signal as a flag to move the stock to my
watch list. I make all buying and selling decisions based on the
trend channels. Over the years, I've found that works best for
me.
(Go
Top) |
in MetaStock, from "JimG"
There are really two different ways to use these formulas. Since
the Binary Wave is a smoothed addition of several technical
indicators that each give +1 when bullish, 0 when neutral and -1
when negative, it makes sense that a positive number is bullish
and rising numbers are bullish. Similarly negative numbers and
falling numbers are bearish.
The QStick is really a candlestick type indicator, but can be
read as bullish or bearish in same way as the Binary Wave.
The two traditional ways to play them are to buy on a rise from
a negative peak and sell on a fall from a positive peak, or to
buy on a zero cross over to the upside and sell on a zero
crossover to the downside. Of course you can optimize and find
various buy and sell levels as long as you understand what is
bearish and what is bullish.
My own MetaStock system tests alerts on the BW crossing a moving
average of itself and buys or sells on a confirmation of Qstick
turning positive or negative respectively. Having said that, I
don't make my buy an sell decisions from the indicators or the
system test. I do use the system test as an initial screen and
use a buy signal as a flag to move the stock to my watch list. I
make all buying and selling decisions based on the trend
channels. Over the years, I've found that works best for me.
The HIGHER CLOSES MetaStock exploration should be entered as
follows:
colA CLOSE
colB ref(C,-1)
colC ref(C,-2)
filter colA > colB AND colB > colC
{General Purpose Intermediate Term MACD Indicator}
( Mov( C,13,E ) - Mov( C,34,E ) ) - Mov( ( Mov( C,13,E ) - Mov(
C,34,E ) ),89,E )
{General Purpose Short Term MACD Indicator}
( Mov( C,8,E ) - Mov( C,17,E ) ) - Mov( ( Mov( C,8,E ) - Mov(
C,17,E ) ),9,E )
(Go
Top) |
I use is Tema smoothed and I subtract 0.5 so I can plot it as
a histogram. It's:}
Periods := Input("Enter Tema Smoothing Periods",5,233,13);
Tema(((RSI(Periods) - LLV(RSI(Periods),Periods)) /
((0.0001+HHV(RSI(Periods),Periods)) -
LLV(RSI(Periods),Periods))) -0.5,Periods)
(Go
Top) |
Inside days suggest a volatility compression and often
preceede strong breakouts. Search returns 1 for ok and 0 for not
ok
- Inside()
- Inside()-1
- Inside()-2
(Go
Top) |
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;
(Go
Top) |
TTT--TREND TRAILING Indicator -- Andrew Abraham
Could have been called:
- STOP LOSS Indicator
- SUPPORT & RESISTANCE Indicator
- DYNAMIC SUPPORT & RESISTANCE Indicator
- BUY/SELL TRIGGER Indicator
- INVESTORS DREAM Indicator
- TRADING Indicator
fml("VOLAInd"): Mov(ATR(21),1,W)*3;
If(C>Ref(C,-21) AND C>fml("VOLAInd"),
HHV(H,21)-Ref(fml("VOLAInd"),-1),
Ref(fml("VOLAInd"),-1)+LLV(L,21))
.or.
VOLAInd :=Mov(ATR(21),1,W)*3;
If(C>Ref(C,-21) AND C>VOLAInd, HHV(H,21)-Ref(VOLAInd,-1),
Ref(VOLAInd,-1)+LLV(L,21))
{CHANGE BAR COLORS: double click on the price plot in the chart,
from the Color/Style page click the UP drop-list and choose
darkblue for upwards, and red for downward price changes}
(Go
Top) |
Trading the Trend (TTT) -- by Andrew Abraham, TASC Magazine
9/1998, was about one form of stoploss exit: subtract some
manipulation of the true range from the highest high (or add it
to the lowest low) and exit when the close crosses that.
(Members of Chuck LeBeau's Traders Club will recognise the
"Chandelier Exit".)
THE CHANDELIER EXIT: The exit stop is placed at a multiple of
average true ranges from the highest high or highest close since
the entry of the trade. As the highs get higher the stop moves
up but it never moves downward.
In MS 6.5 as a variable or custom indicator : DaysinTrade:=
Barssince(previous composite entry criteria = 1)
THE YO YO EXIT: This exit is very similar to the Chandelier Exit
except that the ATR stop is always pegged to the most recent
close instead of the highest high. Since the closes move higher
and lower, the stop also moves up and down (hence the Yo Yo
name).
Name: Trading the Trend
Pds:=21;
Mult:=3;
TruRan:=Mov(ATR(1),Pds,W)*Mult;
HiLimit:=HHV(H,Pds)-TruRan;
LoLimit:=LLV(L,Pds)+TruRan;
If(C>HiLimit,HiLimit,LoLimit)
- After closing the Indicator Builder click on the Expert
Advisor (the guy in the bowler/derby hat).
- Click on New, then the Name tab, type in Trading the
Trend.
- 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,
- 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.
- If you have a chart open that you want to use this on,
click Attach, otherwise click Close. In the latter case,
when you open a chart and plot the trendline, click on the
Expert Advisor, select Trading the Trend, and click on
Attach.
I've given the Expert steps in detail for any who may not be
familiar with its use. To experiment with variations in the
lookback periods and the multiplier you can do so in either the
Indicator Builder, or right-click the indicator on the chart,
select Properties, then the Formula tab, and make the changes
(e.g. try a lookback period of 10, and a multiplier of 2.5). As
implemented above, the Expert should change accordingly. This
shows the trade-offs that have to be made
between near and distant stops. This is too rudimentary to be
traded as a system - the whipsaws would chop you to pieces - but
the exits should help to limit drawdowns.
A very similar stoploss is given in Chande & Kroll "The New
Technical Trader", pp.167 - 169, "Volatility-Based Trailing
Stops". My preference is to plot both the high and the low exit
lines in contrasting colours, dispensing with the switch between
them, and dispensing with the Expert. If anyone wants help with
the code, just say so.
Assuming you entered everything exactly in both the Indicator
Builder and the Expert Advisor, one question comes to mind. Did
you decide to adapt the formula to MS v.6.5 and use an Input
function for Pds and Mult? It seems like a logical thing to do,
and in fact I coded it that way at first. The problem is that
the Expert Advisor always reverts to the default value (the
System Tester does the same thing).
Thus if you used something like:
Pds:=Input("Lookback Periods?",1,1000,20)
and then when you applied it you changed the periods to 15, the
Expert Advisor will still read 20. I hard-coded the Pds and Mult
parameters for that reason.
(Go
Top) |
If(cum(1)=1,
{then} Close,
{else} If((C*1.1) <= PREV,
{then}(C*1.1),
{else} PREV));
{from Adam Hefner}
{Regarding the Recursive Moving Trendline System, I ended up
making an oscillator out of it (subtracting the ema from the
rta). If you wish to try "tuning" it in MetaStock, you could try
different entry levels from the oscillator. For example, go long
when TOSC crosses from below -2, or go short when TOSC crosses
from above +2. }
{TOSC}
Lb:=Input("Look-Back Period?",3,100,21);
Ty:=Input("1=C 2=H 3=L 4= Median Price",1,4,1);
Tv:=If(Ty=1,C,If(Ty=2,H,If(Ty=3,L,MP())));
Alpha:=2/(LB+1);
Bot:=(1-Alpha)*(If(Cum(1)<Lb,Tv,PREV))+Tv;
RMTA:=(1-Alpha)*(If(Cum(1)<Lb,Tv,PREV))+
(Alpha*(Tv+Bot-Ref(Bot,-1)));
TOSC:=RMTA-Mov(Tv,lb,E);
TOSC;
{NOTE: this code will work slowly because of all of the "PREV"
functions. from Adam Hefner.}
{Single 60 Day Period BreakOut Signal Indicator}
ACol:= C;
BCol:= Ref(HHV(H,59), -1);
CCol:= HHV(H,60);
SSDPBOS:= (ACol>BCol) AND (Ref(C,-1)<BCol) AND
(H=CCol);
SSDPBOS
(Go
Top) |
Mov(C,2,S)>
Mov(Mov(C,2,S),2,S) AND
Mov(Mov(C,2,S),2,S)>
Mov(Mov(Mov(C,2,S),2,S),2,S) AND
Mov(Mov(Mov(C,2,S),2,S),2,S)>
Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S) AND
Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S)>
Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S) AND
Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S)>
Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S) AND
Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S)>
Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S)
AND
Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S)>
Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S)
AND
Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S)>
Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S)
AND
Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S)>
Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S)
(Go
Top) |
TR = (H - L + Abs(H - Ref(C,-1)) + Abs(L - Ref(C,-1)) )/2
(Go
Top) |
{Appeared in the January 1993 issue of Stocks & Commodities
magazine}
100 * ( Mov( Mov( ROC(C,1,$),25,E),13,E) / Mov( Mov(
Abs(ROC(C,1,$)),25,E),13,E))
(Go
Top) |
Enter long:
Cross(opt1,((CLOSE-Ref(TSF(C,opt3),-1))/CLOSE*100))
Close long:
Cross(((CLOSE-Ref(TSF(C,opt3),-1))/CLOSE*100),opt2)
Enter short:
Cross(((CLOSE-Ref(TSF(C,opt3),-1))/CLOSE*100),opt2)
Close short:
Cross(opt1,((CLOSE-Ref(TSF(C,opt3),-1))/CLOSE*100))
opt 1: zero to -2 (with .1 step)
opt 2: zero to +2 (with .1 step)
opt 3: 2 to 8 (with 1 step)
{I use this for futures and the above parameters (optimized
settings) keep it in the ballpark. If you are applying it to
equities (or commodities), it always makes sense to look at the
indicator and understand the outside parameters for each of its
"steps". It makes no sense to limit your outside limits to -2
and +2 if the TSF oscillates between -8 and +8. So do a little
homework on the "outside" limits of the indicator and then
optimize accordingly. from Steve Karnish.}
(Go
Top) |
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)
(Go
Top) |
The formulas and steps necessary to do the
New Advance -Decline Line from the September 1994 Technical
Analysis of Stocks & Commodities, page 14 by Daniel Downing
are:
Taken from Stocks & Commodities, V. 12:9
(363-365): A New Advance-Decline Line by Daniel E. Downing
"Here's a trading tool that uses a unique
version of the daily advance-decline line of the New York Stock
Exchange (NYSE). This version helps in our short- and long-term
trading of index options and stock index futures. It gives many
good short-term trading signals and excellent but infrequent
longer-term signals…
The philosophy behind this tool is that the
short-term trader's capital is finite and that traders have to
reliquify their holdings after a period. Traders can buy and try
to push the equities higher only so many times before they need
to reliquify, just as only a finite amount of selling waves can
take place before the sellers are out of supplies. A tool that
points to when short-term traders need to reliquify their
positions will also spot when the markets will soon reverse
their trends."
For the Windows versions of
MetaStock:
Cum( If( P ,>= ,1000 ,If(C ,< ,1000 , + 1 ,0
) ,If( C ,>= ,1000 ,-1 ,0 ) ) )
(Go
Top) |
In his article "Using The Tick In A
Short-Term Indicator", in the January 94 issue of TASC,
Daniel E. Downing presents the Tick Line Momentum Oscillator.
Taken from Stocks & Commodities, V. 12:1
(42-44): Using The Tick In A Short-Term Indicator by Daniel E.
Downing
"The tick index, the net difference of the
numbers of stocks last traded on an uptick from those last
traded on a downtick , is a well-known indicator, but it's got a
problem. The raw number result is volatile, perhaps too volatile
for some. What to do? here, then, is a way to smooth out the
noise to identify short-term trading opportunities.
The tick is a basic unit for the markets,
watched with fascination during periods of turmoil and periods
of enthusiasm. It is quoted throughout the day on most quote
services. In addition, the closing tick value can be found on
the market statistics pages of financial newspapers such as
Barron's and The Wall Street Journal. Let me present, then, the
tick line momentum oscillator, which is based on the closing
value for the New York Stock Exchange (NYSE) tick indicator. The
oscillator has been shown to have a good track record of
determining when the NYSE is overbought or oversold on a
short-term basis. The formula for the tick line momentum
oscillator is simple and can be easily calculated without a
computer, although a spreadsheet version can be found in the
sidebar, "Tick line momentum." Finally, the oscillator is
straightforward and simple to apply."
The MetaStock formula for the Tick Line
Momentum Oscillator is:
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 )
(Go
Top) |
The Trading Channel Index comes from an early
version of AIQ's Stock Expert program. "The Trading Channel
Index measures the location of average daily price relative to a
smoothed average of average daily price. It is derived from the
average difference between these two values."
To create the Trading Channel Index in
MetaStock create the following custom formula's:
AP+: Average price
( H + L + C ) / 3
ESA+: Smoothed price average
Mov( Fml( "AP+" ) ,10 ,E ) + ( Mov( Ref( Fml( "AP+" ) ,-1 ) ,10
,E ) )
D+: Price range estimate
Mov( ( Fml( "AP+" ) - Fml( "ESA+" ) ) ,10 ,E ) + ( Mov( Ref(
Fml( "AP+" ) - Fml( "ESA+" ) ,-1 ) ,10 ,E ) )
CI+: Channel index
( ( Fml( "AP+" ) - Fml( "ESA+" ) ) / ( 0.015 * Fml( "D+" ) ) )
TRADING CHANEL INDEX:
Mov( Fml( "CI+" ) ,21 ,E ) + ( Mov( Ref( Fml( "CI+" ) ,-1 ) ,21
,E ) )
(Go
Top) |
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 thedrop down list.
(Go
Top) |
A:=Mov(Abs(C-Ref(C,-1)),10,S);
TPH1:=C+A;
TPH2:=C+(2*A);
TPL1:=C-A;
TPL2:=C-(2*A);
TPH1;
TPH2;
TPL1;
TPL2;
(Go
Top) |
K:=Stdev(C,5)/Mov(Stdev(C,5),20,S);
SC:=0.9;
Vidya:=SC*K*C+(1-SC*K)*Ref(C,-1);
UpperBand:=Vidya+2*.5*K;
LowerBand:=Vidya-2*.5*K;
UpperBand;
LowerBand;
Vidya;
(Go
Top) |
{ Dr Alexander Elder's SafeZone trailing stop v2 }{ Triggers:
Long (+1) & Short (-1) signals at crossover of user-defined
trailing stops }{ ©Copyright 2003 Jose Silva }{
josesilva22@yahoo.com }
coefficient:=Input("SafeZone coefficient",
0,10,2.5);
bkpds:=Input("Lookback periods",1,252,10);
pds:=Input("Trend EMA periods",2,252,21);
adv:=Input("plot: today's SafeZone=0, tomorrow's
stop=1",0,1,0);
plot:=Input("plot: trailing stop=1, Long+Short=2,
signals=3",1,3,1);
delay:=Input("Entry and Exit signal delay",
0,5,0);
DwSidePen:=Mov(C,pds,E)>Ref(Mov(C,pds,E),-1)
AND L<Ref(L,-1);
DwSideDiff:=If(DwSidePen,Ref(L,-1)-L,0);
DwPenAvg:=Sum(DwSideDiff,bkpds)
/(Sum(DwSidePen,bkpds)+.000001);
StLong:=Ref(L-DwPenAvg*coefficient,-1);
StopLong:=If(C<PREV,StLong,Max(StLong,PREV));
UpSidePen:=Mov(C,pds,E)<Ref(Mov(C,pds,E),-1)
AND H>Ref(H,-1);
UpSideDiff:=If(UpSidePen,H-Ref(H,-1),0);
UpPenAvg:=Sum(UpSideDiff,bkpds)
/(Sum(UpSidePen,bkpds)+.000001);
StShort:=Ref(H+UpPenAvg*coefficient,-1);
StopShort:=If(C>PREV,StShort,Min(StShort,PREV));
In:=Cross(C,Ref(StopShort,-1));
Out:=Cross(Ref(StopLong,-1),C);
flag:=BarsSince(Cum(In+Out>-1)=1 OR In)
< BarsSince(Cum(In+Out>-1)=1 OR Out)
+(Cum(In)=1);
signals:=Ref((Cum(In)=1
AND Alert((Cum(In)=1)=0,2)
OR flag AND Alert(flag=0,2))
-(flag=0 AND Alert(flag,2)),-delay);
If(plot=1,Ref(If(flag=1,stopLong,stopShort),
-1+adv),If(plot=2,Ref(stopLong,-1+adv),0));
If(plot=1,Ref(If(flag=1,stopLong,stopShort),
-1+adv),If(plot=2,Ref(stopShort,-1+adv),
signals))
(Go
Top) |
{ Triggers: Long (+1) & Short (-1) signals at crossover of
user-defined trailing stops }{ x23 slower than TradeSim's
version }{ ©Copyright 2003-2004 Jose Silva }{
josesilva22@yahoo.com }
buffer:=Input("buffer % trailing stop",0,100,8);
plot:=Input("plot: trailing stop=1, Long+Short=2,
signals=3",1,3,1);
adv:=Input("plot: today's trailing stop=0, tomorrow's
stop=1",0,1,0);
delay:=Input("Entry and Exit signal delay",
0,5,0);
StLong:=C-C*buffer/100;
StShort:=C+C*buffer/100;
stopLong:=If(C<PREV,StLong,Max(StLong,PREV));
stopShort:=If(C>PREV,StShort,Min(StShort,PREV));
In:=Cross(C,Ref(stopShort,-1));
Out:=Cross(Ref(stopLong,-1),C);
Init:=Cum(In+Out>-1)=1;
InInit:=Cum(In)=1;
flag:=BarsSince(Init OR In)
< BarsSince(Init OR Out)+InInit;
signals:=Ref((InInit AND Alert(InInit=0,2)
OR flag AND Alert(flag=0,2))
-(flag=0 AND Alert(flag,2)),-delay);
stop:=Ref(If(flag=1,stopLong,stopShort),-1+adv);
If(plot=1,stop,
If(plot=2,Ref(stopLong,-1+adv),0));
If(plot=1,stop,
If(plot=2,Ref(stopShort,-1+adv),signals))
Trailing Stop - TradeSim
{ Triggers: Long (+1) & Short (-1) signals at crossover of
user-defined trailing stops }{ x23 faster than MetaStock's
4-PREV version }{ TradeSim.dll must be in
...\MetaStock\External Function DLLs\ folder }{ ©Copyright
2003-2004 Jose Silva }{ josesilva22@yahoo.com }
buffer:=Input("buffer % trailing stop",0,100,8);
plot:=Input("plot: trailing stop=1, Long+Short=2,
signals=3",1,3,1);
adv:=Input("plot: today's trailing stop=0, tomorrow's
stop=1",0,1,0);
delay:=Input("Entry and Exit signal delay",
0,5,0);
Volatility:=C*buffer/100;
stopLong:=ExtFml("TradeSim.TrailingStop",
BAND, {mode: band or trigger}
LONG, {long or short}
Volatility, {user defined see variable above}
CLOSE, {RefPoint for stop calc}
CLOSE); {threshold - stop breached}
stopShort:=ExtFml("TradeSim.TrailingStop",
BAND,SHORT,Volatility,C,C);
In:=Cross(C,Ref(stopShort,-1));
Out:=Cross(Ref(stopLong,-1),C);
Init:=Cum(In+Out>-1)=1;
InInit:=Cum(In)=1;
flag:=BarsSince(Init OR In)
< BarsSince(Init OR Out)+InInit;
signals:=Ref((InInit AND Alert(InInit=0,2)
OR flag AND Alert(flag=0,2))
-(flag=0 AND Alert(flag,2)),-delay);
stop:=Ref(If(flag=1,stopLong,stopShort),-1+adv);
If(plot=1,stop,
If(plot=2,Ref(stopLong,-1+adv),0));
If(plot=1,stop,
If(plot=2,Ref(stopShort,-1+adv),signals))
Trailing Stop - AdvTrailStop plug-in
{ Plot on price chart }{ Triggers: Long (+1) & Short (-1)
signals at crossover of user-defined trailing stops }{ Much
faster than MetaStock's 4-PREV version }{ ©Copyright 2004 Jose
Silva }{ josesilva22@yahoo.com }
{ AdvancedStop.dll must be in ...\MetaStock\External Function
DLLs\ folder }{ AdvancedStop.dll by Richard Dale, free from:
http://www.tradernexus.com/advancedstop/advancedstop.html }
buffer1:=
Input("initial stop % buffer",0,100,5)/100;
buffer2:=
Input("trailing stop % buffer",0,100,8)/100;
plot:=Input("plot: trailing stop=1, Long+Short=2,
signals=3",1,3,1);
adv:=Input("plot: today's trailing stop=0, tomorrow's
stop=1",0,1,0);
delay:=Input("Entry and Exit signal delay",
0,5,0);
entrySignal:=C=C;
initialStopLong:=C*(1-buffer1);
trailStopLong:=C*(1-buffer2);
stopLong:=ExtFml("AdvancedStop.StopLong",
entrySignal,initialStopLong,0,trailStopLong,
0,0,0,0);
exitSignal:=Cross(stopLong,C);
initialStopShort:=C*(1+buffer1);
trailStopShort:=C*(1+buffer2);
stopShort:=ExtFml("AdvancedStop.StopShort",
exitSignal,initialStopShort,0,trailStopShort,
0,0,0,0);
entrySignal:=Cross(C,stopShort);
stopLong:=ExtFml("AdvancedStop.StopLong",
entrySignal,initialStopLong,0,trailStopLong,
0,0,0,0);
In:=Cross(C,Ref(stopShort,-1));
Out:=Cross(Ref(stopLong,-1),C);
Init:=Cum(In+Out>-1)=1;
flag:=BarsSince(Init OR In)
< BarsSince(Init OR Out)+(Cum(In)=1);
signals:=Ref(((Cum(In)=1)
AND Alert((Cum(In)=1)=0,2)
OR flag AND Alert(flag=0,2))
-(flag=0 AND Alert(flag,2)),-delay);
stop:=Ref(If(flag=1,stopLong,stopShort),-1+adv);
If(plot=1,stop,
If(plot=2,Ref(stopLong,-1+adv),0));
If(plot=1,stop,
If(plot=2,Ref(stopShort,-1+adv),signals))
(Go
Top) |
{ ©Copyright 2003 Jose Silva }{ josesilva22@yahoo.com }
pds:=
Input("average trend length periods",2,252,21);
pr:=Input("Open=1 High=2 Low=3 Close=4 Vol=5 MP=6, P=7",1,7,4);
display:=Input("plot Trend line = 1, Trend points = 2",1,2,1);
{define events}
pr:=If(pr=1,O,If(pr=2,H,If(pr=3,L,If(pr=5,V,
If(pr=6,MP(),If(pr=7,P,C))))));
price1:=pr;
price2:=pr;
time1:=price1>Ref(HHV(price1,pds),-1);
time2:=price2<Ref(LLV(price2,pds),-1);
{restrict to last events}
time1:=time1
AND Cum(time1)=LastValue(Cum(time1));
time2:=time2
AND Cum(time2)=LastValue(Cum(time2));
{sort events}
t1pds:=LastValue(BarsSince(time1));
t2pds:=LastValue(BarsSince(time2));
x1:=If(t1pds>=t2pds,time1,time2);
x2:=If(t1pds>=t2pds,time2,time1);
y1:=If(t1pds>=t2pds,price1,price2);
y2:=If(t1pds>=t2pds,price2,price1);
{fix coordinates}
y1:=ValueWhen(1,x1,y1);
y2:=LastValue(ValueWhen(1,x2,y2));
b1:=LastValue(BarsSince(x1));
b2:=LastValue(BarsSince(x2));
plot:=y1+BarsSince(x1)*(y2-y1)/(b1-b2);
If(display=1,plot,time1+time2)
(Go
Top) |
|