Nejlepší odpověď
Napsal jsem článek na médiu, který představuje různé typy klouzavých průměrů a kódování jejich funkcí v Pythonu (Full odkaz na kód při formátování je obtížný: Jak kódovat různé typy klouzavých průměrů v Pythonu. rozpětí>). Tady je článek:
Obchodní software je dodáván s různými typy klouzavých průměrů, které jsou již předinstalované a připravené k mapování. Může však být zajímavé pochopit, jak tyto klouzavé průměry vypočítat, abychom je mohli použít při zpětném testování potenciálních strategií.
Pokud chcete metodu „udělej si sám“, pak níže vás jistě zaujme. Vše, co je potřeba, je překladač pythonu, jako je SPYDER. Různé „známé“ typy klouzavých průměrů jsou:
- Jednoduchý klouzavý průměr.
- Exponenciální klouzavý průměr.
- Vyhlazený klouzavý průměr.
- Klouzavý průměr vážený lineárně.
My projde každou z nich, definuje ji, kóduje a mapuje.
GBPUSD denní graf. V černé, 200denní MA, v karmínové, 200denní EMA, ve žluté 200denní vyhlazené MA a v růžové 200denní lineárně vážené MA.
Jednoduchý klouzavý průměr
Jak název napovídá, toto je váš prostý průměr, který se používá všude ve statistikách a v podstatě v jakékoli jiné části našeho života. Je to jednoduše celková hodnota pozorování vydělená počtem pozorování.
Matematicky vzato lze zapsat jako:
V pythonu můžeme definovat funkci, která počítá klouzavé průměry takto:
[Pythonský kód jde sem, prosím odkaz na původní odkaz na článek výše, protože vložení kódu je časově náročné]
Funkce převezme vaši datovou strukturu reprezentovanou dat proměnná, období klouzavého průměru (20, 60, 200 atd.) představované proměnnou period , na co jej chcete použít ( v datových strukturách OHLC zvolte 3 pro blízké ceny, protože indexování pythonu začíná na nule) představované onwhat proměnnou a kde proměnná je místo, kde se má sloupec klouzavého průměru zobrazit. Aby to fungovalo, musíte mít pole více než 4 sloupce, protože nevytváří automaticky nový sloupec, ale jednoduše jej vyplní.
EURUSD Denní časový horizont s 200denním jednoduchým klouzavým průměrem.
Exponenciální klouzavý průměr
Na rozdíl od jednoduchého klouzavého průměru, který dává stejnou váhu všem pozorováním, dává exponenciální klouzavý průměr větší váhu novějším pozorováním. Reaguje více než jednoduchý klouzavý průměr s ohledem na nedávné pohyby.
Matematicky vzato jej lze zapsat jako:
Vyhlazovací faktor je často 2. Všimněte si, že pokud zvýšíme vyhlazovací faktor (známý také jako alfa), pak budou mít novější pozorování větší váhu.
V jazyce python , můžeme definovat funkci, která vypočítá EMA, takto:
[Pythonský kód jde sem, odkazujte prosím na původní odkaz na článek výše jako vložení kódu je časově náročné]
Tato funkce je samozřejmá, protože pouze reprodukuje výše uvedenou funkci EMA.
EURUSD Denní časový horizont s 200denním exponenciálním klouzavým průměrem.
Vyhlazený klouzavý průměr
Tento klouzavý průměr bere v úvahu obecný obraz a je méně ovlivněn nedávnými pohyby. Je to můj oblíbený indikátor sledování trendů. Matematicky to lze zjistit pouhým vynásobením proměnné Days ve funkci EMA 2 a odečtením 1. To znamená, že pro transformaci exponenciálního klouzavého průměru na vyhlazený postupujeme podle této rovnice v jazyce python, který transformuje exponenciální pohybující se průměr do vyhlazeného:
smoothed = (exponential * 2) - 1 # From exponential to smoothed
EURUSD Denní časový horizont s 200denním vyhlazeným klouzavým průměrem.
Lineárně vážený klouzavý průměr
jednoduchý klouzavý průměr, který klade větší důraz na nedávná data. Nejnovější pozorování má největší váhu a každé před ním má postupně klesající váhu.Intuitivně má menší zpoždění než ostatní klouzavé průměry, ale je také nejméně využívané, a proto tím, co získá redukcí zpoždění, ztrácí na popularitě.
Matematicky vzato to lze zapsat jako:
V jazyce python můžeme definovat funkci, která vypočítá klouzavé průměry následovně:
[Pythonský kód jde sem, odkaz na původní odkaz na článek naleznete výše, protože vložení kódu je časově náročné]
EURUSD Denní časový horizont s 200denním váženým klouzavým průměrem.
V zásadě platí, že pokud máme datovou sadu složenou ze dvou čísel [1, 2] a chceme vypočítat lineární vážený průměr, uděláme následující:
- (2 x 2) + (1 x 1) = 5
- 5/3 = 1,66
Toto předpokládá časovou řadu s číslem 2 jako nejnovější pozorování.
Závěr
Takže, který z nich si vybrat? Tato otázka je ponechána na rizikovém profilu obchodníka a jeho znalosti pohyblivého průměru. Někteří dávají přednost prostým jednoduchým klouzavým průměrům, zatímco jiní se snaží hlouběji kopat pomocí kombinací exponenciálních a vyhlazených klouzavých průměrů. Vše záleží na vás, abyste si našli svůj oblíbený. Moje rada? Zvažte dlouhodobější klouzavé průměry.
Odpověď
Proč ještě nikdo nezmínil Pandy? Knihovna pro analýzu dat v Pythonu
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