Creando Sistemas de Trading con ChatGPT

Artículo patrocinado por BisonTrade. Tu broker español de confianza.

Bisontrade Banner

Sin lugar a duda, se trata del tema de moda: todos los días vemos noticias en las que se nos habla acerca del uso de la Inteligencia Artificial (IA) en cada vez en más industrias, o acerca de como la IA forma parte ya de nuestras vidas y del impacto que puede tener.

Y seguro que a la mayor parte de nuestros lectores cuando oyen hablar de inteligencia artificial, inevitablemente les viene a la cabeza el nombre de ChatGPT. En este artículo, vamos a ver brevemente qué es esta nueva IA y cómo podemos usarla para generar estrategias de trading (aunque os hago un pequeño spoiler: ¡esto no es la panacea!)

¿Qué es ChatGPT?

Aunque seguramente la mayoría de vosotros lo sepa, ChatGPT es una IA desarrollada por la compañía estadounidense OpenAI. Esta compañía, fundada entre otros por Sam Altman y Elon Musk en 2015 (aunque luego Musk salió de su cúpula en 2018), nació con el objetivo de ser una organización sin ánimo de lucro centrada en el desarrollo de la inteligencia artificial.

Como fruto de la investigación desarrollada por OpenAI en los últimos años, se lanzó al público ChatGPT en noviembre de 2022, una IA basada en la arquitectura GPT (Generative Pre-training Transformer, que podríamos traducir como Transformador Preentrenado Generativo) y que ha sido entrenada con un enorme conjunto de datos de respuestas generadas por humanos.

Gracias a este entrenamiento, ChatGPT es capaz de generar un texto similar al que escribiría un humano en respuesta a una pregunta dada y puede ajustarse para multitud de tareas específicas tales como la traducción de idiomas, la respuesta a preguntas o el resumen de textos.

La técnica en la que se basa ChatGPT para generar sus respuestas es lo que se conoce como Transformers (podéis leer más sobre ello en este excelente artículo de Brandon Rohrer). Mediante esta técnica, lo que se consigue es predecir las palabras que deben aparecer en una respuesta en base al texto introducido previamente (esto es a lo que se denomina generalmente prompt), pronosticando qué palabra debe ir a continuación de otra en base a modelos probabilísticos basados en cadenas de Markov.

De este modo, ChatGPT combina el denominado “mecanismo de atención”, que permite centrarse en partes específicas del texto de entrada para generar la salida, con la técnica de “búsqueda de haces”, que genera múltiples hipótesis de respuesta y selecciona la que considera más probable como resultado final.

Si bien al leer todo esto, seguramente le hayamos quitado cierto glamour a ChatGPT (lo siento, pero no hay ningún genio dentro de la lámpara, esto es mera generación de texto por probabilidades), lo cierto es que el «juguete» creado por OpenAI tiene un enorme mérito, por cuanto realiza todo este procesado en cuestión de milisegundos, escribiendo textos a una velocidad pasmosa.

Y claro, a poco que pensemos nos daremos cuenta de que ChatGPT tiene una enorme utilidad para los traders, por cuanto la vasta mayoría de estrategias de trading algorítmico están codificadas usando algún lenguaje.

A partir de ahí, si consideramos el código informático como un idioma más, a priori podemos pensar que ChatGPT nos puede ser muy útil para codificar estrategias e indicadores en diferentes lenguajes de programación usados en las plataformas de trading.

De cualquier manera, la mejor forma de entender de qué va exactamente esto es probarla. Para ello, no tenéis más que dirigiros a https://chat.openai.com/auth/login, registraros gratuitamente (aunque existe una versión más avanzada de pago denominada ChatGPT Plus que cuesta 20$/mes) y empezar a jugar con ella introduciendo prompts.

