Another way to get rid of redundant Buy & Sell signals, without resorting to the PREV function:
MetaStock -> Tools -> Indicator Builder -> New ->
Copy and paste complete formula between "---8<---" lines.
[code:1:3325922c2b]
====================
System trade signals
====================
---8<--------------------------
{ System trade signals }
{ ©Copyright 2005 Jose Silva }
{ For personal use only }
{ http://www.metastocktools.com }
{ Note on simultaneous entry/exit on same bar:
#1 Ignore:
entry/exit signals cancel each other;
#2 Preference given to:
new entry if currently Short,
new exit if currently Long.}
{ Signals reference example }
entry:=C>Mov(C,21,E);
exit:=C<Mov(C,10,E);
{ User inputs }
plot:=Input("Signals: [1]Clean, [2]All, [3]Trade binary",1,3,1);
choose:=Input("Simultaneous entry/exit: [1]Ignore, [2]Preference",1,2,1);
delay:=Input("Entry and Exit delay",-1,5,0);
{ Initialize plot }
Init:=Cum(IsDefined(entry+exit))=1;
{ #1 - Ignore entry/exit on same bar }
x:=ValueWhen(1,entry-exit<>0,entry-exit);
long:=x=1 AND (Alert(x<>1,2) OR Init);
short:=x=-1 AND (Alert(x<>-1,2) OR Init);
signals1:=long-short;
binary1:=ValueWhen(1,signals1<>0,signals1);
{ #2 - Preference to first entry/exit }
long:=entry AND (Alert(entry=0,2) OR Init);
short:=exit AND (Alert(exit=0,2) OR Init);
binary2:=ValueWhen(1,long-short<>0,long-short);
long:=binary2=1 AND (Alert(binary2<1,2) OR Init);
short:=binary2=-1 AND (Alert(binary2>-1,2) OR Init);
signals2:=long-short;
{ Select #1 or #2 }
binary:=If(choose=1,binary1,binary2);
signals:=If(choose=1,signals1,signals2);
{ Plot in own window }
Ref(If(plot=2,entry,0),-delay);
Ref(If(plot=1,signals,
If(plot=2,-exit,binary)),-delay)
---8<--------------------------
[/code:1:3325922c2b]
jose '-)
http://www.metastocktools.com