Thursday, October 27, 2016

Forex Trading Api Python

En las secciones anteriores, hemos implementado un sistema de comercio mediante la interacción con Interactive Brokers Trader WorkStation X a través de las conexiones de socket a través de un solo puerto. Sin embargo, muchos otros corredores ofrecen diferentes opciones de conectar software de trading personalizado a través de una API. En esta sección aprenderemos cómo relacionar nuestra estrategia de negociación con la API OANDAs REST. OANDA es un actor importante en el negocio de divisas (forex) que presta servicios a los inversores minoristas. Utilizaremos una estrategia de seguimiento de tendencias para intercambiar productos de divisas. Qué es REST REST significa Representational State Transfer. Se refiere a las API de servicio web para transferir datos a través de HTTP mediante el GET. PONER. ENVIAR. O DELETE. Con la API REST, podemos transmitir. El mejor contenido para su carrera. Descubra el aprendizaje ilimitado en la demanda de alrededor de 1 / día. Aprendizaje de la máquina y reconocimiento de patrones para Forex Algorítmica y Stock Trading Introducción Aprendizaje de la máquina en cualquier forma, incluyendo el reconocimiento de patrones, por supuesto muchos usos de voz y reconocimiento facial a la investigación médica. En este caso, nuestra pregunta es si podemos o no usar el reconocimiento de patrones para hacer referencia a las situaciones anteriores que eran similares en el patrón. Si podemos hacer eso, podemos entonces hacer operaciones basadas en lo que sabemos que pasó con esos patrones en el pasado y en realidad obtener un beneficio Para ello, se va a codificar por completo todo nosotros mismos. Si le sucede a disfrutar de este tema, el siguiente paso sería la de buscar en la aceleración de GPU o roscado. Sólo se va a necesitar matplotlib (para la visualización de datos) y algunos NumPy (para procesamiento de números), y el resto depende de nosotros. Python es un lenguaje natural de un solo subproceso, es decir, cada secuencia de comandos sólo se utilice una sola CPU (por lo general esto significa que utiliza un solo núcleo de CPU, ya veces incluso sólo la mitad o un cuarto, o peor, de que el núcleo). Esto es por qué los programas en Python pueden tomar un tiempo para algo computadora, sin embargo, su estado natural únicamente podrían ser 5 y la RAM 10. Para obtener más información acerca de roscado, se puede ver el tutorial enhebrado en este sitio. La forma más fácil de obtener estos módulos en la actualidad es el uso de la pipa de la instalación. No sé qué pip es o cómo instalar módulos de Pip es probablemente la forma más fácil de instalar paquetes Una vez instalado Python, usted debe ser capaz de abrir su línea de comandos, como cmd. exe en Windows, Linux o bash en, y escriba: pip instalar numpy pip instalar matplotlib Tiene problemas todavía no hay problema, hay un tutorial para que: pip instalar módulos de Python tutorial. Si usted todavía está teniendo problemas, no dude en ponerse en contacto con nosotros, mediante el contacto en el pie de página de esta web. El plan es tomar un grupo de precios en un marco de tiempo, y los convierte a porcentaje de cambio en un esfuerzo para normalizar los datos. Deja la opinión que tenemos 50 puntos consecutivos de los precios por el bien de la explicación. Qué hacer así es el mapa de este patrón en la memoria, avanzar un punto de precio, y volver a trazar el patrón. Para cada patrón que hacemos un mapa en la memoria, entonces queremos dar un salto hacia delante un poco, por ejemplo, 10 puntos de precio, e ingrese en el que el precio es en ese punto. A continuación, un mapa Este resultado al patrón y continuamos. Cada modelo tiene su resultado. A continuación, tomamos el patrón actual, y la comparamos con todos los patrones anteriores. Qué bien hacer es comparar la similitud por ciento a todos los patrones anteriores. Si su porcentaje de similitud es más que un cierto umbral, entonces se va a tener en cuenta. A partir de aquí, tal vez tenemos 20-30 patrones comparables de la historia. Con estos patrones similares, podemos sumar la totalidad de sus resultados, y llegar a un resultado promedio estimado. Con ese resultado promedio, si es muy favorable, entonces podría iniciar una compra. Si el resultado no es favorable, puede que vendemos, o corto. Para la visualización, aquí está un ejemplo: En el ejemplo anterior, el patrón medio previsto es ir hacia arriba, por lo que podría iniciar una compra. Esta serie no terminará con usted que tiene algún tipo de algoritmo para hacerse rico rápido. Hay algunos errores conocidos con este programa, y ​​las posibilidades de que seas capaz de ejecutar operaciones suficientemente rápido con estos datos garrapata es poco probable, a menos que usted es un banco. El objetivo aquí es donde se muestra el reconocimiento fácil y patrón básico es. Siempre y cuando tengas algunos conocimientos básicos de programación de Python, deberías ser capaz de seguir a lo largo. API de OANDA Trading Utilities en Python Ejemplos de programas de comercio con el OANDA API a través de Python2.7 Este repo contiene un programa de comercio que ejecuta operaciones cuando WMA y SMA cross . También hay un archivo que contiene algunas funciones extremadamente simples que abrirán un comercio o una orden respectivamente. Clonar este repo a la ubicación de su elección Modifique api-order. py para hacer lo que quiera, o simplemente ejecute api-trade-averages. py usando Python2.7 Para ejecutar el script especifique el número de velas sobre las cuales calcular el WMA y SMA, la granularidad de la vela, el instrumento y su accountId. Este script utiliza el entorno de sandbox, así que por favor use sandbox accountId. Python api-trade-averages. py 10 S5 EURUSD Este programa pretende demostrar la funcionalidad API de OANDA y no pretende ser un consejo de inversión o una solución para comprar o vender ningún producto de inversión. QSForex es un backtesting basado en eventos de código abierto y en vivo Plataforma de negociación para su uso en los mercados de divisas (divisas), actualmente en un estado alfa. Ha sido creado como parte de la serie de Forex Trading Diario en QuantStart para proporcionar a la comunidad comercial sistemática con un motor de comercio robusto que permite la implementación de estrategias de divisas sencilla y pruebas. El software se proporciona bajo una licencia permisiva del MIT (ver más abajo). Open-Source - QSForex ha sido puesto en libertad bajo una licencia MIT de código abierto muy permisiva, lo que permite el uso completo en aplicaciones tanto de investigación y comerciales, sin restricciones, pero sin garantía de ningún tipo. Libre - QSForex es totalmente gratuito y no cuesta nada para descargar o utilizar. Colaboración - Como QSForex es de código abierto muchos desarrolladores colaboran para mejorar el software. Las nuevas características se añaden con frecuencia. Cualquier error se determinan y se fijaron rápidamente. Desarrollo de Software - QSForex está escrito en el lenguaje de programación Python para soporte multiplataforma sencillo. QSForex contiene un conjunto de pruebas unitarias para la mayoría de su código de cálculo y las nuevas pruebas se añaden constantemente nuevas características. Dirigido por eventos Arquitectura - QSForex es completamente orientado a eventos tanto para backtesting y el comercio directo, lo que conduce a la transición directa de las estrategias de una fase de investigación / ensayo a una aplicación real de operaciones. Los costos de transacción - distribuya los costos se incluyen por defecto para todas las estrategias backtested. Backtesting - QSForex cuenta intradía tic-resolución de varios días de varias monedas par backtesting. Trading - Actualmente QSForex soporta transacciones de la jornada en directo utilizando la API de Bolsa OANDA a través de una cartera de pares. Las mediciones de rendimiento - en la actualidad QSForex apoya la medición del desempeño básico y visualización de capital a través de las bibliotecas de visualización matplotlib y Seaborn. Uso 1) Visita instalación y www. oanda / y configurar una cuenta para obtener las credenciales de autenticación de API, que tendrá que llevar a cabo el comercio directo. Explico cómo llevar esto a cabo en este artículo: www. quantstart / artículos / Forex-Trading-Diario-1-automatizado de Forex Trading-con-el-OANDA-API. 2) Clonar este repositorio git en una ubicación adecuada en el equipo mediante el siguiente comando en el terminal: git clone github / mhallsmoore / qsforex. git. Alternativa se puede descargar el archivo zip de la rama principal de corriente en github / mhallsmoore / qsforex / Archivo / master. zip. 3) Crear un conjunto de variables de entorno para todas las configuraciones que se encuentran en el archivo settings. py en el directorio raíz de la aplicación. (.) Como alternativa, puede codificar sus configuraciones específicas al sobrescribir la os. environ. get llamadas para cada ajuste: 4) Crear un entorno virtual (virtualenv) para el código QSForex y utilizar PIP para instalar los requisitos. Por ejemplo, en un sistema basado en Unix (Mac o Linux) puede crear un directorio como sigue escribiendo los siguientes comandos en el terminal: Esto creará un nuevo entorno virtual para instalar los paquetes en. Suponiendo que ha descargado el repositorio git QSForex en un directorio de ejemplo como / proyectos / qsforex / (cambiar este directorio siguiente para el que instaló QSForex), a continuación, con el fin de instalar los paquetes que se necesitan para ejecutar los siguientes comandos: Esto tomará algún tiempo que NumPy, SciPy, pandas, scikit-learn y matplotlib debe ser compilado. Hay muchos paquetes necesarios para que esto funcione, así que por favor, eche un vistazo a estos dos artículos para más información: También tendrá que crear un enlace simbólico desde el directorio site-packages de su directorio de instalación QSForex con el fin de ser capaz de llamar qsforex importar dentro del código. Para ello se necesita un comando similar a lo siguiente: Asegúrese de cambiar / proyectos / qsforex a su directorio de instalación y /venv/qsforex/lib/python2.7/site-packages/ a su directorio de paquetes sitio virtualenv. Ahora será capaz de ejecutar los comandos posteriores correctamente. 5) En esta etapa, si simplemente desea llevar a cabo la práctica o el comercio directo continuación, puede ejecutar el comercio pitón / trading. py. que utilizará la estrategia de negociación TestStrategy predeterminado. Esto simplemente compra o vende un par de divisas cada 5 de garrapata. Es puramente para la prueba - no lo utilice en un entorno real de operaciones Si se desea crear una estrategia más útil, entonces simplemente crear una nueva clase con un nombre descriptivo, por ejemplo, MeanReversionMultiPairStrategy y asegurarse de que tiene un método calculatesignals. Usted tendrá que pasar esta clase lista de los pares, así como la cola de eventos, como en el comercio / trading. py. Por favor, mire la estrategia / strategy. py para más detalles. 6) Con el fin de llevar a cabo cualquier backtesting es necesario generar datos simulados de divisas o descargar datos históricos de garrapatas. Si desea simplemente probar el software a cabo, la forma más rápida para generar un ejemplo backtest es generar algunos datos simulados. El formato de datos actual utilizada por QSForex es la misma que la establecida por el RSS DUKASCOPY datos históricos en www. dukascopy / MarketWatch / / suiza / Inglés / histórica. Para generar algunos datos históricos, asegúrese de que el ajuste CSVDATADIR en settings. py es fijar a un directorio en el que desea que los datos históricos para vivir. A continuación, deberá ejecutar generatesimulatedpair. py. que está bajo la scripts /. Se espera que 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 guión está codificado para crear un solo datos de meses de enero de 2014. Es decir, se verá archivos individuales, del formato BBBQQQYYYYMMDD. csv (por ejemplo GBPUSD20140112.csv) aparecerá en su CSVDATADIR para todos los días hábiles ese mes. Si desea cambiar el mes / año de la salida de datos, basta con modificar el archivo y vuelva a ejecutar. 7) Ahora que los datos históricos se ha generado es posible llevar a cabo un backtest. El archivo de backtest sí se almacena en backtest / backtest. py. pero esto sólo contiene la clase de Backtest. Para ejecutar en realidad un backtest que necesita para crear una instancia de esta clase y dotarla de los módulos necesarios. La mejor manera de ver cómo se hace esto es mirar el ejemplo de aplicación en movimiento promedio de cruce en el archivo de ejemplos / mac. py y utilizar esto como una plantilla. Este hace uso de la MovingAverageCrossStrategy que se encuentra en la estrategia / strategy. py. Por defecto es el comercio tanto GBP / USD y EUR / USD para demostrar el uso de múltiples par de divisas. Utiliza datos que se encuentran en CSVDATADIR. Para ejecutar el ejemplo backtest, simplemente ejecute el siguiente: Esto llevará algún tiempo. En mi sistema de escritorio de Ubuntu en casa, con los datos históricos generados a través de generatesimulatedpair. py. se tarda alrededor de 5-10 minutos para correr. Una gran parte de este cálculo se realiza al final del backtest real, cuando se calcula la reducción, así que por favor recuerde que el código no ha colgado favor dejarlo hasta su finalización. 8) Si desea ver el rendimiento del backtest puede simplemente usar output. py para ver una curva de la equidad, los rendimientos del período (es decir, tick-a-tick retornos) y una curva de reducción: Y eso es todo En esta etapa ya está listo para empezar a crear sus propias pruebas retrospectivas modificando o añadiendo estrategias en la estrategia / strategy. py y utilizando datos reales descargados de Dukascopy (www. dukascopy / suiza / Inglés / MarketWatch / histórico /). Si usted tiene alguna pregunta sobre la instalación, por favor siéntase libre de correo electrónico en mikequantstart. Si tiene cualquier error u otros temas que cree que puede ser debido a la base de código en concreto, no dude en abrir un tema Github aquí: github / mhallsmoore / qsforex / cuestiones de derechos de autor (c) 2015 Michael Salas-Moore, se concede permiso, libre de forma gratuita, a cualquier persona que obtenga una copia de este software y archivos de documentación asociados (el software), para utilizar el software sin restricciones, incluyendo, sin limitación, los derechos para usar, copiar, modificar, fusionar, publicar, distribuir, sublicenciar, y / o vender copias del Software, y permitir a las personas a las que se proporcione el Software para hacerlo, 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 tal cual, sin garantía de ningún tipo, expresa o implícita, incluyendo pero no limitado a las garantías de comerciabilidad, aptitud para un propósito PARTICULAR Y NO. EN NINGÚN CASO LOS AUTORES O COPYRIGHT TITULARES RESPONSABLE POR CUALQUIER RECLAMO, DAÑO U OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN DE CONTRATO, AGRAVIO O CUALQUIER OTRO MOTIVO, DE O EN RELACIÓN CON EL SOFTWARE O EL USO U OTROS TRATOS EN LA SOFTWARE. Las operaciones de cambio de exención de responsabilidad negociación de divisas con apalancamiento conlleva un alto nivel de riesgo y podría no ser adecuado para todos los inversores. El rendimiento pasado no es indicativo de resultados futuros. El alto grado de apalancamiento puede trabajar en contra de usted, 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 deba afrontar la pérdida de parte o la totalidad de su inversión inicial y por lo tanto no debe invertir dinero que no pueda permitirse perder. Usted debe ser consciente de todos los riesgos asociados con el comercio de divisas, y buscar el asesoramiento de un asesor financiero independiente, si tiene alguna duda. Forex Trading Diario 1 - Automated Forex Trading con el OANDA API Por Michael Halls-Moore el 21 de enero de 2015 He mencionado anteriormente en el artículo QuantStart: 2014 en revisión que estaría pasando parte de 2015 escribiendo sobre el comercio de divisas automatizado. Teniendo en cuenta que yo mismo por lo general realizan investigaciones en mercados de acciones y futuros, pensé que sería divertido (y educativo) para escribir sobre mis experiencias de entrar en el mercado de divisas en el estilo de un diario. Cada entrada del diario tratará de construir sobre todos los anteriores, pero también debería ser relativamente autónomo. En esta primera entrada del diario Ill estar describiendo cómo configurar una nueva cuenta de corretaje de práctica con OANDA, así como la forma de crear un mecanismo básico multiproceso orientado a eventos que puede ejecutar automáticamente operaciones en un entorno de práctica y en vivo. El año pasado pasamos mucho tiempo mirando el backtestter impulsado por eventos. Principalmente para acciones y ETFs. El que presento a continuación se orienta hacia la divisa y se puede utilizar para el comercio de papel o de comercio en vivo. He escrito todas las instrucciones siguientes para Ubuntu 14.04, pero deben traducir fácilmente a Windows o Mac OS X, usando una distribución de Python como Anaconda. La única biblioteca adicional utilizada para el motor de intercambio de Python es la biblioteca de peticiones, que es necesaria para la comunicación HTTP con la API de OANDA. Dado que este es el primer puesto directamente sobre el comercio de divisas, y el código presentado a continuación puede adaptarse directamente a un entorno de comercio en vivo, me gustaría presentar las siguientes renuncias: Exención de responsabilidad: La negociación 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 contra de usted, 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 deba afrontar la pérdida de parte o la totalidad de su inversión inicial y por lo tanto no debe invertir dinero que no pueda permitirse perder. Usted debe ser consciente de todos los riesgos asociados con el comercio de divisas y buscar el asesoramiento de un asesor financiero independiente si tiene alguna duda. Este software se proporciona tal cual y se excluyen todas las garantías expresas o implícitas, incluyendo, pero no limitado a, las garantías implícitas de comerciabilidad y aptitud para un propósito particular. En ningún caso los regentes o contribuyentes serán responsables de ningún daño directo, indirecto, incidental, especial, ejemplar o consecuente (incluyendo, pero no limitado a, la adquisición de bienes o servicios sustitutivos pérdida de uso, datos, ganancias o interrupción del negocio Sin importar la causa y la teoría de la responsabilidad, ya sea en contrato, responsabilidad estricta o agravio (incluyendo negligencia o de otro tipo) que surja en cualquier uso del software, incluso si se le avisa de la posibilidad de tal daño. Configuración de una cuenta con OANDA La primera pregunta que viene a la mente es ¿Por qué elegir OANDA. En pocas palabras, después de un poco de Googling alrededor de los corredores de la divisa que tenía API, vi que OANDA había publicado recientemente una adecuada REST API que fácilmente podría ser comunicada con desde casi cualquier idioma de una manera muy sencilla. Después de leer su documentación de API de desarrollador. Decidí darles una oportunidad, al menos con una cuenta de práctica. Para ser claro - no tengo ninguna relación anterior o existente con OANDA y sólo estoy proporcionando esta recomendación basada en mi experiencia limitada jugando alrededor con su API de la práctica y un cierto uso breve (para la transferencia directa de datos del mercado) mientras que empleado en un fondo previamente. Si alguien ha llegado a través de cualquier otro corredor de la divisa que también tienen una API similarmente moderna entonces Id ser feliz para darles una mirada también. Antes de utilizar la API es necesario registrarse para una cuenta de práctica. Para ello, diríjase al enlace de registro. Verá la siguiente pantalla: A continuación, podrá iniciar sesión con sus credenciales de inicio de sesión. Asegúrese de seleccionar la pestaña fxTradePractice de la pantalla de inicio de sesión: Una vez que tenga que tomar nota de su ID de cuenta. Se enumera debajo del encabezado negro Mis fondos junto a Primaria. El mío es un número de 7 dígitos. Además, también necesitará generar un token API personal. Para hacer esto, haga clic en Administrar acceso a la API debajo de la pestaña Otras acciones en la parte inferior izquierda: En esta etapa, podrá generar un token de API. Usted necesitará la llave para su uso posterior, así que asegúrese de anotarlo también. Ahora querrá lanzar la aplicación FXTrade Practice, que nos permitirá ver las órdenes ejecutadas y nuestra pérdida de papel (ganancia de beneficio). Si está ejecutando un sistema Ubuntu necesitará instalar una versión ligeramente diferente de Java. En particular, la versión de Oracle de Java 8. Si no lo hace, entonces el simulador de práctica no se cargará desde el navegador. Ejecuté estos comandos en mi sistema: ahora podrá iniciar el entorno de comercio de prácticas. Vuelva al cuadro de mandos de OANDA y haga clic en el enlace Destacado de Práctica de FXTrade. Se abrirá un diálogo de Java preguntando si desea ejecutarlo. Haga clic en Ejecutar y la herramienta fxTrade Practice se cargará. Mine incumplió a una carta de vela de 15 minutos de EUR / USD con el panel de cotización a la izquierda: En este punto estamos listos para comenzar a diseñar y codificar nuestro sistema automatizado de comercio de divisas contra la API de OANDA. Visión general de la arquitectura comercial Si ha estado siguiendo la serie de backtester dirigida a eventos para acciones y ETF que creé el año pasado, será consciente de cómo funciona un sistema comercial basado en eventos. Para aquellos de ustedes que son nuevos en el software impulsado por eventos. Yo sugeriría fuertemente la lectura a través del artículo con el fin de obtener alguna idea de cómo funcionan. En esencia, todo el programa se ejecuta en un bucle de infusión mientras que sólo termina cuando el sistema de comercio está apagado. El mecanismo de comunicación central del programa se da a través de una cola que contiene eventos. La cola se consulta constantemente para comprobar si hay nuevos eventos. Una vez que un evento ha sido retirado de la parte superior de la cola debe ser manejado por un componente apropiado del programa. Por lo tanto un feed de datos de mercado podría crear TickEvent s que se colocan en la cola cuando un nuevo precio de mercado llega. Un objeto de estrategia de generación de señales puede crear OrderEvent que se van a enviar a una correduría. La utilidad de este sistema se da por el hecho de que no importa qué orden o tipos de eventos se colocan en la cola, ya que siempre serán manejados correctamente por el componente correcto dentro del programa. Además, diferentes partes del programa se pueden ejecutar en subprocesos separados. Lo que significa que nunca se espera ningún componente en particular antes de procesar cualquier otro. Esto es extremadamente útil en situaciones de negociación algorítmica en las que los controladores de alimentación de datos del mercado y los generadores de señales de estrategia tienen características de rendimiento muy diferentes. El bucle comercial principal es dado por el siguiente pseudo-código de Python: Como se indicó anteriormente, el código se ejecuta en un bucle infinito. En primer lugar, se consulta la cola para recuperar un nuevo evento. Si la cola está vacía, el bucle simplemente se reinicia después de un breve período de descanso conocido como latido. Si se encuentra un evento, se evalúa su tipo y luego se invoca al módulo relevante (ya sea la estrategia o el manejador de ejecución) para manejar el evento y posiblemente generar nuevos que vuelvan a la cola. Los componentes básicos que vamos a crear para nuestro sistema de comercio incluyen los siguientes: Streaming Price Handler - Esto mantendrá una conexión de larga duración abierta a los servidores de OANDAs y enviar datos de tick (es decir, bid / ask) a través de la conexión para los instrumentos que estaban interesados Generador de Señal de Estrategia - Esto tomará una secuencia de eventos de tick y los usará para generar órdenes comerciales que serán ejecutadas por el manejador de ejecución. Execution Handler - Toma un conjunto de eventos de orden y los ejecuta ciegamente con OANDA. Eventos: estos objetos constituyen los mensajes que se transmiten en la cola de eventos. Sólo necesitamos dos para esta implementación, a saber, el TickEvent y el OrderEvent. Punto de entrada principal - El punto de entrada principal también incluye el bucle comercial que sondea continuamente la cola de mensajes y envía mensajes al componente correcto. A menudo se denomina bucle de eventos o controlador de eventos. Ahora discutiremos la implementación del código en detalle. En la parte inferior del artículo está la lista completa de todos los archivos de código fuente. Si los coloca en el mismo directorio y ejecuta python trading. py, comenzará a generar órdenes, asumiendo que ha rellenado su ID de cuenta y su token de autenticación de OANDA. Implantación de Python Es una mala práctica almacenar contraseñas o claves de autenticación dentro de una base de código, ya que nunca se puede predecir quién podrá acceder a un proyecto. En un sistema de producción almacenaríamos estas credenciales como variables de entorno con el sistema y luego consultaríamos estos envvars cada vez que el código se redistribuya. Esto asegura que las contraseñas y los tokens de autorización nunca se almacenan en un sistema de control de versiones. Sin embargo, puesto que sólo estamos interesados ​​en la construcción de un sistema de comercio de juguetes, y no estamos preocupados por los detalles de producción en este artículo, en su lugar, separar estos símbolos de autenticación en un archivo de configuración. En el siguiente archivo de configuración de settings. py tenemos un diccionario denominado ENVIRONMENTS que almacena los puntos finales de API para la API de flujo de precios de OANDA y la API de negociación. Cada subdirectorio contiene tres puntos finales separados de API: real. Práctica y caja de arena. La API de sandbox es puramente para probar código y para comprobar que no hay errores o errores. No tiene las garantías de tiempo de actividad de las API reales o de la práctica. La práctica API, en esencia, proporciona la capacidad de comercio de papel. Es decir, proporciona todas las características de la API real en una cuenta de práctica simulada. La API real es sólo eso - es el comercio en vivo Si utiliza ese punto final en su código, se negociará contra el saldo de su cuenta real. SER EXTREMADAMENTE CUIDADOSO IMPORTANTE: Al negociar contra la práctica API recuerde que un costo de transacción importante, el de impacto de mercado. no es considerado. Dado que en realidad no se están introduciendo operaciones en el medio ambiente, este costo debe contabilizarse de otra manera en otro lugar utilizando un modelo de impacto en el mercado si se desea evaluar de forma realista el rendimiento. En lo que sigue, estamos utilizando la cuenta de práctica dada por la configuración DOMAIN. Necesitamos dos diccionarios independientes para los dominios, uno para los componentes de API de flujo y de intercambio. Finalmente tenemos el ACCESSTOKEN y ACCOUNTID. He llenado los dos abajo con identificadores falsos así que usted necesitará utilizar sus los propios, que se pueden alcanzar de la página de la cuenta de OANDA: El paso siguiente es definir los acontecimientos que la cola utilizará para ayudar a todos los componentes individuales comunican. Necesitamos dos: TickEvent y OrderEvent. El primero almacena información sobre los datos del mercado de instrumentos, tales como la (mejor) oferta / consulta y el tiempo de negociación. El segundo se utiliza para transmitir órdenes al manejador de ejecución y por lo tanto contiene el instrumento, el número de unidades a negociar, el tipo de pedido (mercado o límite) y el lado (compra y venta). Para probar el código de eventos a futuro, vamos a crear una clase base llamada Evento y que todos los eventos hereden de esto. El código se proporciona a continuación en events. py: La próxima clase que vamos a crear manejará la estrategia de negociación. En esta demo vamos a crear una estrategia bastante absurda que simplemente recibe todas las garrapatas del mercado y cada 5 tick aleatoriamente compra o vende 10.000 unidades de EUR / USD. Es evidente que esta es una estrategia ridícula. Sin embargo, es fantástico para fines de pruebas porque es fácil de codificar y entender. En las entradas del diario futuro, vamos a reemplazar esto con algo significativamente más emocionante que (con suerte) a su vez un beneficio El archivo strategy. py se puede encontrar a continuación. Permite trabajar a través de él y ver lo que está pasando. Primero importamos la biblioteca aleatoria y el objeto OrderEvent de events. py. Necesitamos la lib al azar para seleccionar una orden al azar de compra o venta. Necesitamos OrderEvent, ya que así es como el objeto de estrategia enviará órdenes a la cola de eventos, que luego será ejecutada por el manejador de ejecución. La clase TestRandomStrategy toma simplemente el instrumento (en este caso EUR / USD), el número de unidades y la cola de eventos como un conjunto de parámetros. A continuación, crea un contador de ticks que se utiliza para indicar cuántas instancias de TickEvent ha visto. La mayor parte del trabajo se produce en el método calculatesignals, que simplemente toma un evento, determina si es un TickEvent (de lo contrario ignorar) e incrementa el contador de tick. A continuación, comprueba si el recuento es divisible por 5 y luego compra o vende al azar, con un pedido de mercado, el número especificado de unidades. No es ciertamente la estrategia comercial más grande del mundo, pero será más que adecuado para nuestros propósitos de evaluación de API de corretaje de OANDA. El siguiente componente es el manejador de ejecución. Esta clase tiene la tarea de actuar sobre las instancias de OrderEvent y hacer solicitudes al corredor (en este caso OANDA) de una manera muda. Es decir, no existe una superposición de la gestión de riesgos o de la construcción de fondos. El manejador de ejecución simplemente ejecutará cualquier orden que se le haya dado. Debemos pasar toda la información de autenticación a la clase Execution, incluyendo el dominio (practice, real o sandbox), el token de acceso y el ID de cuenta. A continuación, creamos una conexión segura con httplib. Uno de Pythons construido en las bibliotecas. La mayor parte del trabajo ocurre en executeorder. El método requiere un evento como parámetro. A continuación, construye dos diccionarios: los encabezados y los parámetros. Estos diccionarios serán codificados correctamente (parcialmente por urllib, otra biblioteca de Python) para ser enviados como una petición HTTP POST a la API de OANDAs. Pasamos los parámetros de encabezado Content-Type y Authorization, que incluyen nuestra información de autenticación. Además codificamos los parámetros, que incluyen el instrumento (EUR / USD), unidades, tipo de pedido y lado (compra / venta). Finalmente, realizamos la solicitud y guardamos la respuesta: El componente más complejo del sistema de trading es el objeto StreamingForexPrices, que maneja las actualizaciones de precios de mercado de OANDA. Hay dos métodos: connecttostream y streamtoqueue. El primer método utiliza la biblioteca de peticiones de Python para conectarse a un socket de transmisión con los encabezados y parámetros adecuados. Los parámetros incluyen el ID de cuenta y la lista de instrumentos necesarios que deben ser escuchados para actualizaciones (en este caso es sólo EUR / USD). Tenga en cuenta la línea siguiente: Esto le indica a la conexión que se va a transmitir y, por tanto, mantenerse abiertos de forma prolongada. El segundo método, streamtoqueue. En realidad intenta conectarse a la secuencia. Si la respuesta no tiene éxito (es decir, el código de respuesta no es HTTP 200), simplemente regresamos y salimos. Si tiene éxito tratamos de cargar el paquete JSON devuelto a un diccionario Python. Finalmente, convertimos el diccionario Python con el instrumento, bid / ask y timestamp en un TickEvent que se envía a la cola de eventos: Ahora tenemos todos los componentes principales en su lugar. El paso final es terminar todo lo que hemos escrito hasta ahora en un programa principal. El objetivo de este archivo, conocido como trading. py. Es crear dos subprocesos separados. Uno de los cuales ejecuta el controlador de precios y el otro que ejecuta el controlador de negociación. Por qué necesitamos dos hilos separados Puesto simplemente, estamos ejecutando dos pedazos separados de código, que están funcionando continuamente. Si tuviéramos que crear un programa no roscado, entonces el socket de streaming utilizado para las actualizaciones de precios nunca volvería a liberarse a la ruta del código principal y, por tanto, nunca realizaríamos ningún tipo de transacción. De manera similar, si ejecutamos el bucle comercial (ver más abajo), nunca volveríamos a devolver la ruta de flujo al socket de streaming de precios. Por lo tanto, necesitamos múltiples subprocesos, uno para cada componente, para que puedan llevarse a cabo independientemente. Ambos se comunicarán entre sí a través de la cola de eventos. Vamos a examinar esto un poco más. Creamos dos subprocesos separados con las siguientes líneas: Pasamos el nombre de la función o el método al argumento de la palabra clave de destino y luego pasamos un iterable (como una lista o una tupla) al argumento de la palabra clave args, que luego pasa esos argumentos al método actual /función. Finalmente iniciamos ambos subprocesos con las siguientes líneas: Así podemos ejecutar dos segmentos de código de looping efectivamente infinitos, independientemente, que se comunican a través de la cola de eventos. Tenga en cuenta que la biblioteca de subprocesos Python no produce un verdadero entorno multihilo multi-núcleo debido a la implementación CPython de Python y el bloqueo de intérprete global (GIL). Si desea leer más sobre multithreading en Python, eche un vistazo a este artículo. Examinemos el resto del código en detalle. En primer lugar, importamos todas las bibliotecas necesarias, incluida la cola. Enhebrado y tiempo. A continuación, importamos todos los archivos de código anteriores. Personalmente, prefiero capitalizar cualquier configuración, que es un hábito que tomé de trabajar con Django Después de que se define la función de comercio, que se explicó en Python-pseudocódigo anterior. Se ejecuta un ciclo infinito while (mientras que True:) que sondea continuamente desde la cola de eventos y sólo salta el bucle si se encuentra vacío. Si se encuentra un evento entonces es un TickEvent o un OrderEvent y luego se llama al componente apropiado para llevarlo a cabo. En este caso es un manejador de estrategia o de ejecución. El lazo entonces simplemente duerme para los segundos del latido (en este caso 0.5 segundos) y continúa. Finalmente, definimos el punto de entrada principal del código en la función principal. Es bien comentado abajo, pero resumiré aquí. En esencia instanciamos la cola de eventos y definimos los instrumentos / unidades. A continuación, creamos la clase StreamingForexPrices de flujo de precios y posteriormente el manejador de ejecución de ejecución. Ambos reciben los detalles de autenticación necesarios dados por OANDA al crear una cuenta. A continuación, creamos la instancia de TestRandomStrategy. Finalmente, definimos los dos subprocesos y luego los iniciamos: Para ejecutar el código basta con colocar todos los archivos en el mismo directorio y llamar al siguiente en el terminal: Tenga en cuenta que para detener el código en esta etapa se requiere una matanza dura del Proceso de Python. Vía Ctrl-Z o equivalente Ive no agregó un hilo adicional para manejar buscando el sys. exit () que sería necesario para detener el código de forma segura. Una forma potencial de detener el código en una máquina Ubuntu / Linux es escribir: Y luego pasar la salida de este (un número de proceso) en lo siguiente: Donde PROCESSID debe reemplazarse con la salida de pgrep. Tenga en cuenta que esto NO es una práctica particularmente buena En artículos posteriores vamos a crear un mecanismo más sofisticado stop / start que hace uso de la supervisión de procesos Ubuntus para tener el sistema de comercio que funciona 24/7. La salida después de 30 segundos o así, dependiendo de la hora del día en relación con las horas de negociación principales para EUR / USD, para el código anterior, se da a continuación: Las primeras cinco líneas muestran los datos de garaje JSON devueltos de OANDA con bid / ask precios. Posteriormente puede ver el resultado de la orden de ejecución así como la respuesta JSON devuelta por OANDA confirmando la apertura de un comercio de compra por 10.000 unidades de EUR / USD y el precio en el que se logró. Esto seguirá funcionando indefinidamente hasta que usted mate el programa con un comando Ctrl-Z o similar. Lo que sigue En artículos posteriores vamos a llevar a cabo algunas mejoras muy necesarias, incluyendo: Estrategias reales - estrategias adecuadas de divisas que generan señales rentables. Infraestructura de producción - Implementación de servidores remotos y sistema de monitoreo 24/7 supervisado, con capacidad stop / start. Gestión de carteras y riesgos - Cartera y superposiciones de riesgo para todos los pedidos sugeridos de la estrategia. Múltiples estrategias - Construir una cartera de estrategias que se integran en la superposición de la gestión de riesgos Al igual que con las acciones de backtestter impulsado por eventos, también tenemos que crear un módulo de backtesting forex. Eso nos permitirá realizar investigaciones rápidas y facilitar el despliegue de estrategias. Código completo settings. py (recuerde cambiar ACCOUNTID y ACCESSTOKEN):


No comments:

Post a Comment