Come eseguire la media mobile in Python

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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *