MetaStock -> Tools -> Indicator Builder -> New Copy and paste formula below. ==================== EMA - trade-adjusted ==================== ---8<--------------------------- {6-loop trade-adjusted EMA v2.0 Adjusts EMA periodicity to chosen crossover pa frequency. Copyright © 2005-2009 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} avg:=Input("EMA trades per year (avg target)", 1,10000,12); pds:=Input("Original EMA periods",1,10000,21); plot:=Input("[1]EMA, [2]EMA periods, [3]Signals",1,3,1); {Year count} d:=Life(291231); d:=ValueWhen(1,Cum(1)=1,d)-d; yCount:=Max(d/365.2,1); {Loop 1} signal:=Cross(C,Mov(C,pds,E)); pds:=Rnd(Cum(signal)/yCount/avg*pds); pds:=LastValue(If(pds<2,2,pds)); {Loop 2} signal:=Cross(C,Mov(C,pds,E)); pds:=Rnd(Cum(signal)/yCount/avg*pds); pds:=LastValue(If(pds<2,2,pds)); {Loop 3} signal:=Cross(C,Mov(C,pds,E)); pds:=Rnd(Cum(signal)/yCount/avg*pds); pds:=LastValue(If(pds<2,2,pds)); {Loop 4} signal:=Cross(C,Mov(C,pds,E)); pds:=Rnd(Cum(signal)/yCount/avg*pds); pds:=LastValue(If(pds<2,2,pds)); {Loop 5} signal:=Cross(C,Mov(C,pds,E)); pds:=Rnd(Cum(signal)/yCount/avg*pds); pds:=LastValue(If(pds<2,2,pds)); {Loop 6} signal:=Cross(C,Mov(C,pds,E)); pds:=Rnd(Cum(signal)/yCount/avg*pds); pds:=LastValue(If(pds<2,2,pds)); {Final EMA & signals} EMA:=Mov(C,pds,E); long:=Cross(C,EMA); short:=Cross(EMA,C); signals:=long-short; {Plot EMA on price chart} If(plot=1,EMA,If(plot=2,pds,signals)) ---8<--------------------------- http://www.metastocktools.com