PureBytes Links
Trading Reference Links
|
Below is a Breakout-sensitive Exponential Moving Average (BEMA for
short).
It reacts quicker (tightens) on price breakouts, and loosens back to
normal progressively thereafter.
Perhaps it should do the opposite, i.e. loosen on breakouts and
tighten progressively thereafter instead.
Anyway, maybe there is some usefulness in this variable-period EMA.
MetaStock -> Tools -> Indicator Builder -> New ->
Copy and paste complete formulae between "---8<---" lines.
==============================
EMA - Breakout-sensitive (BEMA)
==============================
---8<-------------------------------------
{ [B]reakout-sensitive [E]xp [M]ov [A]vg v1.0 }
{ BEMA based on bars since price breakouts.
Options:
[1] Composite BEMA: (Upper+Lower)/2;
[2] Upper BEMA band based on upside breaks;
Lower BEMA band based on downside breaks;
[3] BEMA shifts to Upper/Lower on crossovers}
{ ©Copyright 2005 Jose Silva.
The grant of this license is for personal use
only - no resale or repackaging allowed.
All code remains the property of Jose Silva.
http://www.metastocktools.com }
{ User inputs }
pds:=Input("BEMA and HHV/LLV lookback periods",
1,2520,21);
plot:=Input("BEMA: [1]Composite, [2]Upper+Lower, [3]Long/Short",1,4,1
);
spread:=Input("Upper/Lower BEMA bands shift %",
0,100,2)/200;
x:=Input("Breakouts, use: [1]Close, [2]High/Low",1,2,1);
{ Upside breakouts }
xup:=If(x=1,C,H);
up:=xup=HHV(xup,pds);
{ Downside breakouts }
xdw:=If(x=1,C,L);
dw:=xdw=LLV(xdw,pds);
{ Remove ghost breakout signals }
init:=Cum(IsDefined(up+dw))=1;
bin:=ValueWhen(1,up-dw<>0 OR init,up);
up:=bin AND (Alert(bin=0,2) OR init);
dw:=bin=0 AND (Alert(bin,2) OR init);
NullZone:=Cum(up)>0 AND Cum(dw)<1
OR Cum(up)<1 AND Cum(dw)>0;
{ Periods since breakouts }
upPds:=BarsSince(up OR Cum(1)=pds)+2;
upPds:=If(upPds>pds,pds,upPds);
dwPds:=BarsSince(dw OR Cum(1)=pds)+2;
dwPds:=If(dwPds>pds,pds,dwPds);
{ Upside breakout-based EMA }
upEma:=xup*2/(upPds+1)+PREV*(1-2/(upPds+1));
upEma:=If(NullZone,Mov(xup,pds,E),upEma);
upEma:=upEma*(1+spread);
{ Downside breakout-based EMA }
dwEma:=xdw*2/(dwPds+1)+PREV*(1-2/(dwPds+1));
dwEma:=If(NullZone,Mov(xdw,pds,E),dwEma);
dwEma:=dwEma*(1-spread);
{ Composite BEMA }
BEMA:=(upEma+dwEma)/2;
LngSht:=If(C>=BEMA,dwEma,upEma);
{ Plot on price chart }
If(plot=1,BEMA,If(plot=2,dwEma,
If(plot=3,LngSht,up)));
If(plot=1,BEMA,If(plot=2,upEma,
If(plot=3,LngSht,-dw)))
---8<-------------------------------------
=========================
EMA - (BEMA), dll version
=========================
---8<-------------------------------------
{ [B]reakout-sensitive [E]xp [M]ov [A]vg v.dll
- Plots much faster than PREV-based version.}
{ BEMA based on bars since price breakouts.
Options:
[1] Composite BEMA: (Upper+Lower)/2;
[2] Upper BEMA band based on upside breaks;
Lower BEMA band based on downside breaks;
[3] BEMA shifts to Upper/Lower on crossovers}
{ Forum.dll from http://forum.equis.com
or ASI.dll from http://www.thedml.com
must be in:
...\MetaStock\External Function DLLs\ folder.}
{ ©Copyright 2005 Jose Silva.
The grant of this license is for personal use
only - no resale or repackaging allowed.
All code remains the property of Jose Silva.
http://www.metastocktools.com }
{ User inputs }
pds:=Input("BEMA and HHV/LLV lookback periods",
1,2520,21);
plot:=Input("BEMA: [1]Composite, [2]Upper+Lower, [3]Long/Short",1,4,1
);
spread:=Input("Upper/Lower BEMA bands shift %",
0,100,2)/200;
x:=Input("Breakouts, use: [1]Close, [2]High/Low",1,2,1);
{ Upside breakouts }
xup:=If(x=1,C,H);
up:=xup=HHV(xup,pds);
{ Downside breakouts }
xdw:=If(x=1,C,L);
dw:=xdw=LLV(xdw,pds);
{ Remove ghost breakout signals }
init:=Cum(IsDefined(up+dw))=1;
bin:=ValueWhen(1,up-dw<>0 OR init,up);
up:=bin AND (Alert(bin=0,2) OR init);
dw:=bin=0 AND (Alert(bin,2) OR init);
NullZone:=Cum(up)>0 AND Cum(dw)<1
OR Cum(up)<1 AND Cum(dw)>0;
{ Periods since breakouts }
upPds:=BarsSince(up OR Cum(1)=pds)+2;
upPds:=If(upPds>pds,pds,upPds);
dwPds:=BarsSince(dw OR Cum(1)=pds)+2;
dwPds:=If(dwPds>pds,pds,dwPds);
{ Upside breakout-based EMA }
{upEma:=ExtFml("Forum.VarMOV",xup,upPds,e);}
upEma:=ExtFml("ASI.EMA",xup,upPds);
upEma:=If(NullZone,Mov(xup,pds,E),upEma);
upEma:=upEma*(1+spread);
{ Downside breakout-based EMA }
{dwEma:=ExtFml("Forum.VarMOV",xdw,dwPds,e);}
dwEma:=ExtFml("ASI.EMA",xdw,dwPds);
dwEma:=If(NullZone,Mov(xdw,pds,E),dwEma);
dwEma:=dwEma*(1-spread);
{ Composite BEMA }
BEMA:=(upEma+dwEma)/2;
LngSht:=If(C>=BEMA,dwEma,upEma);
{ Plot on price chart }
If(plot=1,BEMA,If(plot=2,dwEma,
If(plot=3,LngSht,up)));
If(plot=1,BEMA,If(plot=2,upEma,
If(plot=3,LngSht,-dw)))
---8<-------------------------------------
jose '-)
http://www.metastocktools.com
------------------------ Yahoo! Groups Sponsor --------------------~-->
Try Online Currency Trading with GFT. Free 50K Demo. Trade
24 Hours. Commission-Free.
http://us.click.yahoo.com/RvFikB/9M2KAA/U1CZAA/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/
|