En cuanto empecéis a trastear un poco, seguramente os empiece a rondar por la cabeza la siguiente pregunta: ¿qué puedo hacer con esta fantástica IA en el campo del trading? A continuación os presento un ejemplo para que veáis qué se puede conseguir en un momento con ChatGPT.

Una Sencilla Estrategia de Momentum con ChatGPT

A modo de ejemplo, vamos a crear una estrategia de momentum, codificada usando el lenguaje Pine Script de TradingView, cuya regla de entrada se base en precios de cierre pasados y actuales.

Asimismo, vamos a imponer que la relación entre pérdidas y ganancias sea de 1 a 4, que no use medias móviles y que solo opere en el lado largo.

El prompt a introducir (observad que está escrito en inglés, personalmente he observado que suele dar mejores resultados) es el siguiente:

Please give me a PineScript code for a momentum trading strategy which uses closing prices of present and past as entry criteria and with a stop loss and take profit of 1:4 respectively. Please make you don’t use moving averages. The strategy is long only.

El código generado es el siguiente:

//@version=5
strategy("Momentum Trading Strategy", overlay=true)

// Define strategy inputs
pastPeriods = input(10, "Past Periods")
stopLossMultiplier = input(1, "Stop Loss Multiplier")
takeProfitMultiplier = input(4, "Take Profit Multiplier")

// Calculate momentum
momentum = close - close[pastPeriods]

// Entry condition
enterLong = momentum > 0

// Define stop loss and take profit levels
stopLoss = strategy.position_avg_price * (1 - stopLossMultiplier / 100)
takeProfit = strategy.position_avg_price * (1 + takeProfitMultiplier / 100)

// Submit order conditions
if enterLong
strategy.entry("Long", strategy.long)

// Submit stop loss and take profit orders
strategy.exit("Exit", "Long", stop=stopLoss, limit=takeProfit)

Además ChatGPT tiene la amabilidad de explicarnos su significado:

Comentario - Estrategia Momentum - ChatGPT

En resumidas cuentas, este código lo que hace es calcular la diferencia entre el cierre actual y el de hace pastPeriods períodos (por defecto, 10), abriendo posición larga cuando dicha diferencia pasa a ser positiva.

Seguidamente fija un stop loss de un 1% por debajo del precio de entrada (Close * 0.99), y un take profit de un 4% por encima del precio de entrada (Close * 1.04).

Por supuesto, podemos pedirle que cambie ligeramente las condiciones, ajustando por ejemplo el stop loss y el take profit a 10% y 40% respectivamente, usando el siguiente prompt:

Please change the stop loss percentage to 10% and the take profit to 40%

El código generado es el siguiente:

//@version=5
strategy("Momentum Trading Strategy", overlay=true)

// Define strategy inputs
pastPeriods = input(10, "Past Periods")
stopLossPercentage = input(10, "Stop Loss (%)") / 100
takeProfitPercentage = input(40, "Take Profit (%)") / 100

// Calculate momentum
momentum = close - close[pastPeriods]

// Entry condition
enterLong = momentum > 0

// Calculate stop loss and take profit levels
stopLoss = strategy.position_avg_price * (1 - stopLossPercentage)
takeProfit = strategy.position_avg_price * (1 + takeProfitPercentage)

// Submit order conditions
if enterLong
strategy.entry("Long", strategy.long)

// Submit stop loss and take profit orders
strategy.exit("Exit", "Long", stop=stopLoss, limit=takeProfit)

A continuación vamos a pedirle a que introduzca en el código el uso del 100% de la equity:

In strategy section, make sure its 100% equity

El resultado es el siguiente:

