Seleccionar página

5 Razones por las que un Trader debe Aprender a Programar

por

Apreciados traders,

A raíz de la entrevista que Dave Potau me hizo en su canal de Coditers donde, entre otras cosas, hablamos de la importancia que tiene aprender a programar para un trader, he decidido escribir este artículo. Creo que es un tema lo suficientemente interesante como para tratarlo en profundidad, y este artículo pretende expandir los conceptos que brevemente comentamos durante la entrevista.

Todas las reflexiones que voy a compartir se basan en mi opinión personal y mi experiencia como trader sistemático y algorítmico. Espero que dichas reflexiones puedan ser útiles para cualquier otro trader que quiera comenzar o ya esté recorriendo este mismo camino.

Dicho esto, creo que aprender a programar es una habilidad que todo trader, aunque sea manual, debería considerar. Vamos a ello.

1 – Ahorrar tiempo y ganar eficiencia

La principal razón por la que creo que, como trader, debes aprender a programar, es por la gran cantidad de tiempo que te vas a ahorrar durante el resto de tu carrera. Estoy seguro de que te ayudaría mucho poder automatizar todas esas tareas repetitivas y aburridas que tienes que hacer de manera manual y forman parte de tu día a día como trader. De hecho, todo ese tiempo lo podrías aprovechar para investigar nuevas estrategias, por ejemplo.

Por ejemplo, recuerdo lo tedioso que se me hacía pasar el resultado de todos mis trades, cada semana, a la hoja de Excel con la que llevaba el registro de la operativa. ¿Cuál fue la solución? Un pequeño programa que leía los extractos de la cuenta y los pasaba automáticamente a la hoja de cálculo. Así podía dedicar el tiempo a lo que realmente importaba, que era el análisis de la operativa, y no al volcado de datos en sí.

Pero por encima de todo, si hay un punto concreto con el que el ahorro de tiempo ha sido simplemente extraordinario gracias a saber programar, ha sido en el proceso de backtesting. Si alguna vez has hecho un backtest a mano (ejecutando operaciones, apuntando fechas, activos, precios de entrada y salida, beneficio, etcétera), creo que ya sabes perfectamente por dónde voy.

Si nunca lo has hecho, siéntete afortunado. Es de las cosas más pesadas, monótonas y aburridas a las que un trader se puede enfrentar. De hecho, allí radica también su peligro, ya que esta monotonía y repetición aumenta sustancialmente la probabilidad de que el trader cometa errores de los que no es consciente, arruinando por completo el valor de la prueba.

Con mis estrategias codificadas, puedo realizar un backtest correctamente en cuestión de minutos y asegurarme de que está libre de errores (en la toma de datos al menos, ya que para realizar un backtest correctamente hay que tener en cuenta muchos otros factores). Además, si veo que he cometido algún error o quiero cambiar un parámetro de la estrategia, puedo arreglarlo y repetir el proceso con el click de un botón. Imagínate ahora que has hecho un backtest manualmente de 15 años de datos y que te ha llevado 5 horas de trabajo. Si luego te das cuenta de que te has olvidado algo y debes volver a comenzar… sería terrible.

2 – Ser capaz de crear tus propias herramientas

La segunda razón por la que creo que un trader debe aprender a programar es por las infinitas posibilidades que brinda ser capaz de crear tus propias herramientas. A medida que vayas evolucionando en tu carrera, mejorando tus estrategias o añadiendo más mercados a tu portafolio, llegará un momento en el que irremediablemente te encontrarás con que no puedes gestionar todo lo que está ocurriendo con tu operativa por tí mismo.

Esto supone un primer problema, ya que doy por hecho que contratar a alguien (y pagarle un sueldo) a quien delegar las tareas no tendría mucho sentido en los inicios. Una buena opción aquí es la de asociarse con otra persona, ya que trabajar en equipo creo que es algo fundamental para tener éxito. Sin embargo, esa situación volverá a llegar, ya que no podrás asociarte con una nueva persona cada vez que llegues al máximo de tu capacidad de trabajo.

