Monday, November 14, 2016

Python Forex Backtesting


Una aplicación para backtest estrategias comerciales básicas para el mercado de divisas, sobre la base de datos históricos. Este código está escrito para Python 2.7 y no es compatible con Python 3. Requisitos previos: Tkinter Para ejecutar el programa, descargue todos los archivos, mantenga la misma estructura de directorios y ejecute el archivo inputhandling. py desde el intérprete de Python. Los ajustes de los parámetros son los siguientes: Fecha de inicio / fin: las fechas que enlazan los datos históricos que se va a probar Depósito inicial: la cantidad de dinero (USD) en la cuenta de corretaje para empezar con TimeFrame: el ancho de cada barra de Los datos históricos que se va a probar es el período de tiempo utilizado para cada estrategia. Símbolo: soporte para sólo EURUSD, USDJPY, GBPUSD y USDCHF con los datos incluidos Posición en el comercio: restringe el backtest para incluir sólo posiciones largas, posiciones cortas o Criterio de negociación: la estrategia principal utilizada para simular transacciones históricas (Moving Average Crossover y Stochastics incluido). Leverage (margen): el ratio de apalancamiento máximo permitido Tamaño de Lote Preferido: un tamaño de lote fijo que se negociará cuando se abre una posición. Si el margen libre limita el tamaño del lote a ser menor, se ajustará durante la prueba. Técnica de Distribución: Promedio de Spreads - asumir que los diferenciales permanecen constantes a lo largo de los datos históricos Técnica de Gestión de Comercio: TP / SL - establecer una ganancia fija fija y el nivel de pérdida en pips de precio de entrada Precio SL - Precio y actualización de cada barra Una vez que estos parámetros se introducen, el programa ejecutará un backtest rudimentario utilizando barra por barra de análisis para determinar cuál será el balance final de la cuenta. Este programa se puede ampliar añadiendo más estrategias comerciales. Deben implementar la misma interfaz que las estrategias de Promedio Móvil y Estocástico. No puedes realizar esa acción en este momento. Has iniciado sesión con otra pestaña o ventana. Vuelve a cargar para actualizar tu sesión. Saliste en otra pestaña o ventana. Reload para actualizar tu session. bt - Backtesting flexible para Python Qué es bt bt es un framework de backtesting flexible para Python usado para probar estrategias de negociación cuantitativa. Backtesting es el proceso de probar una estrategia sobre un conjunto de datos dado. Este marco le permite crear fácilmente estrategias que mezclan y combinan diferentes Algos. Su objetivo es fomentar la creación de bloques de lógica de estrategia fácilmente comprobables, reutilizables y flexibles para facilitar el rápido desarrollo de estrategias comerciales complejas. El objetivo: ahorrar quants de reinventar la rueda y dejar que se centran en la parte importante del trabajo - el desarrollo de la estrategia. Bt está codificado en Python y se une a un ecosistema vibrante y rico para el análisis de datos. Existen numerosas bibliotecas para el aprendizaje de máquinas, el procesamiento de señales y las estadísticas y se pueden aprovechar para evitar reinventar la rueda, algo que ocurre con demasiada frecuencia cuando se utilizan otros lenguajes que no tienen la misma riqueza de proyectos de código abierto de alta calidad. Bt se construye encima de ffn - una biblioteca financiera de la función para Python. Compruébelo Un ejemplo rápido Aquí hay un rápido sabor de bt: Una estrategia simple Backtest Let8217s crea una estrategia simple. Crearemos una estrategia reequilibrada mensual, de larga duración, en la que pondremos pesos iguales en cada activo en nuestro universo de activos. En primer lugar, vamos a descargar algunos datos. De forma predeterminada, bt. get (alias para ffn. get) descarga el cierre ajustado de Yahoo Finance. Vamos a descargar algunos datos a partir del 1 de enero de 2010 para los propósitos de esta demo. Una vez que tengamos nuestros datos, crearemos nuestra estrategia. El objeto Strategy contiene la lógica de la estrategia combinando varios Algos. Finalmente, crearemos un Backtest. Que es la combinación lógica de una estrategia con un conjunto de datos. Una vez hecho esto, podemos ejecutar el backtest y analizar los resultados. Ahora podemos analizar los resultados de nuestro backtest. El objeto Result es un thin wrapper alrededor de ffn. GroupStats que añade algunos métodos auxiliares. QSForex es una prueba de back-test orientada a eventos de código abierto y una plataforma de trading en vivo para uso en los mercados de divisas (forex), actualmente en un estado alfa. Se ha creado como parte de la serie Forex Trading Diario en QuantStart para proporcionar a la comunidad de comercio sistemática con un motor de comercio robusto que permite la implementación de la estrategia de Forex y las pruebas directas. El software se proporciona bajo una licencia permisiva del MIT (véase abajo). Open-Source - QSForex ha sido lanzado bajo una Licencia de MIT de código abierto extremadamente permisiva, que permite el uso completo en aplicaciones de investigación y comerciales, sin restricciones, pero sin garantía de ningún tipo. Gratis - QSForex es completamente gratuito y no cuesta nada descargar o usar. Colaboración - Como QSForex es de código abierto, muchos desarrolladores colaboran para mejorar el software. Se agregan nuevas funciones con frecuencia. Cualquier error es rápidamente determinado y fijo. Desarrollo de software - QSForex está escrito en el lenguaje de programación de Python para soporte directo de multiplataforma. QSForex contiene un conjunto de pruebas de unidad para la mayoría de su código de cálculo y nuevas pruebas se agregan constantemente para nuevas características. Arquitectura impulsada por eventos - QSForex es completamente dirigida por eventos, tanto para backtesting como para comercio en vivo, lo que lleva a la transición directa de estrategias desde una fase de investigación / prueba hasta una implementación de trading en vivo. Costes de transacción - Los costes de propagación se incluyen de forma predeterminada para todas las estrategias de backtest. Backtesting - QSForex ofrece backtesting de varios días de varias divisas de resolución de ticks. Trading - QSForex actualmente soporta el comercio intraday en vivo utilizando el OANDA Brokerage API a través de una cartera de pares. Métricas de rendimiento - QSForex actualmente admite la medición del rendimiento básico y la visualización de la equidad a través de las bibliotecas de visualización Matplotlib y Seaborn. Instalación y uso 1) Visite oanda / y configure una cuenta para obtener las credenciales de autenticación de la API, que deberá realizar en vivo. Explicar cómo llevar a cabo esto en este artículo: Quantstart / articles / Forex-Trading-Diario-1-Automated-Forex-Trading-con-el-OANDA-API. 2) Clone este repositorio git en una ubicación adecuada en su máquina usando el siguiente comando en su terminal: git clone github / mhallsmoore / qsforex. git. Alternativa puede descargar el archivo zip de la rama principal actual en github / mhallsmoore / qsforex / archive / master. zip. 3) Cree un conjunto de variables de entorno para todas las configuraciones encontradas en el archivo settings. py en el directorio raíz de la aplicación. Alternativamente, puede codificar sus configuraciones específicas sobrescribiendo las llamadas os. environ. get (.) Para cada configuración: 4) Cree un entorno virtual (virtualenv) para el código QSForex y utilice pip para instalar los requisitos. Por ejemplo, en un sistema basado en Unix (Mac o Linux) puede crear un directorio como el siguiente introduciendo los siguientes comandos en el terminal: Esto creará un nuevo entorno virtual para instalar los paquetes en. Suponiendo que descargó el repositorio gist QSForex en un directorio de ejemplo como / projects / qsforex / (cambie este directorio a donde quiera que haya instalado QSForex), entonces para instalar los paquetes necesitará ejecutar los siguientes comandos: Tiempo como NumPy, SciPy, Pandas, Scikit-Learn y Matplotlib deben ser compilados. Hay muchos paquetes necesarios para que esto funcione, así que eche un vistazo a estos dos artículos para obtener más información: También tendrá que crear un enlace simbólico desde su directorio de paquetes de sitio a su directorio de instalación de QSForex para poder llamar Import qsforex dentro del código. Para ello, necesitará un comando similar al siguiente: Asegúrese de cambiar / projects / qsforex a su directorio de instalación y /venv/qsforex/lib/python2.7/site-packages/ a su directorio de paquetes de sitios virtualenv. Ahora podrá ejecutar los comandos siguientes correctamente. 5) En esta etapa, si simplemente desea llevar a cabo la práctica o el comercio en vivo, entonces puede ejecutar python trading / trading. py. Que utilizará la estrategia de trading predeterminada de TestStrategy. Esto simplemente compra o vende un par de divisas cada 5 tick. Es puramente para la prueba - no la utilice en un ambiente que vive vivo Si usted desea crear una estrategia más útil, después cree simplemente una nueva clase con un nombre descriptivo, por ejemplo. MeanReversionMultiPairStrategy y asegúrese de que tiene un método calculatesignals. Tendrá que pasar a esta clase la lista de parejas, así como la cola de eventos, como en trading / trading. py. Por favor, vea strategy / strategy. py para más detalles. 6) Con el fin de llevar a cabo cualquier backtesting es necesario generar datos de forex simulados o descargar datos históricos tick. Si desea simplemente probar el software, la forma más rápida de generar un ejemplo de backtest es generar algunos datos simulados. El formato de datos actual utilizado por QSForex es el mismo que el proporcionado por el DukasCopy Historical Data Feed en dukascopy / swiss / english / marketwatch / historical /. Para generar algunos datos históricos, asegúrese de que la configuración de CSVDATADIR en settings. py debe establecerse en un directorio donde desee que los datos históricos se mantengan. A continuación, debe ejecutar generatesimulatedpair. py. Que está en el directorio scripts /. Se espera un solo argumento de línea de comandos, que en este caso es el par de divisas en formato BBBQQQ. Por ejemplo: En esta etapa, el script está codificado para crear un solo mes de datos para enero de 2014. Es decir, verá archivos individuales, del formato BBBQQQYYYYMMDD. csv (por ejemplo, GBPUSD20140112.csv) aparecen en su CSVDATADIR para todos los días hábiles en Ese mes Si desea cambiar el mes / año de la salida de datos, simplemente modifique el archivo y vuelva a ejecutarlo. 7) Ahora que los datos históricos han sido generados es posible realizar un backtest. El archivo backtest se almacena en backtest / backtest. py. Pero esto sólo contiene la clase Backtest. Para ejecutar realmente un backtest es necesario instanciar esta clase y proporcionarle los módulos necesarios. La mejor manera de ver cómo se hace esto es mirar el ejemplo de implementación de Media Crossover de Moving en el archivo examples / mac. py y usarlo como una plantilla. Esto hace uso de MovingAverageCrossStrategy que se encuentra en strategy / strategy. py. Por defecto, se negocian GBP / USD y EUR / USD para demostrar el uso de varios pares de divisas. Utiliza los datos encontrados en CSVDATADIR. Para ejecutar el ejemplo backtest, simplemente ejecute lo siguiente: Esto llevará algún tiempo. En mi sistema de escritorio Ubuntu en casa, con los datos históricos generados a través de generatesimulatedpair. py. Tarda alrededor de 5-10 minutos para correr. Una gran parte de este cálculo se produce al final del backtest real, cuando se calcula la reducción, así que por favor recuerde que el código no ha colgado Por favor, déjelo hasta su finalización. 8) Si desea ver el rendimiento del backtest, puede utilizar output. py para ver una curva de equidad, retornos de periodo (es decir, tick-to-tick) y una curva de reducción: Y eso es todo. Para comenzar a crear sus propios backtests modificando o añadiendo estrategias en strategy / strategy. py y utilizando datos reales descargados de DukasCopy (dukascopy / swiss / english / marketwatch / historical /). Si tiene alguna pregunta sobre la instalación, por favor no dude en enviarme un correo electrónico a mikequantstart. Si tiene algún error o cualquier otro problema que cree que puede ser debido específicamente a la base de código, no dude en abrir un problema de Github aquí: github / mhallsmoore / qsforex / issues Copyright (c) 2015 Michael Halls-Moore A cualquier persona que obtenga una copia de este software y archivos de documentación asociados (el Software), para tratar el Software sin restricciones, incluyendo, sin limitación, los derechos de usar, copiar, modificar, fusionar, publicar, distribuir, sublicenciar y O vender copias del Software y permitir que las personas a las que se suministre el Software, con sujeción a las siguientes condiciones: El aviso de copyright anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software. EL SOFTWARE SE PROPORCIONA COMO ES, SIN GARANTÍA DE NINGÚN TIPO, EXPLÍCITA O IMPLÍCITA, INCLUYENDO PERO SIN LIMITARSE A LAS GARANTÍAS DE COMERCIABILIDAD, ADECUACIÓN PARA UN FIN DETERMINADO Y NO INFRACCIÓN. EN NINGÚN CASO, LOS AUTORES O LOS TITULARES DE DERECHOS DE AUTOR SERÁN RESPONSABLES DE CUALQUIER RECLAMACIÓN, DAÑO O CUALQUIER OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN DE CONTRATO, AGRAVIO O DE OTRA MANERA, QUE SURJA DE O EN RELACIÓN CON EL SOFTWARE O EL USO O OTROS NEGOCIOS EN EL SOFTWARE. Descargo de divisas Forex Trading El cambio de divisas en el margen conlleva un alto nivel de riesgo y puede no ser adecuado para todos los inversores. El rendimiento pasado no es indicativo de resultados futuros. El alto grado de apalancamiento puede trabajar en su contra, así como para usted. Antes de decidir invertir en divisas debe considerar cuidadosamente sus objetivos de inversión, nivel de experiencia y apetito de riesgo. Existe la posibilidad de que usted podría sostener una pérdida de parte o la totalidad de su inversión inicial y por lo tanto no debe invertir dinero que no puede permitirse perder. Usted debe ser consciente de todos los riesgos asociados con el comercio de divisas y buscar asesoramiento de un asesor financiero independiente si tiene alguna duda.

No comments:

Post a Comment