Soy un comerciante de mamá: busco marcos gratuitos para probar hipótesis y lanzar en modo batalla (Python)

Supongamos que tiene algo que ver con el mercado de valores antes. O, al no tener uno, se dejó llevar por el tema de la criptomoneda caliente (pero en los últimos meses ya notablemente enfriado ...). Supongamos también que ha ido aún más lejos y ha decidido que el "control manual" de los vuelos ya no es efectivo y que necesitaría automatizar sus ideas brillantes y convertir al mono en algo más tecnológico. Exactamente en este punto, comienzan las preguntas que me gustaría discutir en el artículo, a saber: ¿hay una solución preparada para probar las ideas comerciales (lo deseable es gratis), dónde obtener datos históricos (idealmente gratis) y también qué hacer con todo esto más adelante, es decir ¿Cuáles son las soluciones para el lanzamiento de combate de los sistemas de comercio automatizado que se han probado con éxito en una prueba inversa? Nota uno y dos: el artículo está escrito para bibliotecas y sistemas basados ​​en Python, no puedo juzgar cómo puede ser la accesibilidad para otros idiomas; se da prioridad a los mercados extranjeros y / o criptomonedas; tampoco presumo juzgar cómo se aplica al mercado de valores ruso.

imagen

Este material no es una guía o revisión exhaustiva, sino una propuesta para intercambiar ideas de trabajo sobre la base de una búsqueda práctica de una asamblea de trabajo normal para uso personal. Ante la necesidad de automatizar incluso estrategias comerciales simples (comercio de impulso, seguimiento de tendencias, etc.), surgieron una serie de problemas de inmediato. Señalemos lo que necesitamos:

  • Formular una hipótesis y algoritmizarla
  • Probar la hipótesis en datos históricos. Una nota súper importante: también debe comprender qué datos históricos se incluyen en la categoría de "adecuados" para su uso en el backtest de los sistemas comerciales. No me comprometeré a escribir una publicación por separado sobre esto ahora (aunque esto lo requiere, pero hay muchos materiales sobre este tema en el dominio público), describiré algunos problemas clave con los datos históricos: si las empresas que abandonaron los índices o se declararon en quiebra, se dividieron las acciones, y también cómo se considera la rentabilidad, teniendo en cuenta los dividendos (rendimiento total) o no. Realmente me disculpo por la brevedad, pero esta publicación aún no se trata de eso, y este no es un conjunto exhaustivo de requisitos de datos.
  • Si la verificación es exitosa, cómo transferir la hipótesis a una cuenta comercial real, agregando un sistema de gestión de riesgos, gestión de pedidos, reequilibrio y evaluación del resultado.

Ahora es el momento de hacer dos digresiones importantes con respecto a la "introducción" con la que estamos trabajando en este artículo. La primera es la elección del lenguaje: muchos dirán que C # para crear robots comerciales / sistemas comerciales automatizados es mucho más común y más rápido que Python. No puedo estar en desacuerdo, pero debo tener en cuenta el segundo punto importante: la diferencia entre el comercio algorítmico y la automatización de los sistemas comerciales. A partir de conversaciones con profesionales del comercio cuantitativo y simplemente de materiales teóricos encontrados, se puede concluir que el comercio algorítmico (a menudo utilizado como sinónimo de "Comercio de alta frecuencia (HFT)" es una táctica para trabajar con órdenes, con flujos de datos a diferentes intercambios, en función de la velocidad acceso a ellos (y dependiendo de milisegundos), y allí exclusivamente C # puede hacer frente a las tareas. Al mismo tiempo, las tareas que lleva a cabo el comerciante de "casa" son probablemente Python, porque nuestro objetivo es automatizar los sistemas de negociación especulativa a corto y mediano plazo, cuya rotación de cartera no alcanza el 100% por día, y la cantidad de pedidos y requisitos la velocidad de su ejecución no excede un umbral razonable que separa el comercio de alta frecuencia y el comercio automatizado a corto / mediano plazo.

Cómo se evalúan los sistemas de negociación, cómo se escriben los algoritmos de negociación, etc. Todo esto está más allá del alcance, de lo contrario no hay forma de encajar en el artículo. Veamos un ejemplo específico: tengo un sistema de negociación basado en el descrito en el libro "Acciones en movimiento: Venciendo al mercado con estrategias de impulso de fondos de cobertura". La estrategia comercial está escrita en Python y no incluye ningún elemento súper complejo. Lo primero que necesita es la oportunidad de probar la estrategia en datos históricos. No tengo ningún problema para discutir la elección del corredor, utilizo los servicios de los corredores interactivos y ya tienen una API nativa para Python. Sin embargo, la posibilidad de un backtest incluso con suscripciones de datos pagados no se proporciona allí. Esto es lo que logré encontrar para el backtest:

1) Todos están escuchando - Quantopian.com

Solo se admite Python 2.7, es posible construir y probar sistemas de negociación de forma gratuita, hay datos históricos gratuitos para usar (acciones y futuros de EE. UU.), Está disponible en línea, no es posible la instalación local. No escribiré una revisión larga, esbozaré de inmediato las áreas problemáticas que se encontraron incluso a un nivel básico: dado que eliminaron la posibilidad de vincularse a una cuenta de corretaje, no hay forma de usar los sistemas de negociación desarrollados y probados para el comercio en vivo. Esto inmediatamente impone restricciones (algunas de ellas ayudarán a resolver zipline-live, más sobre eso a continuación), porque Quantopian se basa en la biblioteca zipline y, además, hay algunas funciones que funcionan solo dentro de su sistema, por lo que cuando desee transferir su sistema autoescrito y probado a la misma API nativa desde un intermediario, tendrá que reescribir la mitad para que funcione, y También decida qué hacer con los fragmentos de código basados ​​en zipline. El signo menos (para algunos sistemas) también puede considerarse la prohibición de tickers dinámicos, pero por ahora dejamos esta tesis sin detalles.

La principal ventaja de Quantopian (en mi humilde opinión) (además de un sistema gratuito para pruebas y datos históricos) es una comunidad muy activa, muchas publicaciones sobre análisis y los matices de los sistemas de construcción. Importante: los datos históricos disponibles allí tienen en cuenta algunos de los problemas (puede trabajar no solo con compañías en vivo, sino también obtener listas de índices de años pasados ​​para tener en cuenta los abandonos, quiebras, etc.), las divisiones también se tienen en cuenta, e incluso hay (!) Conjuntos de datos de retorno total, es decir, puede usar indicadores de rentabilidad con dividendos.

2) Realmente quiere ser escuchado por todos, pero aún no lo ha hecho - Backtrader.com

Python 2.7, 3.2-3.6 es compatible, solo está disponible para su uso en la máquina local.
Parece que hay integración con los corredores y será posible lanzar sistemas que utilicen esta biblioteca en la batalla con esfuerzos mínimos de integración. Francamente, es muy dudoso, no he visto ningún ejemplo vivo, la comunidad está casi muerta, hay silencio en el foro. El autor de la biblioteca lo promueve activamente en Quora y otros recursos. No hay datos históricos, por lo que debe comprar o buscar fuentes gratuitas, pero comienzan los problemas de "sobrevivientes", dividendos (incluidos o no en los datos), divisiones y otras cosas. Estaré encantado de recibir comentarios reales sobre la práctica de usar esta biblioteca.

3) QuantConnect - quantconnect.com

Esta es una plataforma en línea (compatible con Python, respectivamente), que ofrece datos, backtest e integración con corredores populares. Pero al mismo tiempo, supongamos que para poder operar en vivo a través de Interactive Brokers, debe pagar al menos $ 20 por mes por suscribirse a QuantConnect, y esto no tiene en cuenta las suscripciones a datos del corredor, etc.
Mi opinión subjetiva es que la plataforma no es muy conveniente para el uso constante, de alguna manera todo está demasiado congestionado e inconveniente, además de pagado, más originalmente fue escrito en C # y simplemente envuelto para que pueda usar Python. Entonces, después de haber intentado probar varias estrategias allí, me negué a usarlo más. Aunque debemos rendir homenaje: la comunidad allí es menos activa, hay mucho material en los foros y los problemas pueden resolverse rápidamente. Me alegraría si compartes opiniones reales, tal vez simplemente no tuve una experiencia de usuario.

