Estratégia de temporização de indicador duplo de volatilidade de momentum de super tendência


Data de criação: 2024-02-04 15:53:48 última modificação: 2024-02-04 15:53:48
cópia: 0 Cliques: 598
1
focar em
1617
Seguidores

Estratégia de temporização de indicador duplo de volatilidade de momentum de super tendência

Visão geral

A estratégia combina indicadores de tendência e a teoria das ondas de Elliott para construir uma ferramenta de negociação técnica robusta. Ela usa análise de tendências em vários níveis para fornecer uma visão mais abrangente do mercado, podendo capturar o potencial de reversão de tendências e mudanças importantes de preços no mercado.

Princípio da estratégia

A ideia central é a sua abordagem em vários níveis:

  1. Utilizando 4 indicadores de hipertrend, cada um com diferentes ATRs e multiplicadores, para julgar tendências de curto a longo prazo
  2. A fusão de indicadores permite identificar sinais robustos de excesso ou falta de atividade.
  3. Refere-se ao método de identificação de padrões das ondas de Elliott para identificar padrões semelhantes de comportamento de mercado e confirmar sinais de negociação

Assim, além de utilizar vários indicadores, a identificação de padrões foi adicionada, tornando a estratégia mais robusta.

Análise de vantagens

  1. Design de múltiplos indicadores para um julgamento global
  2. Inspirado na teoria das ondas, o reconhecimento de padrões aumenta a estabilidade
  3. Ajustar a direção em tempo real e adaptar-se às mudanças do mercado
  4. Parâmetros configuráveis para diferentes variedades e períodos de tempo

Análise de Riscos

  1. A configuração de parâmetros depende da experiência e precisa de ajustes para determinar a melhor combinação de parâmetros
  2. O design de múltiplos indicadores é mais complexo, aumentando a carga computacional
  3. Não é possível evitar completamente a produção de sinais errados

Pode-se determinar os parâmetros ótimos através de otimização de parâmetros; A adoção de computação em nuvem aumenta a performance de computação; Configuração de stop loss para controlar o risco.

Direção de otimização

Otimizar o conteúdo pode ser feito de várias maneiras:

  1. Adição de módulo de ajuste de parâmetros de adaptação, ajustando dinamicamente os parâmetros de acordo com a situação do mercado
  2. Adição de modelos de aprendizagem de máquina para auxiliar na determinação da confiabilidade dos sinais de negociação
  3. Modelos de mercado combinados com fatores externos, como indicadores de sentimentos e eventos de notícias
  4. Suporte para vários modelos de parâmetros, reduzindo o trabalho de teste

Isso tornará os parâmetros de estratégia mais inteligentes, os julgamentos mais precisos e a aplicação mais fácil.

Resumir

A análise da estratégia considera as duas dimensões de tendência e modelo, garantindo a solidez do julgamento e aumentando a flexibilidade da estratégia. A configuração de vários indicadores e parâmetros garante a aplicabilidade em todo o mercado.

Código-fonte da estratégia
/*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")