Al final, el objetivo es el de facilitarnos la vida y utilizar la tecnología para aumentar nuestra productividad y eficiencia. Un trader armado con sus códigos y automatizaciones puede rápidamente hacer el mismo trabajo para el que necesitaría contratar a dos analistas a tiempo completo.

Ese es el motivo por el que aprender a programar y tener la capacidad de crear tus propias herramientas se vuelve esencial. Saber programar te permite hacer más trabajo del que podrías conseguir tú solo gracias a que puedes automatizar procesos manuales. Evidentemente tendrás que dedicarle tiempo a crear la herramienta, pero una vez esté creada… ¡Ya está! La podrás utilizar mil veces sin tener que perder ni un segundo más.

Para ilustrar este punto, te pondré un ejemplo real con el que nos hemos encontrado en KomaLogic. Cada vez que necesitábamos analizar los resultados de un backtest, teníamos que extraer los datos de la plataforma manualmente, cargarlos en nuestro sistema de analítica, eliminar todo lo que no fuera útil del fichero y finalmente generar los distintos gráficos, métricas y simulaciones.

Hartos de perder el tiempo con esto, lo que hicimos fue automatizar el proceso por completo: cuando terminaba el backtest, el propio software escribía todos los trades en una base de datos, que posteriormente nuestro cliente en Python leía, limpiaba, y generaba todo lo que necesitábamos saber.

Estuvimos 2 semanas para dejar toda la solución lista. El resultado: de backtest a informe en sólo 4,8 segundos.

En mi opinión, la evolución de un trader retail acaba pasando necesariamente por la automatización de procesos. Será más tarde o más temprano, pero si realmente quieres dedicarte a esta profesión en serio, creo que debes buscar ser lo más eficiente posible y aumentar tu productividad al máximo. Tanto tus días como los de Bill Gates tienen únicamente 24 horas, y lo que marcará la diferencia entre hoy y el año que viene es todo lo que hayas podido realizar durante esas horas cada día. A más eficiencia, mayor será tu rendimiento en el mismo periodo de tiempo. Aprender a programar te permitirá estar más cerca de cumplir tus objetivos.

3 – Reducir tu dependencia de terceros

La tercera razón por la que aprender a programar, tiene que ver con la dependencia del uso de herramientas de terceros. No digo que utilizar herramientas de terceros sea malo; de hecho, yo mismo las utilizo. Sin embargo, esto involucra varios riesgos con distinta probabilidad de ocurrencia y también de severidad.

Para nombrar algunos de ellos:

  • Que la empresa que te presta este servicio deje de existir (cosa improbable pero no imposible).
  • Que cambie las condiciones de su producto.
  • Que suba los precios.
  • Que no permita la funcionalidad que justamente necesitas.

Por desgracia, nunca vas a poder reducir tus riesgos a 0, ya que siempre acabarás dependiendo en mayor o menor medida de un tercero. El truco está en seleccionar muy bien de quién dependes y por qué.

Vamos a ejemplificar el primer punto. Evidentemente, primero de todo vas a depender de tu broker. Si has hecho bien el trabajo de investigación para escogerlo, sería difícil que el broker quebrara (aunque no imposible, como nos cuenta la historia) y estarías bien cubierto en caso de que ocurriera. Este ejemplo es de un riesgo que no puedes eliminar, ya que vas a necesitar a un broker para poder operar.

Sin embargo, a partir de aquí la cosa cambia. De nuevo, voy a intentar poner ejemplos lo suficientemente generales como para poder representar correctamente dichas circunstancias.

