Thursday 29 December 2016

Algoritmo De Media Móvil Python


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. Y en las listas de python, añadiendo es mucho menos costoso que prepending, por lo que he construido la lista en orden inverso. Por favor, corrija si Im mal.) 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 1 de enero 1970.Im en el proceso de creación de un algoritmo de comercio de divisas y quería probar mi tiro en el cálculo 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 devuelve 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, Inczipline 0.6.0 Un backtester para los algoritmos financieros. Zipline Zipline es una biblioteca de trading algorítmica Pythonic. El sistema está fundamentalmente orientado a eventos y una aproximación cercana a cómo funcionan los sistemas de trading en vivo. Actualmente, el backtesting está bien soportado, pero la intención es desarrollar la biblioteca tanto para el comercio en papel como para el comercio en vivo, de modo que la misma lógica utilizada para el backtesting pueda aplicarse al mercado. Zipline se utiliza actualmente en la producción como el motor de backtesting potenciando Quantopian (quantopian) una plataforma libre, centrada en la comunidad que permite el desarrollo y el backtesting en tiempo real de los algoritmos comerciales en el navegador web. Características de la discusión y ayuda Facilidad de uso: Zipline intenta salir de su camino para que pueda concentrarse en el desarrollo del algoritmo. Vea a continuación un ejemplo de código. Zipline viene las baterías incluidas como muchas estadísticas comunes como el promedio móvil y la regresión lineal se puede acceder fácilmente desde dentro de un algoritmo escrito por el usuario. La entrada de datos históricos y la producción de estadísticas de rendimiento se basa en Pandas DataFrames para integrarse muy bien en el ecosistema Python existente. Estadística y bibliotecas de aprendizaje de máquinas como matplotlib, scipy, statsmodels, sklearn y apoyo de desarrollo, análisis y visualización de los sistemas de comercio de última generación. Instalación Debido a que la tirolesa es código puro-python, debe ser muy fácil de instalar y configurar con pip: Si hay problemas para instalar las dependencias o tirolesa, recomendamos instalar estos paquetes a través de otros medios. Para Windows, la distribución Enthought Python incluye la mayoría de las dependencias necesarias. En OSX, el Superpack Scipy funciona muy bien. Dependencias Quickstart El siguiente código implementa un simple algoritmo de media móvil dual y lo prueba en datos extraídos de las finanzas de yahoo. Puede encontrar otros ejemplos en el directorio zipline / examples. Contribuciones Créditos Gracias por toda la ayuda hasta el momento rday por la razón sortino, la proporción de información, y la media móvil exponencial transformar snth yinhm para integrar zipline con yinhm / datafeed Jeremiah Lowin por enseñarnos los matices de Sharpe y Sortino Brian Cappello verdverm (Tony Worm ), Tipos de órdenes (stop, limit) benmccann para benchmarking contribuciones Quantopian Team (alerta si hemos omitido inadvertidamente el listado aquí) Entorno de desarrollo La siguiente guía asume que su sistema tiene virtualenvwrapper y pip ya instalados. Necesitará instalar algunas dependencias de bibliotecas de C: Instalación sugerida de las dependencias de biblioteca de Python usadas para el desarrollo: Guía de Estilo Para asegurarse de que los cambios y parches estén enfocados en cambios de comportamiento, la base de código de zipline se adhiere a PEP-8, python. org/dev/peps / Pep-0008 /. Y pyflakes, launchpad. net/pyflakes/. Los mantenedores comprueban el código usando el script flake8, github / bmcustodio / flake8. Que se incluye en el archivo requirementsdev. txt. Antes de enviar los parches o las solicitudes de extracción, asegúrese de que sus cambios pasen las pruebas en flip y las pruebas en zipline.

No comments:

Post a Comment