¿Cómo crear un indicador de cruce de medias móviles en TradingView?

0
46
Indicador de cruces de medias móviles de TradingView

¿Quieres aprender a programar indicadores y estrategias automatizadas en Pinescript de TradingView? En este artículo vamos a explicar cómo crear un simple indicador de cruce de medias móviles usando pinescript. Este será el primero de una serie de artículos sobre este tema en donde explicaremos cómo utilizar este lenguaje para crear herramientas que pueden mejorar nuestro desempeño como traders.

Como tal, el siguiente ejemplo es solo para propósitos didácticos y por lo tanto no está optimizado ni ha sido sometido a pruebas de backtesting para evaluar su rendimiento en el mercado. Por lo tanto, no recomendamos su uso para operar con dinero real.

¿Por qué escoger Pinescript?

  • Pine Script es un lenguaje de programación basado en la nube y se puede acceder a él desde cualquier lugar con conexión a internet, mientras que, en el caso de MQL4, necesitas instalar MT4 en una PC.
  • TradingView cuenta con una gran cantidad de indicadores integrados y de código abierto que se pueden utilizar para optimizar un código, como el uso de medias móviles para filtrar tendencias y rangos. En el caso de MQL4, necesitas buscar en diferentes blogs en internet.
  • En Pine Script, ya existen códigos integrados para casi todos los patrones de velas. Esta característica no está disponible en MQL4.
  • Además, Pine Script ofrece bibliotecas públicas para compartir indicadores o estrategias con la comunidad, lo que permite obtener más ideas de otros usuarios.
  • Una biblioteca pública también ahorra mucho tiempo, ya que puedes buscar los códigos que necesitas y posiblemente alguien más ya los haya escrito. Esto te ayudará a ahorrar tiempo.

Para poder acceder a Pine Script y la plataforma de Trading View con todos sus indicadores y herramientas es necesario abrir una cuenta en TradingView (el paquete básico no tiene costo).

Pueden acceder y abrir una cuenta en esta plataforma a través del siguiente enlace: Ir al sitio web de TradingView

Ahora veamos el indicador.

Indicador de cruces de medias móviles

A continuación, tenemos el código completo del indicador:

//@version=6
indicator("Cruces de Medias Móviles", overlay=true)

// Inputs para personalización
ma1_type = input.string("SMA", "Tipo MA 1", options=["SMA", "EMA", "WMA"])
ma2_type = input.string("EMA", "Tipo MA 2", options=["SMA", "EMA", "WMA"])
ma1_length = input.int(9, "Periodo MA 1", minval=1)
ma2_length = input.int(21, "Periodo MA 2", minval=1)
show_ma = input(true, "Mostrar Medias Móviles")

// Función para calcular MA según el tipo seleccionado
get_ma(type, length) =>
    switch type
        "SMA" => ta.sma(close, length)
        "EMA" => ta.ema(close, length)
        "WMA" => ta.wma(close, length)

// Cálculo de las medias móviles
ma1 = get_ma(ma1_type, ma1_length)
ma2 = get_ma(ma2_type, ma2_length)

// Detectar cruces
crossover = ta.crossover(ma1, ma2)
crossunder = ta.crossunder(ma1, ma2)