Imagínate que todo tu proceso de creación de estrategias se basa en herramientas de estilo builder. Estas plataformas, a grandes rasgos, usan una aproximación de fuerza bruta (minería de datos) junto con combinaciones de reglas de entrada e indicadores para descubrir estrategias que hayan sido ganadoras en el pasado. Normalmente, una vez que ya tienes la estrategia que quieres usar, el builder te genera un archivo de código fuente que después tienes que compilar en tu MetaEditor (o el editor de código de la plataforma que uses) y eso crea el archivo que puedes finalmente ejecutar en tu terminal.

Pero ¿qué ocurriría si la norma, regla o característica que quieres implementar no está previamente definida en el builder? Aprender a programar y ser capaz de leer y escribir código te permitiría entender y modificar dichos ficheros directamente para poder añadir el código que cumpla con tus necesidades específicas fácilmente. De este modo, pasarías de depender de dicha herramienta a utilizarla como un mecanismo más dentro de tu proceso de investigación, con todas las ventajas que esta libertad implica para ti.

Otro problema puede ser que no encuentres exactamente la herramienta que necesitas, o que no la puedes comprar por sí sola porque forma parte de un producto más grande y más caro. O simplemente, necesitas combinar varias herramientas para resolver tu necesidad específica, añadiendo complejidad a tu sistema y más sitios por donde puede fallar.

Evidentemente, crear tus propias herramientas tampoco significa que vayas a poder solventar todos tus problemas ni te garantiza que vayan a funcionar perfectamente. Tendrás que probarlas y asegurarte que funcionan bien y no tienen errores. Pero una vez más, cuando este trabajo ya esté acabado, podrás reutilizar dicha herramienta tantas veces como quieras. Y algo más importante aún: podrás reutilizar el código para otros proyectos o mejoras, lo que de nuevo te ahorrará muchísimo tiempo.

4 – No tener que ceder tu propiedad intelectual

Quizás te has encontrado en la siguiente situación: has tenido una idea para una estrategia que quieres automatizar pero no eres capaz de hacerlo porque no sabes cómo programarla tú mismo. Si es así, la única opción que te queda es la de buscar a un programador externo para que te codifique la estrategia, con todos los problemas y riesgos que esto puede conllevar.

El primer y más obvio de los problemas es que necesitas explicar en detalle tu estrategia al programador para que la pueda codificar. Y esto es algo que no gusta a ningún trader. Yo tampoco me sentiría cómodo haciéndolo, aún cuando se ha firmado un contrato de confidencialidad (algo que es imprescindible hacer, pero que tampoco te garantiza nada). Si resulta que la estrategia es ganadora, no tienes manera humana de controlar si el programador la está utilizando para sí mismo o la está vendiendo a terceros, por mucho contrato que haya. Esto se convierte en un gran riesgo que solo puedes solventar si el programador tiene la reputación y/u honestidad suficientes, o si eres tú quien decide aprender a programar para poder codificar tus propias estrategias.

El siguiente problema con el que probablemente te encuentres es en la comunicación. A veces, parece que una idea se ha transmitido bien, pero cuando el programador te entrega el código y te das cuenta de que no ha sido así, comienzan los dolores de cabeza. Quizás te pide que le pagues el tiempo extra para que arregle el problema porque te dice que no ha sido culpa suya, o simplemente te dice que ya no quiere trabajar más contigo porque tiene otro proyecto que le interesa más o en el que puede ganar más dinero. Evidentemente, para evitar esto vas a querer contratar a un programador que no solamente sepa programar, sino que es imprescindible que esté especializado en la codificación de estrategias de trading, lo que al final aumenta el precio total del proyecto y reduce la lista de candidatos. Por muy buen programador que sea a quien quieres contratar, si no está familiarizado con las plataformas, APIs, funcionamiento de las órdenes, etcétera, puede traerte más problemas de los que te soluciona, o alargar el tiempo del proyecto hasta que esté al día de todo lo que involucra la operativa.

Finalmente, en caso de que todo haya ido bien y tengas tu estrategia codificada tal y como la habías especificado, llegará el momento de probarla. Ahora imagínate que la estrategia es perdedora (lo más habitual por desgracia), pero que con el programador has contratado un par de revisiones. Si una vez realizadas dichas revisiones para modificar la estrategia sigue siendo perdedora, cualquier otro cambio o modificación que quieras hacer te volverá a costar dinero.

En el otro caso, si la estrategia es ganadora y comienzas a operar con ella, inevitablemente querrás probar la implementación de mejoras que se te vayan ocurriendo con el tiempo. En este caso, tendrías que volver a contratar, idealmente, al mismo programador (que podría no estar disponible), ya que conocería bien el código y no tendrías que volver a explicarle todo desde 0, y también te ahorrarias el tiempo que un programador nuevo necesitaria para estudiar y entender el código escrito por otro. Si ese programador no está disponible… problemas de nuevo.

Como ves, el proceso no es ágil y al final acaba costando mucho tiempo y dinero de nuevo.

5 – Poder automatizar tus propias estrategias

Bajo mi punto de vista, esta es, sin duda, la más importante de las ventajas. Este punto podría convertirse en un artículo por sí mismo, así que voy a repasar los aspectos más importantes por los que aprender a programar y ser capaz de automatizar tus propias estrategias va a marcar un antes y un después en tu carrera como trader.

5.1 – Puedes operar 24/7

La primera de las ventajas que tiene poder automatizar tus propias estrategias de trading es que te libera de la limitación de operar solamente cuando puedes estar delante del ordenador. Una estrategia automatizada va a poder operar durante las 24h del día (en mercados como el FX o los futuros por ejemplo) sin ningún problema. Por eso, creo que la automatización abre un mundo de posibilidades cuando se trata de codificar la propia operativa.

Por ejemplo, puedes operar durante las horas de poca volatilidad de la noche (con estrategias mean-reverting por ejemplo) mientras que de otra manera estarías durmiendo. En pocas palabras, tu operativa ya no estará supeditada a tu horario de trabajo, sino que podrás escoger los horarios que más te convengan sin limitaciones.

5.2 – Múltiples mercados a la vez

La segunda ventaja principal es la de poder operar múltiples mercados a la vez, algo que si operas de manera manual está muy limitado según el tipo de estrategia y horizonte temporal que tengas. Como siempre, vamos a poner un ejemplo. Si sigues una estrategia de cruce de medias en un gráfico mensual, y los periodos de las medias son grandes (los típicos 50 y 200 por poner algunos), evidentemente podrás seguir una cantidad enorme de mercados simultáneamente. Si bien es cierto que si tienes señales de entrada simultáneas en todos ellos quizás no puedes estar pendiente de todas ellas, la propia temporalidad en la que trabajas te permite poder ser más lento al introducir tus órdenes sin que resulte un problema.

Pero si nos vamos hacia el otro extremo y sigues esa misma estrategia en un gráfico de 5 minutos, con periodos también más ajustados, te resultará imposible hacer un seguimiento efectivo en más de 3 o 4 mercados simultáneamente. Evidentemente, como más compleja sea la estrategia, más difícil aún resultaría hacerlo.

Pero si tu estrategia está automatizada, esta limitación sencillamente desaparece. No hay más que especificarle al código de tu estrategia cuáles son los mercados que debe seguir, y problema resuelto. Además, los podrás seguir con total fiabilidad, que es el siguiente punto en el que vamos a fijarnos.

5.3 – Reducción de errores

La tercera ventaja de la automatización de estrategias es su consecuente reducción de errores respecto a la operativa manual. Creo que es evidente que una persona tiene más probabilidades de errar que una máquina. Se puede equivocar al ejecutar una orden: puede haber entrado en un precio erróneo, ejecutar un volumen distinto al que quería, equivocarse y en lugar de hacer una compra haga una venta, etcétera. Es tan sencillo como que en lugar de comprar 1,5 lotes compre 15 (porque no ha puesto la coma decimal), entre otros muchos posibles ejemplos.

