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