Centered moving average – media mobile centrata
Forums › ProRealTime forum Italiano › Supporto ProBuilder › Centered moving average – media mobile centrata
- This topic has 9 replies, 4 voices, and was last updated 7 years ago by domeniko.
-
-
01/28/2017 at 10:27 PM #2287601/29/2017 at 9:08 AM #2289601/29/2017 at 3:10 PM #22949
Buongiorno…grazie per l’interesse
Allego codice per metastock si tratta di una media mobile semplice ma traslata indietro di un certo numero di periodi.
Es media mobile semplice a 20 periodi traslata sul grafico del prezzo di 10 periodi quindi viene centrata sul grafico del prezzo.
StorkBite Posted : 11 yearsHere’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.
MetaStock -> Tools -> Indicator Builder -> New ->
Copy and paste complete formula between “—8<—” lines.=============
MA – centered
=============
—8<————————–{ Centered Moving Average – v3.0 }
{ Uses forward-referencing to center Mov Avg
and project future direction.}
{ Uses hindsight – do not trade! }{ ©Copyright 2005 Jose Silva
For personal use only.
}{ 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)—8<————————–
01/29/2017 at 3:23 PM #22951Buongiorno allego questo link dove è spiegato bene cosa è una media mobile centrata
http://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:detrended_price_osci
01/29/2017 at 11:37 PM #2300701/30/2017 at 1:18 PM #2308301/30/2017 at 1:52 PM #23089Ciao Nicolas
sono riuscito ad ottenere questo, con la funzione traslazione_mod
12345678910111213141516171819202122232425REM traslazione_moddet=dpo[indietro*2](close)if flag=0 thenif det=det[1] and det[1]=det[2] and det[2]<>det[3] thenflag=1elseflag=0endifendifif (barindex > indietro) and flag=0 thenif indietro = 0 thenind = closeelsif indietro = 1 thenind = -DPO[1](close)+closeelsif indietro = 2 thenind = 2*(-DPO[2](close)+close) - (-DPO[1](close)+close)elseind = (2*indietro-2)*(-DPO[2*indietro-2](close)+close) - (2*indietro-4)*(-DPO[2*indietro-4](close)+close)-close[indietro-3]endifind1=round(ind)endifif barindex<= indietro or flag thenind1 = undefinedendifreturn ind1 as "traslazione_mod"Ho ottenuto la traslazione del grafico a sinistra mettendo gli ultimi valori uguali (valori futuri) all’ultimo valore di chiusura
poi con il codice mmc_mod
12345678910REM mmc_modif n mod 2 = 0 thent = n/2elset = (n -1)/2endifmytraslazione = CALL "traslazione_mod"[t]ind = Average[n](mytraslazione)return ind as "mmc"ho ottenuto la media mobile centrata, in pratica ho prima traslato il grafico dei prezzi a sinistra di n/2 periodi (nell’esempio allegato n=16) e ho calcolato la mmc a 32 periodi, tuttavia la parte finale del grafico è piatto.
Se invece inserisco, direttamente sul grafico dei prezzi traslato “traslazione_mod”, la media mobile semplice, ottengo la mmc con l’ultima parte del grafico non piatto, ossia ho la proiezione corretta.
Il mio scopo finale è quello di calcolare un indicatore di ciclo = differenza tra medie mobile centrate su due periodo diversi.
Spero di essere stato chiaro ti allego anche una foto di un grafico01/30/2017 at 2:30 PM #23093Ciao Nicolas
ho anche trovato sul sito questo codice è una media mobile centrata traingolare
12345678910111213141516171819202122232425// parameters// HalfLength = 50// AtrLength = 100// AtrMultiplier = 2.0avg = average[1](close)sum = (HalfLength+1)*avgsumw = (HalfLength+1)k = HalfLengthfor j = 1 to HalfLength dok = k-1sum = sum+(k*avg[j])sumw = sumw+knextbuffer1 = sum/sumwmyrange = AverageTrueRange[AtrLength](close)*AtrMultiplierbuffer2 = buffer1+myrangebuffer3 = buffer1-myrangeRETURN buffer1 coloured(0,220,0) as "TMA", buffer2 coloured(220,0,0) as "upper band", buffer3 coloured(0,220,0) as "lower band"non so se riesci ad ottenere da questo codice una media mobile semplice centrata
02/01/2017 at 3:37 PM #23419Scusate ma io sono un po ‘perso ora circa la vostra richiesta iniziale?
Il codice si registra nel messaggio precedente di “traslazione_mod” non è attendibile in quanto utilizza l’indicatore DPO che non è buono nel trading reale (ridipingere precedente dato informazioni ..).
Il codice dal tuo post sopra questo è il TMA (screenshot allegato), è già un MA centrato .. Ma, per definizione, una media mobile è già al centro del prezzo, è possibile modificare il suo periodo di vederlo come più chiaramente nella mia foto allegata.02/19/2017 at 9:30 PM #25653 -
AuthorPosts