Sin embargo, una estrategia ejecutándose mediante un algoritmo no va a equivocarse, y lo hará todo en milisegundos. Es decir, en el tiempo en el que un humano coloca una orden, un algoritmo podría haber colocado cientos. Dicho de otra manera, la operativa automatizada es más eficiente, menos susceptible a cometer errores y podrá entrar más cerca del precio al que se quería entrar simplemente por su mayor velocidad al mandar las órdenes al mercado.

5.4 – Ayuda en la psicología

La cuarta ventaja es que elimina gran parte de los obstáculos psicológicos con los que el trader manual tiene que lidiar durante la operativa. Pero es importante decir que tampoco los elimina por completo. Al fin y al cabo, por mucho que una estrategia se ejecute de manera automática, el trader siempre va a tener la potestad de detener su ejecución, aumentar su apalancamiento o modificar los parámetros, saltándose sus propias normas de manera irracional. Sin embargo, la gran ventaja psicológica que tiene la ejecución automática (en mi opinión), es que es mucho más fácil  poder “seguir tu sistema”. Al fin y al cabo, es la máquina quien lo ejecuta, y un algoritmo no tiene sentimientos. Es decir, no le importa colocar una operación después de haber cerrado otras 10 en negativo, algo a lo que un trader inexperto podría hacer sentir muy incómodo.

5.5 – Automatizar el backtesting

Y la quinta y última ventaja sobre la que te voy a hablar es la posibilidad de automatizar un backtest. Este punto ya lo hemos cubierto superficialmente cuando comparábamos el esfuerzo y los problemas que pueden derivarse de hacer un backtest manualmente. En resumidas cuentas, lo que realmente permite la automatización de un backtest es agilizar enormemente el proceso de creación y mejora de tus estrategias, dado que la cantidad de tiempo y esfuerzo en comprobar los resultados cada vez que realizas un cambio es muchísimo menor. También aumenta la fiabilidad de dicho backtest y la de sus resultados (siempre y cuando se haya llevado a cabo de manera correcta), por lo que podrás asegurarte que esté libre de errores y sesgos en comparación con un backtest manual.

Conclusión

Para ir concluyendo el artículo, creo firmemente que la programación es una habilidad especialmente útil para un trader que quiere crecer y profesionalizarse. Y aunque mi visión pueda parecer sesgada dado que soy un trader algorítmico, de veras pienso que también puede ser muy útil para traders manuales. La programación te enseña a pensar de manera estructurada y orientada a resolver problemas, y esto es algo que puede ayudar a cualquiera. Las ventajas que tiene ser capaz de escribir código son incontables, y teniendo en cuenta que la tecnología es cada vez más importante en nuestras vidas y que todos los sectores la incorporan de alguna u otra manera, me gusta pensar en la programación como el superpoder de nuestros tiempos. Al final aprender una nueva habilidad siempre es bueno y el saber no ocupa espacio.

Así que si eres trader y tienes ganas de aprender a programar y dar un salto de calidad en tu carrera, puedes echarle un ojo al curso de programación en MQL4 que hemos creado con ilusión para ti. Comenzamos desde 0 y vamos paso a paso, tal y como nos hubiera gustado que nos enseñaran a nosotros cuando comenzamos esta aventura. ¡Estarás programando mucho antes de lo que piensas!

Gracias por tu lectura.

Un saludo,

Martí

Escrito por Marti Castany

Martí Castany es Quant Researcher, Portfolio Manager y Co-Fundador de KomaLogic, una firma de trading algorítmico. Con más de una década de experiencia en el sector de la inversión sistemática, Martí se ha destacado en el desarrollo de modelos estadísticos, análisis y limpieza de datos y gestión cuantitativa del riesgo.

28 Oct, 2022

También puede interesarte…