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

[EquisMetaStock Group] Re: Improve Moving Average



PureBytes Links

Trading Reference Links

Simple MFL version of adaptable periodicity:
pds:=If(pds>Cum(1),Cum(1),pds);

In English:
If the EMA periods is greater than the number of currently available 
bars, lower the EMA periodicity the number of currently available 
bars, otherwise don't change EMA periodicity.


The posted version is slightly more complicated, to allow for the "P" 
variable which may include indicators that may take a number of bars 
before they plot:
pds:=If(pds>Cum(x<>-101),Cum(x<>-101),pds);

In English:
If the EMA periods is greater than the number of data values that are 
not -101, lower the EMA periodicity to the number of data values that 
are not -101, otherwise don't change EMA periodicity.

I've chosen -101, for the reason that this value is rare in most 
indicators/oscillators that may range 0~100 or +100~-100.

jose '-)


--- In equismetastock@xxxxxxxxxxxxxxx, bellamy_29m@xxxx wrote:
> Thanks Jose,
> 
> I did have a look at your code on your site.  I was actually trying 
> to do this more as a learning experience than anything else, so I 
> really don't care about SMA vs EMA.
> 
> Would you be so kind to explain the reasoning behind the line:
> 
>  pds:=If(pds>Cum(x<>-101),Cum(x<>-101),pds); { <--- ! }
> 
> which if I interpret it correctly says, "if the number of periods is 
> greater than the cumulative sum of the indicator (but only if the 
> value indicator is not equal to -101 (???)) then make this the
> number of periods, otherwise just use the number of periods"
> 
> Cheers.
> 
> 
> --- In equismetastock@xxxxxxxxxxxxxxx, "Jose" <josesilva22@xxxx> 
> wrote:
> > If you can live with an EMA instead of SMA, here is some code that 
> > does what you want:
> > 
> > ===
> > EMA
> > ===
> > ---8<---------------------------
> > 
> > { Exponential Moving Average v2.0 }
> > { EMA periodicity shortens on low bar count }
> > { ©Copyright 2003 Jose Silva }
> > { http://users.bigpond.com/prominex/pegasus.htm }
> > 
> > pds:=Input("EMA periods",1,2520,21);
> > x:=Input("use Open=1 High=2 Low=3 Close=4 Volume=5 P=6",1,6,4);
> > shift:=1+Input("EMA vertical shift %",
> >  -100,100,0)/100;
> > plot:=Input("EMA=1, Crossover signals=2",1,2,1);
> > 
> > x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,If(x=6,P,C)))));
> > pds:=If(pds>Cum(x<>-101),Cum(x<>-101),pds); { <--- ! }
> > Ema:=x*2/(pds+1)+PREV*(1-2/(pds+1));
> > Ema:=Ema*shift;
> > signals:=Cross(x,Ema)+-Cross(Ema,x);
> > 
> > If(plot=2,signals,Ema)
> > 
> > ---8<---------------------------
> > 
> > 
> > jose '-)
> > 
> > 
> > --- In equismetastock@xxxxxxxxxxxxxxx, bellamy_29m@xxxx wrote:
> > > I am trying to write a MS6.52 formula to handle the situation 
> where 
> > > there are less data points available than a nominated moving 
> average 
> > > period, so I want the MA to show for the available data points 
> until 
> > > there enough data points for the MA to operate normally. (Easily 
> > done 
> > > in VB, VBA, C, C++, just not MS!)
> > > 
> > > Not knowing exactly how to get around MS lack of flexibility, I 
> was 
> > > trying:
> > > 
> > > prd:=Input("MA Periods...",1,100,5);
> > > x:=Input("1-Open 2-High 3-Low 4-Close 5-Volume 6-P",1,6,4);
> > > x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,If(x=6,P,C)))));
> > > ma:=If(Cum(1)<prd,Sum(x,Cum(1))/Cum(1),Mov(x,prd,S));
> > > ma;
> > > 
> > > which didn't work, with the error message "This variable or 
> > > expression must contain only constant data"
> > > 
> > > ... so I then tried to set the prd value using code:
> > > 
> > > prd:=Input("MA Periods...",1,100,5);
> > > prd:=If(Cum(1)<prd,Cum(1),prd);
> > > x:=Input("1-Open 2-High 3-Low 4-Close 5-Volume 6-P",1,6,4);
> > > x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,If(x=6,P,C)))));
> > > ma:=Mov(x,prd,S);
> > > ma;
> > > 
> > > which didn't work either, with the same error message "This 
> variable 
> > > or expression must contain only constant data"
> > > 
> > > Hopefully, someone can see what I am trying to achieve and will 
> be 
> > > able to help.  Any assistance would be greatly appreciated.



------------------------ Yahoo! Groups Sponsor ---------------------~-->
Buy Ink Cartridges or Refill Kits for your HP, Epson, Canon or Lexmark
Printer at MyInks.com.  Free s/h on orders $50 or more to the US & Canada.
http://www.c1tracking.com/l.asp?cid=5511
http://us.click.yahoo.com/mOAaAA/3exGAA/qnsNAA/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/