4) QuantRocket - quantrocket.com

A juzgar por la descripción, es solo una "canción". Hay de todo: instalación en línea y local, y backtesting, y datos históricos que puede recopilar del corredor o que usted mismo puede proporcionar (por $ 9 por mes), e inmediatamente la integración con los corredores, y la integración es tan buena que prometen no volver a escribir nada Tendré que ... e incluso prometen que si eras adicto a Quantopian antes y algunas cosas estaban escritas en tu tirolesa, te ayudarán con la transición a su plataforma y a la biblioteca interna (Moonshot), lo que permitirá que el comercio en vivo a través de un corredor se implemente con un mínimo esfuerzo ... Todo suena perfecto si no fuera por uno aproximadamente "pero": al menos $ 30 por mes para tener la oportunidad de realizar pruebas como todos realmente. No me atreví, porque hay meses que no requieren su participación en el mercado (por ejemplo, todos los filtros para ingresar al mercado muestran "sentarse") y luego una tarifa de $ 30 por la oportunidad de probar hipótesis parece demasiado injustificada. Pero estaré agradecido por las críticas reales: quién lo intentó, cuáles son los pros y los contras, etc. Otro punto vergonzoso es el enlace a la plataforma y la biblioteca, que se usa solo en ella, luego está plagada de un aumento en los "costos de cambio", es decir mañana, en lugar de $ 30, se entregarán por una tarifa simple de $ 150, y lo tiene vinculado a su biblioteca única Moonshot e implementado a través de su plataforma ... Como dicen, sus huevos en una canasta ...)

5) Zipline y Zipline-live (http://www.zipline.io, www.zipline-live.io )

Se instala localmente, funciona con Python 2.7 y 3.5 para Zipline y solo 2.7 para zipline-live.
Llegamos al preciado paquete, que, según mis observaciones, se usa con mayor frecuencia en la comunidad de amantes de los sistemas comerciales automatizados en el hogar.
Lo que tenemos: la biblioteca zipline, que es la piedra angular del motor Quantopian (ver punto 1) y su hermano menor, zipline-live, que admite la integración con Interactive Brokers y le permite ejecutar algoritmos creados usando zipline en producción con mínimas modificaciones. Brevemente sobre la historia del problema: cuando hace un par de años en Quantopian decidieron abandonar el comercio en vivo, la comunidad se agitó, las aguas se volvieron locas y nació el resultado de los esfuerzos colectivos (incluido el equipo de Quantopian, que prometió apoyar el desarrollo de la biblioteca en vivo de forma desinteresada). Después de eso, Zipline-live se convirtió, de hecho, en la única (?) Manera conveniente de forma gratuita (y sin registro :) para adaptar los sistemas probados en Quantopian (o localmente en zipline) al comercio real a través de corredores interactivos (con los que hay integración, pero sin un número algunas funciones importantes y no tan zipline). Lo que se puede decir sobre este grupo:

  • zipline es adecuado para usted localmente si tiene una fuente confiable de datos históricos o si tiene suficientes conjuntos de datos quandl integrados en la biblioteca de forma gratuita. Debe tenerse en cuenta que la biblioteca no admite la traducción de datos en línea, y tendrá que descargarla y luego cargarla para el backtest ( aquí encontrará más detalles sobre esto)
  • En teoría, zipline-live es adecuado si la integración con IB se implementa normalmente, y los algoritmos transferidos desde Quantopian no necesitarán un procesamiento y recorte significativos debido a funciones no implementadas en zipline-live.

6) QsTrader - github.com/mhallsmoore/qstrader

