Tuesday, 15 November 2016

Calcular El Promedio Móvil Python


Digamos que tengo una lista: Quiero crear una función que calcula el promedio móvil de n días. Así que si n es 5, quiero que mi código para calcular el primero 1-5, añadir y encontrar el promedio, que sería de 3,0, a continuación, pasar a 2-6, calcular el promedio, que sería de 4,0, a continuación, 3 -7, 4-8, 5 - 9, 6 - 10. No quiero calcular los primeros n-1 días, así que a partir del día n, itll contar los días anteriores. Esto parece imprimir lo que quiero: Sin embargo, no sé cómo calcular los números dentro de esas listas. Mientras me gusta la respuesta de Martijns sobre esto, como george, me preguntaba si esto no sería más rápido usando una suma corriente en lugar de aplicar la suma () una y otra vez en la mayoría de los mismos números . También es interesante la idea de tener valores None por defecto durante la fase de rampa ascendente. De hecho, puede haber un montón de escenarios diferentes se podría concebir para los promedios móviles. Vamos a dividir el cálculo de promedios en tres fases: Ramp Up: Iniciando las iteraciones donde la iteración actual cuenta el tamaño de la ventana lt Progreso constante: Tenemos exactamente el número de tamaño de la ventana de elementos disponibles para calcular un promedio normal: sum (xiterationcounter-windowsize: iterationcounter) Windowsize Ramp Down: Al final de los datos de entrada, podríamos devolver otro número de Windowsize - 1. Tamaños de ventana arbitraria 1 Parámetros para activar / desactivar la producción de valores durante las fases de las funciones de Ramp Up / Down Callback para aquellas fases para controlar cómo se producen los valores. Esto puede ser utilizado para proporcionar constantemente un valor predeterminado (por ejemplo, Ninguno) o para proporcionar promedios parciales Parece ser un poco más rápido que la versión de Martijns - que es mucho más elegante, sin embargo. Heres el código de prueba: La pregunta original ahora puede ser resuelto con esta llamada de la función: contestó 18 de febrero 18 en 18:15 Utilice las funciones de la suma y del mapa. La función de mapa en Python 3 es básicamente una versión perezosa de esto: Im seguro de que puede adivinar lo que hace la función de suma. Respondió Feb 14 13 at 21:07 Una aproximación que evita recomputar sumas intermedias .. hacer que se ejecute (int (v)). entonces. (Runumlistk - runsumlistk-5) / 5) si usted hormiga para llevar alrededor de los números de una cadena .. Alt sin el global: asegúrese de hacer matemáticas flotantes, incluso si los valores de entrada son enteros respondió Feb 14 13 at 22:04 Indeed a El algoritmo de la suma de ejecución es más rápido. He publicado una respuesta que demuestra su punto. No hay necesidad de una variable global aquí. Ndash cfi Feb 18 13 at 18:16 right you are, yo estaba tratando demasiado difícil aviod un bucle explícito. Ndash agentp Feb 19 13 at 18:37 Su respuesta 2016 Stack Exchange, IncI tiene un rango de fechas y una medición 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 CI para las fechas del 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 por 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 puntos flotantes como segundos desde el 1 de enero de 1970. Serie avanzada de Matplotlib (vídeos y fuente final solamente) Una vez que tenga una comprensión básica de cómo funciona Matplotlib, podría tener interés en llevar su conocimiento un poco más. Algunas de las necesidades gráficas más complejas vienen en forma de análisis de acciones y gráficos, o Forex. En esta serie de tutoriales, iban a cubrir dónde y cómo agarrar, ordenar y organizar automáticamente algunos datos de precios de acciones y forex. A continuación, se va a gráfico con algunos de los indicadores más populares como un ejemplo. Aquí, bien hacer MACD (Moving Average Convergence Divergence) y el RSI (Relative Strength Index). Para ayudarnos a calcular éstos, usaremos NumPy, pero de otra manera los calcularemos todos por nuestra cuenta. Para adquirir los datos, iban a utilizar el Yahoo finanzas API. Esta API devuelve datos de precios históricos para el símbolo de ticker que especificamos y para la longitud de tiempo que pedimos. Cuanto mayor sea el tiempo, menor será la resolución de los datos obtenidos. Por lo tanto, si usted pide un período de tiempo de 1 día para AAPL, obtendrá 3-minutos OHLC (abrir alto cierre bajo) los datos. Si usted pide 10 años vale la pena, obtendrá datos diarios, o incluso tres marcos de tiempo de día. Tenga esto en mente y elija un marco de tiempo que se ajuste a sus objetivos. Además, si elige un marco de tiempo lo suficientemente bajo y obtiene suficiente granularidad, la API devolverá el tiempo en un sello de tiempo unix, en comparación con un sello de fecha. Una vez que tengamos los datos, queremos graficarlo. Para empezar, bien trazar las líneas, pero la mayoría de la gente querrá trazar un candelero en su lugar. Utilizaremos la función de candelabro de Matplotlibs y haremos una edición sencilla para mejorarla ligeramente. En este mismo gráfico, también superponen algunos cálculos de promedio móvil. Después de esto, se va a crear una subtrama, y ​​graficar el volumen. No podemos trazar el volumen en la misma subtrama inmediatamente, porque la escala es diferente. Para empezar, vamos a trazar el volumen por debajo en otra parcela secundaria, pero finalmente bien en realidad el volumen de superposición en la misma figura y lo hacen algo transparente. Luego, iban a agregar 2 subparcelas y trazar un indicador RSI en la parte superior y el indicador MACD en la parte inferior. Para todos estos, iban a compartir el eje X, por lo que podemos acercar y alejar en 1 parcela y todos coincidirán con el mismo marco de tiempo. Vamos a trazar en formato de fecha para el eje X, y personalizar casi todas las cosas que podemos para la estética. Esto incluye el cambio de los colores de las etiquetas, colores de borde / columna, colores de línea, colores de candelabro de OHLC, aprender a crear un gráfico relleno (para el volumen), histogramas, dibujar líneas específicas (hline para RSI) y mucho más. Heres el resultado final (tengo una versión de Python 3 y una de Python 2. Python 3 primero, luego Python 2. Asegúrate de usar el que coincida con tu versión de Python): Eso es todo por ahora. Quieres más tutoriales?

No comments:

Post a Comment