6 votos

¿Existe alguna biblioteca de código abierto que implemente el "intercambio" para los algoritmos que se ejecutan en el mismo ordenador?

Pregunta: ¿Existe algún proyecto/biblioteca de código abierto que pueda actuar como un "intercambio local" de agentes (algoritmos) que se ejecuten en el mismo ordenador?

Aclaración: Por "intercambio local" quiero decir, que los agentes, que tienen las cuentas en este intercambio son "algoritmos", que se ejecutan en el mismo ordenador. Es decir, en esta pregunta no hablo de la creación de cualquier mercado de intercambio para otras personas o empresas para el comercio.

Para aclarar, voy a proporcionar un par de casos de uso y un conjunto de características deseables. En lo que sigue, la biblioteca Exchange se queda para la hipotética biblioteca que quiero encontrar.

Caso práctico 1: sistema de comercio

Imagina que tienes 4 algoritmos que pueden gestionar una cantidad de dinero en el mercado de valores y (con suerte) generar algún beneficio. Digamos que tienes 4000 Tögrögs y quieres reducir los riesgos mediante la diversificación: quieres dar 1000 Tögrögs a cada algoritmo, de modo que si uno falla, lo máximo que puedes perder son 1000 Tögrögs.

Imagina que tienes un corredor de bolsa y que has abierto una cuenta con él. No quiere abrir 3 cuentas más (por ejemplo, porque le resultaría demasiado caro). En su lugar, quiere que cada uno de los 4 algoritmos tenga una cuenta virtual en la librería de la Bolsa, para que puedan enviar sus órdenes a la librería de la Bolsa, y ésta 1. comprobaría si la cuenta contiene suficiente dinero; 2. en caso afirmativo, reenviaría las órdenes al mercado de divisas; 3. cancelaría las órdenes de compra y venta entre las cuentas, cuando fuera posible.

Empecé diciendo que el objetivo de este plan es la diversificación. Sin embargo, hay 3 beneficios adicionales:

  1. Proporcionar una interfaz unificada para los algoritmos de negociación: por supuesto, es necesario tratar con la API del corredor para enviar las operaciones. Pero en el esquema anterior, es necesario hacerlo una vez escribiendo una puerta de enlace para la biblioteca de Exchange, en lugar de pensar en la API mientras se implementa cada uno de los 4 algoritmos.
  2. La anulación local de las órdenes permite realizar operaciones que de otro modo serían imposibles. Imagine, por ejemplo, que el algoritmo A quiere pagar 10,00 Tögrögs por una acción WWD de la empresa "Worldwide". Sin embargo, el corredor tiene una comisión de 0,10 Tögrögs, por lo que la biblioteca de la Bolsa obtiene una orden y pone la orden de COMPRA a 9,90 Tögrögs (por lo que si la orden es igualada, el importe total pagado será de 10,00 = 9,90 + 0,10 de comisión). Sin embargo, pone una orden de COMPRA al precio de 10,00 al mercado "local". Más tarde, mientras la orden no fue igualada, el algoritmo B decide vender 1 acción WWD a 9,95. Dada la comisión, la orden de VENTA podría enviarse al corredor sólo a 10,05 o más, pero la orden puede cancelarse localmente con la orden del algoritmo A inmediatamente.
  3. Operaciones de pares no negociables. Imagina que el algoritmo A decide que una acción de WWD vale 25 dólares lunares, pero que sólo se negocia en Tögrögs (con un precio actual de 10,00). Aunque no tiene acceso a ninguna pasarela que pueda cambiar Tögrögs a dólares lunares, el algoritmo D tiene 30 dólares lunares y está encantado de cambiarlos por 10 Tögrögs. Esta operación fue enviada a la biblioteca de intercambio, pero no pudo ser remitida a ningún sitio. Dado que el algoritmo A decide cambiar 1 acción de WWD a 10 Tögrögs, y luego cambiar 10 Tögrögs a 30 Lunar Dollars igualando la orden de D, generando un beneficio (supuesto) de 5 Lunar Dollars.

Caso práctico 2: pruebas de hipótesis económicas

