¿Como crear un indicador de TradingView con ChatGTP?

En este artículo les vamos a mostrar cómo crear un indicador simple para la plataforma TradingView usando ChatGTP y un prompt que pueden usar como ejemplo para desarrollar sus propios indicadores. Aunque aún creo que estamos lejos de poder desarrollar un sistema de trading rentable y consistente desde cero con LLM como ChatGTP o Gemini, considero que estas herramientas pueden ahorrarnos mucho tiempo a la hora de desarrollar las partes de un sistema que ya hemos desarrollado por nuestra cuenta.
TradingView a través de su lenguaje de programación PineScript 6 permite el desarrollo de indicadores técnicos personalizados y sistemas automatizados de trading de forma relativamente sencilla. Siendo un lenguaje más simple de aprender que MQL4 o MQL5, PineScript puede ser una buena introducción para los traders interesados en la automatización de sus estrategias. Por supuesto, por el momento al menos, es poco probable que con unos cuantos prompts ChatGTP u otra IA popular vaya a crear un sistema de trading automatizado y rentable y que además sea robusto. No se trata solamente de que mercados financieros como Forex son muy complejos y más que capaces de destruir cualquier método de trading, sino también que por el momento los modelos LLM tienen sus limitaciones.
Sin embargo, lo que si podemos hacer es utilizar un modelo como ChatGTP para que nos ayude a desarrollar con más rapidez las distintas partes de un sistema completo de trading que ya hemos creado y pensado exhaustivamente por nuestra cuenta. En este caso, el sistema lo vamos a crear nosotros y ChatGTP nos permitirá programar sus partes más fácilmente. Por ejemplo, si ese sistema usa una combinación de varias medias móviles para determinar tendencias, puntos de entrada, etc, podemos crear un indicador que combine estas medias móviles en TradingView usando IA.
Ahora pongamos manos a la hora, comenzando con un indicador de 6 medias móviles.
Pueden obtener más información sobre la plataforma TradingView y sus características en: Reseña de TradingView
Creación del indicador de 6 medias móviles en Pinescript 6
Para comenzar, primero podemos escribir el siguiente prompt en un chat de ChatGTP:
Crea un indicador en TradingView de PineScript 6 que dibuje seis medias móviles simples, cada una con periodos de 10, 20, 30, 50, 100 y 200. Cada media tiene un color diferente. Usa los colores del arcoíris.

Este es el resultado que produce el chat:
//@version=6
indicator("6 Medias Móviles Simples - Arcoíris", overlay=true)
// Definimos los periodos
periods = array.from(10, 20, 30, 50, 100, 200)
// Definimos los colores del arcoíris
colors = array.from(color.red, color.orange, color.yellow, color.green, color.blue, color.purple)
// Dibujamos cada SMA con un color distinto
for i = 0 to array.size(periods) - 1
p = array.get(periods, i)
c = array.get(colors, i)
smaValue = ta.sma(close, p)
plot(smaValue, title="SMA " + str.tostring(p), color=c, linewidth=2)
Copiamos el código generado y lo pegamos en la pestaña “Pine Editor” ubicada justo debajo del gráfico de velas de TradingView para verificar que funciona y no contiene errores. El indicador es muy simple y por eso tiene unas pocas líneas, pero para este ejemplo es más que suficiente. Sin embargo, inicialmente me da el siguiente error:
Cannot call “plot” with argument “title”=”call “operator +” (series string)”. An argument of “series string” type was used but a “const string” is expected
Escribimos este indicativo en el chat para que ChatGTP lo corrija y el código obtenido es el siguiente:
//@version=6
indicator("6 Medias Móviles Simples - Arcoíris", overlay=true)
// Cálculo de cada SMA
sma10 = ta.sma(close, 10)
sma20 = ta.sma(close, 20)
sma30 = ta.sma(close, 30)
sma50 = ta.sma(close, 50)
sma100 = ta.sma(close, 100)
sma200 = ta.sma(close, 200)
// Plot de cada SMA con color del arcoíris
plot(sma10, title="SMA 10", color=color.red, linewidth=2)
plot(sma20, title="SMA 20", color=color.orange, linewidth=2)
plot(sma30, title="SMA 30", color=color.yellow, linewidth=2)
plot(sma50, title="SMA 50", color=color.green, linewidth=2)
plot(sma100, title="SMA 100", color=color.blue, linewidth=2)
plot(sma200, title="SMA 200", color=color.purple, linewidth=2)
Ya este código es funcional y es fácil de comprender. El indicador traza 6 medias móviles simples (SMA) de distintos periodos. Para los que tienen algún conocimiento de PineScript 6, cambiar el tipo de media móvil, periodo y color de las líneas es bastante simple. Incluso podemos agregar checkboxes para activar y desactivar cada media móvil. Por el momento vamos a mantener el indicador lo más simple posible. Cuando aplicamos este indicador en la plataforma de TradingView tenemos el siguiente resultado:

