Esta estrategia es un sistema de negociación de bandas de volatilidad basado en un promedio móvil exponencial (EMA) de 300 períodos. Al combinar EMA y desviación estándar, forma un rango de volatilidad dinámica similar a las bandas de Bollinger para capturar oportunidades de sobrecompra y sobreventa del mercado. La estrategia genera señales comerciales a través de cruces de precios con las bandas de volatilidad y establece objetivos de ganancia basados en ganancias porcentual.
El núcleo de la estrategia establece un centro de precios utilizando la EMA de 300 períodos y construye bandas de volatilidad utilizando la desviación estándar.
La estrategia captura oportunidades de sobrecompra y sobreventa del mercado a través de bandas de volatilidad EMA, con reglas de negociación claras y operación simple. Sin embargo, el control de riesgos necesita atención en la aplicación práctica, y se recomienda mejorar la estabilidad de la estrategia a través de indicadores adicionales y optimización de parámetros.
/*backtest start: 2024-10-01 00:00:00 end: 2024-10-31 23:59:59 period: 2h basePeriod: 2h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Estrategia de Compra/Venta en Bandas de EMA 300", overlay=true) // Definir el período de la EMA periodo = input.int(300, title="Período de la EMA") // Calcular la EMA de 300 ema_300 = ta.ema(close, periodo) // Definir el número de desviaciones estándar num_desviaciones = input.float(2, title="Número de Desviaciones Estándar") // Calcular la desviación estándar de la EMA de 300 desviacion = ta.stdev(close, periodo) // Calcular los límites superior e inferior de las bandas banda_superior = ema_300 + desviacion * num_desviaciones banda_inferior = ema_300 - desviacion * num_desviaciones // Definir el porcentaje para las señales de compra y venta porcentaje = input.float(0.98, title="Porcentaje de Salida de Banda") // Definir señales de compra y venta compra = ta.crossover(close, banda_inferior) venta = ta.crossunder(close, banda_superior) // Calcular el precio de salida para las señales de compra y venta precio_salida_compra = close * (1 + porcentaje / 100) precio_salida_venta = close * (1 - porcentaje / 100) // Plotear las bandas plot(banda_superior, color=color.blue, linewidth=2, title="Banda Superior") plot(banda_inferior, color=color.red, linewidth=2, title="Banda Inferior") // Plotear las señales de compra y venta plotshape(compra, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small, title="Compra") plotshape(venta, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small, title="Venta") // Simular operaciones if (compra) strategy.entry("Compra", strategy.long) if (venta) strategy.entry("Venta", strategy.short) // Definir reglas de salida if (strategy.position_size > 0) strategy.exit("Exit Long", from_entry="Compra", limit=precio_salida_compra) if (strategy.position_size < 0) strategy.exit("Exit Short", from_entry="Venta", limit=precio_salida_venta) // Crear alertas alertcondition(compra, title="Alerta de Compra", message="¡Señal de Compra Detectada!") alertcondition(venta, title="Alerta de Venta", message="¡Señal de Venta Detectada!") // Mostrar alertas en el gráfico if (compra) label.new(bar_index, low, text="Compra", style=label.style_label_up, color=color.green, textcolor=color.white) if (venta) label.new(bar_index, high, text="Venta", style=label.style_label_down, color=color.red, textcolor=color.white)