ハル移動平均に基づく反射EMAトレンド決定戦略

HMA EMA WMA
作成日: 2024-11-29 16:35:43 最終変更日: 2024-11-29 16:35:43
コピー: 3 クリック数: 493
1
フォロー
1617
フォロワー

ハル移動平均に基づく反射EMAトレンド決定戦略

概要

この戦略は,ハル移動平均 ((HMA)) の反射特性を適用して市場動向を判断する.戦略の核心は,短期と長期のハル移動平均の間の差値を計算し,この差の反射値を使用して価格の動きを予測する.調整可能なパーセントパラメータを設定することによって,戦略は,異なる取引周期に適応することができ,その結果,より正確なトレンド判断信号を提供します.

戦略原則

策略は,36周期と44周期の2つのハル移動平均を基本指標として採用している.この2つの移動平均の間の絶対差を計算し,現在のトレンド方向と組み合わせた差に対する反射計算を行うことで,最終的に反射値が得られる.策略はまた,重力移動平均 (WMA) を導入して,デルタ値を計算し,このデルタ値と反射値の交差によってトレンドの転換点を決定する.傾向判断の過程で,策略は,トレンドの反転の破裂の感性を制御するために調整可能な修正因子を設定している.価格が予測されるトレンドラインの限界を突破すると,策略は,相応の取引信号を発信する.

戦略的優位性

  1. ハル移動平均を使用することで,従来の移動平均の遅れを軽減し,市場変化に対する戦略の反応のスピードを向上させます.
  2. トレンドの転換点をより正確に捉えるため,反射値の概念を導入しました.
  3. 調整可能な修正因子が設計され,戦略がより適応できるように
  4. 絶対差値の計算により信号の信頼性が向上
  5. トレンド制限ラインの動的調整を含むリスク制御の統合
  6. システム自体の可視化コンポーネントで,トレーダーが市場状況を直感的に判断できるように

戦略リスク

  1. 横軸整理市場で頻繁に発生する偽信号
  2. パラメータを正しく設定しない場合,信号が遅延または過度に敏感になる可能性があります.
  3. トレンド制限ラインは,急激に波動する市場では,時宜に調整できない可能性があります.
  4. 戦略は過去のデータに依拠し,市場の突発的な出来事に対して迅速に反応できない

戦略最適化の方向性

  1. 波動性指標の導入,動的調整修正因子,市場状況への戦略の適応性の向上
  2. 市場状況の識別メカニズムを追加し,異なる市場環境で異なるパラメータ設定を採用
  3. パラメータの動的調整を実現する自己適応的なパラメータ最適化システムの開発
  4. 交信量分析モジュールを追加し,信号の信頼性を向上させる
  5. リスク管理の改善,損失防止と資金管理の強化

要約する

この戦略は,Hull移動平均と反射値の概念を革新的な方法で組み合わせることで,反応的,適応性の高いトレンド追跡システムを構築しています.戦略の核心的な優点は,トレンドの転換点を正確に捕捉する能力であり,同時に,調整可能なパラメータ設定により,異なる市場環境下での戦略の適用性を保証しています.いくつかの固有のリスクがあるものの,継続的な最適化と改善により,この戦略は,安定した信頼性の高い取引ツールになる可能性があります.

ストラテジーソースコード
/*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