A mozgóátlag végrehajtása a Pythonban

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 változó, a mozgóátlag periódus (20, 60, 200 stb.), amelyet a periódus változó képvisel, mire szeretné alkalmazni ( az OHLC adatstruktúrákon válasszon 3-at a közeli árakért, mert a python indexelés nullától kezdődik), amelyet a onwhat változó és a hol változó hol jelenik meg a mozgóátlag oszlop. Vegye figyelembe, hogy ennek működéséhez 4-nél több oszlopból álló tömbnek kell lennie, mert ez nem hoz létre automatikusan új oszlopot, hanem egyszerűen kitölti.

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

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük