Strategi penentuan tren EMA reflektif berdasarkan rata-rata pergerakan Hull

HMA EMA WMA
Tanggal Pembuatan: 2024-11-29 16:35:43 Akhirnya memodifikasi: 2024-11-29 16:35:43
menyalin: 3 Jumlah klik: 493
1
fokus pada
1617
Pengikut

Strategi penentuan tren EMA reflektif berdasarkan rata-rata pergerakan Hull

Ringkasan

Strategi ini menilai tren pasar dengan menggunakan karakteristik refleksi dari Hull Moving Average (HMA). Inti dari strategi ini adalah menghitung nilai perbedaan antara Hull Moving Average jangka pendek dan jangka panjang, dan memprediksi pergerakan harga dengan nilai refleksi dari perbedaan ini. Dengan menetapkan parameter persentase yang dapat disesuaikan, strategi ini dapat beradaptasi dengan siklus perdagangan yang berbeda, sehingga memberikan sinyal penilaian tren yang lebih akurat.

Prinsip Strategi

Strategi ini menggunakan dua Hull Moving Average dengan 36 dan 44 periode sebagai indikator dasar. Dengan menghitung perbedaan mutlak antara kedua rata-rata bergerak ini, dan melakukan perhitungan refleksi terhadap perbedaan tersebut dalam kombinasi dengan arah tren saat ini, akhirnya mendapatkan nilai refleksi. Strategi ini juga memperkenalkan weighted moving average (WMA) untuk menghitung nilai delta, dan menentukan titik pivot dalam tren melalui persimpangan nilai delta dengan nilai refleksi.

Keunggulan Strategis

  1. Mengadopsi Hull Moving Average mengurangi keterbelakangan dari Moving Average tradisional dan meningkatkan respons strategi terhadap perubahan pasar
  2. Menggunakan konsep nilai refleksi untuk menangkap titik balik tren dengan lebih akurat
  3. Faktor modifikasi yang dapat disesuaikan didesain untuk membuat strategi lebih beradaptasi
  4. Peningkatan reliabilitas sinyal dengan perhitungan perbedaan mutlak
  5. Mengintegrasikan mekanisme pengendalian risiko, termasuk penyesuaian dinamis garis batas tren
  6. Sistem dilengkapi dengan komponen visualisasi, sehingga memudahkan trader untuk menilai kondisi pasar secara intuitif

Risiko Strategis

  1. Sering terjadi sinyal palsu di pasar horizontal
  2. Setting parameter yang tidak tepat dapat menyebabkan sinyal lag atau terlalu sensitif
  3. Dalam pasar yang sangat bergejolak, garis pembatas tren mungkin tidak dapat disesuaikan pada waktu yang tepat
  4. Strategi ini bergantung pada perhitungan data historis dan mungkin tidak cukup cepat bereaksi terhadap kejadian pasar yang tidak terduga

Arah optimasi strategi

  1. Memperkenalkan indikator volatilitas, faktor koreksi penyesuaian dinamis, meningkatkan kemampuan strategi untuk beradaptasi dengan kondisi pasar
  2. Menambahkan mekanisme identifikasi status pasar, dengan pengaturan parameter yang berbeda dalam lingkungan pasar yang berbeda
  3. Mengembangkan sistem optimasi parameter adaptif untuk menyesuaikan parameter secara dinamis
  4. Menambahkan modul analisis volume lalu lintas untuk meningkatkan keandalan sinyal
  5. Meningkatkan mekanisme pengendalian risiko, meningkatkan fungsi penghentian kerugian dan pengelolaan dana

Meringkaskan

Strategi ini secara inovatif menggabungkan Hull Moving Average dengan konsep Reflexive Value untuk membangun sistem pelacakan tren yang responsif dan adaptif. Keunggulan inti dari strategi ini adalah kemampuannya untuk menangkap titik-titik perubahan tren secara akurat, sementara dengan pengaturan parameter yang dapat disesuaikan, strategi ini dijamin untuk diterapkan dalam berbagai lingkungan pasar.

Kode Sumber Strategi
/*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