Ne Pandas calculer ewm mal?
Lorsque vous essayez de calculer la moyenne mobile exponentielle (EMA) à partir des données financières dans un dataframe il semble que les Pandas' ewm approche est incorrecte.
Les bases sont bien expliquées dans le lien suivant:
http://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:moving_averages
Lorsque vous allez pour les Pandas explication, l'approche adoptée est la suivante (à l'aide de la "ajuster" paramètre False):
weighted_average[0] = arg[0];
weighted_average[i] = (1-alpha) * weighted_average[i-1] + alpha * arg[i]
Dans mon opinion est erronée. Le "arg" devrait être (par exemple), les valeurs de clôture, cependant, arg[0] est le premier moyen (c'est à dire la moyenne simple de la première série de données de la longueur de la période choisie), mais PAS la première valeur de clôture. arg[0] et arg[i] peut donc jamais être à partir des mêmes données. À l'aide de la "min_periods" paramètre ne semble pas résoudre ce problème.
Quelqu'un peut-il m'expliquer comment (ou si) les Pandas peuvent être utilisés pour calculer correctement l'EMA de données?
pandas question 13638 est encore ouvert, vous pouvez suivre, upvote et de contribuer code si vous voulez le voir mis en œuvre.
OriginalL'auteur jeronimo | 2016-06-20
Vous devez vous connecter pour publier un commentaire.
Il y a plusieurs façons d'initialiser une moyenne mobile exponentielle, donc je ne dirais pas que les pandas est de faire le mal, juste différent.
Ici serait un moyen de la calculer comme vous voulez:
OriginalL'auteur chrisb
Vous pouvez calculer EWMA à l'aide de l'alpha ou le coefficient (
span
) dans les Pandasewm
fonction.Formule pour l'utilisation de l'alpha:
(1 - alpha) * previous_val + alpha * current_val
où
alpha = 1 /period
Formule pour l'utilisation de coef:
((current_val - previous_val) * coeff) + previous_val
où
coeff = 2 /(period + 1)
Ici est de savoir comment vous pouvez utiliser les Pandas pour le calcul des formules ci-dessus:
Toutes mes excuses pour être ambigu.
base
est la base de la colonne dans DataFrame sur lesquels vous voulez calculer EWMA.petite correction df[target] = con.ewm(alpha=1.0 / période de, régler=False).moyenne()
OriginalL'auteur arkochhar
Voici un exemple de la façon dont les Pandas calcule les deux ajustées et non ajustées ewm:
Formule mathématique peut être trouvé à https://github.com/pandas-dev/pandas/issues/8861
OriginalL'auteur Ben