Cum se realizează media mobilă în Python

Cel mai bun răspuns

Am scris un articol despre Medium care prezintă diferitele tipuri de medii mobile și care le codifică funcțiile în Python (complet linkul pentru cod ca formatare este dificil: Cum se codifică diferite tipuri de medii mobile în Python. ). Iată articolul:

Programele de tranzacționare vin cu diferite tipuri de medii mobile deja preinstalate și gata de graficat. Dar poate fi interesant să înțelegeți cum să calculați aceste medii mobile pentru a le putea folosi atunci când testați înapoi strategii potențiale.

Dacă doriți o metodă de bricolaj, atunci cele de mai jos te vor interesa cu siguranță. Tot ce este necesar este un interpret python, cum ar fi SPYDER. Diferitele tipuri „cunoscute” de medii mobile sunt: ​​

  • Media mobilă simplă.
  • Media mobilă exponențială.
  • Medie mobilă netedă.
  • medie mobilă ponderată liniar.

Noi va parcurge fiecare, o va defini, o va codifica și o va grafica.

Diagrama GBPUSD Daily. În negru, 200 de zile MA, în roșu, 200 de zile EMA, în galben 200 de zile netezit MA și în roz, 200 de zile cu pondere liniară.

Media mobilă simplă

După cum sugerează și numele, aceasta este media simplă simplă care este folosită peste tot în statistici și practic orice altă parte din viața noastră. Este pur și simplu valorile totale ale observațiilor împărțite la numărul de observații.

Matematic vorbind, acesta poate fi notat ca:

În Python, putem defini o funcție care calculează mediile mobile după cum urmează:

[Codul Python merge aici, vă rog consultați linkul original al articolului de mai sus pentru că lipirea codului consumă mult timp]

Funcția preia structura de date reprezentată de Date variabilă, perioada medie mobilă (20, 60, 200 etc.) reprezentată de variabila perioadă , pe ce doriți să o aplicați ( pe structurile de date OHLC, alegeți 3 pentru prețuri apropiate, deoarece indexarea python începe de la zero) reprezentată de variabila onwhat și unde variabila este unde doriți să apară coloana medie mobilă. Rețineți că trebuie să aveți o matrice de mai mult de 4 coloane pentru ca acest lucru să funcționeze, deoarece nu creează automat o coloană nouă, ci pur și simplu o populează.

EURUSD Orizont de timp zilnic cu media mobilă simplă de 200 de zile.

Media mobilă exponențială

Spre deosebire de media mobilă simplă care dă greutăți egale tuturor observațiilor, media mobilă exponențială dă mai multă greutate observațiilor mai recente. Reacționează mai mult decât media mobilă simplă în ceea ce privește mișcările recente.

Matematic vorbind, poate fi notat ca:

Factorul de netezire este adesea 2. Rețineți că, dacă mărim factorul de netezire (cunoscut și sub denumirea de alfa), observațiile mai recente vor avea mai multă greutate.

În limbajul python , putem defini o funcție care calculează EMA după cum urmează:

[Codul Python merge aici, vă rugăm să consultați linkul original al articolului de mai sus pentru a lipi codul consumă mult timp]

Funcția se explică de la sine deoarece reproduce doar funcția EMA prezentată mai sus.

EURUSD Orizont de timp zilnic cu medie mobilă exponențială de 200 de zile.

Medie mobilă netedă

Această medie mobilă ia în considerare imaginea generală și este mai puțin afectată de mișcările recente. Este indicatorul meu preferat de urmărire a tendințelor. Din punct de vedere matematic, poate fi găsit prin simpla multiplicare a variabilei Days în funcția EMA cu 2 și scăderea 1. Aceasta înseamnă că pentru a transforma o medie mobilă exponențială într-una netedă, urmăm această ecuație în limbajul python, care transformă mișcarea exponențială media într-unul netezit:

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

Orizont de timp zilnic EURUSD cu o medie mobilă netedă de 200 de zile.

Media mobilă ponderată liniar

Este o medie mobilă simplă care pune mai multă greutate pe datele recente. Cea mai recentă observație are cea mai mare greutate și fiecare dinaintea acesteia are o greutate în scădere progresivă.Intuitiv, are un decalaj mai mic decât celelalte medii mobile, dar este și cel mai puțin utilizat și, prin urmare, ceea ce câștigă în reducerea decalajului, își pierde din popularitate.

Matematic vorbind, acesta poate fi notat ca:

În limbajul Python, putem defini o funcție care calculează mediile mobile astfel:

[Codul Python merge aici, vă rugăm să consultați linkul original al articolului de mai sus, deoarece lipirea codului necesită mult timp]

EURUSD Orizont de timp zilnic cu medie mobilă ponderată de 200 de zile.

Practic, dacă avem un set de date compus din două numere [1, 2] și vrem să calculăm o medie ponderată liniară, apoi vom face următoarele:

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

Aceasta presupune o serie temporală cu numărul 2 ca fiind cea mai recentă observație.

Concluzie

Deci, pe care să îl alegeți? Această întrebare este lăsată în seama profilului de risc al comerciantului și al familiarității sale cu media mobilă. Unii preferă medii mobile simple, în timp ce altele încearcă să adâncească folosind combinații de medii mobile exponențiale și netezite. Totul depinde de tine să-l găsești pe cel preferat. Sfatul meu? Luați în considerare mediile mobile pe termen lung.

Răspundeți

De ce nimeni nu a menționat încă panda? Python Data Analysis Library

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

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *