Thursday 26 October 2017

Python Calcular El Promedio Móvil Exponencial


Tengo un rango de fechas y una medida en cada una de esas fechas. Me gustaría calcular una media móvil exponencial para cada una de las fechas. ¿Alguien sabe cómo hacer esto Im nuevo a python. No parece que los promedios están incorporados en la biblioteca estándar de python, lo que me parece un poco extraño. Tal vez no estoy buscando en el lugar correcto. Por lo tanto, dado el siguiente código, ¿cómo podría calcular el promedio móvil ponderado de los puntos de IQ para las fechas de calendario (theres probablemente una mejor manera de estructurar los datos, cualquier consejo sería apreciado) preguntó Jan 28 09 at 18:01 My python is a Un poco oxidado (cualquier persona puede sentirse libre de editar este código para hacer correcciones, si he estropeado la sintaxis de alguna manera), pero aquí va. Esta función se mueve hacia atrás, desde el final de la lista hasta el principio, calculando la media móvil exponencial para cada valor, trabajando hacia atrás hasta que el coeficiente de peso para un elemento sea menor que la epsilon dada. Al final de la función, invierte los valores antes de devolver la lista (para que estén en el orden correcto para la persona que llama). (NOTA LATERAL: si estaba usando un lenguaje distinto de python, la Id crea primero una matriz vacía de tamaño completo y luego la relleno hacia atrás para que no tenga que invertirla al final, pero no creo que se pueda declarar Una gran matriz vacía en python. En las listas de python, añadir es mucho menos costoso que prepending, por lo que he construido la lista en orden inverso. Por favor, corrija si estoy equivocado.) El argumento alfa es el factor de desintegración en cada iteración. Por ejemplo, si usó un alfa de 0.5, entonces el valor promedio móvil de hoy estaría compuesto de los siguientes valores ponderados: Por supuesto, si usted tiene una enorme variedad de valores, los valores de diez o quince días no van a contribuir mucho Promedio ponderado de hoy. El argumento epsilon le permite establecer un punto de corte, debajo del cual dejará de preocuparse por valores antiguos (ya que su contribución al valor de hoy será insignificante). Youd invocar la función algo como esto: No sé Python, pero para la parte de promedio, ¿quiere decir un filtro de paso bajo exponencialmente decaying de la forma donde alfa dt / tau, dt el timestep de El filtro, tau la constante de tiempo del filtro (la variable-timestep forma de esto es como sigue, sólo clip dt / tau para no ser más de 1,0) Si desea filtrar algo como una fecha, asegúrese de convertir a un Cantidad de punto flotante como de segundos desde el 1 de enero de 1970. Respondí a Jan 28 09 a las 18:10 Encontré el fragmento de código anterior por earino bastante útil - pero necesitaba algo que pudiera suavizar continuamente un flujo de valores - así que lo refactoré a este : Y lo uso así: (donde pin. read () produce el siguiente valor Id como consumir). Respondió Feb 12 14 at 20:35 Im siempre cálculo EMAs con Pandas: He aquí un ejemplo de cómo hacerlo: Más información sobre Pandas EWMA: respondió Oct 4 15 at 12:42 Don39t versiones más recientes de Pandas tienen nuevas y mejores funciones. Ndash Cristian Ciupitu 11 de mayo a las 14:10 Tenga en cuenta que a diferencia de su hoja de cálculo, no calculo la SMA, y no espero para generar la EMA después de 10 muestras. Esto significa que mis valores difieren ligeramente, pero si lo gráfico, se sigue exactamente después de 10 muestras. Durante las primeras 10 muestras, la EMA que calculo es apropiadamente suavizada. Im en el proceso de crear un algoritmo de comercio de divisas y quería probar mi oportunidad de calcular EMA (Exponential Moving Averages). Mis resultados parecen ser correctos (en comparación con los cálculos que hice a mano), así que creo que el método siguiente funciona, pero sólo quería obtener un conjunto extra de ojos para que asegúrese de que no estoy perdiendo nada. Tenga en cuenta que esto acaba de devolver el EMA para el último precio, no devolver una matriz de EMAs como que no es lo que necesito para mi aplicación. La recursión es una buena herramienta para el trabajo correcto, pero aquí se utiliza para realizar bucle simple. Como tal el código. Es más difícil de leer y razonar. Es más lento porque gran parte del código en ema sólo necesita ejecutarse una vez. Fallará con el valor suficientemente grande de la ventana debido a la pila de llamadas Pythons desbordante. Por favor, documente al menos los parámetros de cada función, por ejemplo. Esa ventana es la longitud de la ventana, y esa posición cuenta hacia atrás desde el final de los datos. (De hecho, las cosas serían más claras si la posición fuera un índice normal hacia adelante en los datos) Aumentar una excepción cuando encuentre un parámetro tiene un valor no válido. Devolver Ninguno en su lugar sólo causará una excepción más confusa más tarde. De hecho, si intento Indicadores (). Ema (closeprices, 600) recibo recursión infinita porque sma devuelve None. Que hace que ema llama sma una y otra vez. El punto anterior también revela que si len (datos) lt ventana 2 no es la verificación de validez correcta. El 1 en data-window2 1: - window 1 no me parece correcto. Supongo que quieres data-window2: - window La declaración return previousema está en un lugar extraño porque en ese momento has calculado una nueva currentema. Este es el caso base de la recursión, y es costumbre manejar el caso base primero. Mi propuesta para ema: respondió Nov 26 14 at 18:56 Pretty shallow review: No necesitas escribir una clase para lo que estás haciendo (y te sugiero que eche un vistazo a este video). Tu clase no encapsula ningún dato y solo lo usas para tener tus funciones en una misma entidad. Supongo que las cosas más fáciles de entender si se va a definir classmethod para hacer obvio que usted no va a confiar en cualquier instancia en absoluto. Sin embargo, una opción aún mejor sería definir funciones en un módulo indicador. Respondió Nov 24 14 at 18:04 Gracias por las sugerencias que en realidad los tenía como métodos de clase y debatido ir y venir entre incluso el uso de una clase o simplemente la definición de funciones en un módulo indicador (que voy a hacer ahora). Ndash ChrisC Nov 25 14 at 19:12 Acaba de ver el video también, grandes cosas. Ndash ChrisC Nov 25 14 at 19:43 Su respuesta 2016 Stack Exchange, Incnumpy. average Eje a lo largo del cual un promedio de a. Si No. El promediado se realiza sobre la matriz aplanada. Pesos Arraylike, optional Una matriz de pesos asociados con los valores en a. Cada valor en a contribuye al promedio según su peso asociado. La matriz de pesos puede ser 1-D (en cuyo caso su longitud debe ser del tamaño de a a lo largo del eje dado) o de la misma forma que a. Si pesaNo. Entonces se supone que todos los datos en a tienen un peso igual a uno. Devuelto Bool, opcional El valor predeterminado es False. Si es verdad . Se devuelve la tupla (promedio de sumo - pesos), de lo contrario sólo se devuelve el promedio. Si pesaNo. Sumofweights es equivalente al número de elementos sobre los cuales se toma la media. Promedio, sumofweights. Arraytype o double Devuelve el promedio a lo largo del eje especificado. Cuando se devuelve True. Devuelve una tupla con el promedio como el primer elemento y la suma de los pesos como el segundo elemento. El tipo de retorno es Float si a es de tipo entero, de lo contrario es del mismo tipo que a. Sumofweights es del mismo tipo que el promedio.

No comments:

Post a Comment