Introducción
Sin las herramientas de trading adecuadas, no podrás llevar a cabo un análisis técnico eficaz. Una estrategia de trading sólida te ayudará a evitar errores habituales, mejorar tu gestión del riesgo e incrementar tu capacidad de identificar y aprovechar oportunidades.
Para muchos, TradingView es la plataforma chartista referente. Al ofrecer un hub de herramientas de análisis técnico, esta poderosa aplicación web HTML5 es utilizada por millones de personas para monitorizar los movimientos de los mercados de Forex, criptomonedas y de acciones tradicionales.
TradingView dispone de muchas funcionalidades potentes: permite monitorizar activos a lo largo de numerosas plataformas de trading, así como publicar ideas de trades dentro de su red social. En este artículo, nos centraremos en su capacidad de customización. Utilizaremos Pine Script, el lenguaje de programación propio de TradingView, que nos garantiza un control granular sobre nuestros formatos gráficos.
¡Empecemos!
¿Qué es Pine Script?
Pine Script es un lenguaje de scripting que puedes utilizar para modificar tus gráficos de TradingView. La plataforma ya de por sí te brinda muchas funcionalidades para hacerlo, pero Pine Script te permite ir un paso más allá. Ya sea para cambiar los colores de tus velas o hacer un "backtest" de una nueva estrategia, el Pine Editor te permitirá customizar tus gráficos de tiempo real tal como consideres más oportuno.
El mismo código está excelentemente documentado, así que asegúrate de consultar el manual de usuario para más información. Nuestro objetivo en este tutorial es analizar algunos de los principios básicos y presentar indicadores que puedan resultar útiles para el trading de criptomonedas.
Configuración
Dar los primeros pasos con Pine Script es increíblemente simple. Cualquier código que escribamos se ejecutará en los servidores de TradingView, por lo que podemos acceder al editor y desarrollar nuestros scripts desde un navegador –sin ningún tipo de descarga o configuración extra requerida.
En este tutorial, vamos a "chartear" el par de monedas Bitcoin/Binance USD (BTCBUSD). Si todavía no lo has hecho, da el paso y registra una cuenta gratuita (hay también disponible una suscripción pro, pero no es necesaria para esta guía).
Sigue este enlace, y te encontrarás con un gráfico parecido al siguiente:
El tuyo probablemente estará más actualizado.
Una vez aquí, querremos disponer del gráfico con funciones completas (full-featured chart) –clica en el botón para acceder al mismo. Éste nos dará una visión mucho más detallada, herramientas para dibujar y opciones para trazar líneas de tendencia, entre otras cosas.
Gráfico con funciones completas (full-featured chart). Puedes ajustar el intervalo temporal clicando en las vistas que aparecen encima de las pestañas destacadas.
No analizaremos cómo utilizar las distintas herramientas disponibles, pero si te tomas muy en serio el análisis técnico, te recomendamos encarecidamente que te familiarices con ellas. En la parte inferior izquierda (indicado en la imagen), verás una serie de pestañas distintas –clica en Pine Editor.
El Pine Editor
En este editor es donde la magia se produce. Le indicaremos al mismo qué es lo que deseamos hacer, y a continuación clicaremos en Add to Chart (Añadir a Gráfico) para ver cómo aparecen arriba nuestras anotaciones. Ten en cuenta que las cosas pueden complicarse si incluimos varias anotaciones a la vez, por lo que las eliminaremos entre los distintos ejemplos -clica con el botón derecho en el gráfico > Remove Indicators (Eliminar Indicadores).
Puedes ver que ya tenemos ahí un par de líneas de código. Procedamos a clicar en Add to Chart (Añadir al Gráfico) para ver qué ocurre.
Un segundo gráfico es añadido debajo del original. El nuevo gráfico representa los mismos datos. Desplaza el cursor sobre My Script (Mi Script) y clica en la cruz para eliminarlo. Ahora, analicemos en detalle el código.
study("My Script")
Esta primera línea simplemente configura nuestra anotación. Sólo requiere el nombre que deseas ponerle al indicador ("My Script", en este caso), aunque hay también una serie de parámetros opcionales que podemos añadir. Uno de ellos es overlay (superposición), el cual indica a TradingView que coloque el indicador en el gráfico existente (en lugar de en un nuevo segmento). Como puedes ver en nuestro primer ejemplo, por defecto aparece como false. Aunque ahora no lo veremos en acción, overlay=true añade el indicador al gráfico existente.
plot(close)
Esta línea es la instrucción para marcar el precio de cierre de Bitcoin. plot simplemente nos proporciona un gráfico de línea, aunque también podemos desplegar velas y barras, como veremos en breve.
Ahora, probemos lo siguiente:
//@version=4
study("My Script", overlay=true)
plot(open, color=color.purple)
Una vez añadas esto, deberías poder ver un segundo gráfico (que será como el original desplazado hacia la derecha). Todo lo que hemos hecho es plasmar el precio de apertura, y dado que la apertura del día en curso es el cierre del día previo, es lógico que éstos presenten una forma idéntica.
¡Muy bien! Vamos a deshacernos de las anotaciones actuales -recuerda, para ello hemos de clicar en el botón derecho y seleccionar Remove Indicators (Eliminar Indicadores). Desplaza el cursor sobre Bitcoin / BUSD y clica en el botón Hide (Ocultar) para también despejar el gráfico actual.
Muchos traders prefieren gráficos de velas dado que nos proporcionan más información que un simple diagrama como el que acabamos de hacer. Procedamos a añadirlas a continuación.
//@version=4
study("My Script", overlay=true)
plotcandle(open, high, low, close)
Es un buen comienzo, pero la falta de colores hace que resulte un poco insulso. Idealmente, deberíamos tener velas rojas cuando la apertura es mayor que el cierre en el periodo en cuestión, y verdes cuando el cierre supera a la apertura. Así que añadiremos una línea encima de la función plotcandle():
//@version=4
study("My Script", overlay=true)
colors = open >= close ? color.red : color.green
plotcandle(open, high, low, close)
Ésto se fijará en cada vela y comprobará si la apertura es mayor o igual que el cierre. Si lo es, significa que los precios han caído durante el periodo, por lo que coloreará la vela de rojo. De lo contrario, la coloreará de verde. Modifica la función plotcandle() para aprobar este esquema de colores:
//@version=4
study("My Script", overlay=true)
colors = open >= close ? color.red : color.green
plotcandle(open, high, low, close, color=colors)
Elimina los indicadores actuales si aún no lo has hecho, y añade éste al gráfico. Ahora, deberíamos tener ya algo que se parezca a un gráfico de velas ordinario.
¡Precioso!
Trazar medias móviles (MA)
Ya tenemos algunos de los elementos básicos. Veamos ahora nuestro primer indicador personalizado –la media móvil exponencial o EMA. Se trata de una herramienta valiosa, dado que nos permite filtrar cualquier ruido del mercado y suavizar la acción del precio.
La EMA difiere ligeramente de la media móvil simple (SMA) en el hecho de que otorga un mayor peso a los datos más recientes. Tiende a ser más reactiva frente a movimientos repentinos, y es a menudo utilizada para jugadas a corto plazo (como en el day trading, por ejemplo).
La media móvil simple (SMA)
También podríamos trazar la SMA, para así poder comparar las dos medias después. Añade esta línea a tu script:
plot(sma(close, 10))
Esto trazará la media de los diez días previos. Ajusta el número entre paréntesis para ver cómo cambia la curva al considerar distintas longitudes.
La SMA, basada en los diez días previos.
La media móvil exponencial (EMA)
La EMA será un poco más difícil de comprender, pero no hay que preocuparse. Desglosemos la fórmula primero:
EMA = (Cierre - EMA del Día Previo) * Multiplicador - EMA del Día Previo
Y bien, ¿qué nos está diciendo esto? Pues que para cada día calculamos una nueva media móvil, basada en la del día anterior. El multiplicador es lo que “pondera” el periodo más reciente, y se calcula con la siguiente fórmula:
Multiplicador = 2 / (Longitud de la EMA + 1)
Como ocurre con las media móviles simples, necesitamos especificar cuán larga la EMA será. Sintacticamente, la función para trazar la EMA es similar a la de la SMA. Trázala al lado de la SMA para así poder comparar las dos:
//@version=4
study("My Script", overlay=true)
plot(sma(close, 10))
plot(ema(close,10))
Puedes ver que hay una ligera diferencia entre ambos tipos de MA.
➠ ¿Estás pensando en iniciarte en el mundo de las criptomonedas? ¡Compra Bitcoin en Binance!
Scripts integrados
Hasta ahora, hemos escrito nuestro código manualmente para que así te familiarizaras con él. A continuación, introduciremos un elemento que puede ahorrarnos tiempo, especialmente, si vamos escribir scripts más complejos y no queremos hacerlo desde cero.
En la parte superior derecha de tu editor, clica en New (Nuevo). Te encontrarás con un menú desplegable con todo tipo de indicadores técnicos distintos. Clica en Moving Average Exponential (Media Móvil Exponencial) para ver el código fuente de un indicador EMA.
Continúa y añade esto al gráfico.
Éste es distinto del nuestro –reconocerás las funciones input(). Las mismas son geniales desde el punto de vista de la usabilidad, ya que puedes clicar en este cuadro…
...y cambiar fácilmente en una ventana emergente algunos de los valores, clicando en la rueda de Settings (Ajustes).
Añadiremos un par de funciones input() en nuestro siguiente script para demostrarlo.
Marcar el indicador del Índice de Fuerza Relativa (RSI)
El Índice de Fuerza Relativa (RSI) es otro indicador de análisis técnico esencial. Es conocido como un indicador de "momentum", lo que significa que mide la velocidad a la que se compran y venden los activos. Presentada en una escala del 0 al 100, una puntuación RSI trata de informar a los inversores sobre si los activos están "sobrecomprados" o "sobrevendidos". Habitualmente, un activo podrá ser considerado sobrevendido si presenta una puntuación menor o igual a 30, y sobrecomprado con una puntuación mayor o igual a 70.
Si te dirige a New > RSI Strategy, puedes comprobarlo por ti mismo. El RSI generalmente se mide en períodos de 14 (es decir, 14 horas o 14 días), pero puedes modificar esa configuración para adaptarla a tu propia estrategia.
Agrega esto al gráfico. Deberías ver algunas flechas mostradas ahora (definidas por la función strategy.entry()en el código). RsiLE indica una oportunidad potencial de prolongar el activo, ya que puede estar sobrevendido. RsiSE destaca los posibles puntos en los que colocar en corto el activo cuando está sobrecomprado. Ten en cuenta que, como ocurre con todos los indicadores, no debes confiar necesariamente en ellos como prueba infalible de que los precios aumentarán o disminuirán.
Backtesting
Existe una forma de que podamos probar nuestros indicadores personalizados. Aunque el rendimiento pasado no es garantía de resultados futuros, realizar pruebas retrospectivas de nuestros scripts puede darnos una idea de cuán efectivos son para captar señales.
A continuación, daremos un ejemplo de una secuencia de comandos sencilla. Vamos a crear una estrategia sencilla que entra en una posición en largo cuando el precio de BTC cae por debajo de $11,000 y sale de la posición cuando el precio supera los $11,300. Entonces podemos ver cuán rentable habría sido esta estrategia históricamente.
//@version=4
strategy("ALaLuna", overlay=true)
enter = input(11000)
exit = input(11300)
price = close
if (price <= enter)
strategy.entry("CompraLaCaída", strategy.long, comment="CompraLaCaída")
if (price >= exit)
strategy.close_all(comment="VendeLasNoticias")
Aquí hemos definido la entrada y la salida como variables; ambas son entradas, lo que significa que podemos cambiarlas en el gráfico más adelante. También configuramos la variable de precio, que toma el cierre de cada período. Entonces, tenemos algo de lógica en forma de declaraciones if. Si la parte entre corchetes es verdadera, se ejecutará el bloque con sangría debajo. De lo contrario, se omitirá.
Entonces, si el precio es menor o igual a nuestra entrada deseada, la primera expresión se evalúa como verdadera y abriremos una posición en largo. Una vez que el precio iguale o supere la salida deseada, se activará el segundo bloque, cerrando todas las posiciones abiertas.
Anotaremos el gráfico con flechas que muestran dónde entramos / salimos, por lo que especificamos qué etiquetar estos puntos con el parámetro de comentario (en este ejemplo, "BuyTheDip" (CompraLaCaída) y "SellTheNews" (VendeLasNoticias) ). Copia el código y agregalo al gráfico.
Ahora puedes ver los indicadores en el gráfico. Es posible que debas alejar la imagen.
TradingView aplica automáticamente tus reglas a los datos más antiguos. También notarás que cambia del Editor Pine a la pestaña Strategy Tester. Esto te permite ver una descripción general de tus ganancias potenciales, una lista de operaciones y cada una de tus actuaciones individuales.
Posiciones que hemos entrado y salido.
Unir las piezas
Es hora de escribir nuestro propio script utilizando algunos de los conceptos que hemos visto hasta ahora. Combinaremos EMA y RSI y usaremos sus valores para colorear velas, lo que arrojará información que podemos visualizar fácilmente.
Esto no debe interpretarse como un consejo financiero; no existe una forma objetivamente correcta de utilizar este indicador. Al igual que con todos los demás, debe usarse con otras herramientas para desarrollar tu propia estrategia.
Ahora trabajemos en nuestro nuevo script. Elimina todos tus indicadores del gráfico y oculta también el gráfico Bitcoin / BUSD, para que tengamos un lienzo limpio en el que trabajar.
Comencemos por definir nuestro estudio. Siéntete libre de nombrarlo como desees, solo asegúrate de establecer overlay = true.
study(title="Binance Academy Script", overlay=true)
Recuerda nuestra fórmula EMA de antes. Necesitamos proporcionar al multiplicador la longitud de la EMA. Vamos a convertirlo en una entrada que requiera un número entero (por lo tanto, sin lugares decimales). También estableceremos un mínimo que puede ser (minval) y un valor predeterminado (defval).
study(title="Binance Academy Script", overlay=true)
emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0)
Usando esta nueva variable, podemos calcular el valor EMA para cada vela en nuestro gráfico:
study(title="Binance Academy Script", overlay=true)
emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0)
emaVal = ema(close, emaLength)
Excelente. Sobre el RSI. Le daremos una longitud de manera similar:
study(title="Binance Academy Script", overlay=true)
emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0)
emaVal = ema(close, emaLength)
rsiLength = input(title="RSI Length", type=input.integer, defval=25, minval=0)
Y ahora, podemos calcularlo:
study(title="Binance Academy Script", overlay=true)
emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0)
emaVal = ema(close, emaLength)
rsiLength = input(title="RSI Length", type=input.integer, defval=25, minval=0)
rsiVal = rsi(close, rsiLength)
En esta etapa, vamos a armar la lógica que colorea las velas en función de los valores de EMA y RSI. Tomemos una situación en la que (a) el precio de cierre de la vela excede la EMA y (b) donde el RSI está por encima de 50.
¿Por qué? Bueno, puedes decidir que estos indicadores se pueden usar en conjunto para decirte cuándo comprar Bitcoin en corto o largo plazo. Por ejemplo, podrías pensar que cumplir ambas condiciones significa que es un buen momento para ingresar a una posición en largo. O a la inversa, puedes usarlo para informarte cuándo no ir en corto, incluso si otros indicadores dicen lo contrario.
Entonces, nuestra próxima línea se verá así:
study(title="Binance Academy Script", overlay=true)
emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0)
emaVal = ema(close, emaLength)
rsiLength = input(title="RSI Length", type=input.integer, defval=25, minval=0)
rsiVal = rsi(close, rsiLength)
colors = close > emaVal and rsiVal > 50 ? color.green : color.red
Si traducimos esto a un lenguaje sencillo, simplemente estamos diciendo que si el valor de EMA excede el precio de cierre y el puntaje RSI excede 50, colorearemos la vela de verde. De lo contrario, lo colorearemos de rojo.
A continuación, traza la EMA:
study(title="Binance Academy Script", overlay=true)
emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0)
emaVal = ema(close, emaLength)
rsiLength = input(title="RSI Length", type=input.integer, defval=25, minval=0)
rsiVal = rsi(close, rsiLength)
colors = close > emaVal and rsiVal > 50 ? color.green : color.red
plot(emaVal, "EMA")
Por último, traza las velas, asegurándote de incluir el parámetro de color:
study(title="Binance Academy Script", overlay=true)
emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0)
emaVal = ema(close, emaLength)
rsiLength = input(title="RSI Length", type=input.integer, defval=25, minval=0)
rsiVal = rsi(close, rsiLength)
colors = close > emaVal and rsiVal > 50 ? color.green : color.red
plot(emaVal, "EMA")
plotcandle(open, high, low, close, color=colors)
¡Y ese es el script! Agregalo al gráfico para verlo en acción.
Un gráfico BTC / BUSD con el indicador EMA / RSI.
En conclusión
En este artículo, analizamos algunos ejemplos básicos de lo que puedes hacer con el editor Pine de TradingView. A estas alturas, debe estar seguro de hacer anotaciones simples en los gráficos de precios para obtener información adicional de tus propios indicadores.
Aquí solo nos hemos interesado en un par de indicadores, pero es fácil generar indicadores más complejos, ya sea seleccionando los scripts incorporados de New o escribiéndolos tú mismo.
¿Falta inspiración? Los siguientes artículos pueden proporcionarte algunas ideas para tu próximo proyecto: