Tuesday 17 October 2017

Pandas De Python Promedio Móvil Exponencial


Promedio móvil exponencial Promedio móvil exponencial El Promedio móvil exponencial difiere de un promedio móvil simple tanto por el método de cálculo como por la forma en que se ponderan los precios. El Promedio Móvil Exponencial (abreviado a las iniciales EMA) es efectivamente un promedio móvil ponderado. Con la EMA, la ponderación es tal que los precios de los días recientes se dan más peso que los precios más antiguos. La teoría detrás de esto es que los precios más recientes se consideran más importantes que los viejos precios, particularmente porque un promedio simple a largo plazo (por ejemplo 200 días) coloca el peso igual en los datos del precio que es sobre 6 meses de viejo y podría ser pensado De como ligeramente fuera de fecha. El cálculo de la EMA es un poco más complejo que el promedio móvil simple, pero tiene la ventaja de que no se tiene que mantener un gran registro de datos que cubran todos y cada uno de los precios de cierre de los últimos 200 días (o por muchos días) . Todo lo que necesita son la EMA para el día anterior y el precio de cierre de hoy para calcular la nueva media móvil exponencial. Cálculo del exponente Inicialmente, para el EMA, se necesita calcular un exponente. Para empezar, tome el número de días EMA que desea calcular y agregue uno al número de días que está considerando (por ejemplo, para un promedio móvil de 200 días, agregue uno para obtener 201 como parte del cálculo). Bueno, llame a Days1. Luego, para obtener el exponente, simplemente tome el número 2 y divídelo por Days1. Por ejemplo, el exponente para un promedio móvil de 200 días sería: 2 201. Que es igual a 0.01 Cálculo completo si el promedio móvil exponencial Una vez que hemos obtenido el exponente, todo lo que necesitamos ahora son dos más bits de información que nos permitan realizar el cálculo completo . El primero es la media móvil exponencial de los ayeres. Bueno, supongamos que ya sabemos esto como lo habríamos calculado ayer. Sin embargo, si usted ya no es consciente de EMA ayer, puede comenzar por calcular la media móvil simple para ayer, y utilizar esto en lugar de la EMA para el primer cálculo (es decir, el cálculo de hoy) de la EMA. Entonces mañana usted puede utilizar el EMA que usted calculó hoy, y así sucesivamente. La segunda pieza de información que necesitamos es el precio de cierre de hoy. Supongamos que queremos calcular el promedio móvil de 200 días Exponencial para una acción o acción que tiene un EMA anterior de 120 peniques (o centavos) y un precio de cierre actual de 136 peniques. El cálculo completo es siempre el siguiente: Promedio móvil actual exponencial (precios de cierre de los días actuales x Exponente) (días anteriores EMA x (1- Exponente)) Así, utilizando las figuras de ejemplo anteriores, EMA de 200 días sería: (136 x 0.01 ) (120 x (1- 0.01)) que es igual a una EMA para hoy de 120.16.Python Data Analysis Library pandas es una biblioteca de código abierto, con licencia BSD que proporciona estructuras de datos de alto rendimiento y fácil de usar y herramientas de análisis de datos para El lenguaje de programación de Python. Pandas es un proyecto patrocinado por NUMFocus. Esto ayudará a asegurar el éxito del desarrollo de los pandas como un proyecto open source de clase mundial. 0.19.0 Final (2 de octubre de 2017) Esta es una versión importante de 0.18.1 e incluye el número de cambios en la API, varias nuevas características, mejoras y mejoras de rendimiento junto con un gran número de correcciones de errores. Recomendamos que todos los usuarios actualicen esta versión. Véase ahora readcsv () ahora soporta el análisis de datos categóricos, vea aquí Se ha agregado una función unioncategorical () para combinar categoricals, Ver aquí PeriodIndex ahora tiene su propio período dtype, y cambiado para ser más consistente con otras clases de índice. Véase aquí Estructuras de datos escasas ganado apoyo mejorado de int y bool dtypes, vea aquí Las operaciones de comparación con la serie ya no ignora el índice, ver aquí para una visión general de los cambios de la API. Introducción de una API de desarrollo de pandas para funciones de utilidad, vea aquí. Deprecation de Panel4D y PanelND. Se recomienda representar estos tipos de datos n-dimensionales con el paquete xarray. Eliminación de los módulos previamente obsoletos pandas. io. data. Pandas. io. wb. Pandas. tools. rplot. Vea la descripción general de Whatsnew para una extensa lista de todas las mejoras y errores que se han corregido en 0.19.0. Por favor reporte cualquier problema aquí Mejor manera de instalar La mejor manera de obtener pandas es instalar a través de conda Builds para osx-64, linux-64, linux-32, win-64, win-32 para Python 2.7, Python 3.4 y Python 3.5 Están disponibles. Conda install pandas Quick vignette ¿Qué problema pandas resolver Python ha sido grande para la munging de datos y la preparación, pero menos para el análisis de datos y modelado. Pandas ayuda a llenar este vacío, lo que le permite llevar a cabo todo su flujo de trabajo de análisis de datos en Python sin tener que cambiar a un lenguaje más específico del dominio como R. Combinado con el excelente kit de herramientas IPython y otras bibliotecas, el entorno para hacer análisis de datos en Python sobresale En el rendimiento, la productividad y la capacidad de colaborar. Pandas no implementa una funcionalidad de modelado significativa fuera de la regresión lineal y panel para esto, mira a statsmodels y scikit-learn. Todavía se necesita más trabajo para hacer de Python un entorno de modelado estadístico de primera clase, pero estamos en camino hacia ese objetivo. Lo que nuestros usuarios tienen que decir 8220 pandas nos permite centrarnos más en la investigación y menos en la programación. Hemos encontrado pandas fácil de aprender, fácil de usar y fácil de mantener. El resultado final es que ha aumentado nuestra productividad. 8221 Director de Optimización amp Analytics 8220 pandas es la herramienta perfecta para salvar la brecha entre las iteraciones rápidas de análisis ad-hoc y código de calidad de producción. Si desea que una herramienta se utilice en una organización multidisciplinaria de ingenieros, matemáticos y analistas, no busque más. 8222 8220 Utilizamos pandas para procesar datos de series de tiempo en nuestros servidores de producción. La simplicidad y elegancia de su API, y su alto nivel de rendimiento para los conjuntos de datos de gran volumen, lo convirtieron en una opción perfecta para nosotros.8221 Destacados de la Biblioteca Un objeto DataFrame rápido y eficiente para la manipulación de datos con indexación integrada. Estructuras de datos en memoria y diferentes formatos: archivos CSV y texto, Microsoft Excel, bases de datos SQL y el rápido formato HDF5. Alineación inteligente de datos y manejo integrado de datos perdidos. Ganan alineación automática basada en etiquetas en los cálculos y manipulan fácilmente datos desordenados en una forma ordenada Flexible reestructuración y pivotamiento de conjuntos de datos Recorte inteligente basado en etiquetas. Indexación de fantasía. Y subconjunto de grandes conjuntos de datos Columnas se pueden insertar y eliminar de las estructuras de datos de tamaño mutabilidad Agregación o transformación de datos con un potente grupo por motor que permite dividir-aplicar-combinar las operaciones en conjuntos de datos Alto rendimiento combinar y unir conjuntos de datos Una forma intuitiva de trabajar con datos de alta dimensión en una estructura de datos de menor dimensión. Serie de tiempo - funcionalidad: generación y conversión de frecuencia, estadística de ventanas en movimiento, regresiones lineales de ventana móvil, cambio de fecha y retraso. Incluso crea desajustes de tiempo específicos de dominio y unirse a series de tiempo sin perder datos Muy optimizado para el rendimiento. Con rutas de código crítico escritas en Cython o C. Python con pandas está en uso en una amplia variedad de dominios académicos y comerciales, incluyendo Finanzas, Neurociencia, Economía, Estadísticas, Publicidad, Web Analytics, y más. Advanced Matplotlib Series (videos and ending Fuente solamente) Una vez que tenga una comprensión básica de cómo funciona Matplotlib, es posible que tenga 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. Querer más tutoriales Vaya a la página principal Matplotlib Crash CourseBacktesting un Promedio móvil Crossover en Python con pandas Por Michael Halls-Moore el 21 de enero de 2017 En el artículo anterior sobre Investigación Backtesting Entornos En Python Con Pandas creamos un objeto orientado a la investigación basada en Backtesting y lo probó en una estrategia de pronóstico aleatoria. En este artículo vamos a hacer uso de la maquinaria que introdujimos para llevar a cabo una investigación sobre una estrategia real, a saber, el Media Crossover móvil en AAPL. Estrategia de crossover de media móvil La técnica de crossover de media móvil es una estrategia de impulso simplista extremadamente conocida. A menudo se considera el ejemplo de Hello World para el comercio cuantitativo. La estrategia descrita aquí es larga solamente. Se crean dos filtros sencillos simples de media móvil, con periodos de retroceso variables, de una serie de tiempo particular. Las señales para comprar el activo ocurren cuando la media móvil de retroceso más corto excede la media móvil de retroceso más larga. Si el promedio más largo excede posteriormente el promedio más corto, el activo se vende de nuevo. La estrategia funciona bien cuando una serie de tiempo entra en un período de fuerte tendencia y luego invierte lentamente la tendencia. Para este ejemplo, he elegido Apple, Inc. (AAPL) como la serie de tiempo, con un breve lookback de 100 días y un largo lookback de 400 días. Este es el ejemplo proporcionado por la biblioteca de comercio algorítmico zipline. Por lo tanto, si queremos implementar nuestro propio backtester debemos asegurarnos de que coincide con los resultados en zipline, como un medio básico de validación. Implementación Asegúrese de seguir el tutorial anterior aquí. Que describe cómo se construye la jerarquía de objetos inicial para el backtester, de lo contrario el código siguiente no funcionará. Para esta implementación en particular he utilizado las siguientes bibliotecas: La implementación de macross. py requiere backtest. py del tutorial anterior. El primer paso es importar los módulos y objetos necesarios: Como en el tutorial anterior, vamos a subclase la clase base abstracta de la estrategia para producir MovingAverageCrossStrategy. Que contiene todos los detalles sobre cómo generar las señales cuando los promedios móviles de AAPL se cruzan entre sí. El objeto requiere una ventana corta y una ventana larga sobre la cual operar. Los valores se han fijado a valores predeterminados de 100 días y 400 días respectivamente, que son los mismos parámetros utilizados en el ejemplo principal de tirolesa. Los promedios móviles se crean mediante el uso de la función rollingmean de los pandas en las barrasCerrar el precio de cierre de la acción AAPL. Una vez que se han construido los promedios móviles individuales, la serie de señales se genera ajustando la colum igual a 1,0 cuando el promedio móvil corto es mayor que el promedio móvil largo, o 0,0 de lo contrario. A partir de esto, los pedidos de posiciones se pueden generar para representar señales comerciales. El MarketOnClosePortfolio está subclasificado de Portfolio. Que se encuentra en backtest. py. Es casi idéntica a la implementación descrita en el tutorial anterior, con la excepción de que las operaciones se llevan a cabo ahora en una base Close-to-Close, en lugar de una base Open-to-Open. Para obtener más información sobre cómo se define el objeto Portfolio, consulte el tutorial anterior. He dejado el código en la integridad y para mantener este tutorial autónomo: Ahora que las clases MovingAverageCrossStrategy y MarketOnClosePortfolio se han definido, una función principal se llamará para vincular todas las funciones. Además, el desempeño de la estrategia será examinado a través de un gráfico de la curva de equidad. El objeto de DataReader de pandas descarga los precios de OHLCV de las acciones de AAPL para el período del 1 de enero de 1990 al 1 de enero de 2002, momento en el que las señales DataFrame se crean para generar las señales de sólo larga duración. Posteriormente, la cartera se genera con una base de capital inicial de 100.000 USD y los rendimientos se calculan sobre la curva de patrimonio. El paso final es utilizar matplotlib para trazar un gráfico de dos cifras de los precios de AAPL, superpuestos con las medias móviles y las señales de compra / venta, así como la curva de equidad con las mismas señales de compra / venta. El código de trazado se toma (y se modifica) a partir del ejemplo de implementación de tirolesa. La salida gráfica del código es la siguiente. Hice uso del comando IPython paste para ponerlo directamente en la consola IPython mientras estaba en Ubuntu, de modo que la salida gráfica permaneció en la vista. Las barras de color rosa representan la compra de la acción, mientras que los downticks negros representan la venta de nuevo: Como se puede ver la estrategia pierde dinero durante el período, con cinco operaciones de ida y vuelta. Esto no es sorprendente teniendo en cuenta el comportamiento de AAPL en el período, que estaba en una ligera tendencia a la baja, seguido por un aumento significativo a partir de 1998. El período de retroceso de las señales de media móvil es bastante grande y esto afectó el beneficio del comercio final , Que de otro modo podría haber hecho rentable la estrategia. En los artículos siguientes crearemos un medio más sofisticado de analizar el rendimiento, así como describir cómo optimizar los períodos de retroceso de las señales individuales de media móvil. Michael Halls-Moore Mike es el fundador de QuantStart y ha estado involucrado en la industria de finanzas cuantitativas durante los últimos cinco años, principalmente como desarrollador de Quant y más tarde como consultor de comerciante de Quant para fondos de cobertura. Suavizado con Exponentially Weighted Moving Averages Toma una serie de tiempo ruidosa y reemplaza cada valor con el valor medio de un barrio sobre el valor dado. Este barrio puede consistir en datos puramente históricos, o puede estar centrado en el valor dado. Además, los valores en el vecindario pueden ponderarse usando diferentes conjuntos de pesos. Aquí hay un ejemplo de una media móvil ponderada de tres puntos, usando datos históricos, Aquí, representa la señal suavizada, y representa la serie de tiempo ruidosa. En contraste con las medias móviles simples, una media móvil ponderada exponencialmente (EWMA) ajusta un valor de acuerdo con una suma exponencialmente ponderada de todos los valores anteriores. Esta es la idea básica, esto es bueno porque usted no tiene que preocuparse por tener una ventana de tres puntos, frente a una ventana de cinco puntos, o preocuparse por la adecuación de su esquema de ponderación. Con la EWMA, las perturbaciones previas 8220 recordadas, 8221 y 8220 se olvidan lentamente, 8221 por el término en la última ecuación, mientras que con una ventana o barrio con límites discretos, una perturbación se olvida tan pronto como sale de la ventana. Promedio de la EWMA para acomodar las tendencias Después de leer sobre EWMAs en un libro de análisis de datos, había ido adelante felizmente con esta herramienta en cada aplicación de suavizado único que me encontré. No fue hasta más tarde que me enteré de que la función EWMA es realmente sólo apropiado para datos estacionarios, es decir, datos sin tendencias o estacionalidad. En particular, la función EWMA resiste las tendencias lejos de la media actual que 8282s ya 8220seen8221. Por lo tanto, si tiene una función de ruido ruidosa que va de 0 a 1 y luego vuelve a 0, entonces la función EWMA devolverá valores bajos en el lado de subida y altos valores en el lado de bajada. Una forma de eludir esto es suavizar la señal en ambas direcciones, marchar hacia adelante, y luego marchar hacia atrás, y luego promediar los dos. Aquí, usaremos la función EWMA proporcionada por el módulo pandas. Holt-Winters Segunda Orden EWMA Y aquí está un código de Python que implementa el método de segunda orden de Holt-Winters en otra función de sombrero ruidoso, como antes. Mensajes recientes Archivos

No comments:

Post a Comment