PureBytes Links
Trading Reference Links
|
Some poor MetaStock coding practices worth avoiding:
1) MetaStock's PREV function slows down processing dramatically - its
use should be avoided wherever possible. Placing unnecessary PREV
functions in a formula generally reflects poor programming skills;
2) Rather than create a zillion formulae with different hard-coded
parameters scattered inside the formula, assign these values to
parameters so they may be easily changed as required;
3) Always use meaningful names for variables. The code may need to be
followed and understood by others, or worse still, Alzheimer's may
just be around the corner;
4) Use {comments} wherever possible, for the same reasons as #3.
Here is a recent example of code that ignores the above four points:
========================
3% envelope 14 MA Expert
========================
---8<--------------
Long
A:=C>1.03*Mov(C,14,S);
B:=C<.97*Mov(C,14,S);
D:=If(A,1,If(B,0,PREV));
D=1
Short
A:=C>1.03*Mov(C,14,S);
B:=C<.97*Mov(C,14,S);
D:=If(A,1,If(B,0,PREV));
D=0
Symbol tab
Long
A:=C>1.03*Mov(C,14,S);
B:=C<.97*Mov(C,14,S);
D:=If(A,1,If(B,0,PREV));
D=1 AND Ref(D,-1)=0
short
A:=C>1.03*Mov(C,14,S);
B:=C<.97*Mov(C,14,S);
D:=If(A,1,If(B,0,PREV));
D=0 AND Ref(D,-1)=1
---8<--------------
The code above is an example of poor coding in MetaStock, because:
1) Four (unnecessary) PREV function slows down the plotting of the
Expert signals, and would dramatically slow down an exploration based
on this code;
2) No parameters assigned to global variables - it would take some
effort to change the 16 values, and there is always the risk of
introducing errors;
3) No meaningful names assigned to variables. Try following the code
of some of the longer formulae, and the problem becomes apparent;
4) No {comments} used. The author may not need them, but others could
do with some.
The code below plots the same signals, and:
1) Avoids PREV functions;
2) Assigns global variables to variables at the easy-to-get head of
the formula;
3) Uses names for variables that reflect their intended use;
4 {Comments}, {Comments}, {Comments}.
===========================
14 SMA / 3% envelope Expert
===========================
Highlights tab:
Long
---8<----------
{ Variables }
SMAperiods:=14;
EnvPercent:=3;
{ Envelope signals }
Env:=EnvPercent/100;
upper:=C>(1+Env)*Mov(C,SMAperiods,S);
lower:=C<(1-Env)*Mov(C,SMAperiods,S);
{ Trade binary flag }
binary:=ValueWhen(1,upper-lower<>0,upper-lower);
{ Long trade flag }
binary=1
---8<----------
Short
---8<----------
{ Variables }
SMAperiods:=14;
EnvPercent:=3;
{ Envelope signals }
Env:=EnvPercent/100;
upper:=C>(1+Env)*Mov(C,SMAperiods,S);
lower:=C<(1-Env)*Mov(C,SMAperiods,S);
{ Trade binary flag }
binary:=ValueWhen(1,upper-lower<>0,upper-lower);
{ Short trade flag }
binary=0
---8<----------
Symbols tab:
Long
---8<----------
{ Variables }
SMAperiods:=14;
EnvPercent:=3;
{ Envelope signals }
Env:=EnvPercent/100;
upper:=C>(1+Env)*Mov(C,SMAperiods,S);
lower:=C<(1-Env)*Mov(C,SMAperiods,S);
{ Trade binary flag }
binary:=ValueWhen(1,upper-lower<>0,upper-lower);
{ Long trade - first signal }
long:=binary=1 AND Alert(binary<1,2);
long
---8<----------
Short
---8<----------
{ Variables }
SMAperiods:=14;
EnvPercent:=3;
{ Envelope signals }
Env:=EnvPercent/100;
upper:=C>(1+Env)*Mov(C,SMAperiods,S);
lower:=C<(1-Env)*Mov(C,SMAperiods,S);
{ Trade binary flag }
binary:=ValueWhen(1,upper-lower<>0,upper-lower);
{ Short trade - first signal }
short:=binary<1 AND Alert(binary>0,2);
short
---8<----------
Life is so much easier with clean, annotated code... ;)
jose '-)
http://www.metastocktools.com
------------------------ Yahoo! Groups Sponsor --------------------~-->
What would our lives be like without music, dance, and theater?
Donate or volunteer in the arts today at Network for Good!
http://us.click.yahoo.com/Tcy2bD/SOnJAA/cosFAA/zMEolB/TM
--------------------------------------------------------------------~->
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/Metastockusers/
<*> To unsubscribe from this group, send an email to:
Metastockusers-unsubscribe@xxxxxxxxxxxxxxx
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
|