Tài nguyên đang được tải lên... tải...

Chiến lược xác định xu hướng của EMA dựa trên trung bình động của Hull

Tác giả:ChaoZhang, Ngày: 2024-11-29 16:35:43
Tags:HMAEMAWMA

img

Tổng quan

Chiến lược này sử dụng tính chất phản chiếu của trung bình chuyển động Hull (HMA) để xác định xu hướng thị trường. Cốt lõi của chiến lược bao gồm tính toán sự khác biệt giữa trung bình chuyển động Hull ngắn hạn và dài hạn và sử dụng sự khác biệt phản chiếu này để dự đoán biến động giá. Thông qua các thông số tỷ lệ phần trăm có thể điều chỉnh, chiến lược có thể thích nghi với các khung thời gian giao dịch khác nhau, cung cấp các tín hiệu xác định xu hướng chính xác hơn.

Nguyên tắc chiến lược

Chiến lược sử dụng hai trung bình di chuyển Hull với thời gian 36 và 44 làm chỉ số cơ bản. Nó tính toán sự khác biệt tuyệt đối giữa hai trung bình di chuyển này và áp dụng tính toán phản xạ dựa trên hướng xu hướng hiện tại để có được giá trị phản xạ. Chiến lược cũng kết hợp Trung bình di chuyển cân nhắc (WMA) để tính toán các giá trị delta, sử dụng chéo giữa các giá trị delta và phản xạ để xác định các bước ngoặt xu hướng. Trong quá trình xác định xu hướng, chiến lược sử dụng một yếu tố điều chỉnh có thể điều chỉnh để kiểm soát độ nhạy của xu hướng đảo ngược.

Ưu điểm chiến lược

  1. Sử dụng trung bình di chuyển Hull để giảm sự chậm trễ thường liên quan đến trung bình di chuyển truyền thống
  2. Bao gồm các giá trị phản xạ để phát hiện chính xác hơn các điểm chuyển hướng xu hướng
  3. Tính năng các yếu tố điều chỉnh có thể điều chỉnh để tăng khả năng thích nghi
  4. Cải thiện độ tin cậy tín hiệu thông qua tính toán chênh lệch tuyệt đối
  5. Tích hợp các cơ chế kiểm soát rủi ro bao gồm điều chỉnh đường xu hướng năng động
  6. Bao gồm các thành phần trực quan hóa để đánh giá tình trạng thị trường trực quan

Rủi ro chiến lược

  1. Có thể tạo ra các tín hiệu sai thường xuyên trong các thị trường khác nhau
  2. Cài đặt tham số không chính xác có thể dẫn đến tín hiệu chậm hoặc độ nhạy quá mức
  3. Các đường giới hạn xu hướng có thể không điều chỉnh đủ nhanh trong các thị trường biến động
  4. Chiến lược dựa trên tính toán dữ liệu lịch sử, có khả năng hạn chế phản ứng với các sự kiện thị trường đột ngột

Hướng dẫn tối ưu hóa chiến lược

  1. Đưa ra các chỉ số biến động để điều chỉnh hệ số điều chỉnh động
  2. Thực hiện các cơ chế công nhận trạng thái thị trường để điều chỉnh các thông số
  3. Phát triển các hệ thống tối ưu hóa tham số tự điều chỉnh
  4. Thêm các mô-đun phân tích âm lượng để tăng độ tin cậy tín hiệu
  5. Cải thiện các cơ chế kiểm soát rủi ro với các tính năng dừng lỗ và quản lý tiền

Tóm lại

Chiến lược này kết hợp sáng tạo các trung bình chuyển động Hull với các khái niệm giá trị phản xạ để tạo ra một hệ thống theo xu hướng đáp ứng và thích nghi. Sức mạnh cốt lõi của nó nằm trong việc nắm bắt chính xác các bước ngoặt xu hướng trong khi duy trì khả năng thích nghi thông qua các thông số điều chỉnh.


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



Có liên quan

Thêm nữa