// Plotear las medias móviles usando una expresión ternaria
plot(show_ma ? ma1 : na, "MA1", color=#2196F3)  // Azul
plot(show_ma ? ma2 : na, "MA2", color=#FF5252)  // Rojo

// Plotear flechas en los cruces
plotshape(crossover, "Cruce Alcista", style=shape.triangleup, location=location.belowbar, color=#4CAF50, size=size.small)  // Verde
plotshape(crossunder, "Cruce Bajista", style=shape.triangledown, location=location.abovebar, color=#FF5252, size=size.small)  // Rojo

// Generar alertas
alertcondition(crossover, "Cruce Alcista", "La MA1 cruzó por encima de la MA2")
alertcondition(crossunder, "Cruce Bajista", "La MA1 cruzó por debajo de la MA2")

Este código hace lo siguiente:

Configuración inicial:

//@version=6
indicator("Cruces de Medias Móviles", overlay=true)

-Define la versión del Pine Script que usamos (v6).
-Crea un indicador llamado “Cruces de Medias Móviles” que se mostrará sobre el gráfico de precios.

Entradas del usuario (Inputs):

ma1_type = input.string("SMA", "Tipo MA 1", options=["SMA", "EMA", "WMA"])
ma2_type = input.string("EMA", "Tipo MA 2", options=["SMA", "EMA", "WMA"])
ma1_length = input.int(9, "Periodo MA 1", minval=1)
ma2_length = input.int(21, "Periodo MA 2", minval=1)
show_ma = input(true, "Mostrar Medias Móviles")

-Permite elegir el tipo de media móvil (SMA, EMA o WMA) para cada línea de media móvil.
-Define los períodos de las medias móviles (9 y 21 por defecto).
-Añade un switch para mostrar/ocultar las líneas.

Función para calcular medias móviles:

get_ma(type, length) =>
    switch type
        "SMA" => ta.sma(close, length)
        "EMA" => ta.ema(close, length)
        "WMA" => ta.wma(close, length)

-Una función que recibe el tipo y período de la media móvil y calcula el tipo correcto de media móvil según la selección:

  • SMA: Media Móvil Simple
  • EMA: Media Móvil Exponencial
  • WMA: Media Móvil Ponderada

Cálculo de las medias móviles:

ma1 = get_ma(ma1_type, ma1_length)
ma2 = get_ma(ma2_type, ma2_length)

-Calcula ambas medias móviles usando la función anterior.

Detección de cruces de medias móviles:

crossover = ta.crossover(ma1, ma2)
crossunder = ta.crossunder(ma1, ma2)

-crossover: Detecta cuando la MA1 cruza hacia arriba la MA2
-crossunder: Detecta cuando la MA1 cruza hacia abajo la MA2

Visualización de las medias móviles:

plot(show_ma ? ma1 : na, "MA1", color=#2196F3)
plot(show_ma ? ma2 : na, "MA2", color=#FF5252)

-Dibuja las líneas de las medias móviles

-Usa un operador ternario (?) para mostrar/ocultar las líneas

-Si show_ma es verdadero, muestra la línea; si no, muestra na (nada)

-MA1 en azul (#2196F3) y MA2 en rojo (#FF5252)

Visualización de señales de cruces de medias móviles:

plotshape(crossover, "Cruce Alcista", style=shape.triangleup, location=location.belowbar, color=#4CAF50, size=size.small)
plotshape(crossunder, "Cruce Bajista", style=shape.triangledown, location=location.abovebar, color=#FF5252, size=size.small)

-Dibuja triángulos cuando hay cruces.
-Triángulos verdes arriba cuando es señal alcista.
-Triángulos rojos abajo cuando es señal bajista.

Sistema de alertas de señales de cruces:

alertcondition(crossover, "Cruce Alcista", "La MA1 cruzó por encima de la MA2")
alertcondition(crossunder, "Cruce Bajista", "La MA1 cruzó por debajo de la MA2")

-Configura alertas que se pueden activar cuando ocurren los cruces.

-Permite al usuario recibir notificaciones de los cruces.

Indicador de cruces de medias móviles de TradingView

Como vemos, el indicador es bastante simple y el código puede comprenderse con facilidad, dado que Pinescript es un lenguaje relativamente sencillo.

Tal como indicamos anteriormente, este indicador no debe usarse como criterio único para abrir o cerrar posiciones en el mercado. Como puede verse en la imagen anterior, los cruces de medias móviles muchas veces son señales poco fiables para operar, sobre todo en mercados en rango.

Por lo tanto, hay algunas recomendaciones que podríamos implementar para mejorar el rendimiento de este indicador.

Recomendaciones para mejorar el indicador de cruces de MA

Entre las mejoras que podemos implementar en el indicador tenemos las siguientes:

Claro, aquí te propongo varias mejoras potenciales para el indicador:

Personalización visual:

  • Añadir inputs para personalizar los colores de las líneas y señales
  • Opción para cambiar el estilo de las líneas (grosor, punteado, etc.)
  • Permitir cambiar el tamaño y estilo de las flechas de señales
  • Añadir etiquetas de texto junto a las señales con información del cruce

Filtros de señales:

  • Añadir un filtro por volatilidad (ATR) para evitar señales en mercados muy volátiles
  • Implementar un filtro de tendencia usando una media móvil más larga
  • Añadir un filtro de volumen mínimo para validar señales
  • Opción para ignorar señales muy cercanas entre sí (evitar ruido)

Información adicional:

  • Mostrar la diferencia porcentual entre las medias móviles
  • Añadir un panel de información con estadísticas de éxito de las señales
  • Mostrar la distancia entre las medias móviles en términos de ATR
  • Agregar una tabla con las últimas señales y sus resultados

Funcionalidades avanzadas:

  • Implementar backtesting básico de las señales
  • Añadir divergencias entre precio y medias móviles
  • Incorporar bandas de volatilidad alrededor de las medias
  • Opción para usar precios diferentes al cierre (high, low, HL2, etc.)

Alertas mejoradas:

  • Añadir condiciones de alerta personalizables
  • Alertas basadas en la fuerza del cruce
  • Alertas con información adicional (volatilidad, volumen, etc.)
  • Opción para filtrar alertas según criterios específicos

Optimización y rendimiento:

  • Calcular y mostrar el ratio de señales falsas vs verdaderas
  • Añadir indicadores de confirmación opcionales (RSI, MACD, etc.)
  • Optimizar el código para mejorar el rendimiento
  • Implementar caché para cálculos repetitivos

Interfaz de usuario:

  • Añadir un panel de control para ajustes rápidos
  • Mostrar estadísticas en tiempo real
  • Opción para mostrar/ocultar diferentes elementos del indicador
  • Añadir tooltips informativos en las señales

Características educativas:

  • Añadir anotaciones explicativas en las señales
  • Mostrar razones para señales invalidadas
  • Incluir métricas de riesgo/recompensa
  • Visualización de zonas de confluencia

¿Qué broker recomendamos para operar con la plataforma TradingView? En la actualidad múltiples corredores online han incorporado TradingView a sus plataformas de trading. Pueden consultar una lista en: Brokers con TradingView


 

Raul Canessa

Leave a reply