Legjobb válasz
A Medium-on írtam egy cikket, amely bemutatja a mozgóátlagok különböző típusait és függvényeik kódolását a Pythonban (teljes link a kódra, mivel a formázás nehéz: Különböző típusú mozgó átlagok kódolása a Pythonban. ). Íme a cikk:
A kereskedési szoftverek különböző típusú mozgóátlagokkal rendelkeznek, amelyek már előre vannak telepítve és készek a diagramok készítésére. De érdekes lehet megérteni, hogyan kell kiszámítani ezeket a mozgóátlagokat, hogy azokat felhasználni lehessen, amikor a potenciális stratégiákat teszteljük.
Ha csináld magad módszert szeretnél, akkor az alábbiak biztosan érdekelni fogják. Csak egy python-tolmácsra van szükség, például a SPYDER-re. A mozgóátlagok „ismert” típusai a következők:
- Egyszerű mozgóátlag.
- Exponenciális mozgóátlag.
- Simított mozgóátlag.
- Lineárisan súlyozott mozgóátlag.
Mi mindegyiket végigméri, definiálja, kódolja és ábrázolja.
GBPUSD napi diagram. Fekete, 200 napos, bíbor, 200 napos EMA, sárga, 200 napos simított MA és rózsaszínű, 200 napos, lineárisan súlyozott MA.
Egyszerű mozgóátlag
Ahogy a neve is sugallja, ez az Ön egyszerű egyszerű átlaga, amelyet mindenhol a statisztikákban használnak, és alapvetően az életünk bármely más részében. Ez egyszerűen a megfigyelések összesített értékét elosztva a megfigyelések számával.
Matematikailag nézve így írható le:
A pythonban a következőképpen definiálhatunk egy függvényt, amely kiszámítja a mozgó átlagokat:
[Python kód ide kerül, kérem lásd a fenti eredeti cikk hivatkozását, mivel a kód beillesztése időigényes]
A függvény elveszi az adatstruktúrát, amelyet a Data
EURUSD napi időhorizont 200 napos egyszerű mozgóátlaggal.
Exponenciális mozgóátlag
Az egyszerű mozgóátlaggal szemben, amely minden megfigyelésnek egyenlő súlyt ad, az exponenciális mozgóátlag nagyobb súlyt ad az újabb megfigyeléseknek. Többet reagál, mint az egyszerű mozgóátlag a legutóbbi mozgások tekintetében.
Matematikailag nézve így írható le:
A simító tényező gyakran 2. Ne feledje, hogy ha növeljük a simító tényezőt (más néven alfa), akkor az újabb megfigyeléseknek nagyobb lesz a súlyuk.
Python nyelvben , az EMA-t kiszámító függvényt a következőképpen definiálhatjuk:
[A Python kód ide kerül, kérjük, olvassa el a fenti eredeti cikk hivatkozását a kód beillesztéseként. időigényes]
A funkció magától értetődő, mivel csupán a fent bemutatott EMA funkciót reprodukálja.
EURUSD napi időhorizont 200 napos exponenciális mozgóátlaggal.
Simított mozgóátlag
Ez a mozgó átlag figyelembe veszi az általános képet, és a közelmúltbeli mozgások kevésbé befolyásolják. Ez a kedvenc trendkövető mutatóm. Matematikailag úgy találhatjuk, hogy egyszerűen megszorozzuk a Days változót az EMA függvényben 2-vel, és kivonjuk az 1-et. Ez azt jelenti, hogy egy exponenciális mozgóátlag simítottá alakításához ezt az egyenletet követjük python nyelven, amely átalakítja az exponenciális mozgást átlag simítottá:
smoothed = (exponential * 2) - 1 # From exponential to smoothed
EURUSD napi időhorizont 200 napos simított mozgóátlaggal.
Lineárisan súlyozott mozgóátlag
Ez az egy egyszerű mozgóátlag, amely nagyobb súlyt fektet a legújabb adatokra. A legfrissebb megfigyelésnek van a legnagyobb súlya, és mindegyiknek előtte fokozatosan csökken a súlya.Intuitív módon kevesebb késéssel rendelkezik, mint a többi mozgóátlag, de a legkevésbé is használják, és ezért, amit nyer a késés csökkentésében, elveszíti a népszerűségét.
Matematikailag nézve így írható le:
Python nyelvben a következőképpen definiálhatunk egy függvényt, amely kiszámítja a mozgó átlagokat:
[A Python kód ide kerül, kérjük, olvassa el a fenti eredeti cikk hivatkozását, mivel a kód beillesztése időigényes]
EURUSD napi időhorizont 200 napos súlyozott mozgóátlaggal.
Alapvetően, ha két számból [1, 2] és lineáris súlyozott átlagot akarunk kiszámítani, akkor a következőket tesszük:
- (2 x 2) + (1 x 1) = 5
- 5/3 = 1.66
Ez a 2. számú idősort feltételezi a legfrissebb megfigyelésként.
Következtetés
Tehát melyiket válasszuk? Ez a kérdés a kereskedő kockázati profiljára és a mozgó átlag ismertségére marad. Egyesek a sima egyszerű mozgóátlagokat kedvelik, míg mások az exponenciális és a simított mozgóátlagok kombinációinak felhasználásával próbálnak mélyebbre ásni. Minden azon múlik, hogy megtalálja-e a kedvencét. Tanácsom? Vegye figyelembe a hosszabb távú mozgóátlagokat.
Válasz
Miért nem említette még senki a pandákat? Python adatelemző könyvtár
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