Thursday, November 24, 2016

Estrategia De Trading Arima Garch En La S - P500 Mercado Índice De Uso De R

Estrategia de Trading ARIMA + GARCH en el Índice Bursátil SP500 con R Por Michael Salas-Moore el 07 de octubre 2015 En este artículo quiero mostrar cómo aplicar todos los conocimientos adquiridos en los puestos de análisis de series temporales anteriores a una estrategia de negociación en el índice del mercado de valores de Estados Unidos SP500. Veremos que mediante la combinación de los modelos GARCH ARIMA y podemos superar significativamente un enfoque de "Buy-and-Hold" en el largo plazo. Estrategia general La idea de la estrategia es relativamente simple, pero si quieres experimentar con ella le recomiendo la lectura de los mensajes anteriores sobre el análisis de series de tiempo para entender lo que estaría modificando! La estrategia se lleva a cabo sobre una base de "rodadura": Para cada día, $ n $, los anteriores $ k $ días de los diferenciados retornos logarítmicos de un índice bursátil se utilizan como una ventana para el montaje de un modelo ARIMA y GARCH óptima. El modelo combinado se usa para hacer una predicción para los próximos rendimientos día. Si la predicción es negativa la acción está en cortocircuito en el cierre anterior, mientras que si es positivo que se deseaba. Si la predicción es la misma dirección que el día anterior, entonces no se cambia nada. Para que esta estrategia he utilizado los datos máximos disponibles de Yahoo Finanzas para el SP500. He tomado $ k = 500 $, pero este es un parámetro que puede ser optimizado con el fin de mejorar el rendimiento o reducir la reducción. El backtest se lleva a cabo de una forma sencilla usando vectorizado R. No se ha implementado en el backtester orientada a eventos Python hasta el momento. Por lo tanto el rendimiento alcanzado en un sistema de comercio de bienes sería probablemente un poco menos de lo que podría lograr aquí, debido a la comisión y el deslizamiento. Implementación de la estrategia Para implementar la estrategia que vamos a utilizar una parte del código que hemos creado previamente en la serie de artículos de análisis de series de tiempo, así como algunas nuevas bibliotecas incluyendo rugarch. que se ha sugerido a mí por Ilya Kipnis encima en QuantStrat comerciante. Voy a ir a través de la sintaxis de una manera paso a paso y luego presentar la plena aplicación al final, así como un enlace a mi conjunto de datos para el indicador ARIMA + GARCH. He incluido este último, ya que me ha dado un par de días en mi dekstop PC para generar las señales! Usted debe ser capaz de reproducir mis resultados en totalidad como el código en sí no es demasiado complejo, aunque no tomar algún tiempo para simular si usted lleva a cabo en su totalidad. La primera tarea es instalar e importar las librerías necesarias en I: Si ya ha instalado las bibliotecas que simplemente les puede importar: Una vez hecho esto se va a aplicar la estrategia para el SP500. Podemos utilizar quantmod para obtener datos que se remontan a 1950 para el índice. Yahoo Finanzas utiliza el símbolo "^ GSPC". Podemos entonces crear las diferenciados retornos logarítmicos del "Precio de Cierre" del SP500 y tira el valor inicial NA: Tenemos que crear un vector, las previsiones para almacenar nuestros valores de pronóstico en las fechas determinadas. Hemos establecido el foreLength longitud igual a la longitud de los datos de comercio que tenemos menos $ k $, la longitud de la ventana: En esta etapa tenemos que recorrer todos los días en los datos comerciales y encajamos un ARIMA apropiado y modelo GARCH a la ventana de rodadura de longitud $ k $. Teniendo en cuenta que tratamos 24 ataques ARIMA separadas y encajamos un modelo GARCH, para cada día, el indicador puede tomar mucho tiempo para generar. Utilizamos el índice d como una variable de bucle y bucle desde $ k $ a la longitud de los datos de comercio: Luego creamos la ventana rodando tomando las declaraciones de SP500 y seleccionar los valores entre $ 1 + d $ y $ k + d $, donde $ k = 500 $ para esta estrategia: Usamos el mismo procedimiento que en el artículo ARIMA para buscar a través de todos los modelos ARMA con $ p \ en \ $ y $ q \ in \ $, con la excepción de $ p, q = 0 $. Nos envolvemos la llamada arimaFit en un bloque de manejo de excepciones R TryCatch para asegurar que si no conseguimos un ajuste para un determinado valor de $ p $ y $ q $, lo ignoramos y pasar a la siguiente combinación de $ p $ y $ q $. Tenga en cuenta que nos fijamos el valor "integrado" de $ d = 0 $ (este es un diferente $ d $ a nuestro parámetro de indexación!) Y, como tal, en realidad estamos montando un modelo ARMA. en lugar de un ARIMA. El procedimiento de bucle nos proporcionará el "mejor" modelo ARMA apropiado, en términos de Akaike Criterio de Información, que podemos usar para alimentar a nuestro modelo GARCH: En el siguiente bloque de código que vamos a utilizar la biblioteca rugarch, con el modelo GARCH (1,1). La sintaxis para esto nos obliga a establecer un objeto especificación ugarchspec que tiene un modelo para la varianza y la media. La varianza recibe el modelo GARCH (1,1), mientras que la media toma un modelo ARMA (p, q), donde $ p $ y $ q $ son elegidos anteriormente. También elegimos la distribución SGED de los errores. Una vez que hemos elegido la especificación realizamos el montaje real de ARMA + GARCH con el comando ugarchfit, que tiene el objeto de especificación, los $ k $ vueltas del SP500 y un solucionador de optimización numérica. Hemos optado por utilizar híbrido. que trata diferentes solucionadores con el fin de aumentar la probabilidad de convergencia: Si el modelo GARCH no converge entonces simplemente establecemos el día para producir una predicción "de largo", que es claramente una suposición. Sin embargo, si el modelo converge entonces la fecha de salida y la dirección de predicción de mañana (1 o -1) como una cadena momento en el que el bucle se cierra. Con el fin de preparar la salida para el archivo CSV que he creado una cadena que contiene los datos separados por una coma con la dirección pronóstico para el día siguiente: El penúltimo paso es dar salida al archivo CSV en el disco. Esto nos permite tomar el indicador y utilizarlo en backtesting software alternativo para su posterior análisis, si así lo desea: Sin embargo, hay un pequeño problema con el archivo CSV tal y como está ahora. El archivo contiene una lista de fechas y una predicción de la dirección de mañana. Si tuviéramos que cargar esto en el código backtest a continuación tal como está, que en realidad sería la introducción de un sesgo de preanálisis debido a que el valor de predicción representaría datos no conocidos en el momento de la predicción. Con el fin de dar cuenta de esta simplemente tenemos que mover el valor pronosticado un día antes. He encontrado que esto es más sencillo el uso de Python. Como yo no quiero asumir que usted ha instalado ninguna bibliotecas especiales (tales como los pandas), me he mantenido a Python puro. Aquí está el pequeño script que lleva a cabo este procedimiento. Asegúrese de ejecutarlo en el mismo directorio que el archivo forecasts. csv: En este punto, ahora tenemos el archivo indicador corregido almacenado en forecasts_new. csv. Dado que este toma una cantidad considerable de tiempo para calcular, he proporcionado el archivo completo aquí para que puedas descargar a ti mismo: Resultados Estrategia Ahora que hemos generado nuestro archivo CSV indicador de que tenemos que comparar su rendimiento con "Buy Hold". Tenemos en primer lugar, leemos en el indicador desde el archivo CSV y almacenarlo como spArimaGarch: Luego creamos una intersección de las fechas de las previsiones ARIMA + GARCH y el conjunto original de las declaraciones del SP500. Podemos entonces calcular los retornos para la estrategia ARIMA + GARCH multiplicando el signo de previsión (+ o -) con el propio rendimiento: Una vez que tenemos los rendimientos de la estrategia ARIMA + GARCH podemos crear curvas de renta variable, tanto para el modelo ARIMA + GARCH y "Buy Hold". Por último, los combinamos en una sola estructura de datos: Por último, podemos utilizar el comando xyplot para trazar dos curvas de renta variable en la misma parcela: La curva de las acciones hasta el 06 de octubre 2015 es el siguiente: Curva de las acciones de la estrategia ARIMA + GARCH vs "Comprar Hold" para el SP500 desde 1952 Como se puede ver, en un período de 65 años, la estrategia ARIMA + GARCH ha superado de lejos "Comprar Hold". Sin embargo, también se puede ver que la mayoría de la ganancia se produjo entre 1970 y 1980. Tenga en cuenta que la volatilidad de la curva es mínima hasta la década de los 80, momento en que de manera significativa la volatilidad aumenta y los ingresos medios obtenidos son menos impresionantes. Es evidente que la curva de la equidad promete un gran rendimiento durante todo el período. Sin embargo, esta estrategia podría realmente haber sido negociable? En primer lugar, vamos a considerar el hecho de que el modelo ARMA solamente fue publicado en 1951. No fue muy ampliamente utilizado hasta la década de 1970 cuando Box Jenkins discutió en su libro. En segundo lugar, el modelo ARCH no fue descubierto (públicamente!) Hasta principios de los años 80, por Engle y sí GARCH fue publicado por Bollerslev en 1986. En tercer lugar, esta "backtest" en realidad ha llevado a cabo en un índice de la bolsa y no un instrumento físicamente negociable. Con el fin de tener acceso a un índice como éste habría sido necesario negociar futuros SP500 o una réplica de Exchange Traded Fund (ETF), como SPDR. Por lo tanto ¿es realmente tan apropiado aplicar esos modelos a una serie histórica antes de su invención? Una alternativa es comenzar la aplicación de los modelos a los datos más recientes. De hecho, podemos considerar el desempeño en los últimos diez años, desde el 1 de enero 2005 al día de hoy: Curva de las acciones de la estrategia ARIMA + GARCH vs "Comprar Hold" para el SP500 desde 2005 hasta hoy Como se puede ver la curva de las acciones se mantiene por debajo de una estrategia de retención Comprar por casi 3 años, pero durante la caída de la bolsa de 2008/2009 lo hace muy bien. Esto tiene sentido porque no es probable que haya una correlación serial significativa en este período y será bien capturado por los modelos ARIMA y GARCH. Una vez que el mercado se recuperó después de 2009 y entra en lo que parece ser más una tendencia estocástica, el rendimiento del modelo comienza a sufrir una vez más. Tenga en cuenta que esta estrategia se puede aplicar fácilmente a diferentes índices bursátiles, acciones u otras clases de activos. Le recomiendo que usted intente investigar otros instrumentos, ya que puede obtener mejoras sustanciales en los resultados presentados aquí. Próximos pasos Ahora que hemos terminado discutiendo la familia de modelos ARIMA y GARCH, quiero continuar con el análisis de series de tiempo de discusión, considerando los procesos de larga memoria, modelos de espacio de estado y de series de tiempo cointegrado. Estas áreas posteriores de series de tiempo nos introducirán a los modelos que pueden mejorar nuestras previsiones más allá de los que he presentado aquí, lo que aumentará significativamente nuestra rentabilidad comercial y / o reducir el riesgo. Aquí está la lista completa para la generación de indicadores, backtesting y trazado:


No comments:

Post a Comment