Ahora vamos a explicar en detalle el código:
//@version=6→ indica que estamos usando la versión 6 de Pine Script.indicator("6 Medias Móviles Simples - Arcoíris", overlay=true)→ define el indicador:"6 Medias Móviles Simples - Arcoíris"es el nombre que verás en la lista de indicadores.overlay=truesignifica que se dibujará encima del gráfico de precios (si fuerafalse, aparecería en un panel aparte).
ta.sma(close, N)→ calcula la media móvil simple (SMA) de los precios de cierre (close) con un periodo deNvelas.Por ejemplo:
sma10→ promedio de los últimos 10 cierres.sma200→ promedio de los últimos 200 cierres.
Se calculan 6 SMA diferentes: 10, 20, 30, 50, 100 y 200.
plot(valor, ...)dibuja en el gráfico la serie de datos que le pases (en este caso, cada SMA).title→ nombre que verás en la leyenda del gráfico y en la configuración del indicador.color→ asigna un color específico. Aquí se usan los colores del arcoíris en orden: rojo, naranja, amarillo, verde, azul y púrpura.linewidth=2→ hace las líneas más gruesas (mejor visibilidad que el valor por defecto1).
Como puedes ver, tuvimos que hacer algunos ajustes para obtener el código final, pero digamos que ChatGPT prácticamente hizo el trabajo solo. Aunque, como dijimos el indicador es bastante simple y en realidad no le exigimos gran cosa a la IA, pero como saben muchos de ustedes, muchos de los mejores sistemas de trading en realidad son simples.
Al indicador se le pueden hacer mejoras, como los checkboxes que ya señalamos. Pueden modificarse los tipos y periodos de las medias móviles, agregar detección de cruces de medias móviles, etc.
Ahora vamos a mostrar un ejemplo más complejo en que le vamos a pedir a ChatGTP que cree un indicador de cruces de medias móviles.
Creación de un indicador de cruce de medias móviles en PineScript 6.0
Hagamos algo un poco más complejo. Solicitaremos un indicador para detectar un cruce de medias mediante el siguiente promp:
Crea un indicador en Pinescript que dibuje una línea vertical verde completamente extendida cuando la media móvil simple (SMA) de 10 periodos cruce la media móvil simple (SMA) de 50 periodos desde abajo y dibuje una línea vertical roja completamente extendida cuando la media móvil simple (SMA) de 10 pasos cruce la media móvil simple (SMA) de 50 pasos desde arriba.

El resultado inicial es el siguiente código:
//@version=6
indicator("Cruce de SMA con líneas verticales", overlay=true)
// Parámetros
smaLenFast = input.int(10, "SMA rápida")
smaLenSlow = input.int(50, "SMA lenta")
// Cálculo de medias móviles
smaFast = ta.sma(close, smaLenFast)
smaSlow = ta.sma(close, smaLenSlow)
// Detección de cruces
cruceAlcista = ta.crossover(smaFast, smaSlow)
cruceBajista = ta.crossunder(smaFast, smaSlow)
// Dibujar líneas verticales
if cruceAlcista
line.new(bar_index, low, bar_index, high, extend=extend.both, color=color.new(color.green, 0), width=2)
if cruceBajista
line.new(bar_index, low, bar_index, high, extend=extend.both, color=color.new(color.red, 0), width=2)
Ahora vamos a copiar el código y colocarlo en el editor de PineScript debajo del gráfico para ver que tal funciona. A diferencia del código anterior, en este caso no hubo ningún error. El indicador muestra mediante líneas verticales donde hubo cruces alcistas y bajistas de medias móviles, pero no muestra las medias móviles en sí mismas. Podemos hacer la modificación nosotros mismos o indicarle ChatGTP que haga el cambio. Podemos usar el siguiente prompt:
Modifica el código anterior para que el indicador trace las dos medias móviles en el gráfico de precios. Deja el resto del código igual
El código es el siguiente:
//@version=6
indicator("Cruce de SMA con líneas verticales", overlay=true)
// Parámetros
smaLenFast = input.int(10, "SMA rápida")
smaLenSlow = input.int(50, "SMA lenta")
// Cálculo de medias móviles
smaFast = ta.sma(close, smaLenFast)
smaSlow = ta.sma(close, smaLenSlow)
// Detección de cruces
cruceAlcista = ta.crossover(smaFast, smaSlow)
cruceBajista = ta.crossunder(smaFast, smaSlow)
// Dibujar medias móviles
plot(smaFast, title="SMA rápida", color=color.blue, linewidth=2)
plot(smaSlow, title="SMA lenta", color=color.orange, linewidth=2)
// Dibujar líneas verticales
if cruceAlcista
line.new(bar_index, low, bar_index, high, extend=extend.both, color=color.new(color.green, 0), width=2)
if cruceBajista
line.new(bar_index, low, bar_index, high, extend=extend.both, color=color.new(color.red, 0), width=2)
Este código da el siguiente resultado:

