
La estrategia de seguimiento de tendencias de ondas de múltiples marcos temporales es un sistema de seguimiento de tendencias de múltiples marcos temporales basado en el indicador WaveTrend. La estrategia está optimizada específicamente para los marcos temporales de 15 minutos y utiliza un método de alineación de marcos temporales de tres niveles: el WaveTrend de 240 minutos sirve como un filtro de tendencia macroeconómico, el WaveTrend de 30 minutos sirve para la confirmación de la dinámica y el WaveTrend de 15 minutos se encarga de la generación de señales.
El principio central de esta estrategia es el uso de la sinergia de los indicadores de WaveTrend en varios marcos de tiempo para identificar la dirección de la tendencia y los puntos de inflexión. El indicador de WaveTrend en sí mismo es un indicador técnico que mide el estado de sobrecompra y sobreventa de los precios mediante el cálculo de la relación entre el precio y su promedio móvil indicador (EMA) y luego combina el factor de volatilidad.
El proceso de implementación de la estrategia es el siguiente:
Primero, define la función WaveTrend, que calcula los dos valores principales (wt1 y wt2):
La estrategia consiste en aplicar el indicador WaveTrend en tres marcos de tiempo:
Condiciones de entrada:
El sistema de suspensión y salida de juego es un sistema complejo:
Las estrategias registran y rastrean el precio de entrada, los pilares de entrada y la rentabilidad máxima de cada operación, que se utilizan para ajustar dinámicamente el punto de salida.
Conjunto de marcos de tiempo múltiplesAl analizar el indicador WaveTrend en diferentes marcos de tiempo, la estrategia puede capturar la tendencia del mercado de manera más completa, reducir la interferencia de falsas señales y mejorar la precisión de las operaciones. El marco de tiempo bajo proporciona un punto de entrada preciso y el marco de tiempo alto asegura que la dirección de las operaciones coincida con la tendencia principal.
Mecanismo de detención de pérdidas dinámicasLa estrategia utiliza un triple sistema de protección contra pérdidas, que incluye pérdidas por ciento fijas, pérdidas de seguimiento basadas en ganancias y mecanismos de protección de la máxima ganancia. Esta estrategia de protección contra pérdidas compleja permite capturar al máximo los beneficios de la tendencia al mismo tiempo que protege el capital.
Sistema de retroalimentación visualLos puntos de entrada y salida de las operaciones se indican intuitivamente en el gráfico con las etiquetas de color ((🔴) y contienen información sobre los pilares para facilitar el análisis de retrospectiva y el reporte de operaciones.
Los parámetros son flexibles: La estrategia ofrece varios parámetros personalizables, incluyendo el porcentaje de seguimiento de los estancamientos, el porcentaje de seguimiento y el porcentaje máximo de retiro permitido, que el usuario puede ajustar según sus propias preferencias de riesgo y las condiciones del mercado.
La estructura del código es clara.: La estrategia adopta un diseño funcional, las partes de la lógica son claras, fáciles de entender y mantener, pero también son fáciles de optimizar y ampliar.
La respuesta a la reversión de la tendencia está rezagadaComo una estrategia de seguimiento de la tendencia, puede haber una reacción de retraso en los puntos de cambio de tendencia, lo que lleva a una mayor retroceso en el caso de una reversión. La solución es ajustar los parámetros de seguimiento de stop loss o agregar un indicador adicional de cambio de tendencia como ayuda.
Los mercados fluctuantes no están funcionando bien: En un entorno de mercado de corrección horizontal o de gran volatilidad, la estrategia puede generar falsas señales y paros frecuentes, lo que lleva a pérdidas continuas. Se recomienda activar la estrategia solo cuando se confirme que el mercado está en una tendencia evidente.
Sensibilidad de los parámetrosLa estrategia es muy sensible a la configuración de los parámetros de WaveTrend (n1 = 10, n2 = 21) y a los parámetros de stop loss. Los parámetros demasiado flojos pueden causar un stop loss demasiado tarde y los parámetros demasiado apretados pueden salir prematuramente de una tendencia favorable. Estos parámetros deben optimizarse a través de la retroalimentación histórica.
Riesgo de liquidez: El código utiliza de forma predeterminada el uso de la cantidad relativa de capital ((10%) para negociar, pero en mercados con baja liquidez, esto puede causar un aumento de puntos de deslizamiento o dificultad para negociar. El tamaño de la posición debe ajustarse según la liquidez de la variedad de negociación real.
Solicitud de dependencia de datos externosLa estrategia utiliza la función request.security (..) para obtener datos de marcos de tiempo más altos, lo que puede suponer un riesgo de retraso o de no disponibilidad de datos en algunas plataformas de negociación. Se debe asegurar que el entorno de negociación admita solicitudes de datos de marcos de tiempo múltiples.
Ajuste de parámetros dinámicos: La estrategia actual utiliza parámetros de WaveTrend y porcentajes de pérdidas fijos, se puede considerar ajustar estos parámetros de acuerdo con la volatilidad del mercado (como el ATR). Por ejemplo, aumentar la distancia de parada en entornos de alta volatilidad y endurecer los parámetros de parada en entornos de baja volatilidad para adaptarse a diferentes condiciones del mercado.
Filtrado de intensidad de tendenciaSe puede agregar ADX o indicadores similares para medir la fuerza de la tendencia, ejecutando operaciones solo cuando la fuerza de la tendencia supera un umbral específico, para evitar exceso de operaciones en mercados de tendencia débil o horizontal.
Optimización de las opciones de marcos de tiempoLas estrategias actuales utilizan marcos de tiempo de 15 minutos, 30 minutos y 60 minutos, para encontrar la combinación óptima de marcos de tiempo mediante el análisis de retroceso, o para ajustar los marcos de tiempo según las características de las diferentes variedades de operaciones.
Confirmación del volumen de la transacción: integrar los indicadores de volumen de transacciones en las condiciones de entrada, asegurando que la entrada se realice solo en una tendencia apoyada por el volumen de transacciones, y mejorar la calidad de la señal.
Mejoras en el mecanismo de salidaLa salida actual depende principalmente del deterioro de los estímulos, y se puede considerar la adición de objetivos de ganancias o señales de reversión basadas en el indicador WaveTrend en sí como condición de salida activa, en lugar de depender únicamente del deterioro pasivo.
Logística de gestión de posicionesLas estrategias actuales utilizan un porcentaje fijo de gestión de fondos, se puede considerar ajustar el tamaño de la posición de forma dinámica en función de la volatilidad o la intensidad de la señal, aumentar la posición en operaciones más seguras, reducir la apertura de riesgo en operaciones con mayor incertidumbre.
La estrategia de seguimiento de tendencias de ondas de marco temporal múltiple es un sistema de seguimiento de tendencias bien diseñado que capta efectivamente las tendencias del mercado y controla el riesgo a través de la sinergia de los indicadores de WaveTrend de marco temporal múltiple, combinado con un mecanismo de seguimiento de pérdidas flexible. La principal ventaja de la estrategia reside en su perspectiva integral del mercado y su método de gestión de riesgos dinámico, pero puede enfrentar desafíos en mercados de volatilidad.
/*backtest
start: 2024-07-07 00:00:00
end: 2024-11-28 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("WT-FLOW: MTF WaveTrend Trend-Follower", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// === WaveTrend Fonksiyonu ===
waveTrend(_src, _n1, _n2) =>
esa = ta.ema(_src, _n1)
d = ta.ema(math.abs(_src - esa), _n1)
ci = (_src - esa) / (0.015 * d)
wt1 = ta.ema(ci, _n2)
wt2 = ta.sma(wt1, 4)
[wt1, wt2]
// === Giriş Fiyatı ve Maksimum Kazanç Değişkenleri ===
var float longEntryPrice = na
var float shortEntryPrice = na
var float maxGainLong = 0.0
var float maxGainShort = 0.0
var int longEntryBar = na
var int shortEntryBar = na
var string currentPosition = ""
// === WT Değerlerini Al (Farklı Zaman Dilimleri) ===
var int n1 = 10
var int n2 = 21
ap = hlc3
[wt1_15, wt2_15] = waveTrend(ap, n1, n2)
[wt1_30, wt2_30] = request.security(syminfo.tickerid, "30", waveTrend(ap, n1, n2))
[wt1_60, wt2_60] = request.security(syminfo.tickerid, "60", waveTrend(ap, n1, n2))
// === Kullanıcı Girdileri: Trailing Stop Parametreleri ===
marginStopPerc = input.float(2.0, "Marjinal Stop (%)")
trailTriggerPerc = input.float(1.5, "Trailing Tetikleyici (%)")
trailFollowPerc = input.float(0.8, "Trailing Takip (%)")
trailMaxDropPerc = input.float(3.0, "Maksimum Düşüş (%)")
// === ATR için tr hesaplaması ===
tr = ta.tr(true)
// === Sinyal Koşulları ===
trendUp = wt1_30 > wt2_30
trendDown = wt1_30 < wt2_30
entryLong = ta.crossover(wt1_15, wt2_15) and wt1_15 > -60 and trendUp
entryShort = ta.crossunder(wt1_15, wt2_15) and wt1_15 < 20 and trendDown
// === Pozisyon Girişleri ===
if entryLong and currentPosition != "Long"
strategy.entry("Long", strategy.long)
longEntryPrice := close
maxGainLong := 0.0
longEntryBar := bar_index
currentPosition := "Long"
label.new(bar_index, high + 2 * tr, "🟢 Giriş Long #" + str.tostring(bar_index), style=label.style_label_up, color=color.green, textcolor=color.white)
if entryShort and currentPosition != "Short"
strategy.entry("Short", strategy.short)
shortEntryPrice := close
maxGainShort := 0.0
shortEntryBar := bar_index
currentPosition := "Short"
label.new(bar_index, low - 2 * tr, "🔴 Giriş Short #" + str.tostring(bar_index), style=label.style_label_down, color=color.red, textcolor=color.white)
// === Trailing Stop ve Marjinal Stop Seviyeleri ===
if currentPosition == "Long" and not na(longEntryPrice)
gainFromEntry = (close - longEntryPrice) / longEntryPrice * 100
maxGainLong := math.max(maxGainLong, gainFromEntry)
trailTriggerReached = gainFromEntry >= trailTriggerPerc
trailStop = close * (1 - trailFollowPerc / 100)
dropStop = longEntryPrice * (1 + (maxGainLong - trailMaxDropPerc) / 100)
finalStop = trailTriggerReached ? math.max(trailStop, dropStop) : longEntryPrice * (1 - marginStopPerc / 100)
if close <= finalStop
strategy.close("Long")
label.new(bar_index, low - 2 * tr, "❅ Çıkış Long #" + str.tostring(longEntryBar), style=label.style_label_down, color=color.red, textcolor=color.white)
longEntryPrice := na
longEntryBar := na
currentPosition := ""
if currentPosition == "Short" and not na(shortEntryPrice)
gainFromEntryShort = (shortEntryPrice - close) / shortEntryPrice * 100
maxGainShort := math.max(maxGainShort, gainFromEntryShort)
trailTriggerReachedShort = gainFromEntryShort >= trailTriggerPerc
trailStopShort = close * (1 + trailFollowPerc / 100)
dropStopShort = shortEntryPrice * (1 - (maxGainShort - trailMaxDropPerc) / 100)
finalStopShort = trailTriggerReachedShort ? math.min(trailStopShort, dropStopShort) : shortEntryPrice * (1 + marginStopPerc / 100)
if close >= finalStopShort
strategy.close("Short")
label.new(bar_index, high + 2 * tr, "❄ Çıkış Short #" + str.tostring(shortEntryBar), style=label.style_label_up, color=color.green, textcolor=color.white)
shortEntryPrice := na
shortEntryBar := na
currentPosition := ""