Friday, October 7, 2016

Backtesting Exitosa De Algorítmica Estrategias De Trading , Parte 1

Backtesting exitosa de Algorítmica Estrategias de Trading, Parte 1 30 de junio 2014 05 a. m. 3 comentarios Visitas: 1498 Este artículo continúa la serie sobre el comercio cuantitativo, que se inició con la guía de los principiantes y Estrategia de Identificación. Ambos, artículos más involucrados más largos han sido muy popular por lo que Ill seguir en esta línea y proporcionar detalles sobre el tema de la estrategia de backtesting. Backtesting algorítmico requiere el conocimiento de muchas áreas, incluyendo la psicología, matemáticas, estadística, desarrollo de software y el mercado / intercambio microestructura. Me podía esperanza para cubrir todos los temas en un solo artículo, por lo que voy a dividir en dos o tres trozos más pequeños. ¿Qué vamos a discutir en esta sección? Empiezo Ill definiendo backtesting y luego voy a describir los fundamentos de cómo se lleva a cabo. Entonces voy a aclarar a los sesgos que abordaron en la Guía de principiantes para Trading Cuantitativo. A continuación voy a presentar una comparación de las diferentes opciones de software backtesting disponibles. En artículos posteriores vamos a ver los detalles de las implementaciones de estrategia que a menudo apenas se mencionan o ignorarse. También consideraremos cómo hacer que el proceso de backtesting más realista mediante la inclusión de la idiosincrasia de un intercambio comercial. A continuación vamos a discutir los costos de transacción y la forma de modelar correctamente en un entorno backtest. Vamos a terminar con un debate sobre el desempeño de nuestras pruebas retrospectivas y, finalmente, dar un ejemplo de una estrategia quant común, conocido como un trade-reversión a la media pares. Vamos a empezar por discutir lo backtesting es y por qué debemos llevarlo a cabo en nuestro comercio algorítmico. ¿Cuál es Backtesting? Comercio algorítmico se distingue de otros tipos de clases de inversión, ya que podemos ofrecer con mayor fiabilidad las expectativas sobre el desempeño futuro de los resultados anteriores, como consecuencia de la abundante disponibilidad de datos. El proceso por el cual esto se lleva a cabo se conoce como backtesting. En términos simples, backtesting se lleva a cabo mediante la exposición de su algoritmo de estrategia particular de un flujo de datos financieros históricos, lo que conduce a un conjunto de señales de trading. Cada comercio (que nos referimos aquí a ser un ida y vuelta de dos señales) tendrá una ganancia o pérdida asociada. La acumulación de este beneficio / pérdida durante la duración de su estrategia de backtest dará lugar a la ganancia y la pérdida total (también conocido como el PL o PNL). Esa es la esencia de la idea, aunque, por supuesto, el diablo siempre está en los detalles! ¿Cuáles son las razones clave para backtesting una estrategia de algorítmica? Filtración Si recuerdan desde el artículo sobre la estrategia de identificación. nuestra meta en la etapa inicial de investigación fue la creación de un gasoducto estrategia y luego filtrar cualquier estrategia que no cumplía con ciertos criterios. Backtesting nos proporciona otro mecanismo de filtración, ya que podemos eliminar las estrategias que no cumplen con nuestras necesidades de rendimiento. Modelado Backtesting nos permite (con seguridad!) Probar nuevos modelos de ciertos fenómenos del mercado, tales como los costos de transacción, ruteo de órdenes, la latencia, liquidez u otros problemas de la microestructura del mercado. Optimización Aunque la optimización de la estrategia está cargada de prejuicios, backtesting nos permite aumentar el rendimiento de una estrategia mediante la modificación de la cantidad o los valores de los parámetros asociados con esa estrategia y volver a calcular su rendimiento. Verificación Nuestras estrategias se obtienen a menudo externamente, a través de nuestra línea de estrategia. Backtesting una estrategia asegura que no se ha aplicado de forma incorrecta. A pesar de que rara vez tienen acceso a las señales generadas por las estrategias externas, vamos a menudo tienen acceso a las métricas de rendimiento, como el Ratio Sharpe y características reducción. Así, podemos compararlas con nuestra propia aplicación. Backtesting ofrece una serie de ventajas para el comercio algorítmico. Sin embargo, no siempre es posible sin rodeos backtest una estrategia. En general, como la frecuencia de la estrategia aumenta, se hace más difícil de modelar correctamente los efectos de la microestructura del mercado y los intercambios. Esto conduce a pruebas retrospectivas menos fiables y por lo tanto una evaluación más complicado de la estrategia elegida. Este es un problema particular cuando el sistema de ejecución es la clave para el rendimiento de la estrategia, al igual que con los algoritmos de ultra-alta frecuencia. Desafortunadamente, backtesting está cargada de prejuicios de todo tipo. Hemos abordado algunas de estas cuestiones en los artículos anteriores, pero ahora vamos a discutir en profundidad. Los sesgos que afectan backtests Estrategia Hay muchos sesgos que pueden afectar al rendimiento de una estrategia backtested. Desafortunadamente, estos sesgos tienen una tendencia a inflar el rendimiento más que en detrimento de ella. Por lo tanto siempre se debe considerar un backtest ser un idealizado límite superior en el desempeño real de la estrategia. Es casi imposible eliminar sesgos de comercio algorítmico por lo que es nuestro trabajo para minimizarlos lo mejor que podamos con el fin de tomar decisiones informadas sobre nuestras estrategias algorítmicas. Hay cuatro sesgos importantes que deseo discutir: Optimización Bias, Look-Ahead Bias, Supervivencia Bias y tolerancia psicológica Bias. Bias Optimización Este es probablemente el más insidioso de todos los prejuicios backtest. Se trata de ajustar o introducir parámetros comerciales adicionales hasta que el rendimiento de la estrategia en el conjunto de datos backtest es muy atractivo. Sin embargo, una vez en vivo el rendimiento de la estrategia puede ser marcadamente diferente. Otro nombre para este sesgo es la curva de sesgo de montaje o de datos-espionaje. Optimización sesgo es difícil de eliminar como estrategias algorítmicas a menudo implican muchos parámetros. Los parámetros en este caso podrían ser los criterios de entrada / salida, períodos look-back, con un promedio períodos (es decir, el parámetro de suavizado promedio móvil) o frecuencia de medición de la volatilidad. Optimización sesgo puede minimizarse manteniendo el número de parámetros a un mínimo y aumentar la cantidad de puntos de datos en el conjunto de entrenamiento. De hecho, también hay que tener cuidado de este último como puntos de formación de más edad pueden estar sujetas a un régimen previo (como un entorno normativo) y por lo tanto pueden no ser relevantes para su estrategia actual. Uno de los métodos para ayudar a mitigar este sesgo es realizar un análisis de sensibilidad. Esto significa variando los parámetros de forma incremental y trazando una superficie de rendimiento. , El razonamiento fundamental de sonido para las opciones de los parámetros debe, con todos los demás factores considerados, conducir a una superficie parámetro más suave. Si usted tiene una superficie de actuación muy nervioso, a menudo significa que un parámetro no está reflejando un fenómeno y es un artefacto de los datos de prueba. Existe una amplia literatura sobre los algoritmos de optimización multi-dimensionales y es un área muy activa de investigación. No voy a detenerme en aquí, pero lo guardo en el fondo de tu mente cuando te encuentras una estrategia con un backtest fantástico! Bias Look-Ahead Sesgo de anticipación se introduce en un sistema de backtesting cuando los datos futuros se incluye por accidente en un punto en la simulación en que los datos no habría sido realmente disponible. Si corremos el backtest cronológicamente y llegamos a tiempo el punto N. a continuación, el sesgo de anticipación se produce si los datos se incluye para cualquier punto N + k. donde k & gt; 0. Look-ahead errores de desviación pueden ser muy sutil. He aquí tres ejemplos de cómo look-ahead sesgo puede ser introducido: Insectos técnicas matrices / vectores en código a menudo tienen iteradores o variables de índice. Compensaciones incorrectas de estos índices pueden dar lugar a un sesgo de preanálisis mediante la incorporación de los datos a N + k para k no sea cero. Cálculo de parámetros Otro ejemplo común de sesgo de preanálisis se produce cuando el cálculo de los parámetros de estrategia óptima, tales como con regresiones lineales entre dos series de tiempo. Si el conjunto de datos (incluidos los datos futuros) se utiliza para calcular los coeficientes de regresión, y por lo tanto se aplica retroactivamente a una estrategia de negociación con fines de optimización, los datos futuro se está incorporando y existe un sesgo de preanálisis. Maxima / Minima estrategias Certain comerciales hacen uso de valores extremos en cualquier período de tiempo, tales como la incorporación de los precios altos o bajos en datos OHLC. Sin embargo, ya que estos valores máximos / mínimos sólo pueden ser calculados al final de un período de tiempo, se introduce un sesgo de preanálisis si se utilizan estos valores - during - el período actual. Siempre es necesario quedarse valores de alta / baja por al menos un período en cualquier toma de estrategia de uso comercial de los mismos. Sesgo de supervivencia Sesgo de supervivencia es un fenómeno particularmente peligroso y puede llevar a un rendimiento significativamente inflado para ciertos tipos de estrategia. Se produce cuando las estrategias son probados en los conjuntos de datos que no incluyen el universo completo de los activos anteriores que pueden haber sido elegidos en un punto determinado en el tiempo, pero sólo se consideran aquellos que han sobrevivido a la hora actual. Como ejemplo, considere probar una estrategia en una selección aleatoria de las acciones antes y después de la caída del mercado de 2001. Algunas acciones tecnológicas fueron a la quiebra, mientras que otros lograron mantenerse a flote e incluso prosperado. Si hubiéramos restringido esta estrategia sólo a las poblaciones que lo hizo a través del período de retiro de mercado, estaríamos introduciendo un sesgo de supervivencia porque ya han demostrado su éxito a nosotros. De hecho, este es sólo otro caso específico de sesgo look-ahead, como información de futuro se está incorporando en el análisis pasado. Hay dos formas principales para mitigar sesgo de supervivencia en sus pruebas retrospectivas de estrategia: Supervivencia Bias Conjuntos de datos libre en el caso de los datos de la equidad es posible comprar los conjuntos de datos que incluyen entidades retirado de la lista, a pesar de que no son baratos y sólo tienden a ser utilizados por las empresas institucionales. En particular, los datos de Yahoo Finanzas NO es sesgo de supervivencia libre, y esto es comúnmente utilizado por muchos comerciantes Algo minoristas. También se puede operar en clases de activos que no son propensos a sesgo de supervivencia, como ciertos productos básicos (y sus derivados futuros). Utilice los datos más recientes en el caso de la renta variable, utilizando un conjunto de datos más reciente mitiga la posibilidad de que la selección de valores elegidos se pondera a los sobrevivientes, simplemente hay menos probabilidad de exclusión social en general en periodos de tiempo más cortos. También se puede empezar a construir una supervivencia-sesgo conjunto de datos libre de personal mediante la recopilación de los datos desde el punto actual en adelante. Después de 3-4 años, tendrá un sólido supervivencia sesgo conjunto gratuito de renta variable de datos con los que backtest nuevas estrategias. Ahora vamos a considerar ciertos fenómenos psicológicos que pueden influir en el rendimiento de su comercio. Ahora vamos a considerar ciertos fenómenos psicológicos que pueden influir en el rendimiento de su comercio. Bias Tolerancia Psicológica Este fenómeno particular no se discute a menudo en el contexto de la negociación cuantitativo. Sin embargo, se discute extensamente en lo que respecta a los métodos de negociación más discrecionales. Tiene varios nombres, pero he decidido llamarlo sesgo tolerancia psicológica, ya que captura la esencia del problema. Al crear pruebas retrospectivas durante un período de 5 años o más, es fácil de ver una curva de las acciones al alza de tendencias, calcular el rendimiento anual compuesto, ratio de Sharpe y hasta drawdown características y estar satisfecho con los resultados. Como ejemplo, la estrategia podría poseer una reducción relativa máxima del 25% y una duración máxima reducción de 4 meses. Esto no sería atípica para una estrategia de impulso. Es fácil convencerse de que es fácil de tolerar tales períodos de pérdidas debido a que el panorama general es de color de rosa. Sin embargo, en la práctica, es mucho más difícil! Si se producen detracciones históricos del 25% o más en las pruebas retrospectivas, entonces con toda probabilidad, verá períodos de disposición de fondos similares en el comercio directo. Estos periodos de disposición de fondos son psicológicamente difícil de soportar. He observado de primera mano lo que un retiro prolongado puede ser, en un entorno institucional, y no es agradable incluso si las pruebas retrospectivas sugieren tales períodos se producirán. La razón por la que he llamado un sesgo es que a menudo una estrategia que de otro modo sería un éxito se impidió el comercio en tiempos de retiro prolongado y por lo tanto dará lugar a malos resultados significativos en comparación con un backtest. Por lo tanto, a pesar de que la estrategia es algorítmico en la naturaleza, los factores psicológicos pueden todavía tienen una fuerte influencia en la rentabilidad. La lección es para asegurar que si ves a disposición del crédito de un determinado porcentaje y la duración de las pruebas retrospectivas, entonces usted debe esperar que se producen en entornos comerciales en vivo, y será necesario perseverar para alcanzar la rentabilidad, una vez más. Paquetes de Software para Backtesting El paisaje de software para la estrategia de backtesting es enorme. Soluciones van desde un sofisticado software de grado institucional totalmente integrado a través de lenguajes de programación como C ++, Python y R donde casi todo debe ser escrito desde cero (o plugins adecuados obtenidos). Como los comerciantes quant estamos interesados ​​en el equilibrio de poder ser dueño de nuestra tecnología de pila de negociación frente a la velocidad y la fiabilidad de nuestra metodología de desarrollo. Estas son las consideraciones clave para la elección de software: Habilidad Programación La elección del medio ambiente será en gran parte vienen abajo a su capacidad de programar el software. Yo diría que tener el control de la pila total será tener un mayor efecto en el PL a largo plazo que la externalización tanto como sea posible al proveedor de software. Esto se debe al riesgo a la baja de tener errores o idiosincrasias que usted es incapaz de fijar en el software de proveedores, que de otro modo se pueden remediar fácilmente si tuviera más control sobre su pila de tecnología externos. Usted también desea un ambiente que logra el equilibrio correcto entre la productividad, la disponibilidad de la biblioteca y la velocidad de ejecución. Yo hago mi propia recomendación personal a continuación. Ejecución Capacidad / Broker Interacción software Certain backtesting, como Tradestation, enlaza directamente con una casa de valores. Yo no soy un fan de este enfoque como la reducción de los costos de transacción son a menudo un gran componente de conseguir un mayor ratio de Sharpe. Si usted está atado a un agente en particular (y fuerzas Tradestation usted para hacer esto), entonces usted tendrá un tiempo más difícil la transición a un nuevo software (o un nuevo corredor) en caso de necesidad. Interactive Brokers proporcionan una API que es robusta, aunque con una interfaz ligeramente obtuso. Personalización Un ambiente como el MATLAB o Python le da una gran flexibilidad al crear estrategias Algo ya que proporcionan las bibliotecas fantásticas para casi cualquier operación matemática imaginable, sino que también permiten una amplia personalización cuando sea necesario. Estrategia Complejidad Certain software simplemente no es hecho para el número pesado crujido o complejidad matemática. Excel es un tal pieza de software. Si bien es bueno para las estrategias más simples, no puede realmente hacer frente a numerosos activos o algoritmos más complicados, a la velocidad. Bias Minimización Hace una determinada pieza de software o datos se presta más a sesgos comerciales? Usted necesita asegurarse de que si usted desea crear toda la funcionalidad a ti mismo, que usted no introducir errores que pueden conducir a sesgos. Velocidad de Desarrollo Uno no debería tener que pasar meses y meses la implementación de un motor de backtest. Prototipos sólo debe tomar un par de semanas. Asegúrese de que el software no está obstaculizando su progreso en gran medida, sólo para tomar un par de puntos porcentuales adicionales de la velocidad de ejecución. C ++ es el elefante en la habitación aquí! Velocidad de ejecución Si su estrategia es completamente dependiente de la puntualidad de ejecución (como en HFT / UHFT), entonces un lenguaje como C o C ++ será necesario. Sin embargo, se le rayando en la optimización de Linux kernel y la utilización de FPGA para estos dominios, que está fuera del alcance de este artículo! Costo Muchos de los entornos de software que se puede programar estrategias de negociación algorítmica con son completamente de código libre y abierto. De hecho, muchos fondos de cobertura hacen uso de software de código abierto para la totalidad de sus pilas comerciales algo. Además, Excel y MATLAB son relativamente barato e incluso hay alternativas gratuitas a cada uno. Ahora que hemos enumerado los criterios con los que tenemos que elegir nuestra infraestructura de software, quiero correr a través de algunos de los paquetes más populares y cómo se comparan: Nota: Sólo voy a incluir software que está disponible para la mayoría de los profesionales minoristas y los desarrolladores de software, ya que este es el número de lectores del sitio. Mientras que otro software está disponible como las herramientas más calidad institucional, siento que son demasiado caros para ser utilizado con eficacia en un entorno minorista y yo personalmente no tienen experiencia con ellos. Descripción . WYSIWYG (lo-que-ve-es-lo-que-hay) de software de hoja de cálculo. Muy extendida en la industria financiera. Los datos y el algoritmo están fuertemente acoplados. Ejecución . Sí, Excel se puede atar a la mayoría de casas de bolsa. Personalización. Macros VBA permiten más funcionalidad avanzada a costa de ocultar la implementación. Estrategia Complejidad. Más herramientas estadísticas avanzadas son más difíciles de poner en práctica al igual que estrategias con muchos cientos de activos. Bias Minimización. Look-ahead sesgo es fácil de detectar a través de la funcionalidad celular destacando (suponiendo que no hay VBA). Velocidad de Desarrollo. Rápida de implementar estrategias básicas. Velocidad de ejecución. Velocidad de ejecución lenta adecuado sólo para las estrategias de baja frecuencia. Costo . Barato o libre (dependiendo de la licencia). Alternativas . Oficina abierta Descripción . Entorno de programación diseñado originalmente para la matemática computacional, la física y la ingeniería. Muy bien adaptado a las operaciones vectorizados y los relacionados con el álgebra lineal numérica. Proporciona una amplia gama de complementos para el comercio de cuant. En uso generalizado en los fondos de cobertura cuantitativos. Ejecución . Sin capacidad de ejecución nativa, MATLAB requiere un sistema de ejecución separada. Personalización. Enorme variedad de plugins de la comunidad por casi todas las áreas de matemática computacional. Estrategia Complejidad. Muchos métodos estadísticos avanzados ya disponibles y bien probado. Bias Minimización. Más difícil de detectar sesgo de preanálisis, requiere extensas pruebas. Velocidad de Desarrollo. Guiones cortos pueden crear pruebas retrospectivas sofisticados fácilmente. Velocidad de ejecución. Suponiendo un vectorizado / algoritmo paralelizada, MATLAB está muy optimizado. Mala lazos iterados tradicionales. Costo . Descripción . Lenguaje de alto nivel diseñado para la velocidad de desarrollo. Amplia gama de bibliotecas para casi cualquier tarea imaginable programática. Obtener una mayor aceptación en los fondos de cobertura y de la comunidad banco de inversión. No es tan rápido como C / C ++ para la velocidad de ejecución. Ejecución . Existen plugins Python para los corredores más grandes, como Interactive Brokers. De ahí backtest y sistema de ejecución de todo puede ser parte de la misma pila tecnología. Personalización. Python tiene una comunidad de desarrollo muy saludable y es un lenguaje maduro. NumPy / SciPy proporcionar herramientas informáticas y análisis estadístico científicas rápidas pertinentes para el comercio de cuant. Estrategia Complejidad: existen muchos plugins para los principales algoritmos, pero no tan grande una comunidad quant como existe para MATLAB. Bias Minimización. Existen problemas de minimización mismos prejuicios que para cualquier lenguaje de alto nivel. Necesidad de tener mucho cuidado con las pruebas. Velocidad de Desarrollo. Pitones principal ventaja es la velocidad de desarrollo, con robusto construido en capacidades de prueba. Velocidad de ejecución. No es tan rápido como C ++, pero los componentes de computación científica se ha optimizado y Python puede hablar con código nativo de C con ciertos plugins. Costo . Alternativas de código libre / abrir. Rubí. Erlang. Haskell Descripción . Medio Ambiente diseñado para métodos estadísticos avanzados y análisis de series de tiempo. Amplia gama de conjuntos de herramientas específicas de gráficos estadísticos, econométricos y nativas. Comunidad de desarrolladores grande. Ejecución . R posee plugins para algunos corredores, en particular, Interactive Brokers. Así, un sistema de extremo a extremo puede escrito enteramente en R. Personalización. R se puede personalizar con cualquier paquete, pero sus puntos fuertes radica en aspectos estadísticos / econométricos. Estrategia Complejidad. Mayormente útil si realizar econométricos, estrategias estadísticas o la máquina de aprendizaje debido a plugins disponibles. Bias Minimización. Nivel similar de posibilidad de sesgo para cualquier lenguaje de alto nivel como Python o C ++. Por lo tanto la prueba debe llevarse a cabo. Velocidad de Desarrollo. R es rápida para estrategias de escritura basados ​​en métodos estadísticos. Velocidad de ejecución. R es más lento que C ++, pero sigue siendo relativamente optimizado para operaciones vectorizados (como con MATLAB). Costo . Alternativas de código libre / abrir. SPSS. Stata Descripción . Lenguaje maduro, alto nivel diseñado para la velocidad de ejecución. Amplia gama de finanzas cuantitativas y bibliotecas numéricas. Más difícil de depuración y, a menudo toma más tiempo de implementar que Python o MATLAB. Extremadamente prevalente tanto en el buy-y vender a lado. Ejecución . La mayoría de las API de corretaje están escritos en C ++ y Java. Por lo tanto existen muchos plugins. Personalización. C / C ++ permite el acceso directo a la memoria subyacente, por lo tanto, las estrategias de ultra-alta frecuencia pueden ser implementadas. Estrategia Complejidad. STL C ++ ofrece gran variedad de algoritmos optimizados. Casi cualquier algoritmo matemático especializado posee una de código abierto C implementación libre, / C ++ en la web. Bias Minimización. Sesgo de anticipación puede ser difícil de eliminar, pero no más difícil que otro lenguaje de alto nivel. Las buenas herramientas de depuración, pero hay que tener cuidado cuando se trata de la memoria subyacente. Velocidad de Desarrollo. C ++ es bastante detallado en comparación con Python o MATLAB para el mismo algorithmm. Más líneas-de-código (LOC) a menudo conduce a una mayor probabilidad de errores. Velocidad de ejecución. C / C ++ tiene la velocidad de ejecución muy rápido y puede ser bien optimizado para arquitecturas computacionales específicos. Esta es la razón principal para utilizarla. Costo . Varios compiladores: Linux / GCC es gratis, MS Visual Studio tiene diferentes licencias. Alternativas . DO#. Java. Scala Diferentes estrategias requerirán diferentes paquetes de software. Estrategias HFT y UHFT serán escritos en C / C ++ (en estos días se llevan a cabo a menudo en las GPU y FPGAs), mientras que las estrategias de renta variable direccional de baja frecuencia son fáciles de implementar en TradeStation, debido al todo en una sola naturaleza del software / corretaje. Mi preferencia personal es para Python, ya que proporciona el grado justo de personalización, velocidad de desarrollo, capacidad de prueba y velocidad de ejecución para mis necesidades y estrategias. Si necesito algo más rápido, puedo caer en a C ++ directamente de mis programas en Python. Un método preferido por muchos comerciantes quant es al prototipo sus estrategias en Python y luego convertir las secciones más lentas de ejecución a C ++ de forma iterativa. Eventualmente todo el algo está escrito en C ++ y se puede dejar solo al comercio! En los próximos artículos en backtesting vamos a echar un vistazo a algunas cuestiones particulares que rodean la implementación de un sistema de backtesting comercio algorítmico, así como la forma de incorporar los efectos de los intercambios comerciales. Vamos a discutir la estrategia de medición del desempeño y finalmente concluir con una estrategia de ejemplo. - Por Michael Salas-Moore de QuantStart


No comments:

Post a Comment