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

Re: [EquisMetaStock Group] Better coding in MetaStock



PureBytes Links

Trading Reference Links



Hi José,

Thanks for the tips (although I am not an expert, they can be useful) :)

Regards,

Marco



Jose Silva a écrit :

>
>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 Links
>
>
>
> 
>
>
>
>
>  
>






------------------------ 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/BefplB/TM
--------------------------------------------------------------------~-> 

 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/equismetastock/

<*> To unsubscribe from this group, send an email to:
    equismetastock-unsubscribe@xxxxxxxxxxxxxxx

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/