Migliore risposta
Ho scritto un articolo su Medium che presenta i diversi tipi di medie mobili e codifica le loro funzioni in Python (Completo link per il codice poiché la formattazione è difficile: Come codificare diversi tipi di medie mobili in Python. ). Ecco larticolo:
I software di trading sono dotati di diversi tipi di medie mobili già preinstallate e pronte per il grafico. Ma può essere interessante capire come calcolare queste medie mobili in modo da poterle utilizzare quando stai testando a posteriori potenziali strategie.
Se vuoi un metodo fai-da-te, allora il seguito ti interesserà sicuramente. Tutto ciò che serve è un interprete Python come SPYDER. I diversi tipi “noti” di medie mobili sono:
- Media mobile semplice.
- Media mobile esponenziale.
- Media mobile uniforme.
- Media mobile ponderata lineare.
Noi le esaminerà, le definirà, le codificherà e le rappresenterà un grafico.
Grafico giornaliero GBPUSD. In nero, MA a 200 giorni, in cremisi, EMA a 200 giorni, in giallo MA a 200 giorni levigato e in rosa MA a 200 giorni ponderata lineare.
Media mobile semplice
Come suggerisce il nome, questa è la media semplice e semplice che viene utilizzata ovunque nelle statistiche e fondamentalmente in qualsiasi altra parte della nostra vita. È semplicemente il valore totale delle osservazioni diviso per il numero di osservazioni.
Matematicamente parlando, può essere scritto come:
In python, possiamo definire una funzione che calcola le medie mobili come segue:
[Il codice Python va qui, per favore fare riferimento al collegamento dellarticolo originale sopra poiché incollare il codice richiede molto tempo]
La funzione accetta la struttura dei dati rappresentata dai Dati variabile, il periodo della media mobile (20, 60, 200, ecc.) rappresentato dalla variabile period , a cosa vuoi applicarlo ( su strutture dati OHLC, scegli 3 per i prezzi di chiusura perché lindicizzazione Python inizia da zero) rappresentata dalla variabile onwhat e dalla dove è la variabile dove vuoi che appaia la colonna della media mobile. Tieni presente che devi disporre di un array di più di 4 colonne affinché funzioni, perché non crea automaticamente una nuova colonna, ma semplicemente la popola.
EURUSD Orizzonte temporale giornaliero con media mobile semplice a 200 giorni.
Media mobile esponenziale
A differenza della media mobile semplice che fornisce pesi uguali a tutte le osservazioni, la media mobile esponenziale dà più peso alle osservazioni più recenti. Reagisce più della semplice media mobile rispetto ai movimenti recenti.
Matematicamente parlando, può essere scritto come:
Il fattore di attenuazione è spesso 2. Nota che se aumentiamo il fattore di attenuazione (noto anche come alfa), le osservazioni più recenti avranno più peso.
Nel linguaggio Python , possiamo definire una funzione che calcola lEMA come segue:
[Il codice Python va qui, fare riferimento al collegamento dellarticolo originale sopra come incollare il codice richiede molto tempo]
La funzione è autoesplicativa poiché riproduce semplicemente la funzione EMA presentata sopra.
EURUSD Orizzonte temporale giornaliero con media mobile esponenziale a 200 giorni.
Media mobile livellata
Questa media mobile tiene conto del quadro generale ed è meno influenzata dai movimenti recenti. È il mio indicatore di tendenza preferito. Matematicamente parlando, può essere trovato semplicemente moltiplicando la variabile Days nella funzione EMA per 2 e sottraendo 1. Ciò significa che per trasformare una media mobile esponenziale in una levigata, seguiamo questa equazione in linguaggio python, che trasforma il movimento esponenziale media in uno smussato:
smoothed = (exponential * 2) - 1 # From exponential to smoothed
EURUSD Orizzonte temporale giornaliero con media mobile livellata a 200 giorni.
Media mobile ponderata lineare
È una media mobile semplice che attribuisce maggiore importanza ai dati recenti. Losservazione più recente ha il peso maggiore e ognuna precedente ha un peso progressivamente decrescente.Intuitivamente, ha meno lag rispetto alle altre medie mobili ma è anche la meno utilizzata, e quindi, ciò che guadagna nella riduzione del lag, perde popolarità.
Matematicamente parlando, può essere scritto come:
Nel linguaggio Python, possiamo definire una funzione che calcola le medie mobili come segue:
[Il codice Python va qui, fare riferimento al collegamento dellarticolo originale sopra poiché incollare il codice richiede molto tempo]
EURUSD Orizzonte temporale giornaliero con media mobile ponderata a 200 giorni.
Fondamentalmente, se abbiamo un set di dati composto da due numeri [1, 2] e vogliamo calcolare una media ponderata lineare, quindi faremo quanto segue:
- (2 x 2) + (1 x 1) = 5
- 5/3 = 1.66
Ciò presuppone una serie temporale con il numero 2 come losservazione più recente.
Conclusione
Allora, quale scegliere? Questa domanda è lasciata al profilo di rischio del trader e alla sua familiarità con la media mobile. Alcuni preferiscono medie mobili semplici e semplici, mentre altri cercano di scavare più a fondo utilizzando combinazioni di medie mobili esponenziali e livellate. Dipende tutto da te per trovare il tuo preferito. Il mio consiglio? Considera le medie mobili a più lungo termine.
Risposta
Perché nessuno ha ancora menzionato i Panda? Libreria di analisi dei dati Python
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