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

[EquisMetaStock Group] Re: Phased MA for MetaStock



PureBytes Links

Trading Reference Links

Or JMO for just my opinion.

Seriously, I tried the code and enjoyed the plot it gave. Thanks to 
you and Mark for the help with it. Kinda suprised that no one has 
jumped on making it adaptive though.

Preston


--- In equismetastock@xxxxxxxxxxxxxxx, "Jose Silva" 
<josesilva22@xxx> wrote:
>
> My last posted code may have generated some confusion - better to 
change 
> "JMA" for "PMA" just in case some of these good people get upset:
> 
> JMA Inc.
> JMA Forensics
> JMA Groups
> JMA Graphics
> JMA Software
> JMA Legal
> JMA Consulting
> JMA Engineering
> Japan Medical Association
> Japan Meteorological Agency
> Japan Management Association
> Japan Marketing Association
> Jamaica Manufacturers' Association
> John Mitchell & Associates
> Jurik Moving Average
> 
> 
> MetaStock -> Tools -> Indicator Builder -> New
> -> copy & paste complete formula between "---8<---" lines.
> 
> ===========
> MA - phased
> ===========
> ---8<-----------------------------------------
> 
> { PMA v1.0 -- Phased Moving Average.
>   As suggested by Mark Jurik of Jurik Research,
>   http://www.jurikres.com
> 
>  ©Copyright 2007 Jose Silva.
>   For personal use only.
>   http://www.metastocktools.com }
> 
> { User inputs }
> pds:=Input("PMA periods",1,2600,21);
> factor:=Input("Lag reduction scaling factor  [-1 = Auto]",-1,1000,-
1);
> x:=Input("use  [1]Open [2]High [3]Low [4]Close [5]WCl [6]
Vol",1,6,4);
> type:=Input("[1]EMA [2]SMA [3]TmSr [4]Tri [5]Var [6]Vol [7]
Wght",1,7,2);
> shift:=Input("PMA bands spread %",0,100,5)/100;
> plot:=Input("[1]PMA,  [2]PMA+Bands,  [3]Band crossover 
Signals",1,3,1);
> 
> { Data array }
> x:=If(x=1,O,
>  If(x=2,H,
>  If(x=3,L,
>  If(x=4,C,
>  If(x=5,WC(),
>  V)))));
> 
> { MovAvg type:
>   1 - Exponential MA
>   2 - Simple MA
>   3 - Time Series MA
>   4 - Triangular MA
>   5 - Variable MA
>   6 - Volume adjusted MA
>   7 - Weighted MA }
> ma:=
>  If(type=1,Mov(x,pds,E),
>  If(type=2,Mov(x,pds,S),
>  If(type=3,Mov(x,pds,T),
>  If(type=4,Mov(x,pds,TRI),
>  If(type=5,Mov(x,pds,VAR),
>  If(type=6,Mov(x,pds,VOL),
>  Mov(x,pds,W)))))));
> 
> { PMA approximation }
> factor:=If(factor>=0,factor,pds/4);
> PMA:=(ma+LinRegSlope(x,pds)*factor);
> 
> { PMA % bands }
> upper:=PMA*(1+shift);
> lower:=PMA*(1-shift);
> 
> { PMA bands crossover signals }
> entry:=Cross(C,upper);
> exit:=Cross(lower,C);
> 
> { Clean signals }
> init:=Cum(IsDefined(entry+exit))=1;
> bin:=ValueWhen(1,entry-exit<>0 OR init,entry);
> long:=bin*(Alert(bin=0,2)
>  OR entry*Cum(entry)=1);
> short:=(bin=0)*(Alert(bin,2)
>  OR exit*Cum(exit)=1);
> signals:=long-short;
> 
> {Plot PMA on price chart, signals in own window}
> If(plot=1,PMA,If(plot=2,upper,0));
> If(plot=1,PMA,If(plot=2,lower,0));
> If(plot=3,signals,PMA)
> 
> ---8<-----------------------------------------
> 
> 
> jose
> http://www.metastocktools.com
> 
> 
> 
>  
> > --- In equismetastock@xxxxxxxxxxxxxxx, "Mark 
> > Jurik" <mark_yahoo_equismetastock@> wrote:
> >
> > The code is simply a combination of a simple moving average and 
one 
> > way of approximating overall slope:
> > 
> > Result = SMA + slope
> > 
> > You can get the desired slope calc in MS by using the built-in 
linear 
> > regression slope function. This way, ...
> > 
> > Result = mov( data array, periods, simple )
> >                      +
> >          linregslope( data array, periods ) * scaling_factor
> > 
> > You set the scaling factor as in input parameter, which allows 
you to 
> > adjust the amount of lag reduction. This approach to achieving 
low 
> > lag smoothing is NOT adaptive and has a significant overshoot 
penalty 
> > in proportion to the amount of lag reduction you request.
> > 
> > This formula poorly approximates JMA, which is adaptive, non-
linear 
> > and has better lag/overshoot tradeoff properties. If you want 
the 
> > real thing, go to http://www.jurikres.com .
> > 
> > Mark Jurik
> > Jurik Research
>




 
Yahoo! Groups Links

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

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/equismetastock/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:equismetastock-digest@xxxxxxxxxxxxxxx 
    mailto:equismetastock-fullfeatured@xxxxxxxxxxxxxxx

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