//@version=5
strategy("Momentum Trading Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Define strategy inputs
pastPeriods = input(10, "Past Periods")
stopLossPercentage = input(10, "Stop Loss (%)") / 100
takeProfitPercentage = input(40, "Take Profit (%)") / 100

// Calculate momentum
momentum = close - close[pastPeriods]

// Entry condition
enterLong = momentum > 0

// Calculate stop loss and take profit levels
stopLoss = strategy.position_avg_price * (1 - stopLossPercentage)
takeProfit = strategy.position_avg_price * (1 + takeProfitPercentage)

// Submit order conditions
if enterLong
strategy.entry("Long", strategy.long)

// Submit stop loss and take profit orders
strategy.exit("Exit", "Long", stop=stopLoss, limit=takeProfit)

El código obtenido compila perfectamente (si obviamos que le falta la línea de copyright inicial) y además lo ha escrito en la versión 5 de Pine Script, la última versión de este lenguaje.

Para remate, las estadísticas obtenidas con la estrategia sobre el ETF del S&P 500, fijando el stop al 1% y el take profit en el 4% están realmente bien:

Resultado Estrategia 1
Resultado Estrategia 2

En particular, la estrategia se marca un +181% con un drawdown del 32%. Vamos, ¡el sueño húmedo de cualquier trader! Ya no nos hace falta ningún libro de trading ni hacer cursos: con ChatGPT, ¡¡¡nos vamos a forrar!!!

Hey, hey, ¡un momento! Pongamos los pies en la tierra. No todo va a ser tan sencillo, vamos a complicarle un poco la vida a ChatGPT. Para ello, vamos a analizar cómo de bien entiende las cosas si le planteamos un nuevo desafío a partir de este código.

Así, le voy a decir que soy un gestor averso al riesgo y que quiero reducir el drawdown de la estrategia anterior. ¿Qué filtro nos sugerirá ChatGPT para lograrlo? Introducimos el siguiente prompt:

Imagine you are a risk averse investor and you run a hedge fund and you want to reduce the drawdown, based on that I want you to create a condition on this code that reduces the drawdowns

En este punto ya parece que le cuesta más, por cuanto dándole al botón de regenerar la respuesta, nos ofrece varias soluciones (usar un trailing stop, parar la operativa al llegar a un nivel de drawdown o introducir un filtro del RSI) pero ninguno de ellos consigue reducir efectivamente el drawdown.

Esto nos demuestra que, de algún modo, ChatGPT escribe código «de oídas» por decirlo de algún modo, y no comprueba que efectivamente se obtengan resultados numéricos de cierta calidad.

Por otro lado, si se lo pedimos, ChatGPT tampoco es capaz de optimizar los valores de los parámetros de una estrategia. Si, por ejemplo, le decimos algo como esto:

Please optimize the pastPeriods parameter to achieve the best Profit Factor ratio

ChatGPT nos remite a una función llamada optimize que… vaya, ¡no existe en Pine Script! Y es que esto es muy habitual: que ChatGPT se pase de «generativo» y se invente ciertas cosas.

Por último, vamos a pedirle que convierta el código obtenido en Pine Script al lenguaje de otra plataforma. Por ejemplo, podemos pedirle que nos convierta dicho código a MQL4 sin más que usar este prompt:

Convert the resulting code to MQL4

El resultado sería el siguiente:

// Momentum Trading Strategy
// Inputs
input int pastPeriods = 10;
input double stopLossPercentage = 10.0;
input double takeProfitPercentage = 40.0;

// Calculate momentum
double momentum = Close[0] - Close[pastPeriods];

// Entry condition
bool enterLong = momentum > 0;

// Calculate stop loss and take profit levels
double stopLoss = NormalizeDouble(PositionPrice() * (1 - stopLossPercentage / 100.0), Digits);
double takeProfit = NormalizeDouble(PositionPrice() * (1 + takeProfitPercentage / 100.0), Digits);

// Submit order conditions
if (enterLong)
Buy;

// Submit stop loss and take profit orders
if (PositionsTotal() > 0)
OrderModify(PositionGetTicket(0), OrderOpenPrice(), stopLoss, takeProfit, 0, Green);

El problema es que nuevamente tenemos errores en el código, empezando por una estructura que no respeta la habitual de los Expert Advisors en MetaTrader 4, y que las funciones que usa, como PositionPrice(), PositionsTotal() o PositionGetTicket(), simplemente no existen.

Aceptando la Realidad: ChatGPT no es Perfecto

De nuestra experiencia anterior, podemos deducir que, si bien ChatGPT puede ser una excelente fuente de inspiración, seguir a pies juntillas los resultados generados por esta IA presenta varios problemas:

  • Por un lado, los códigos generados pueden contener errores que pueden impedir su compilación y/o ejecución, o peor aún: que genere una lógica defectuosa que, cuando se ejecute, nos provoque grandes pérdidas. Por todo ello, no me cansaré en insistir en que es totalmente obligatorio conocer y entender el lenguaje de programación en el que generemos el código de la estrategia para poder detectar errores y corregirlos. Y es que ChatGPT no es una solución definitiva que nos evita aprender a programar como en algunos sitios intentan vendernos.
  • En muchas ocasiones, ChatGPT no comprende el contexto de un ámbito tan específico como es el trading y la inversión en mercados financieros. La IA no es capaz de entender la dinámica del mercado y las complejas interacciones entre los diferentes factores que afectan al mercado. Por todo ello, además de saber programar, también debemos tener conocimientos de trading y mercados para poder evaluar adecuadamente si los resultados tienen sentido.
  • Por último, y a tenor de lo que hemos visto en la prueba anterior, las estrategias generadas por ChatGPT no tienen por qué ser ganadoras ni mucho menos. Tenemos que pensar que esta IA se limita a aprender de cosas que ya ha visto en la Red, pero no es capaz de evaluar numéricamente los resultados que se obtienen aplicando el código a un determinado activo financiero.

Jugando con los Prompts

No obstante, y a pesar de las deficiencias que tiene ChatGPT, es indudable que es una herramienta que puede servirnos para encontrar la inspiración. Por ello, os dejo por aquí algunos prompts interesantes para que juguéis un poco, espero que os resulten interesantes y despierten vuestra curiosidad:

  • Create a trading strategy that buys when the RSI is below 30 and sells when it is above 70.
  • Write a script that buys QQQ calls whenever that RSI is below 30 and sells them whenever the RSI is above 70
  • Make a mean reversion strategy for Amibroker using Relative Strength Index
  • Write a script that buys at-the-money SPY call options when the MACD line crosses over the signal line, and when the price of SPY is above the upper Bollinger Brand
  • Create a trading strategy that buys when the 50-day moving average crosses above the 200-day moving average and sells when the opposite occurs.
  • Write a Python script that uses Binance API to trade BTCUSDT.

Conclusión

Tras haber hecho algunos experimentos con ChatGPT generando estrategias de trading, la conclusión no puede ser más clara: el producto estrella de OpenAI puede resultar una excelente fuente de inspiración e incluso puede resolvernos alguna papeleta de forma puntual con nuestro código (de hecho, a mí me ha servido hace un par de meses para corregir un trozo de código en MQL5 en el que me había atascado).

Sin embargo, si no conocemos previamente el lenguaje de programación usado para ello, ChatGPT no es nada fiable a la hora de escribir código de estrategias de trading. Y no digamos ya si lo que queremos es crear estrategias que sean ganadoras: los desarrolladores de ChatGPT se han cubierto muy bien las espaldas, imponiendo ciertas limitaciones a la IA con el fin de evitar futuros problemas legales derivados de las posibles pérdidas provocadas por una estrategia creada por ChatGPT.

Eso sí, para que no queden dudas: estoy seguro de que esto que estamos viendo no es más que la punta del iceberg y que vienen tiempos interesantes en los que aún nos queda mucho por ver en el campo de la IA aplicada al campo de las finanzas y el trading.

Saludos,
X-Trader

PD: Ah y por si hay dudas… ¡Este artículo NO ha sido escrito por ChatGPT! 😀

COMPARTIR EN: