Estrategia de sincronización de indicadores duales de volatilidad y impulso de súper tendencia


Fecha de creación: 2024-02-04 15:53:48 Última modificación: 2024-02-04 15:53:48
Copiar: 0 Número de Visitas: 598
1
Seguir
1617
Seguidores

Estrategia de sincronización de indicadores duales de volatilidad y impulso de súper tendencia

Descripción general

La estrategia combina el indicador de tendencia y la teoría de las ondas de Elliott para construir una robusta herramienta de negociación técnica. Utiliza análisis de tendencias en múltiples niveles para proporcionar una visión más completa del mercado, que puede capturar el cambio de tendencia potencial del mercado temprano y los cambios importantes en los precios.

Principio de estrategia

La idea central está en su enfoque de múltiples niveles:

  1. 4 indicadores hipertransientes, cada uno con diferentes ATR y multiplicadores, para juzgar tendencias desde el corto hasta el largo plazo
  2. A través de la fusión de indicadores, se puede encontrar una señal robusta de hacer más y hacer menos.
  3. Se refiere al método de reconocimiento de patrones de las ondas de Elliott para identificar patrones similares de comportamiento del mercado y confirmar las señales de negociación

De esta manera, se utilizan varios indicadores y se añade el reconocimiento de patrones, lo que hace que la estrategia sea más robusta.

Análisis de las ventajas

  1. Diseño multi-indicador para un juicio integral
  2. La teoría de las ondas inspira estabilidad en la identificación de patrones
  3. Ajuste de dirección en tiempo real para adaptarse a los cambios en el mercado
  4. Parámetros configurables para diferentes variedades y períodos de tiempo

Análisis de riesgos

  1. La configuración de los parámetros depende de la experiencia y necesita ajustes para determinar la mejor combinación de parámetros
  2. El diseño multi-indicador es más complejo y aumenta la carga de cálculo
  3. No se puede evitar completamente la generación de señales erróneas

Se pueden determinar los parámetros óptimos gradualmente mediante optimización de parámetros; la adopción de la computación en la nube para mejorar el rendimiento del cálculo; la configuración de stop loss para controlar el riesgo.

Dirección de optimización

Se puede optimizar en los siguientes aspectos:

  1. Añadir módulos de ajuste de parámetros de adaptación para ajustar los parámetros de forma dinámica según las condiciones del mercado
  2. Agrega modelos de aprendizaje automático para ayudar a determinar la fiabilidad de las señales de negociación
  3. Determinar el patrón del mercado combinado con factores externos, como indicadores de sentimiento y eventos noticiosos.
  4. Soporte para múltiples variedades de plantillas de parámetros, reduciendo el trabajo de prueba

Esto hará que los parámetros de la estrategia sean más inteligentes, los juicios más precisos y las aplicaciones más fáciles.

Resumir

La integración de la estrategia tiene en cuenta las dos dimensiones de tendencia y modelo, garantizando la solidez de los juicios y aumentando la flexibilidad de la estrategia. La configuración de múltiples indicadores y parámetros garantiza la aplicabilidad en todo el mercado.

Código Fuente de la Estrategia
/*backtest
start: 2024-01-27 00:00:00
end: 2024-02-03 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Elliott's Quadratic Momentum - Strategy [presentTrading]",shorttitle = "EQM Strategy [presentTrading]", overlay=true )

// Inputs for selecting trading direction
tradingDirection = input.string("Both", "Select Trading Direction", options=["Long", "Short", "Both"])


// SuperTrend Function
supertrend(src, atrLength, multiplier) =>
    atr = ta.atr(atrLength)
    up = hl2 - (multiplier * atr)
    dn = hl2 + (multiplier * atr)
    trend = 1
    trend := nz(trend[1], 1)
    up := src > nz(up[1], 0) and src[1] > nz(up[1], 0) ?   math.max(up, nz(up[1], 0)) : up
    dn := src < nz(dn[1], 0) and src[1] < nz(dn[1], 0) ? math.min(dn, nz(dn[1], 0)) : dn
    trend := src > nz(dn[1], 0) ?  1 : src < nz(up[1], 0)? -1 : nz(trend[1], 1)
    [up, dn, trend]

// Inputs for SuperTrend settings
atrLength1 = input(7, title="ATR Length for SuperTrend 1")
multiplier1 = input(4.0, title="Multiplier for SuperTrend 1")
atrLength2 = input(14, title="ATR Length for SuperTrend 2")
multiplier2 = input(3.618, title="Multiplier for SuperTrend 2")
atrLength3 = input(21, title="ATR Length for SuperTrend 3")
multiplier3 = input(3.5, title="Multiplier for SuperTrend 3")
atrLength4 = input(28, title="ATR Length for SuperTrend 3")
multiplier4 = input(3.382, title="Multiplier for SuperTrend 3")

// Calculate SuperTrend
[up1, dn1, trend1] = supertrend(close, atrLength1, multiplier1)
[up2, dn2, trend2] = supertrend(close, atrLength2, multiplier2)
[up3, dn3, trend3] = supertrend(close, atrLength3, multiplier3)
[up4, dn4, trend4] = supertrend(close, atrLength4, multiplier4)


// Entry Conditions based on SuperTrend and Elliott Wave-like patterns
longCondition = trend1 == 1 and trend2 == 1 and trend3 == 1 and trend4 == 1
shortCondition = trend1 == -1 and trend2 == -1 and trend3 == -1 and trend4 == - 1

// Strategy Entry logic based on selected trading direction
if tradingDirection == "Long" or tradingDirection == "Both"
    if longCondition
        strategy.entry("Long", strategy.long)
        // [Any additional logic for long entry]

if tradingDirection == "Short" or tradingDirection == "Both"
    if shortCondition
        strategy.entry("Short", strategy.short)
        // [Any additional logic for short entry]


// Exit conditions - Define your own exit strategy
// Example: Exit when any SuperTrend flips
if trend1 != trend1[1] or trend2 != trend2[1] or trend3 != trend3[1] or trend4 != trend4[1] 
    strategy.close_all()

// Function to apply gradient effect
gradientColor(baseColor, length, currentBar) =>
    var color res = color.new(baseColor, 100)
    if currentBar <= length
        res := color.new(baseColor, int(100 * currentBar / length))
    res

// Apply gradient effect
color1 = gradientColor(color.blue, atrLength1, bar_index % atrLength1)
color4 = gradientColor(color.blue, atrLength4, bar_index % atrLength3)


// Plot SuperTrend with gradient for upward trend
plot1Up = plot(trend1 == 1 ? up1 : na, color=color1, linewidth=1, title="SuperTrend 1 Up")
plot4Up = plot(trend4 == 1 ? up4 : na, color=color4, linewidth=1, title="SuperTrend 3 Up")

// Plot SuperTrend with gradient for downward trend
plot1Down = plot(trend1 == -1 ? dn1 : na, color=color1, linewidth=1, title="SuperTrend 1 Down")
plot4Down = plot(trend4 == -1 ? dn4 : na, color=color4, linewidth=1, title="SuperTrend 3 Down")

// Filling the area between the first and third SuperTrend lines for upward trend
fill(plot1Up, plot4Up, color=color.new(color.green, 80), title="SuperTrend Upward Band")

// Filling the area between the first and third SuperTrend lines for downward trend
fill(plot1Down, plot4Down, color=color.new(color.red, 80), title="SuperTrend Downward Band")