Esta es una biblioteca de los creadores del portal quantstart, una comunidad y un conjunto de materiales educativos, conferencias, etc. Instalado localmente, usa Python 3 y superior. No existe una oportunidad comercial real a través de un corredor, pero prometen agregar. Se basa en gran medida en la pila habitual de Python de Data Science: pandas, numpy, scipy, etc., por lo que deberá instalarlo todo de una vez. No pude obtener estimaciones objetivas de la prevalencia de esta biblioteca y lo diré con franqueza: no lo he probado en la práctica, porque a juzgar por el historial de actualizaciones, el trabajo en él está inactivo, no se agregan funciones, lo que significa que no funciona para un sistema completo, incluso "hogareño" adecuado, pero si hay resultados de su uso y se forma una opinión personal, comparta, de repente, esta solución es mejor que otras.

7) A continuación, enumeraré las bibliotecas que logré encontrar, pero no puedo decir mucho sobre ellas. En la mayoría de los casos, cuentan con el respaldo exclusivo de los autores de los blogs que los crearon, y no tienen la capacidad de integrarse con un corredor, lo que significa que se trata de una prueba inversa sin la capacidad de ser utilizado en la batalla, sin una comunidad y con un lento ritmo de desarrollo, es decir. no cumple con todas las tareas asignadas.

- bt (Backtesting para Python)
- comercio de sistemas

Resumiendo los resultados intermedios, comparto las conclusiones subjetivas:

  • Si no le importa usar plataformas en línea que se están volviendo obsoletas Python 2.7 y sus instrumentos de destino en estrategias son acciones / futuros en sitios de EE. UU. (Y el corredor de IB), entonces una combinación de Quantopian + zipline-live será conveniente y definitivamente gratis (!) que recibirá datos históricos gratuitos (que cumplen con los criterios de calidad), un IDE gratuito para probar hipótesis, así como una biblioteca local que le permite integrar sus logros con una cuenta de corretaje y lanzar el sistema en un vuelo de combate, teniendo en cuenta todas las cláusulas y una combinación de límites que se han descrito anteriormente en este documento. Personalmente, elegí esta opción por la conveniencia, la funcionalidad básica gratuita y una comunidad muy activa. En la próxima publicación, le diré lo fácil (o no fácil) que fue probar y transferir la estrategia de existencias de impulso de Quantopian en línea a zipline-live en la máquina local, qué tan bien se resolvió la integración con la cuenta de corretaje en IB en esta biblioteca, y también compartiré los detalles del uso del nativo Python API de IB.
  • Si la prioridad es una instalación local, control total sobre el sistema y no se molesta con la necesidad de descargar datos históricos en forma de paquetes de datos para probar hipótesis, o si hay una fuente de estos datos o está libre de quandl, entonces una posible solución sería el paquete Zipline + Zipline-live, que permitirá Puede implementar estrategias probadas en una máquina local con datos históricos (propios o gratuitos) a través de IB y todo esto es gratuito dentro del marco de la funcionalidad de las bibliotecas indicadas y el corredor de API de Python.

  • Si no puede o no desea abrir una cuenta con corredores interactivos, en general, gran parte de la lista anterior funcionará, porque QuantConnect, por ejemplo, trabaja con otros corredores que también admiten el comercio de FX / Crypto, etc. Y si las tareas, en principio, no necesitan llevar a cabo operaciones en vivo a través de un corredor, puede probar todas las bibliotecas / plataformas descritas para realizar una prueba inversa y elegir la que satisfaga más sus tareas.

PD En conclusión, quiero señalar que la importancia de elegir una plataforma / biblioteca no es solo la conveniencia, sino también la "escalabilidad" de los sistemas. Digamos que desarrollé algo inteligible y lo probé en zipline. Luego decidió implementarlo sin un backtest de ningún corredor a través de su API, y aquí comienza un millón de detalles adicionales que no tendrá en cuenta en el modo sandbox: cómo se ejecutan las órdenes, cómo procesa su sistema en diferentes modos de negociación, y si después del informe trimestral, hay una sesión supervoltaica de brecha / poscomercio, etc. Por lo tanto, en mi opinión subjetiva, es importante elegir un ensamblaje de tal manera que el código funcione tanto para la prueba inversa como para la implementación del sistema de comercio en la batalla, luego resolverá los defectos, h para mejorar la calidad de ambos.

Source: https://habr.com/ru/post/es434244/


All Articles