Trading automatizado mediante TradingBot

Diseñado por Freepik

En este artículo se describe el procedimiento seguido para construir un bot de trading automatizado. Se ponen en orden las conclusiones alcanzadas tras 18 meses (hasta el momento) de construcción. Antes de empezar es importante aclarar qué NO es el objetivo de este artículo.

Internet está repleto se sitios en los que se exponen métodos/estrategias para operar en bolsa, ya sea usando ciertos indicadores técnicos o procedimientos presuntamente contrastados. Basta con poner en el buscador «un dos tres trading» y veremos muchas entradas en las que se nos explica cómo actuar observando, por ejemplo, ciertos patrones en las velas japonesas. Evidentemente estas recetas nunca se acompañan de pruebas objetivas que corroboren que siguiendo ese método se gana dinero. Y es normal. Si alguien ha encontrado la fórmula con la que ganar dinero operando en bolsa, con toda seguridad que la estará explotando para sacar el máximo beneficio posible. ¿ Para qué compartir su método con el resto en lugar de beneficiarse de él ? En línea con esto, el objetivo de este artículo NO es describir la fórmula para ganar dinero, sino hacer un repaso de los aspectos a considerar si estamos pensando en construir un bot de trading, basado en los errores que he ido cometiendo mientras construyo el mío. Y digo construyo porque no lo consdiero terminado aunque creo que cada vez estoy más cerca del punto al que me gustaría llegar: operar, ganando algo de dinero, de forma desatendida.

¿ Está cerca ese objetivo ? Tras más de 1000 ejecuciones del bot la tasa de éxito (resultado neto positivo) se acerca al 50%, teniendo en cuenta que las sesiones ganadoras han ido de menos a más según vamos ajustando parámetros y realizando correcciones en el software, y que los resultados varían en función del bróker con el que se opera (debido a las diferentes comisiones, spreads, apalancamiento etc ..), de forma que la parametrización que va bien con un bróker, obtiene resultados negativos con otro. Para que el lector pueda juzgar si merece la pena seguir ahondando en este artículo, la siguiente tabla muestra los resultados (número de sesiones ganadoras vs perdedoras) por semana del año hasta el momento actual. Aunque todavía falta camino por recorrer, el objetivo está cada vez más cerca.

Por añadir algo de contexto a la tabla anterior, indicar que cada día se ejecutan en paralelo 11 instancias del bot, cada una de las cuales opera con una combinación «tipo de cuenta (real/demo)-broker-instrumentos de negociación» distinta. Más adelante explicaremos a qué obedece esta división pero básicamente persigue el objetivo de poder «parar» la negociación de unos determinados instrumentos (metales, índices, criptomonedas, o valores del stock), sin afectar a la negociación del resto, debido a que hay instrumentos que pueden negociarse 24×7 y otros que sólo operan los días laborables.

En cualquier caso, y mientras alcanzamos nuestro objetivo, ¡ qué bien nos lo estamos pasando !

Para construir un bot necesitaremos al menos las siguientes herramientas:

  1. Entorno de desarrollo / ejecuión
  2. Fuente de datos en tiempo real
  3. Plataforma de trading / bróker
  4. Servidor para la ejecución de nuestro bot
  5. Sistema de monitorización de la actividad del bot

Para construir nuestro bot necesitamos escribir su código usando un lenguaje de programación a nuestra elección aunque dicha elección quedará condicionada por las características de la plataforma de trading con la que vayamos a operar. En mi caso, el lenguaje de programación elegido es C# y el entorno de desarrollo es Visual Studio Code. Esta decisión obedece a 2 factores fundamentales: por un lado se trata de un lenguaje y de un IDE que me gustan y con los que me siento cómodo; por otro, la plataforma de trading con la que opero (cTrader) está construida/optimizada para trabajar con C#.

Aunque inicialmente empecé trabajando con Visual Studio 2022, acabé pasando a Visual Studio Code porque necesita menos recursos para su funcionamiento y se adapta mejor a las modestas capacidades de la máquina que uso para programar.

En cuanto a la versión de dichas herramientas, en el momento de escribir/programar el bot y este artículo, la versión del framework .Net es la 8.0 y la versión de C# es la 12.

