Bedste svar
Jeg har skrevet en artikel om Medium, der præsenterer de forskellige typer glidende gennemsnit og kodning af deres funktioner i Python (Fuld link til koden, da formatering er vanskelig: Sådan kodes forskellige typer glidende gennemsnit i Python. ). Her er artiklen:
Handelssoftware kommer med forskellige typer glidende gennemsnit, der allerede er forudinstalleret og klar til at blive kortlagt. Men det kan være interessant at forstå, hvordan man beregner disse glidende gennemsnit for at kunne bruge dem, når man back-tester potentielle strategier.
Hvis du vil have en gør-det-selv-metode, så nedenstående vil helt sikkert interessere dig. Alt, hvad der er brug for, er en pythontolker som SPYDER. De forskellige “kendte” typer af glidende gennemsnit er:
- Enkelt glidende gennemsnit.
- Eksponentielt glidende gennemsnit.
- Glat glidende gennemsnit.
- Lineært vægtet glidende gennemsnit.
Vi vil gennemgå hver enkelt, definere den, kode den og kortlægge den.
GBPUSD Dagligt diagram. I sort, 200-dages MA, i crimson, 200-dages EMA, i gul 200-dages glat MA og i lyserød, 200-dages lineærvægtet MA.
Simpel glidende gennemsnit
Som navnet antyder, er dette dit almindelige simple gennemsnit, der bruges overalt i statistikker og dybest set enhver anden del i vores liv. Det er simpelthen de samlede værdier af observationer divideret med antallet af observationer.
Matematisk set kan det skrives ned som:
I python kan vi definere en funktion, der beregner glidende gennemsnit som følger:
[Python-kode går her, tak henvis til det oprindelige artikellink ovenfor, da det at indsætte koden er tidskrævende]
Funktionen tager din datastruktur repræsenteret af Data variabel, den glidende gennemsnitlige periode (20, 60, 200 osv.) repræsenteret af variablen periode , hvad vil du anvende den på ( på OHLC-datastrukturer skal du vælge 3 for tætte priser, fordi pythonindeksering starter ved nul) repræsenteret af onwhat variablen og hvor variabel er, hvor ønsker du, at den glidende gennemsnitskolonne skal vises. Bemærk, at du skal have en matrix på mere end 4 kolonner for at dette skal fungere, fordi det ikke automatisk opretter en ny kolonne, men blot udfylder det.
EURUSD Daglig tidshorisont med 200-dages simpelt glidende gennemsnit.
Eksponentielt glidende gennemsnit
I modsætning til det enkle glidende gennemsnit, der giver lige vægt på alle observationer, giver det eksponentielle glidende gennemsnit mere vægt til de nyere observationer. Det reagerer mere end det enkle glidende gennemsnit med hensyn til nylige bevægelser.
Matematisk set kan det skrives ned som:
Udjævningsfaktoren er ofte 2. Bemærk, at hvis vi øger udjævningsfaktoren (også kendt som alfa), vil de nyere observationer have større vægt.
På pythonsprog , kan vi definere en funktion, der beregner EMA som følger:
[Python-koden går her, se den oprindelige artikellink ovenfor, når den indsætter koden er tidskrævende]
Funktionen er selvforklarende, da den kun gengiver EMA-funktionen, der er præsenteret ovenfor.
EURUSD Daglig tidshorisont med eksponentielt glidende gennemsnit på 200 dage.
Glat glidende gennemsnit
Dette glidende gennemsnit tager højde for det generelle billede og er mindre påvirket af de seneste bevægelser. Det er min yndlings trendfølgende indikator. Matematisk set kan det findes ved simpelthen at multiplicere Days-variablen i EMA-funktionen med 2 og trække 1. Dette betyder at for at omdanne et eksponentielt glidende gennemsnit til et udjævnet følger vi denne ligning på pythonsprog, der transformerer den eksponentielle bevægelse gennemsnit til en udjævnet:
smoothed = (exponential * 2) - 1 # From exponential to smoothed
EURUSD Daglig tidshorisont med 200-dages glat glidende gennemsnit.
Lineært vægtet glidende gennemsnit
Det er et simpelt glidende gennemsnit, der lægger større vægt på nylige data. Den seneste observation har den største vægt, og hver inden den har en gradvis faldende vægt.Intuitivt har den mindre forsinkelse end de andre glidende gennemsnit, men den er også den mindst anvendte, og derfor, hvad den vinder i forsinkelsesreduktion, mister den i popularitet.
Matematisk kan den nedskrives som:
På pythonsprog kan vi definere en funktion, der beregner glidende gennemsnit som følger:
[Python-kode vises her, se venligst det oprindelige artikellink ovenfor, da det er tidskrævende at indsætte koden]
EURUSD Daglig tidshorisont med 200-dages vægtet glidende gennemsnit.
Grundlæggende, hvis vi har et datasæt sammensat af to tal [1, 2] og vi vil beregne et lineært vægtet gennemsnit, så gør vi følgende:
- (2 x 2) + (1 x 1) = 5
- 5/3 = 1.66
Dette antager en tidsserie med tallet 2 som den seneste observation.
Konklusion
Så hvilken skal du vælge? Dette spørgsmål overlades til den erhvervsdrivendes risikoprofil og hendes fortrolighed med det glidende gennemsnit. Nogle foretrækker enkle glidende gennemsnit, mens andre prøver at grave dybere ved at bruge kombinationer af eksponentielle og udjævne glidende gennemsnit. Det hele afhænger af dig for at finde din favorit. Mit råd? Overvej glidende gennemsnit på længere sigt.
Svar
Hvorfor var der ingen, der nævnte Pandas endnu? 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