Strategi penentuan arah aliran EMA reflektif berdasarkan purata bergerak Hull

HMA EMA WMA
Tarikh penciptaan: 2024-11-29 16:35:43 Akhirnya diubah suai: 2024-11-29 16:35:43
Salin: 3 Bilangan klik: 493
1
fokus pada
1617
Pengikut

Strategi penentuan arah aliran EMA reflektif berdasarkan purata bergerak Hull

Gambaran keseluruhan

Strategi ini menilai trend pasaran dengan menggunakan ciri-ciri pantulan Hull Moving Average (HMA). Inti strategi ini adalah untuk mengira perbezaan antara Hull Moving Average jangka pendek dan jangka panjang, dan untuk meramalkan pergerakan harga melalui pantulan perbezaan ini. Dengan menetapkan parameter peratusan yang boleh disesuaikan, strategi ini dapat menyesuaikan diri dengan kitaran perdagangan yang berbeza, dan dengan itu memberikan isyarat penilaian trend yang lebih tepat.

Prinsip Strategi

Strategi ini menggunakan dua purata bergerak Hull dari 36 dan 44 kitaran sebagai petunjuk asas. Dengan mengira perbezaan mutlak antara kedua-dua purata bergerak ini, dan mengombinasikan arah trend semasa dengan perhitungan pantulan terhadap perbezaan, nilai pantulan akhirnya diperoleh. Strategi ini juga memperkenalkan purata bergerak berbobot ((WMA) untuk mengira nilai delta, dengan persilangan nilai delta ini dengan nilai pantulan untuk menentukan titik perubahan trend.

Kelebihan Strategik

  1. Menggunakan Hull Moving Average mengurangkan keterbelakangan daripada purata bergerak tradisional dan meningkatkan tindak balas strategi terhadap perubahan pasaran
  2. Memperkenalkan konsep nilai pantulan untuk menangkap titik perubahan trend dengan lebih tepat
  3. Faktor penyesuaian yang boleh disesuaikan direka bentuk untuk menjadikan strategi lebih beradaptasi
  4. Peningkatan kebolehpercayaan isyarat melalui pengiraan perbezaan mutlak
  5. Mengintegrasikan mekanisme kawalan risiko, termasuk penyesuaian dinamik garisan had trend
  6. Komponen visualisasi sistem untuk memudahkan peniaga menilai keadaan pasaran secara langsung

Risiko Strategik

  1. Sinyal palsu yang sering berlaku dalam pasaran pengurutan mendatar
  2. Tetapan parameter yang tidak betul boleh menyebabkan isyarat terlewat atau terlalu sensitif
  3. Dalam pasaran yang bergolak, garis batasan trend mungkin tidak dapat disesuaikan dalam masa yang tepat
  4. Strategi bergantung kepada data sejarah dan mungkin tidak bertindak balas dengan pantas terhadap kejadian pasaran yang tidak dijangka

Arah pengoptimuman strategi

  1. Pengenalan penunjuk kadar turun naik, faktor pembetulan penyesuaian dinamik, meningkatkan kemampuan strategi untuk menyesuaikan diri dengan keadaan pasaran
  2. Menambah mekanisme pengenalan keadaan pasaran, menggunakan parameter yang berbeza dalam keadaan pasaran yang berbeza
  3. Membangunkan sistem pengoptimuman parameter yang beradaptasi untuk menyesuaikan parameter secara dinamik
  4. Menambah modul analisis kuantiti lalu lintas untuk meningkatkan kebolehpercayaan isyarat
  5. Memperbaiki mekanisme kawalan risiko, menambah fungsi kawalan kerugian dan pengurusan wang

ringkaskan

Strategi ini secara inovatif menggabungkan Hull Moving Average dengan konsep Reflexive Value untuk membina sistem trend tracking yang responsif dan beradaptasi. Kelebihan utama strategi ini adalah keupayaannya untuk menangkap titik-titik perubahan trend dengan tepat, sambil memastikan kebolehgunaan strategi dalam pelbagai keadaan pasaran melalui parameter yang boleh disesuaikan. Walaupun terdapat beberapa risiko yang wujud, dengan pengoptimuman dan penyempurnaan berterusan, strategi ini dijangka menjadi alat perdagangan yang stabil dan boleh dipercayai.

Kod 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