So führen Sie einen gleitenden Durchschnitt in Python durch

Beste Antwort

Ich habe einen Artikel über Medium geschrieben, in dem die verschiedenen Arten von gleitenden Durchschnitten vorgestellt und ihre Funktionen in Python (Voll) codiert werden Der Link für den Code als Formatierung ist schwierig: So codieren Sie verschiedene Arten von gleitenden Durchschnitten in Python. ). Hier ist der Artikel:

Handelssoftware enthält verschiedene Arten von gleitenden Durchschnitten, die bereits vorinstalliert und für Diagramme bereit sind. Es kann jedoch interessant sein zu verstehen, wie diese gleitenden Durchschnitte berechnet werden, um sie verwenden zu können, wenn Sie potenzielle Strategien erneut testen.

Wenn Sie eine Do-it-yourself-Methode wünschen, dann Das Folgende wird Sie sicherlich interessieren. Alles, was benötigt wird, ist ein Python-Interpreter wie SPYDER. Die verschiedenen „bekannten“ Arten von gleitenden Durchschnitten sind:

  • Einfacher gleitender Durchschnitt.
  • Exponentieller gleitender Durchschnitt.
  • Glätteter gleitender Durchschnitt.
  • Linear gewichteter gleitender Durchschnitt.

Wir wird jedes einzelne durchgehen, es definieren, codieren und grafisch darstellen.

GBPUSD-Tages-Diagramm. In Schwarz, 200-Tage-MA, in Purpur, 200-Tage-EMA, in Gelb, 200-Tage-Glättungs-MA und in Rosa, 200-Tage-MA mit linearer Gewichtung.

Einfacher gleitender Durchschnitt

Wie der Name schon sagt, ist dies Ihr einfacher Durchschnitt, der überall in der Statistik und im Grunde genommen in jedem anderen Teil unseres Lebens verwendet wird. Es sind einfach die Gesamtwerte der Beobachtungen geteilt durch die Anzahl der Beobachtungen.

Mathematisch gesehen kann dies wie folgt geschrieben werden:

In Python können wir eine Funktion definieren, die gleitende Durchschnitte wie folgt berechnet:

[Python-Code wird hier angezeigt Beziehen Sie sich auf den obigen Link zum Originalartikel, da das Einfügen des Codes zeitaufwändig ist.]

Die Funktion übernimmt Ihre Datenstruktur, die durch die Data Variable, die gleitende Durchschnittsperiode (20, 60, 200 usw.), die durch die Variable period dargestellt wird. Worauf möchten Sie sie anwenden? Wählen Sie in OHLC-Datenstrukturen 3 für Schlusskurse, da die Python-Indizierung bei Null beginnt. Dies wird durch die Variable onwhat und die Variable Dabei ist die Variable der Ort, an dem die Spalte mit dem gleitenden Durchschnitt angezeigt werden soll. Beachten Sie, dass Sie ein Array mit mehr als 4 Spalten haben müssen, damit dies funktioniert, da keine neue Spalte automatisch erstellt, sondern einfach ausgefüllt wird.

EURUSD Täglicher Zeithorizont mit einfachem gleitendem 200-Tage-Durchschnitt.

Exponentieller gleitender Durchschnitt

Im Gegensatz zum einfachen gleitenden Durchschnitt, der allen Beobachtungen das gleiche Gewicht verleiht, gibt der exponentielle gleitende Durchschnitt den neueren Beobachtungen mehr Gewicht. Es reagiert mehr als der einfache gleitende Durchschnitt in Bezug auf aktuelle Bewegungen.

Mathematisch kann es wie folgt geschrieben werden:

Der Glättungsfaktor ist häufig 2. Beachten Sie, dass die neueren Beobachtungen mehr Gewicht haben, wenn wir den Glättungsfaktor (auch als Alpha bezeichnet) erhöhen.

In der Python-Sprache können wir eine Funktion definieren, die die EMA wie folgt berechnet:

[Python-Code finden Sie hier. Bitte lesen Sie den obigen Link zum Einfügen des Codes ist zeitaufwändig]

Die Funktion ist selbsterklärend, da sie lediglich die oben dargestellte EMA-Funktion reproduziert.

EURUSD Täglicher Zeithorizont mit exponentiellem gleitendem 200-Tage-Durchschnitt.

Glätteter gleitender Durchschnitt

Dieser gleitende Durchschnitt berücksichtigt das allgemeine Bild und wird von den jüngsten Bewegungen weniger beeinflusst. Es ist mein bevorzugter Trendfolgeindikator. Mathematisch gesehen kann es durch einfaches Multiplizieren der Days-Variablen in der EMA-Funktion mit 2 und Subtrahieren von 1 gefunden werden. Dies bedeutet, dass wir, um einen exponentiellen gleitenden Durchschnitt in einen geglätteten zu transformieren, dieser Gleichung in Python-Sprache folgen, die die exponentielle Bewegung transformiert Durchschnitt in einen geglätteten:

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

EURUSD Täglicher Zeithorizont mit geglättetem gleitenden 200-Tage-Durchschnitt.

Linear gewichteter gleitender Durchschnitt

Dies ist der Fall Ein einfacher gleitender Durchschnitt, der den aktuellen Daten mehr Gewicht beimisst. Die jüngste Beobachtung hat das größte Gewicht und jede vorhergehende hat ein zunehmend abnehmendes Gewicht.Intuitiv hat es weniger Verzögerung als die anderen gleitenden Durchschnitte, aber es wird auch am wenigsten verwendet, und daher verliert es an Popularität, was es bei der Verringerung der Verzögerung gewinnt.

Mathematisch gesehen kann es wie folgt niedergeschrieben werden:

In der Python-Sprache können wir eine Funktion definieren, die gleitende Durchschnitte wie folgt berechnet:

[Python-Code finden Sie hier. Bitte lesen Sie den obigen Link zum Originalartikel, da das Einfügen des Codes zeitaufwändig ist.]

EURUSD Täglicher Zeithorizont mit gewichtetem gleitenden 200-Tage-Durchschnitt.

Grundsätzlich, wenn wir einen Datensatz haben, der aus zwei Zahlen besteht [1, 2] und Wenn wir einen linearen gewichteten Durchschnitt berechnen möchten, gehen wir wie folgt vor:

  • (2 x 2) + (1 x 1) = 5
  • 5/3 = 1,66

Dies setzt eine Zeitreihe mit der Nummer 2 als jüngste Beobachtung voraus.

Schlussfolgerung

Also, welches soll ich wählen? Diese Frage bleibt dem Risikoprofil des Händlers und seiner Vertrautheit mit dem gleitenden Durchschnitt überlassen. Einige bevorzugen einfache gleitende Durchschnitte, während andere versuchen, durch Kombinationen von exponentiellen und geglätteten gleitenden Durchschnitten tiefer zu graben. Es hängt alles von Ihnen ab, Ihren Favoriten zu finden. Mein Rat? Betrachten Sie längerfristige gleitende Durchschnitte.

Antwort

Warum hat noch niemand Pandas erwähnt? Python-Datenanalysebibliothek

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.