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

[EquisMetaStock Group] Re: Better coding in MetaStock



PureBytes Links

Trading Reference Links


...and finally:

5) Always check that your code works in MetaStock as intended, 
preferably before posting.  ;)

Correction:

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


jose '-)



--- In Metastockusers@xxxxxxxxxxxxxxx, "Jose Silva" <josesilva22@xxxx> 
wrote:
> 
> 
> 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 --------------------~--> 
In low income neighborhoods, 84% do not own computers.
At Network for Good, help bridge the Digital Divide!
http://us.click.yahoo.com/EpW3eD/3MnJAA/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/