Creación de un sistema comercial en Scala

Esta será la primera publicación de una serie de publicaciones que describen cómo estoy construyendo un sistema de comercio automatizado principalmente en Scala pero con interoperabilidad de Python, ya sea a través del intérprete de Jython o utilizando formatos de datos estándar que se pueden usar fácilmente desde Python.

El código fuente del framework será de código abierto en GitHub con una licencia MIT permisiva que permitirá su uso con fines comerciales.

Tocaremos diversos temas como funcional programación, bases de datos, redes, análisis de series de tiempo y aprendizaje automático.

¿Por qué principalmente Scala?

Al construir un marco no trivial, existe una necesidad absoluta de tener un lenguaje escrito que haga que el código sea robusto y más fácil de refactorizar, además de que requiere menos pruebas que con un lenguaje dinámico dado que el compilador que verifica las invariantes y garantías descritas por el sistema de tipos. Scala es un lenguaje conciso y seguro de tipos que combina la programación orientada a objetos con la programación funcional, lo que proporciona un alto grado de flexibilidad y potencia. Aún así, Scala aún no está a la altura de la cantidad de herramientas disponibles para Python para análisis de datos, trazado y para tareas de ciencia de datos. Hay buenos frameworks y bibliotecas como Saddle, Breeze que están mejorando las cosas. Para estas cosas, podemos usar Python para cerrar las brechas en el ecosistema Scala / Java.

Por otro lado, aprovechar las capacidades de concurrencia de la JVM, el marco Spark para la computación distribuida y la gran cantidad de Java disponible y las bibliotecas Scala hacen que usar Scala sea una muy buena opción.

Puede leer más fundamentos en la siguiente publicación: Por qué elijo Scala para el proyecto Apache Spark.

Sistemas de comercio automatizados

Dado que más del 75% del volumen de negociación se origina en sistemas de negociación automatizados, los inversores e inversores individuales y los comerciantes se encuentran en desventaja cuando comercian con máquinas.

¿Qué es un sistema de negociación automatizado ( ATS)?
En su forma más simplificada, es solo una función con estado que reacciona a los datos del mercado y produce órdenes que se envían a un corredor.

Los ATS reales suelen ser mucho más complejos, ya que se necesita una gran cantidad de infraestructura en torno a los algoritmos que reaccionarán a los datos del mercado y producirán pedidos. Algunas de las cosas que necesitaremos construir también serán útiles para otras tareas como la optimización de la cartera.

Parte de la infraestructura necesaria alrededor de un ATS es:

* Un almacenamiento de datos históricos
* Capacidades de back-testing, para entrenar algoritmos y verificar estrategias comerciales
* Conexión con el corredor para enviar órdenes y obtener el libro de órdenes
* Análisis de riesgos y sistemas de seguridad para verificar la exposición y el riesgo del mercado

La construcción de un sistema de comercio automatizado es un trabajo muy complejo. Eso por sí solo coloca al comerciante individual y al inversionista en una gran desventaja dada la cantidad de tiempo o recursos que tendría que dedicar para construir toda la infraestructura requerida alrededor de un ATS.

Existen soluciones alojadas como Quantopian (python basado) y Quantconnect (basado en C #), con componentes de código parcialmente abierto. Aquí quiero establecer la primera piedra para tener un marco de sistema de negociación de código abierto permisivo y seguro para crear estrategias de negociación automatizadas, optimizar carteras y analizar valores.