資源の読み込みに... 荷物...

Hull移動平均値に基づく EMAの傾向決定戦略を反映した

作者: リン・ハーンチャオチャン,日付: 2024年11月29日 16:35:43
タグ:HMAエイマWMA

img

概要

この戦略は,市場動向を決定するためにハル移動平均値 (HMA) の反射特性を利用する.戦略の核は,短期および長期のハル移動平均値の違いを計算し,この反射された差を価格動向を予測するために使用する.調整可能なパーセントパラメータを通じて,戦略は異なる取引時間枠に適応し,より正確なトレンド決定信号を提供します.

戦略の原則

この戦略は,ベース指標として36と44の期間を持つ2つのハル移動平均を採用している.この2つの移動平均間の絶対差を計算し,反射値を得るために現在のトレンド方向に基づいて反射計算を適用する.この戦略は,デルタ値を計算するために重量移動平均 (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



関連性

もっと