Imagina que quieres observar un fenómeno, que si los agentes siguen una determinada estrategia, el mercado pasa por ciclos de 30 años. Decides modelarlo en tu ordenador. Implementas un modelo simplista, en el que hay 7 tipos de bienes y 10000 agentes, que pueden comprar, vender, producir y consumir. Lo que necesitas es un mercado, donde compradores y vendedores puedan encontrarse. Podrías utilizar la librería Exchange como tal mercado y tener 10000 cuentas para los agentes y ninguna pasarela externa. Podrías entonces ejecutar el experimento, trazar los precios y comprobar si el fenómeno puede ser observado.

Características deseables

  1. Dos interfaces. La biblioteca debe tener una interfaz para la interacción con los agentes (cuentas), así como una interfaz para la interacción con el mundo exterior (pasarelas). Debería existir la posibilidad de tener múltiples cuentas y múltiples pasarelas.
  2. Intercambio local. La biblioteca de intercambio debe implementar un "mercado" local, donde los agentes puedan intercambiar bienes/acciones/monedas.
  3. Flexibilidad de las pasarelas. Por ejemplo, si las API de dos corredores permiten la transferencia automática de acciones entre ellos, debería haber una forma de añadir este procedimiento como una pasarela.
  4. Escalabilidad. Debería haber una forma sencilla de escribir los algoritmos para los agentes en C++, ya que permite un procesamiento complejo y eficiente de Gigabytes de datos. Por otro lado, uno debería ser capaz de implementar agentes simples con una pequeña cantidad de código.
  5. Linux. Los programas escritos con la biblioteca Exchange deberían poder ejecutarse en Linux, ya que tanto los servidores como los ordenadores utilizados para cálculos pesados utilizan Linux.
  6. Fiabilidad. Por ejemplo, aunque una transacción puede fallar por razones objetivas, nunca debería ocurrir dos veces. Algunas transacciones (por ejemplo, la transferencia de fondos entre corredores) pueden durar hasta una semana, por lo que el hecho de que una transacción esté en curso no debería impedirnos cerrar la aplicación y comenzarla más tarde con el mismo estado. Debería haber una manera de recuperarse de las caídas.
  7. Async/eficiencia. Por ejemplo, mientras se espera la respuesta de una pasarela, la biblioteca no debería dejar de responder o ralentizar el procesamiento de transacciones no relacionadas.

Pregunta ampliada: Me parece que esta es una biblioteca muy natural para escribir. Es por eso que estoy preguntando si alguien ha hecho al menos algo similar. Siento que estoy inventando una bicicleta, y allí incluso si esto no se implementó todavía, hay al menos cosas que podría empezar y añadir mi propio código en la parte superior. Si no, me gustaría saber, por qué, porque esto probablemente significaría, que la gente piensa de manera diferente, que yo, y puede ser que me estoy perdiendo algo. Así que la pregunta extendida es:

¿Existe algo similar a la biblioteca que he descrito anteriormente, y si no lo hay, por qué?

8voto

Existe la Biblioteca de simulación comercial Hudson C++ en el código de Google. Hudson es gratuito y de código abierto bajo la licencia GNU GPL v3. También contiene funcionalidad para el cálculo de estadísticas y herramientas para la integración con la implementación de su estrategia de negociación.

Desde el sitio web

Hudson calcula varias estadísticas, como la tasa de crecimiento anualizada compuesta, el % de ganadores/perdedores, la reducción realizada, el análisis de la excursión de la posición, los rendimientos mes a mes, el ratio de Sharpe y la desviación estándar geométrica de los rendimientos mensuales. Las estadísticas del informe son fácilmente ampliables heredando de la clase Report y añadiendo su propio cálculo basado en las transacciones registradas y los datos históricos. La API del operador admite el backtesting de cualquier estrategia de negociación larga/corta personalizada, como el backtesting de carteras de múltiples símbolos, estrategias de negociación de pares y de spreads. Para ver un ejemplo de negociación por diferencias, consulte el operador de enero (JanTrader). Esta clase implementa una estrategia de negociación que analiza el efecto estacional de los microcapítulos que se produce a finales de año. El ejemplo Asset Allocator (AATrader) evalúa el rendimiento de 5 clases de activos (World Equities, SP500, Commodities, US Bonds y REIT) mensualmente y toma decisiones de asignación basadas en cada índice SMA.

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X