Con relación al entorno para la ejecución del bot, necesitamos una máquina que esté continuamente corriendo, conectada a internet, y ejecutando nuestro bot. Podría usarse cualquier PC casero pero teniendo claro que la carga de trabajo de dicha máquina no puede interferir en el funcionamiento del bot. Cualquier interrupción en la comunicación entre el bot y los servidores del bróquer puede dar al traste con los procesos/cálculos en curso y provocar un fallo/excepción. Aunque dotemos al bot con capacidades para recuperarse de estos fallos, en ciertas ocasiones, una lentitud en la respuesta por parte de nuestro bot, es interpretado en la lado del sevidor como una «caída» del cliente y se produce una desconexión que obliga a un relanzamiento.

Por otro lado, si tenemos previsto desarrollar algún sistema de monitorización (por ejemplo una página web) tendremos una necesidad adicional de recursos de máquina que tal vez no puedan ser cubiertos con máquinas propias.

WebTradator. Web pra la monitorización del bot

En base a lo anterior, el entorno de desarrollo y ejecución que he implementado consiste en PC local, de capacidades modestas, en el que codifico y pruebo los cambios. Una vez finalizada la prueba, subo el sotware a un VPS que tengo contratado en Strato, que es donde se ejecuta el bot permanentemente y donde se aloja el sitio web desarrollado para la monitorización del funcionamiento.

Para poder empezar a trabajar necesitaremos disponer de una fuente de datos en tiempo real que nos permita acceder a los precios de negociación de los instrumentos (símbolos con los que operamos), hacer nuestros cálculos, y tomar una decisión, ya sea entrar «en largo» (comprar), entrar «en corto» (vender), o manternos neutrales.
Explicaré con más en detalle estos conceptos más adelante en este artículo.

Dado que el bot ha sido construido de forma progresiva, durante la fase inicial obtuve los datos mediante conexión a la plataforma Rapidapi.com que incluye, dentro de su extenso catálogo de APIs, un proveedor de datos «en tiempo real» de cotizaciones bursátiles como es Twelve Data. Aunque también se puede acceder a Twelve Data de forma directa mediante este enlace, he incluido el primer acceso dado que el catálogo de APIs que ofrece la plataforma de RapidApi merece la pena ser revisado.

RapidApi.com - TwelveData
TwelveData dentro de RapidApi.com

Como puede verse en la imagen de arriba, este proveedor de datos bursátiles (TwelveData) ofrece diversos planes de uso, que van desde 0€ a más de 300€. La versión gratuita con la que he trabajado tiene limitaciones relativas al número de peticiones por segundo y diarias que pueden hacerse, lo cual, inicialmente, complica la implementación del bot. No obstante, estas restricciones obligan a una optimización del código y del funcionamiento de nuestro bot que más adelante agradeceremos.

Otro aspecto a tener en cuenta, y nada trivial, es el carácter «en tiempo real» que necesitamos para nuestro bot. Teóricamente, el proveedor TwelveData ofrece los datos en tiempo real, con un retraso (o delay) que según ellos oscila entre los 0,3 y los 2 minutos tal y como ellos mismos advierten en su sitio web.

El retraso «admitido» puede ser asumible en función de la frecuencia con la que operemos. Si nuestro objetivo es hacer operaciones «intradía» puede ser soportable. Si por el contrario lo que deseamos hacer es «scalping», un retraso de un par de minutos puede condenar al fracaso nuestra operativa.

En cualquier caso, y tal y como decía al principio, TwelveData fue la opción inicial pero no es la usada actualmente. Si bien el retraso de la información podía ser asumible y permitía depurar y afinar el módulo de obtención del datos del bot, llegó un momento en que el desfase entre los precios obtenidos mediante TwelveData y los precios que constaban para el broker era notorio y condicionaba ostensiblemente el resultado de las posiciones abiertas. Estas discrepancias hicieron que tuviera que orientar la «captura de datos» para obtenerlos directamente del broker. Esta decisión resolvió el problema del «desfase» en los datos pero introducía un nivel de complejidad adicional ya que el broker, al menos el que usa el bot, no ofrece el valor de los indicadores técnicos más comunes (timeserie, ema, rsi, macd, …) y obliga a implementar su cálculo mediante programación.

