Strategi ini memanfaatkan sifat reflektif Hull Moving Averages (HMA) untuk menentukan tren pasar. Inti dari strategi ini melibatkan menghitung perbedaan antara Hull Moving Averages jangka pendek dan jangka panjang dan menggunakan perbedaan yang tercermin ini untuk memprediksi pergerakan harga. Melalui parameter persentase yang dapat disesuaikan, strategi dapat beradaptasi dengan kerangka waktu perdagangan yang berbeda, memberikan sinyal penentuan tren yang lebih akurat.
Strategi ini menggunakan dua Hull Moving Averages dengan periode 36 dan 44 sebagai indikator dasar. Strategi ini menghitung perbedaan mutlak antara kedua rata-rata bergerak ini dan menerapkan perhitungan refleksi berdasarkan arah tren saat ini untuk mendapatkan nilai refleksi. Strategi ini juga menggabungkan Rata-rata Bergerak Bertimbang (WMA) untuk menghitung nilai delta, menggunakan persilangan antara nilai delta dan refleksi untuk mengidentifikasi titik balik tren.
Strategi ini secara inovatif menggabungkan Hull Moving Averages dengan konsep nilai refleksi untuk menciptakan sistem trend berikut yang responsif dan adaptif. Kekuatannya utama terletak pada menangkap titik balik tren dengan akurat sambil mempertahankan kemampuan beradaptasi melalui parameter yang dapat disesuaikan. Sementara risiko yang melekat ada, optimasi dan penyempurnaan terus-menerus membuat strategi ini menjadi alat perdagangan yang berpotensi stabil dan andal.
/*backtest start: 2019-12-23 08:00:00 end: 2024-11-28 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Reflected EMA Difference (RED)", shorttitle="RED [by MarcosPna]", overlay=true) //mv30 // Análisis de Riesgo // Risk Analysis media_delta = ta.wma(2 * ta.wma(close, 8 / 2) - ta.wma(close, 8), math.floor(math.sqrt(8))) // Calcular EMAs // Calculate EMAs ema_corta_delta = ta.hma(close, 36) ema_larga_delta = ta.hma(close, 44) // Calcular la diferencia entre las EMAs // Calculate the difference between EMAs diferencia_delta_ema = math.abs(ema_corta_delta - ema_larga_delta) // Calcular el valor reflejado basado en la posición de la EMA corta // Compute the reflected value based on the position of the short EMA valor_reflejado_delta = ema_corta_delta + (ema_corta_delta > ema_larga_delta ? diferencia_delta_ema : -diferencia_delta_ema) // Suavizar el valor reflejado // Smooth the reflected value periodo_suavizado_delta = input.int(2, title="Periodo extendido") ema_suavizada_delta = ta.hma(valor_reflejado_delta, periodo_suavizado_delta) // Ploteo de las EMAs y la línea reflejada // Plot EMAs and the reflected line plot(valor_reflejado_delta, title="Reflected EMA Difference (RED)", color=valor_reflejado_delta > ema_suavizada_delta ? color.rgb(253, 25, 238, 30) : color.rgb(183, 255, 30), linewidth=2, style=plot.style_line) // Parámetros ajustables para la reversión de tendencia // Adjustable parameters for trend reversal factor_correccion_delta = input.float(title='Porcentaje de cambio', minval=0, maxval=100, step=0.1, defval=0.04) tasa_correccion_delta = factor_correccion_delta * 0.01 // Variables para la reversión de tendencia // Variables for trend reversal var int direccion_delta_tendencia = 0 var float precio_maximo_delta = na var float precio_minimo_delta = na var float limite_tendencia_delta = na // Inicializar precio máximo y mínimo con el primer valor de la EMA suavizada reflejada // Initialize peak and trough prices with the first value of the smoothed reflected EMA if na(precio_maximo_delta) precio_maximo_delta := ema_suavizada_delta if na(precio_minimo_delta) precio_minimo_delta := ema_suavizada_delta // Lógica de reversión de tendencia con la EMA suavizada reflejada // Trend reversal logic with the smoothed reflected EMA if direccion_delta_tendencia >= 0 if ema_suavizada_delta > precio_maximo_delta precio_maximo_delta := ema_suavizada_delta limite_tendencia_delta := precio_maximo_delta - (precio_maximo_delta * tasa_correccion_delta) if ema_suavizada_delta <= limite_tendencia_delta direccion_delta_tendencia := -1 precio_minimo_delta := ema_suavizada_delta strategy.entry("Venta", strategy.short) else if ema_suavizada_delta < precio_minimo_delta precio_minimo_delta := ema_suavizada_delta limite_tendencia_delta := precio_minimo_delta + (precio_minimo_delta * tasa_correccion_delta) if ema_suavizada_delta >= limite_tendencia_delta direccion_delta_tendencia := 1 precio_maximo_delta := ema_suavizada_delta strategy.entry("Compra", strategy.long) // Ploteo y señales // Plotting and signals indice_delta_ascendente = plot(direccion_delta_tendencia == 1 ? limite_tendencia_delta : na, title="Aumento de valor", style=plot.style_linebr, linewidth=3, color=color.new(color.green, 0)) senal_compra_delta = direccion_delta_tendencia == 1 and direccion_delta_tendencia[1] == -1 plotshape(senal_compra_delta ? limite_tendencia_delta : na, title="Estilo señal alcista", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.green, 0)) indice_delta_descendente = plot(direccion_delta_tendencia == 1 ? na : limite_tendencia_delta, title="Disminución de valor", style=plot.style_linebr, linewidth=3, color=color.new(color.red, 0)) senal_venta_delta = direccion_delta_tendencia == -1 and direccion_delta_tendencia[1] == 1 plotshape(senal_venta_delta ? limite_tendencia_delta : na, title="Estilo señal bajista", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 0)) // Variables para manejo de cajas // Variables for box management var box caja_tendencia_delta = na // Condición: Cruce de HullMA hacia abajo // Condition: HullMA crosses below reflected EMA value cruce_bajista_delta = ta.crossunder(media_delta, valor_reflejado_delta) // Condición: Cruce de HullMA hacia arriba // Condition: HullMA crosses above reflected EMA value cruce_alcista_delta = ta.crossover(media_delta, valor_reflejado_delta) // Dibujar caja cuando HullMA cruza hacia abajo el valor reflejado de EMA // Draw a box when HullMA crosses below the reflected EMA value // if (cruce_bajista_delta) and direccion_delta_tendencia == 1 // caja_tendencia_delta := box.new(left=bar_index, top=high, right=bar_index, bottom=low, text = "Critical Areas", text_color = color.white, border_width=2, border_color=color.rgb(254, 213, 31), bgcolor=color.new(color.red, 90)) // Cerrar caja cuando HullMA cruza hacia arriba el valor reflejado de EMA // Close the box when HullMA crosses above the reflected EMA value // if (cruce_alcista_delta and not na(caja_tendencia_delta)) // box.set_right(caja_tendencia_delta, bar_index) // caja_tendencia_delta := na // Remove the reference to create a new box at the next cross down