Jak obliczyć średnią ruchomą w Pythonie

Najlepsza odpowiedź

Napisałem artykuł na Medium, który przedstawia różne typy średnich kroczących i kodowanie ich funkcji w Pythonie (pełne link do kodu, ponieważ formatowanie jest trudne: Jak kodować różne typy średnich ruchomych w Pythonie. ). Oto artykuł:

Oprogramowanie handlowe jest dostarczane z różnymi typami średnich kroczących, które są już zainstalowane i gotowe do wykresów. Ale może być interesujące zrozumienie, jak obliczyć te średnie kroczące, aby móc ich użyć podczas testowania wstecznego potencjalnych strategii.

Jeśli potrzebujesz metody zrób to sam, wtedy poniższe z pewnością Cię zainteresują. Wszystko, czego potrzeba, to interpreter Pythona, taki jak SPYDER. Różne „znane” typy średnich kroczących to:

  • Prosta średnia krocząca.
  • Wykładnicza średnia krocząca.
  • Wygładzona średnia krocząca.
  • Liniowo ważona średnia krocząca.

Mamy przejdzie przez każdy z nich, zdefiniuje go, zakoduje i sporządzi wykres.

Wykres dzienny GBPUSD. W kolorze czarnym, 200-dniowa MA, w kolorze karmazynowym, 200-dniowa EMA, żółta 200-dniowa wygładzona MA i różowa, 200-dniowa liniowo ważona MA.

Prosta średnia krocząca

Jak sama nazwa wskazuje, jest to zwykła prosta średnia, która jest używana wszędzie w statystykach i właściwie w każdej innej części naszego życia. Jest to po prostu suma wartości obserwacji podzielona przez liczbę obserwacji.

Mówiąc matematycznie, można to zapisać jako:

W Pythonie możemy zdefiniować funkcję, która oblicza średnie kroczące w następujący sposób:

[Kod Pythona jest tutaj, proszę odwołaj się do linku do oryginalnego artykułu powyżej, ponieważ wklejanie kodu jest czasochłonne]

Funkcja pobiera strukturę danych reprezentowaną przez Dane zmienna, średni ruchomy okres (20, 60, 200 itd.) reprezentowany przez zmienną okres , do czego chcesz go zastosować ( w strukturach danych OHLC, wybierz 3 dla cen zamknięcia, ponieważ indeksowanie Pythona zaczyna się od zera) reprezentowane przez zmienną onwhat i gdzie zmienna to miejsce, w którym ma się pojawić kolumna średniej ruchomej. Zauważ, że musisz mieć tablicę składającą się z więcej niż 4 kolumn, aby to zadziałało, ponieważ nie tworzy automatycznie nowej kolumny, ale po prostu ją wypełnia.

EURUSD Dzienny horyzont czasowy z 200-dniową prostą średnią ruchomą.

Wykładnicza średnia krocząca

W przeciwieństwie do prostej średniej ruchomej, która daje równe wagi wszystkim obserwacjom, wykładnicza średnia krocząca nadaje większą wagę nowszym obserwacjom. Reaguje bardziej niż zwykła średnia krocząca w odniesieniu do ostatnich ruchów.

Matematycznie można to zapisać jako:

Współczynnik wygładzania często wynosi 2. Zauważ, że jeśli zwiększymy współczynnik wygładzania (znany również jako alfa), to nowsze obserwacje będą miały większą wagę.

W języku Python , możemy zdefiniować funkcję, która oblicza EMA w następujący sposób:

[Kod Pythona jest tutaj, odwołaj się do oryginalnego linku do artykułu powyżej jako wklejanie kodu jest czasochłonne]

Ta funkcja nie wymaga objaśnień, ponieważ odtwarza jedynie funkcję EMA przedstawioną powyżej.

EURUSD Dzienny horyzont czasowy z 200-dniową wykładniczą średnią kroczącą.

Wygładzona średnia krocząca

Ta średnia ruchoma uwzględnia ogólny obraz i ostatnie ruchy na nią w mniejszym stopniu wpływają. To mój ulubiony wskaźnik podążania za trendami. Mówiąc matematycznie, można to znaleźć po prostu mnożąc zmienną Days w funkcji EMA przez 2 i odejmując 1. Oznacza to, że aby przekształcić wykładniczą średnią ruchomą w wygładzoną, postępujemy zgodnie z tym równaniem w języku Python, które przekształca ruch wykładniczy średnią na wygładzoną:

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

EURUSD Dzienny horyzont czasowy z wygładzoną 200-dniową średnią kroczącą.

Liniowo ważona średnia krocząca

To jest prosta średnia krocząca, która przywiązuje większą wagę do najnowszych danych. Najnowsza obserwacja ma największą wagę, a każda poprzedzająca ją ma stopniowo malejącą wagę.Intuicyjnie ma mniejsze opóźnienie niż inne średnie kroczące, ale jest też najmniej używany, a zatem to, co zyskuje na redukcji lagów, traci na popularności.

Matematycznie można to zapisać jako:

W języku Python możemy zdefiniować funkcję obliczającą średnie kroczące w następujący sposób:

[Tutaj znajduje się kod Pythona, zapoznaj się z linkiem do oryginalnego artykułu powyżej, ponieważ wklejanie kodu jest czasochłonne]

EURUSD Dzienny horyzont czasowy z 200-dniową ważoną średnią kroczącą.

Zasadniczo, jeśli mamy zbiór danych złożony z dwóch liczb [1, 2] i chcemy obliczyć liniową średnią ważoną, to zrobimy co następuje:

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

Zakłada się szereg czasowy z numerem 2 jako ostatnią obserwacją.

Wniosek

Więc który wybrać? To pytanie pozostawia się profilowi ​​ryzyka przedsiębiorcy i jej znajomości średniej ruchomej. Niektórzy wolą proste, proste średnie kroczące, podczas gdy inni próbują sięgać głębiej, używając kombinacji wykładniczych i wygładzonych średnich kroczących. Wszystko zależy od Ciebie, czy znajdziesz swój ulubiony. Moja rada? Rozważ długoterminowe średnie kroczące.

Odpowiedź

Dlaczego nikt jeszcze nie wspomniał o Pandach? Biblioteka analizy danych Pythona

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

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *