Quantmod Media Móvil Crossover


Mensajes recientes Comentarios recientes Archivos Categorías mbeven en Uncategorized 13 de noviembre 2017 22 de noviembre de 2017 592 Palabras Moving Average Crossover Strategy: Part 1 Tuve una entrevista hace un par de semanas para una práctica de comercio cuán, donde el entrevistador me pidió que codificar un Estrategia de media móvil. Pensamiento I8217d ponerlo en mi blog Aquí es Wikipedia8217s tomar en la media móvil crossover. Esta es una de las estrategias más fáciles de codificar, y probablemente una buena cosa para saber para las entrevistas comerciales. I8217ve elegido para crear una estrategia utilizando los 4 grandes bancos australianos. Los precios de estos bancos están muy correlacionados. El promedio a corto plazo aquí es un índice medio ponderado del precio del banco de la Commonwealth de Australia (CBA), de la corporación bancaria de Westpac (WBC) y del banco nacional de Australia (NAB), que he llamado 8216Trio8217. El promedio a largo plazo es Australia y el Grupo Bancario de Nueva Zelanda (ANZ), que también he indexado. Mi racionalidad aquí es que ANZ es la más pequeña de la 8216Big 48217, y por lo tanto copia lo que hacen los bancos más grandes. Discutible. Estos bancos forman un oligopolio en el espacio bancario institucional australiano, y mi sospecha es que de alguna manera comunican sus estrategias corporativas. De todas maneras, gráficos de medias móviles es útil para mirar, y esto se puede implementar fácilmente en datos intradía en vivo, donde el gráfico se hace para actualizar cada segundo o algo. A continuación, podría poner en una segunda pantalla a su pantalla principal de comercio para mantener un ojo en las tendencias históricas durante todo el día. En la Parte 2, I8217ll probar el desempeño de esta estrategia y 8216optimise8217 lo. Moving Average Crossover Strategy 8211 Análisis histórico Michael Beven 20171113 Grab Australiano big 4 banks8217 data library (quantmod) Para la biblioteca de medias móviles (TTR) Establecer el período de análisis start. date as. Date (82202013-01-018221) end. date as. Date ( Sys. Date ()) today8217s date analysis. time as. numeric (end. analysis. period 8211 start. analysis. period) Primero obtenga una columna de los días de negociación deseados. Utilice WBC como maniquí getSymbols (8220WBC. AX8221, fromstart. date, toend. date) tmp Ad (WBC. AX) fechas as. data. frame (tiempo (tmp)) Westpac getSymbols (8220WBC. AX8221, fromstart. date, toend. Fecha) WBC. AX. Prices Ad (WBC. AX) Commonwealth getSymbols (8220CBA. AX8221, fromstart. date, toend. date) Anuncio CBA. AX. Prices (CBA. AX) NAB getSymbols (8220NAB. AX8221, fromstart. date, Toend. date) Anuncio NAB. AX. Prices (ANAB. AX) ANZ getSymbols (8220ANZ. AX8221, fromstart. date, toend. date) Anuncio ANZ. AX. Prices (ANZ. AX) Índice de ANZ ANZ. AX. Index ANZ. AX. Prices / as. numeric (rep (ANZ. AX. Prices1, dim (dates) 1)) 100 Índice de WBC CBA NAB Trio. AX. Index (WBC. AX. Prices CBA. AX. Prices NAB. AX. Precios) / as. numeric (representante (WBC. AX. Prices1 CBA. AX. Prices1 NAB. AX. Prices1, dim (dates) 1)) 100 Datos para el análisis, con los promedios móviles / móviles df merge (Trio. AX. Index , ANZ. AX. Index, SMA (Trio. AX. Index, n 15), SMA (ANZ. AX. Index, n 100)) Renombrar correctamente nombres (df) 1 8220Trio. Index8221 nombres (df) 2 8220ANZ. Index8221 nombres (Df) 3 8220Trio. Index. MA.158221 nombres (df) 4 8220ANZ. Index. MA.1008221 Vista rápida matplot (df, tipo 8220l8221, lwd1, lty1, col 1: 6, principal 8220Australian Big 4 Banks 8211 Promedios móviles8221, (8220Index: base8221, start. date), xaxt8221n8221) leyenda (8220topleft8221, nombres (df), col1: ncol (df), lty1, cex.65) timelabelslt-formato (índice (df)) eje (1, at1: (M. lt, ma. st) trade. signal 0 si (is. na (ma. lt) es. na (ma. st)) trade. signal 0 else if (Ma. lt lt ma. st) trade. signal 1 else si (ma. lt gt ma. st) trade. signal -1 return (trade. signal) Añadir señales de compra / venta a df df merge (df, trade. signalrep (Dfi, 4, dfi, 3) Python vs R 3: Un simple backtest de crossover de media móvil en SPY Esto es El tercero de una serie que está comparando Python y R para el análisis de comercio cuantitativo. Utilizando el framework de tirolesa para Python y el trabajo de Systematic Investor Toolbox para R. Implemento el mismo modelo de cross-over de media móvil en cada idioma. Debido a la naturaleza OOP de Python hay muchas diferencias entre los dos lenguajes, lo que lleva al doble de código. Presumiblemente, la complejidad agregada de OO es útil en estrategias mucho más complicadas. Python R Python R Siguiente en la serie se busca en la métrica de rendimiento incorporado de los idiomas y backtesting disponibles paquetes. Vectorizado Backtesting en Excel Ahora para aquellos de ustedes que me conocen como un blogger podría encontrar este post un poco heterodoxo a mi estilo tradicional De escribir, sin embargo, en el espíritu de la evolución, inspirado por un amigo mío Stuart Reid (TuringFinance), voy a seguir algunos de los consejos sugeridos en la siguiente entrada del blog. Al ser un estudiante en el programa EPAT, estaba emocionado de aprender la metodología que otros utilizan cuando se trata de backtesting. Como de costumbre, comenzamos en Excel y luego migrar a R. Después de haber escrito una serie de blogs sobre backtesting en Excel y luego pasar a R. Me interesó mucho ver un método ligeramente diferente utilizado por el equipo QuantInsti. Por favor, descargue la hoja de cálculo de Excel para que pueda seguir el ejemplo a medida que avanzamos. Al calcular los precios de transacción, abre algunas puertas muy interesantes para implementar el análisis de MAE. La principal diferencia en el método es que abre la puerta para métricas de rendimiento como: Retornos positivos totales Retornos negativos Negociaciones positivas Operaciones negativas Ratio promedio Rendimiento promedio MAE (Maximum Adverse Excursión) Pero sufre de no ser capaz de trazar una curva de equidad como mi método original (que me gusta pensar en nosotros un backtest vectorizado), sin embargo, puede incorporar fácilmente la curva de equidad, como lo hice en este post. Objetivo de la misión Construir el Hello World de estrategias de negociación: la estrategia de crossover de media móvil corta corta. Paso 1: Obtener datos Hay varios lugares desde los que puede obtener datos, sin embargo, para este ejemplo obtendremos datos de Yahoo Finance. Estaré construyendo este ejemplo usando Google como un recurso compartido. Aquí hay un enlace para descargar los datos de precios en formato de archivo Csv de Yahoo. Nota: Por favor asegúrese de ordenar de la fecha más antigua a la más reciente. Datos de precios de Yahoo en formato de archivo CSV Paso 2: Crear una columna para el promedio móvil simple largo y corto (SMA) Para este ejemplo, quiero que utilice el SMA de 5 y 25 días. Para aquellos de ustedes que son nuevos en las estrategias de negociación, un SMA es simplemente la suma total del precio de cierre dividido por el número de observaciones. 2.1) Cree el SMA a corto plazo (5 días) Usando la siguiente fórmula en Excel: PROMEDIO (G2: G6) 2.2) Cree el SMA a largo plazo (25 Días) Usando la siguiente fórmula en Excel: PROMEDIO (E2: E26) Paso 3 : Generar señales comerciales Es en este paso donde los lectores recogerán una diferencia importante de mis entradas de blog anteriores en la construcción de un backtester vectorizado. Voy a incorporar mi metodología original en este post, así con el fin de trazar la curva de equidad. Lo siguiente que tenemos que hacer es generar señales de compra y venta. El día anterior la (5) SMA estaba por debajo de la (25) SMA y en el día actual hay un cambio donde la (5) SMA está ahora por encima de la ( 25) SMA, Escribir la cadena COMPRAR en el campo actual En el día anterior el (5) SMA estaba por encima del (25) SMA y en el día actual hay un cambio donde el (5) SMA está ahora por debajo del (25) SMA, Escriba la cadena SELL en el campo actual Añada una cadena vacía al campo actual. Esto se representa en Excel utilizando la siguiente fórmula: Las SMA se calculan sobre los precios de cierre y no se ajustan porque queremos que la señal comercial se genere en los datos de precios y no se vea influenciada por los dividendos pagados. Paso 4: Obtener el precio de compra / venta del comercio En la columna siguiente agregue la siguiente fórmula de Excel: IF (J26ltgt82218221, G27, K26) La lógica es la siguiente: Si la columna de señal de comercio para el día anterior (Muy importante para retrasar el Indicador para quitar el sesgo de anticipación) no es una cadena vacía y luego hacer uso del precio anterior por encima del campo actual, o bien establecer el campo actual al precio de cierre para el día. Algunos pueden argumentar que en realidad no se puede cerrar el día, pero si puede poner su pedido en la subasta de cierre, e incluso después de la subasta hay algunas órdenes residuales que puede llenar, uno de los fondos anteriores que trabajó para Hizo exactamente esto. Paso 5: Calcular devoluciones Añada una columna llamada return que utilice la siguiente fórmula de Excel: SI (J268221SELL8221, K27 / K26-1, IF (J268221BUY8221,1-K27 / K26,82218221)) Si el día anterior generó una señal SELL Entonces tomar el precio de cierre de hoy y dividirlo por el precio de compra y restar 1. Else Si el día anterior generó una señal de COMPRAR entonces agregue 1 y restar (el precio de cierre de hoy y dividirlo por el precio de compra). Esta fórmula calcula los retornos para un comercio dado. (L: L, 8221lt08243) Operaciones Positivas: COUNTIF (L: L, 8220gt08221) Operaciones Negativas: COUNTIF (L: L, 8220lt08221) (L: L) Estas son las métricas tradicionales de rendimiento de la cartera, pero al calcular el precio de compra y venta se abren algunas puertas muy interesantes para implementar el análisis de excursiones adversas máximo que se puede utilizar para optimizar Detener las pérdidas. Nota: No era capaz de calcular estas métricas en mi método anterior debido a no haber registrado los precios de compra y venta de transacciones. Adición de una Curva de Equidad Paso 1: Añada dos nuevas columnas para las devoluciones Diarias y el diario natural de la acción Para esto usaré el precio de cierre ajustado como quiero que los dividendos pagados se reflejen en nuestra curva de equidad de estrategias y en el total Perfil de retorno. Fórmula para las vueltas diarias es: (precio de hoy / precio de los días de ayer) 8211 1 Fórmula de Excel: G3 / G2-1 La fórmula es uso para las vueltas diarias del registro natural es: LN (precio de hoy / precio de Yesterdays) G2) Paso 2: Calcular las señales de Hold largo o corto En esta columna queremos saber si en este momento tenemos una posición larga o corta. Esto se representa por 1 para largo y -1 para corto. Esto se basa en el promedio móvil de la estrategia cruzada por ir de largo si el corto plazo SMA es superior a largo plazo SMA y corto si el contrario es cierto. Nota: hay que retrasar las señales en un día para eliminar el sesgo de anticipación. En este ejemplo, la fórmula de Excel es como tal: IF (H26gtI26, 1, -1) Paso 3: Calcule la Estrategia ln Rendimientos Diarios Esta es la parte fácil, simplemente multiplique el log diario diario por la posición actual. Fórmula de Excel: R27S27 Paso 4: Calcule los retornos acumulados para la estrategia y la acción como si hubiera comprado y retenido. (Hacer esto para actuar como una comparación) La fórmula para acumular retornos es simple, para LN devuelve simplemente agregarlos usando T27U26. A continuación, debe invertir el registro natural mediante la siguiente fórmula: EXP (U27) -1 Y luego debe calcular los rendimientos acumulativos de las existencias: Fórmula de Excel (1Q27) (1T26) -1 Paso 5: Trazar los retornos Como se puede ver De la tabla de arriba, esta estrategia no es rentable en este marco de tiempo y compartir, pero este enfoque tutoriales se basa en la construcción de un backtester utilizando Excel. Yo animaría a los lectores a explorar otras estrategias comerciales tratando de incorporar el indicador RSI para actuar como una guía sobre cómo dimensionar una posición. Próximos Pasos Aquí están algunas estrategias más comerciales con hojas de ejemplo 8211 Trading con ETF. Estrategia De Comercio De Candlestick. Estrategia de negociación de pares y modelo de precios de opción de Black-Scholes. Si usted es un codificador o un profesional de la tecnología que buscan iniciar su propio escritorio de negociación automatizado, aprender el comercio automatizado de conferencias interactivas en vivo por los practicantes diarios. Executive Program en Algorithmic Trading abarca módulos de capacitación como Estadística y Econometría, Computación Financiera y Tecnología de Amplificación Algorítmica y Comercio Cuantitativo. 8211hellip Estrategias cuantitativas en Python: de la idea a la ejecución Un ejemplo de una estrategia de negociación codificada con Quantmodhellip Muy bien visto. Gracias por señalarlo. Eso es un error que hice. Hay dos maneras de arreglar esto, 1.) Paso 4 debe hacer uso del precio de cierre y no el abierto. (Eso es a menudo cómo ejecuto pruebas rápidas.) Nota: no se puede comprar en realidad en el cierre y el 8220Blog Flirting con Models8221 tiene una gran manera de abordar este problema con datos al final del día) blog. thinknewfound / 2017/10 / building - Better-backtests / 2.) Alternativamente, puede agregar la siguiente fórmula a la fila 27 columna S y todos los campos debajo de esa columna. SI (R27R26, ((E27 / B27) -1) R27, Q27R27) La lógica es la siguiente: Si hay un cambio en la señal de comercio entonces: Calcule el rendimiento diario si compramos a la apertura. Fórmula (Close precio / Precio Abierto) 8211 1 amperio también lo multiplican por su señal comercial. Else: Simplemente utilice las devoluciones diarias como antes que se calculan de cerca a cerca multiplicado por la señal comercial. Gracias de nuevo por la retroalimentación. ¿Cómo encontró el artículo hay otros temas que usted quisiera que escribiéramos en Saludos Jacques Joubert Hi Bull y Bear Investor. Gracias por esto. Es porque no utilicé el Ln Devuelve. Estaré actualizando el artículo durante el fin de semana. La curva de la equidad no cambia tanto con los retornos estándar (su apagado por 2) dado que don8217t fiddle con los precios ajustados agregando outliers. Pero bien visto. Saludos cordiales Jacques Joubert

Comments