Sumber dimuat naik... memuat...

Strategi Penentuan Trend EMA yang Tercermin Berdasarkan Purata Bergerak Hull

Penulis:ChaoZhang, Tarikh: 2024-11-29 16:35:43
Tag:HMAEMAWMA

img

Ringkasan

Strategi ini menggunakan sifat-sifat refleksi Hull Moving Averages (HMA) untuk menentukan trend pasaran. Inti strategi ini melibatkan pengiraan perbezaan antara purata bergerak Hull jangka pendek dan jangka panjang dan menggunakan perbezaan yang dipantulkan ini untuk meramalkan pergerakan harga. Melalui parameter peratusan yang boleh disesuaikan, strategi ini dapat disesuaikan dengan jangka masa perdagangan yang berbeza, memberikan isyarat penentuan trend yang lebih tepat.

Prinsip Strategi

Strategi ini menggunakan dua Hull Moving Averages dengan tempoh 36 dan 44 sebagai penunjuk asas. Ia mengira perbezaan mutlak antara kedua-dua purata bergerak ini dan menggunakan pengiraan pantulan berdasarkan arah trend semasa untuk mendapatkan nilai pantulan. Strategi ini juga menggabungkan Purata Bergerak Bertimbang (WMA) untuk mengira nilai delta, menggunakan persilangan antara nilai delta dan pantulan untuk mengenal pasti titik perubahan trend. Semasa penentuan trend, strategi menggunakan faktor pembetulan yang boleh disesuaikan untuk mengawal kepekaan pembalikan trend. Isyarat perdagangan dihasilkan apabila harga memecahkan garis batasan trend yang telah ditetapkan.

Kelebihan Strategi

  1. Menggunakan Hull Moving Averages untuk mengurangkan lag biasanya berkaitan dengan purata bergerak tradisional
  2. Merangkumi nilai pantulan untuk pengesanan yang lebih tepat titik perubahan trend
  3. Ciri-ciri faktor pembetulan yang boleh diselaraskan untuk peningkatan kesesuaian
  4. Meningkatkan kebolehpercayaan isyarat melalui pengiraan perbezaan mutlak
  5. Mengintegrasikan mekanisme kawalan risiko termasuk penyesuaian garis trend dinamik
  6. Termasuk komponen visualisasi untuk penilaian keadaan pasaran intuitif

Risiko Strategi

  1. Boleh menghasilkan isyarat palsu yang kerap di pasaran yang berbeza
  2. Tetapan parameter yang tidak betul boleh menyebabkan isyarat tertunda atau sensitiviti yang berlebihan
  3. Garis batasan trend mungkin tidak menyesuaikan dengan cepat di pasaran yang tidak menentu
  4. Strategi bergantung pada pengiraan data sejarah, berpotensi mengehadkan tindak balas terhadap peristiwa pasaran tiba-tiba

Arahan Pengoptimuman Strategi

  1. Memperkenalkan penunjuk turun naik untuk penyesuaian faktor pembetulan dinamik
  2. Melaksanakan mekanisme pengiktirafan keadaan pasaran untuk penyesuaian parameter
  3. Membangunkan sistem pengoptimuman parameter adaptif sendiri
  4. Tambah modul analisis jumlah untuk meningkatkan kebolehpercayaan isyarat
  5. Meningkatkan mekanisme kawalan risiko dengan ciri-ciri stop-loss dan pengurusan wang

Ringkasan

Strategi ini secara inovatif menggabungkan Hull Moving Averages dengan konsep nilai pantulan untuk mewujudkan sistem trend berikut yang responsif dan adaptif. Kekuatannya utama terletak pada menangkap dengan tepat titik perubahan trend sambil mengekalkan kemampuan beradaptasi melalui parameter yang boleh disesuaikan. Walaupun terdapat risiko yang melekat, pengoptimuman dan penyempurnaan berterusan menjadikan strategi ini alat perdagangan yang berpotensi stabil dan boleh dipercayai.


/*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



Berkaitan

Lebih lanjut