Beste svaret
Jeg har skrevet en artikkel på Medium som presenterer de forskjellige typene glidende gjennomsnitt og koding av funksjonene deres i Python (Full lenke for koden som formatering er vanskelig: Slik koder du forskjellige typer glidende gjennomsnitt i Python. ). Her er artikkelen:
Handelsprogramvare kommer med forskjellige typer glidende gjennomsnitt som allerede er forhåndsinstallert og klar til å kartlegges. Men det kan være interessant å forstå hvordan man beregner disse glidende gjennomsnittene for å kunne bruke dem når du tester potensielle strategier.
Hvis du vil ha en gjør-det-selv-metode, så det nedenfor vil sikkert interessere deg. Alt som trengs er en pythontolker som SPYDER. De forskjellige «kjente» typene glidende gjennomsnitt er:
- Enkelt glidende gjennomsnitt.
- Eksponentielt glidende gjennomsnitt.
- Utjevnet glidende gjennomsnitt.
- Lineært vektet glidende gjennomsnitt.
Vi vil gå gjennom hver enkelt, definere den, kode den og kartlegge den.
GBPUSD Daily chart. I svart, 200-dagers MA, i skarpt, 200-dagers EMA, i gult 200-dagers glatt MA, og i rosa, 200-dagers lineært vektet MA.
Enkelt glidende gjennomsnitt
Som navnet antyder, er dette ditt enkle, gjennomsnittlige gjennomsnitt som brukes overalt i statistikk og i utgangspunktet alle andre deler i våre liv. Det er rett og slett de totale verdiene av observasjonene delt på antall observasjoner.
Matematisk sett kan det skrives ned som:
I python kan vi definere en funksjon som beregner glidende gjennomsnitt som følger:
[Python-kode går her, vær så snill referer til den opprinnelige artikkellenken ovenfor, da det er tidkrevende å lime inn koden]
Funksjonen tar datastrukturen din representert av Data variabel, den glidende gjennomsnittsperioden (20, 60, 200 osv.) representert ved periode variabelen, hva vil du bruke den på ( på OHLC-datastrukturer, velg 3 for nære priser fordi pythonindeksering starter på null) representert av onwhat variabelen, og hvor -variabelen er hvor vil du at kolonnen for glidende gjennomsnitt skal vises. Vær oppmerksom på at du må ha en matrise på mer enn fire kolonner for at dette skal fungere, fordi det ikke automatisk oppretter en ny kolonne, men bare fyller den ut.
EURUSD Daglig tidshorisont med 200-dagers enkelt glidende gjennomsnitt.
Eksponentielt glidende gjennomsnitt
I motsetning til det enkle glidende gjennomsnittet som gir like store vekter til alle observasjoner, gir det eksponensielle glidende gjennomsnittet mer vekt på de nyere observasjonene. Det reagerer mer enn det enkle glidende gjennomsnittet med hensyn til nylige bevegelser.
Matematisk sett kan det skrives ned som:
Utjevningsfaktoren er ofte 2. Merk at hvis vi øker utjevningsfaktoren (også kjent som alfa), vil de nyere observasjonene ha mer vekt.
På pythonspråk , kan vi definere en funksjon som beregner EMA som følger:
[Python-koden går her, se den opprinnelige artikkellenken ovenfor når du limer inn koden er tidkrevende]
Funksjonen er selvforklarende, da den bare gjengir EMA-funksjonen som er presentert ovenfor.
EURUSD Daglig tidshorisont med eksponentielt glidende gjennomsnitt på 200 dager.
Glatt glidende gjennomsnitt
Dette glidende gjennomsnittet tar hensyn til det generelle bildet og blir mindre påvirket av nylige bevegelser. Det er min favoritt trendfølgende indikator. Matematisk sett kan det bli funnet ved ganske enkelt å multiplisere Days-variabelen i EMA-funksjonen med 2 og trekke fra 1. Dette betyr at for å transformere et eksponensielt glidende gjennomsnitt til en glattet, følger vi denne ligningen på pythonspråk, som transformerer den eksponensielle bevegelige gjennomsnitt til en glattet:
smoothed = (exponential * 2) - 1 # From exponential to smoothed
EURUSD Daglig tidshorisont med 200-dagers glatt glidende gjennomsnitt.
Lineært vektet glidende gjennomsnitt
Det er et enkelt glidende gjennomsnitt som legger mer vekt på nylige data. Den siste observasjonen har den største vekten, og hver før den har en gradvis avtagende vekt.Intuitivt har den mindre forsinkelse enn de andre glidende gjennomsnittene, men den er også den minst brukte, og dermed, det den får i forsinkelsesreduksjon, taper den i popularitet.
Matematisk sett kan den skrives ned som:
I pythonspråk kan vi definere en funksjon som beregner glidende gjennomsnitt som følger:
[Python-koden kommer her, se den opprinnelige lenken til artikkelen ovenfor, da liming av koden er tidkrevende]
EURUSD Daglig tidshorisont med 200-dagers vektet glidende gjennomsnitt.
I utgangspunktet, hvis vi har et datasett som består av to tall [1, 2] og vi vil beregne et lineært vektet gjennomsnitt, så gjør vi følgende:
- (2 x 2) + (1 x 1) = 5
- 5/3 = 1.66
Dette antar en tidsserie med tallet 2 som den siste observasjonen.
Konklusjon
Så hvilken velger du? Det spørsmålet overlates til den næringsdrivendes risikoprofil og hennes kjennskap til det glidende gjennomsnittet. Noen foretrekker enkle glidende gjennomsnitt, mens andre prøver å grave dypere ved å bruke kombinasjoner av eksponensielle og glatte glidende gjennomsnitt. Alt avhenger av deg for å finne din favoritt. Mitt råd? Vurder langsiktige glidende gjennomsnitt.
Svar
Hvorfor var det ingen som nevnte Pandas ennå? Python-dataanalysebibliotek
import pandas as pd, numpy as np
np.random.seed(1)
random\_walk = pd.Series(
np.random.randn(100)
).cumsum() # dummy data
random\_walk.ewm(span=10).mean() # ema
random\_walk.rolling(20).mean() # simple moving average
random\_walk.expanding().mean() # expanding average
index = pd.bdate\_range("2012","2013",freq="1h") # time series
series = pd.Series(
np.random.randn(index.shape[0]),index
)
series.rolling("100h").mean() # 100 hours, time based window
series.rolling(pd.Timedelta(hours=30)).mean() # You may use any offset compatible with index
series.rolling(10, win\_type="triang").mean() # triangle weights
series.rolling(10,center=True).mean() # value in the middle of window