Hur man utför glidande medelvärde i Python

Bästa svaret

Jag har skrivit en artikel på Medium som presenterar de olika typerna av glidande medelvärden och kodar deras funktioner i Python (Full länk för koden eftersom formatering är svår: Hur man kodar olika typer av glidande medelvärden i Python. ). Här är artikeln:

Handelsprogramvaror kommer med olika typer av glidande medelvärden som redan är förinstallerade och redo att kartläggas. Men det kan vara intressant att förstå hur man beräknar dessa glidande medelvärden för att kunna använda dem när du testar om potentiella strategier.

Om du vill ha en gör-det-själv-metod, då nedan kommer säkert att intressera dig. Allt som behövs är en pythontolk som SPYDER. De olika ”kända” typerna av glidande medelvärden är:

  • Enkelt glidande medelvärde.
  • Exponentiellt glidande medelvärde.
  • Utjämnat glidande medelvärde.
  • Linjärt viktat glidande medelvärde.

Vi går igenom var och en, definierar den, kodar den och kartlägger den.

GBPUSD Dagligt diagram. I svart, 200-dagars MA, i rött, 200-dagars EMA, i gult 200-dagars utjämnad MA och i rosa, 200-dagars linjärt viktad MA.

Enkelt glidande medelvärde

Som namnet antyder är detta ditt vanliga enkla genomsnitt som används överallt i statistik och i princip någon annan del i våra liv. Det är helt enkelt observationernas totala värden dividerat med antalet observationer.

Matematiskt kan det skrivas ned som:

I python kan vi definiera en funktion som beräknar glidande medelvärden enligt följande:

[Python-kod går här, snälla hänvisa till den ursprungliga artikellänken ovan eftersom att klistra in koden är tidskrävande]

Funktionen tar din datastruktur som representeras av Data variabel, den rörliga genomsnittliga perioden (20, 60, 200, etc.) representerad av period variabel, vad vill du använda den på ( på OHLC-datastrukturer, välj 3 för nära priser eftersom pythonindexering börjar vid noll) representerad av onwhat variabeln och var variabel är var vill du att kolumnen för glidande medel ska visas. Observera att du måste ha en matris på mer än fyra kolumner för att detta ska fungera, eftersom det inte automatiskt skapar en ny kolumn utan bara fyller i den.

EURUSD Daglig tidshorisont med 200-dagars enkelt glidande medelvärde.

Exponentiellt glidande medelvärde

Till skillnad från det enkla glidande medelvärdet som ger lika vikter för alla observationer, ger det exponentiella glidande genomsnittet mer vikt till de nyare observationerna. Det reagerar mer än det enkla glidande genomsnittet med avseende på de senaste rörelserna.

Matematiskt kan det skrivas ner som:

Utjämningsfaktorn är ofta 2. Observera att om vi ökar utjämningsfaktorn (även känd som alfa), kommer de senaste observationerna att ha större vikt.

På pythonspråk kan vi definiera en funktion som beräknar EMA enligt följande:

[Python-koden går här, se den ursprungliga artikellänken ovan när du klistrar in koden är tidskrävande]

Funktionen är självförklarande eftersom den bara återger EMA-funktionen som presenteras ovan.

EURUSD Daglig tidshorisont med exponentiellt glidande medelvärde på 200 dagar.

Utjämnat glidande medelvärde

Detta glidande medelvärde tar hänsyn till den allmänna bilden och påverkas mindre av de senaste rörelserna. Det är min favoritföljande indikator. Matematiskt kan det hittas genom att helt enkelt multiplicera Days-variabeln i EMA-funktionen med 2 och subtrahera 1. Detta innebär att för att omvandla ett exponentiellt glidande medelvärde till ett utjämnat följer vi denna ekvation på pythonspråk, som förvandlar det exponentiella genomsnitt till en jämn:

smoothed = (exponential * 2) - 1 # From exponential to smoothed

EURUSD Daglig tidshorisont med 200-dagars utjämnat glidande medelvärde.

Linjärt viktat glidande medelvärde

Det är ett enkelt glidande medelvärde som lägger större vikt vid de senaste uppgifterna. Den senaste observationen har den största vikten och varje före den har en gradvis minskande vikt.Intuitivt har den mindre fördröjning än de andra glidande medelvärdena, men den är också den minst använda, och därmed, vad den vinner i fördröjningsreduktion, tappar den i popularitet.

Matematiskt kan den skrivas ner som:

På pythonspråk kan vi definiera en funktion som beräknar glidande medelvärden enligt följande:

[Python-kod går här, se originallänken ovan eftersom klistra in koden är tidskrävande]

EURUSD Daglig tidshorisont med 200-dagars viktat glidande medelvärde.

I grund och botten, om vi har en dataset som består av två siffror [1, 2] och vi vill beräkna ett linjärt viktat medelvärde, så gör vi följande:

  • (2 x 2) + (1 x 1) = 5
  • 5/3 = 1.66

Detta förutsätter en tidsserie med siffran 2 som den senaste observationen.

Slutsats

Vilken ska du välja? Den frågan överlämnas till näringsidkarens riskprofil och hennes förtrogenhet med det glidande genomsnittet. Vissa föredrar vanliga enkla glidande medelvärden medan andra försöker gräva djupare genom att använda kombinationer av exponentiella och utjämnade glidande medelvärden. Allt beror på att du hittar din favorit. Mitt råd? Tänk på långsiktiga glidande medelvärden.

Svar

Varför ingen nämnde Pandas ännu? Python-dataanalysbibliotek

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

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *