리소스 로딩... 로딩...

Hull 이동평균에 기초한 EMA 트렌드 결정 전략

저자:차오장, 날짜: 2024-11-29 16:35:43
태그:HMAEMAWMA

img

전반적인 설명

이 전략은 시장 트렌드를 결정하기 위해 헐 이동 평균 (HMA) 의 반사 특성을 활용합니다. 전략의 핵심은 단기 및 장기적인 헐 이동 평균의 차이를 계산하고 이러한 반사된 차이를 사용하여 가격 움직임을 예측하는 것입니다. 조정 가능한 비율 매개 변수를 통해 전략은 다른 거래 시간 틀에 적응하여 더 정확한 트렌드 결정 신호를 제공합니다.

전략 원칙

이 전략은 기준 지표로 기간이 36과 44인 두 개의 헐 이동 평균을 사용한다. 이 두 이동 평균 사이의 절대 차이를 계산하고 반영값을 얻기 위해 현재 트렌드 방향에 기반한 반사 계산을 적용한다. 이 전략은 또한 델타 값을 계산하기 위해 밸런트와 반사값 사이의 교차점을 사용하여 트렌드 전환점을 식별하기 위해 델타 값을 계산하기 위해 가중 이동 평균 (WMA) 을 통합한다. 트렌드 결정 중에, 전략은 트렌드 반전 감수성을 제어하기 위해 조정 가능한 수정 요인을 사용합니다. 가격은 미리 설정된 트렌드 제한선을 넘어서면 거래 신호가 생성된다.

전략적 장점

  1. 일반적으로 전통적인 이동 평균과 관련된 지연을 줄이기 위해 홀 이동 평균을 사용합니다.
  2. 트렌드 전환점을 더 정확하게 탐지하기 위해 반사 값을 포함합니다.
  3. 특징 조정 가능한 수정 요인 향상 적응력
  4. 절대 차이 계산을 통해 신호 신뢰성을 향상시킵니다
  5. 동적 트렌드 라인 조정을 포함한 위험 관리 메커니즘을 통합합니다.
  6. 직관적인 시장 상태 평가를위한 시각화 구성 요소를 포함합니다.

전략 위험

  1. 다양한 시장에서 자주 잘못된 신호를 생성 할 수 있습니다.
  2. 부적절한 매개 변수 설정은 신호 지연 또는 과도한 감수성으로 이어질 수 있습니다.
  3. 변동성 시장에서 트렌드 제한 라인은 충분히 빠르게 조정되지 않을 수 있습니다.
  4. 전략은 역사적 데이터 계산에 의존하고 있습니다. 갑작스러운 시장 이벤트에 대한 대응을 제한할 수 있습니다.

전략 최적화 방향

  1. 동적 교정 요인 조정에 대한 변동성 지표를 도입
  2. 매개 변수 적응을 위한 시장 상태 인식 메커니즘을 구현
  3. 자율 적응 매개 변수 최적화 시스템을 개발
  4. 신호 신뢰성을 높이기 위해 볼륨 분석 모듈을 추가
  5. 스톱 로스 및 자금 관리 기능을 갖춘 리스크 제어 메커니즘을 개선

요약

이 전략은 혁신적으로 헐 이동 평균을 반영 가치 개념과 결합하여 반응적이고 적응력 있는 트렌드 추적 시스템을 만듭니다. 그것의 핵심 강점은 조정 가능한 매개 변수를 통해 적응력을 유지하면서 트렌드 전환점을 정확하게 포착하는 데 있습니다. 내재적인 위험이 존재하지만 지속적인 최적화와 정교화는이 전략을 잠재적으로 안정적이고 신뢰할 수있는 거래 도구로 만듭니다.


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



관련

더 많은