Ahora vamos a explicar el código:
//@version=6: define que usamos Pine Script versión 6.indicator(...): declara que es un indicador."Cruce de SMA con líneas verticales"→ nombre que aparecerá en TradingView.overlay=true→ hace que el indicador se dibuje sobre el gráfico de precios (no en un panel aparte).
smaLenFast = 10→ media móvil corta (rápida).smaLenSlow = 50→ media móvil larga (lenta).ta.sma(close, N)calcula la media móvil simple (SMA) del precio de cierre con periodoN.smaFast→ SMA de 10 (rápida).smaSlow→ SMA de 50 (lenta).ta.crossover(a, b)→ devuelvetruecuandoacruza de abajo hacia arriba ab.ta.crossunder(a, b)→ devuelvetruecuandoacruza de arriba hacia abajo ab.cruceAlcista→ cuando la SMA rápida (10) cruza hacia arriba la SMA lenta (50).cruceBajista→ cuando la SMA rápida (10) cruza hacia abajo la SMA lenta (50).plot(...)dibuja las líneas en el gráfico.La SMA rápida se dibuja en azul, la SMA lenta en naranja.
linewidth=2→ grosor de las líneas.if cruceAlcista→ si ocurre un cruce alcista en esa vela:Se dibuja una línea verde.
if cruceBajista→ si ocurre un cruce bajista:Se dibuja una línea roja.
line.new(x1, y1, x2, y2, ...)crea una línea:bar_index→ posición en el eje X (número de vela).lowyhigh→ rango desde el mínimo al máximo de la vela.extend=extend.both→ la línea se extiende hacia arriba y hacia abajo de forma ilimitada (ocupa todo el gráfico).color.new(color.xxx, 0)→ color sólido (0 = sin transparencia).width=2→ grosor de la línea.
Ya para terminar vamos a mostrar un indicador que ayuda a detectar la dirección de la tendencia con base en el RSI. Es decir, nos va a indicar cuando el RSI está arriba de 55 (tendencia alcista) o debajo de 45 (tendencia bajista). Por supuesto que es un enfoque demasiado simplista, pero es otro buen ejemplo de lo que podemos hacer. Aquí usamos el siguiente prompt:
Crea un indicador en TradingView que sombree el fondo del gráfico en verde claro cuando el RSI de 14 períodos esté por encima de 55 y en rojo claro cuando el valor del RSI esté debajo de 45.
Esto nos da el siguiente código:
//@version=6
indicator("Fondo por RSI", overlay=true)
// Parámetros del RSI
rsiLength = input.int(14, "Período RSI")
src = input(close, "Fuente de precios")
// Cálculo del RSI
rsi = ta.rsi(src, rsiLength)
// Condiciones
condVerde = rsi > 55
condRojo = rsi < 45
// Sombreado del fondo
bgcolor(condVerde ? color.new(color.green, 85) : na)
bgcolor(condRojo ? color.new(color.red, 85) : na)
// Opcional: mostrar RSI en un panel aparte para referencia
plot(rsi, "RSI", color=color.blue, linewidth=2, display=display.none)
Nuevamente el código funcionó a la primera. Si integro este código con el código del indicador de cruces de medias móviles, el resultado que tenemos es el siguiente:

Conclusiones
Vemos que ChatGTP y otros modelos de IA de tipo LLM modernos pueden ser herramientas muy útiles para desarrollar sistemas de trading manuales o automatizados. Probablemente aún no son capaces de crear un sistema rentable desde cero como pretenden muchos, pero si pueden ser más que adecuados para crear sus distintas partes, como muestran los ejemplos anteriores. Si tenemos un sistema de trading manual que use medias móviles para determinar la tendencia, cruces de medias móviles para determinar puntos de entrada, indicadores de volatilidad como el ATR y otros componentes, podemos usar ChatGTP para que nos ayude a programar estos indicadores. También podemos pedirle que nos ayude a desarrollar un módulo de gestión de riesgo y otras partes igualmente importantes que debe tener todo sistema.
Como programadores y traders, una vez que tenemos estos componentes programados y evaluados con ayuda de ChatGTP, podemos integrarlos para crear un sistema de trading completo que debemos evaluar para ver si cumple con nuestras expectativas.
En este sentido, las herramientas de programación basadas en IA pueden ahorrarnos mucho tiempo y esfuerzo, aunque tampoco debemos volvernos dependientes de las mismas. El desarrollo y aplicación final de un sistema de trading dependen del conocimiento y experiencia del trader y de sus objetivos. Sino tenemos claro lo que estamos haciendo en los mercados y no hemos invertido el tiempo en crear un método de trading que se adecue a nuestras necesidades, es muy poco probable que ChatGTP nos va a ayudar a convertirnos en buenos traders.
¿Que broker de Tradingview recomendamos para aplicar nuestras estrategias? IC Markets es una muy buena opción. Más información en: Análisis del broker IC Markets













