MetaStock -> Tools -> Indicator Builder -> New Copy and paste formula below. ==================== EMA - trade-adjusted ==================== ---8<--------------------------- { 6-loop trade-adjusted EMA } { Adjusts EMA periodicity to trade frequency } { ©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 } avg:=Input("Crossover trades per year", 2,1000,12); plot:=Input("[1]EMA, [2]Signals, [3]EMA periods",1,3,1); { Base EMA periods } pds:=21; { Year count } yCount:= LastValue(Year()-ValueWhen(1,Cum(1)=1,Year())); { Loop 1 } signal:=Cross(C,Mov(C,pds,E)); pds:=Int(Cum(signal)/yCount/avg*pds+.5); pds:=LastValue(If(pds<2,2,pds)); { Loop 2 } signal:=Cross(C,Mov(C,pds,E)); pds:=Int(Cum(signal)/yCount/avg*pds+.5); pds:=LastValue(If(pds<2,2,pds)); { Loop 3 } signal:=Cross(C,Mov(C,pds,E)); pds:=Int(Cum(signal)/yCount/avg*pds+.5); pds:=LastValue(If(pds<2,2,pds)); { Loop 4 } signal:=Cross(C,Mov(C,pds,E)); pds:=Int(Cum(signal)/yCount/avg*pds+.5); pds:=LastValue(If(pds<2,2,pds)); { Loop 5 } signal:=Cross(C,Mov(C,pds,E)); pds:=Int(Cum(signal)/yCount/avg*pds+.5); pds:=LastValue(If(pds<2,2,pds)); { Loop 6 } signal:=Cross(C,Mov(C,pds,E)); pds:=Int(Cum(signal)/yCount/avg*pds+.5); pds:=LastValue(If(pds<2,2,pds)); { Final output } EMA:=Mov(C,pds,E); long:=Cross(C,EMA); short:=Cross(EMA,C); { Plot EMA on price chart } If(plot=1,EMA,If(plot=2,long-short,pds)) ---8<--------------------------- http://www.metastocktools.com