Otra herramienta necesaria es la plataforma sobre la que realizaremos nuestras operaciones. El bot construido se conectará a dicha plataforma con las credenciales proporcionadas por el administrador de la plataforma (broker) y realizará, en nuestro nombre, operaciones de compra/venta utilizando los fondos de nuestra cuenta, que previamente habremos depositado.

La búsqueda de una plataforma para operar no fue fácil debido a diversos motivos:

  • Desconocimiento de las opciones que ofrece el «mercado»
  • Necesidad de que permitiera la conexión y operativa a «bajo nivel», es decir, mediante nuestro bot
  • Catálogo de instrumentos (símbolos) con los que operar
  • Coste asociado al uso de la plataforma
  • Otros costes inherentes a la operativa (comisiones, spreads, …)
  • Confianza que inspire el broker que ofrece la plataforma

Tras mucho buscar, encontré la plataforma cTrader. Esta plataforma que ofrece varios modos para operar cubre todas las necesidades permite desarrollar tu propia aplicación en C# y conectarla (vía open API) con la plataforma. No está vinculada a un broker concreto, sino que ofrece su instraestructura a los brokers que deseen adherirse a la misma para ofrecerla a sus clientes finales. Viene a ser como una alternativa a otras platarformas como metaTrader 4 o metraTrader 5 con la «particularidad» que te permite la programación a «bajo nivel». Evidentemente esto es un aliciente si sabes programar. Si no es así, hay otras alternativas que te pemiten operar sin necesidad de escribir código.

Como valor añadido, y tal como puede verse en la imagen inferior, cTrader ofrece la posibilidad de «vender» tus algoritmos de negociación a terceros. Es una opción que puede ser bastante interesante.

Una vez elegida la plataforma, el siguiente paso es buscar brokers que permita operar con cTrader. Nuevamente, y tras buscar por internet encontré diversas alternativas y finalmente adopté las siguientes (por orden de «confianza»): Pepperstone, Skilling, FxPro, Ic Markets.

La confianza a la que aludo viene determinada por los resultados obtenidos por el bot con cada uno de esos brokers y el «respaldo/soporte» percibido «al otro lado». En el momento de escribir este artículo, el bot ha operado con «dinero real» con Pepperstone y con Skilling, mientras que para FxPro e Ic Markets sigue trabajando con cuentas «demo».

Todos los brokers mencionados tienen características que harán que nos decantemos por uno o por otro:

  • Tipos de cuentas que ofrecen (demo, estándar, profesional, …) en función del perfil del inversor/cliente
  • Catálogo de intrumentos con los que se puede operar (cripto, forex, stocks, …)
  • Comisiones / spreads que aplican a las posiciones
  • Depósito mínimo exigido para poder operar
  • Coste asociado al mantenimiento de la cuenta

En cualquier caso, sea cual sea el broker elegido, al abrir una cuenta se somete al «cliente» a un cuestionario para verificar el nivel de conocimiento sobre el funcionamiento de los mercados. Esta comprobación, al igual que los avisos continuos sobre el riesgo de perder dinero, se deben a exigencias legales.

Este componente es opcional, pero necesario si queremos evitar llevarnos sorpresas desagradables, o deseamos facilitar el seguimiento de nuestro bot.

La solución adoptada en mi caso consiste en desarrollar una página web que permita ver, de una forma fácil, la situación actual (resultado de las operaciones cerradas en el día), y poder «transmitirle» órdenes genéricas del estilo de «pasa al modo pausa», «cierra las posiciones ganadoras», «reanuda la negociación», etc … Puede verse una muestra en www.tradator.es. Cada vez que se refresca la página, se ofrece el resultado actual de algunas de las instancias (elegidas aleatoriamente) en ejecución.

Disponer de esta herramienta supone un mayor esfuerzo de desarrollo pero evita el tener que conectarse al servidor que alberga al bot y realizar operaciones de «bajo nivel». Dado que no siempre estaremos en condiciones de poder realizar esa conexión, disponer de una herramienta accesible a través de la web adquiere una relevancia importante.

