[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Metastockusers] Better coding in MetaStock



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/