- Katılım
- 23 Eki 2020
- Mesajlar
- 1,828
Here's a concept I thought about whilst on holidays: Forward reference (shift backwards on charts) and center a Moving Average, then extend and project the last known MA direction into the future. This method gets around the no-plot in null (N/A) zone limitation in MetaStock, and can apply to any indicator or oscillator on charts or separate windows. |
|
Moving Average - Centered { Centered Moving Average - v3.0 } { Uses forward-referencing to center Mov Avg and project future direction.} { Uses hindsight - do not trade! } { CCopyright 2005 Jose Silva For personal use only. http://www.metastocktools.com } { User inputs } fwPds:=Input("Forward-referencing periods (automatic = -1)",-1,2600,- 1); proj:=Input("Project last known MA: [1]Direction, [2]Value",1,2,1); pds:=Input("Mov Avg periods",1,2600,21); type:=Input("[1]EMA [2]SMA [3]TmSr [4]Tri [5]Var [6]Vol [7]Wght",1,7, 2); { Choose 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(C,pds,E), If(type=2,Mov(C,pds,S), If(type=3,Mov(C,pds,T), If(type=4,Mov(C,pds,TRI), If(type=5,Mov(C,pds,VAR), If(type=6,Mov(C,pds,VOL), Mov(C,pds,W))))))); { Automatic period-centering } center:=LastValue(If(fwPds<0,Int(pds/2),fwPds)); { Forward-referenced MovAvg } fwd:=Ref(ma,center); { Last valid MovAvg plot point } lastVal:=IsUndefined(fwd) AND Alert(IsUndefined(fwd)=0,2); { Extend MovAvg plot into future null zone } xtend:=LastValue(fwd+PREV-PREV); { Restrict invalid initial MovAvg plot } movAvg:=Ref(Ref(xtend,pds-1),-pds+1); { Last MA known direction & future projection } init:=Cum(IsDefined(movAvg))=1; direction:=movAvg+ ( ValueWhen(1,init OR lastVal,Ref(movAvg,-1)) -ValueWhen(1,init OR lastVal,Ref(movAvg,-2))) *(BarsSince(init OR lastVal)+1); { Plot MovAvg on price chart } If(proj=1,direction,movAvg) |
Source / From: |