Lo primero que debe quedar claro es que el funcionamiento de nuestro bot debe ir mucho más allá de hacer unos cálculos y abrir una posición en corto o en largo cuando se cumplan determinadas condiciones, o mantenerse neutral (no hacer nada) en otro caso. Si esto fuera así de simple, el bot estaría acabado en un mes.

Una vez que nuestro bot llega a la conclusión de que se dan las condicones para abrir una nueva posición, no tardaremos mucho tiempo en darnos cuenta de que quedan varios aspectos por revisar:

Presupuesto: en una cuenta de tipo «demo» posiblemente podremos contar con unos fondos ilimitados, pero con una cuenta «real», cada posición que abramos tendrá que ser respaldada por nuestros fondos. Entonces, ¿ abrimos una posición cada vez que nos lo indique nuestro bot ?

Operaciones en vuelo: ¿ cómo debemos actuar si nuestro bot nos indica abrir una posición en largo para Amazon cuando cierto tiempo atrás nos dijo que abriéramos una posición en corto para ese mismo símbolo ? ¿ Qué pasa con las posiciones que vamos abriendo según nos va indicando nuestro bot ? ¿ Las dejamos «al pairo» para que evolucionen por sí solas ?

Todas las cuestiones que acabamos de exponer tienen una primera respuesta sencilla y «suicida», que es seguir exactamente lo que nos indica el bot. De esta forma, en poco tiempo habremos agotado nuestros fondos limitados y las operaciones realizadas nos habrán supuesto unas pérdidas que harán que abandonemos el mundo de trading automatizado a las primeras de cambio. Para evitar esto, deberemos dotar a nuestro bot de unas capacidades o módulos que de forma «integrada» adaptarán su funcionamiento a nuestra «realidad presupuestaria». Seguidamente vamos a analizar cada uno de los componentes que debe tener el bot.

Componentes del bot

Es el primer componente que deberemos construir. Se encargará de obtener la información de cotizaciones en tiempo real, calcular los indicadores técnicos que vamos a utilizar, analizar el resultado de dichos indicadores individual y colectivamente, y, finalmente, emitir un veredicto:

  • Entrar en largo (comprar)
  • Entrar en corto (vender)
  • Mantenerse neutral (no hacer nada)

A partir de la decisión final del módulo analítico, examinará la viabilidad de poner en práctica dicha decisión, evaluando los fondos disponibles, los fondos ya bloqueados por las operaciones en curso, y el resultado actual de las operaciones en vuelo.

Podrá darse el caso (y de hecho con bastante frecuencia) de que el módulo analítico NO ejecute la decisión del módulo analítico porque no haya fondos suficientes, porque el resultado actual de las operaciones abiertas desaconseja la apertura de posiciones similares para el mismo instrumento, o porque no se cumplan otras condiciones que estableceremos a modo de «garantías» para no perder todo nuestro presupuesto.

Por el contrario, si no se detecta ninguna circunstancia que impida la apertura de una nueva posición según indica el módulo analítico, se abrirá una nueva posición que se añadirá a las operaciones en vuelo de cuyo seguimiento se encarga el módulo de seguimiento.

Como su nombre indica, se encarga de «seguir» las posiciones abiertas por nuestro bot y actuar sobre ellas de diversas formas en función de las condiciones:

  • Modificando los «limites» Take Profit o Stop Loss de la posición
  • Cerrando determinadas posiciones cuando su resultado «en conjunto» alcanza un determinado valor
  • Cerrando posiciones con independencia de su resultado actual

Nuestro bot aplica un método de elaboración propia al que denominamos «gestión del esfumable«.

Como podemos ver, la estructura de nuestro bot empieza a complicarse y todavía no hemos «aterrizado» cada una de las cuestiones que se plantean para los distintos módulos. Sólo si trabajamos adecuadamente sobre cada una de dichas cuestiones podremos construir un bot que nos dé la tranquilidad de que no se va a fulminar nuestro presupuesto en cuestión de minutos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.