Estratégia de combinação de múltiplos indicadores dinâmicos

ATR BB ST MA VWMA
Data de criação: 2025-04-01 10:12:19 última modificação: 2025-04-01 10:12:19
cópia: 4 Cliques: 294
2
focar em
319
Seguidores

Estratégia de combinação de múltiplos indicadores dinâmicos Estratégia de combinação de múltiplos indicadores dinâmicos

Visão geral

Este artigo descreve uma estratégia de negociação combinada com indicadores de Bollinger Bands e SuperTrend. A estratégia, através da integração de várias ferramentas de análise técnica, visa fornecer sinais de entrada e saída de mercado mais precisos, reduzindo o risco de negociação.

Princípio da estratégia

O núcleo da estratégia é composto por duas partes principais: os Bollinger Bands e o indicador SuperTrend.

  1. A parte de cálculo de Brin:
  • A linha de referência é calculada usando a média móvel configurável (MA)
  • Geração de trajetórias ascendentes e descendentes de acordo com o múltiplo da diferença padrão
  • Suporta vários tipos de médias móveis: média móvel simples (SMA), média móvel indexada (EMA), média móvel lisa (SMMA), média móvel ponderada (WMA) e média móvel ponderada por transação (VWMA)
  1. O blogue “SuperTrend” tem uma página no Facebook:
  • Calculação de Stop Losses usando o Intervalo de Variação Real Média (ATR)
  • Dinâmica de julgamento da direção da tendência do mercado
  • Geração de sinais de compra e venda de acordo com as mudanças de tendência

Vantagens estratégicas

  1. Combinação de múltiplos indicadores: melhorar a precisão do sinal através da combinação de bandas de Bryn e super tendências
  2. Configuração flexível: tipos, parâmetros e métodos de cálculo de médias móveis personalizáveis
  3. Paradas dinâmicas: mecanismos de paradas baseados em ATR controlam o risco de forma eficaz
  4. Reforço visual: fornece preenchimento de status de tendência e etiquetas de sinal
  5. Gerenciamento de risco: configuração de limites de gerenciamento de posição percentual e de negociação em pirâmide

Risco estratégico

  1. Sensibilidade de parâmetros: os parâmetros podem precisar de ajustes frequentes em diferentes cenários de mercado
  2. Limites de retrospectiva: o desempenho histórico dos dados não representa o desempenho futuro do mercado
  3. Risco de troca de posição: troca frequente de posição pode aumentar os custos de transação
  4. Atraso de indicadores: indicadores técnicos apresentam um certo atraso de sinal

Direção de otimização da estratégia

  1. Introdução de parâmetros de otimização dinâmica de algoritmos de aprendizado de máquina
  2. Adição de condições de filtragem adicionais, como confirmação de volume de transação
  3. Desenvolvimento de mecanismos de verificação de múltiplos quadros temporais
  4. Otimização do módulo de gestão de risco, introdução de estratégias de controle de posição mais refinadas

Resumir

É uma estratégia de negociação que combina múltiplos indicadores dinâmicos, fornecendo um sistema de sinais de negociação relativamente abrangente por meio de uma combinação de bandas de Brin e super-trends. O núcleo da estratégia é equilibrar a precisão do sinal e a gestão de risco, mas ainda precisa ser continuamente otimizada e adaptada a diferentes condições de mercado.

Código-fonte da estratégia
/*backtest
start: 2024-04-01 00:00:00
end: 2025-03-31 00:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Combined BB & New SuperTrend Strategy", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, pyramiding=0)

//============================
// Bollinger Bands Parameters
//============================
lengthBB   = input.int(20, minval=1, title="BB Length")
maType     = input.string("SMA", "BB Basis MA Type", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
srcBB      = input(close, title="BB Source")
multBB     = input.float(2.0, minval=0.001, maxval=50, title="BB StdDev Multiplier")
offsetBB   = input.int(0, title="BB Offset", minval=-500, maxval=500)

// Moving average function based on chosen type
ma(source, length, _type) =>
    switch _type
        "SMA"         => ta.sma(source, length)
        "EMA"         => ta.ema(source, length)
        "SMMA (RMA)"  => ta.rma(source, length)
        "WMA"         => ta.wma(source, length)
        "VWMA"        => ta.vwma(source, length)

// Bollinger Bands calculations
basis   = ma(srcBB, lengthBB, maType)
dev     = multBB * ta.stdev(srcBB, lengthBB)
upperBB = basis + dev
lowerBB = basis - dev

// Plot Bollinger Bands
plot(basis, title="BB Basis", color=color.blue, offset=offsetBB)
p1 = plot(upperBB, title="BB Upper", color=color.red, offset=offsetBB)
p2 = plot(lowerBB, title="BB Lower", color=color.green, offset=offsetBB)
fill(p1, p2, title="BB Fill", color=color.new(color.blue, 90))

//============================
// New SuperTrend Parameters & Calculations
// (Based on the new script you provided)
//============================
st_length         = input.int(title="ATR Period", defval=22)
st_mult           = input.float(title="ATR Multiplier", step=0.1, defval=3)
st_src            = input.source(title="SuperTrend Source", defval=hl2)
st_wicks          = input.bool(title="Take Wicks into Account?", defval=true)
st_showLabels     = input.bool(title="Show Buy/Sell Labels?", defval=true)
st_highlightState = input.bool(title="Highlight State?", defval=true)

// Calculate ATR component for SuperTrend
st_atr = st_mult * ta.atr(st_length)

// Price selection based on wicks option
st_highPrice = st_wicks ? high : close
st_lowPrice  = st_wicks ? low  : close
st_doji4price = (open == close and open == low and open == high)

// Calculate SuperTrend stop levels
st_longStop = st_src - st_atr
st_longStopPrev = nz(st_longStop[1], st_longStop)
if st_longStop > 0
    if st_doji4price
        st_longStop := st_longStopPrev
    else
        st_longStop := (st_lowPrice[1] > st_longStopPrev ? math.max(st_longStop, st_longStopPrev) : st_longStop)
else
    st_longStop := st_longStopPrev

st_shortStop = st_src + st_atr
st_shortStopPrev = nz(st_shortStop[1], st_shortStop)
if st_shortStop > 0
    if st_doji4price
        st_shortStop := st_shortStopPrev
    else
        st_shortStop := (st_highPrice[1] < st_shortStopPrev ? math.min(st_shortStop, st_shortStopPrev) : st_shortStop)
else
    st_shortStop := st_shortStopPrev

// Determine trend direction: 1 for bullish, -1 for bearish
var int st_dir = 1
st_dir := st_dir == -1 and st_highPrice > st_shortStopPrev ? 1 : st_dir == 1 and st_lowPrice < st_longStopPrev ? -1 : st_dir

// Define colors for SuperTrend
st_longColor  = color.green
st_shortColor = color.red

// Plot SuperTrend stops
st_longStopPlot  = plot(st_dir == 1 ? st_longStop : na, title="Long Stop", style=plot.style_line, linewidth=2, color=st_longColor)
st_shortStopPlot = plot(st_dir == -1 ? st_shortStop : na, title="Short Stop", style=plot.style_line, linewidth=2, color=st_shortColor)

// Generate SuperTrend signals based on direction change
st_buySignal  = st_dir == 1 and st_dir[1] == -1
st_sellSignal = st_dir == -1 and st_dir[1] == 1

// Optionally plot labels for buy/sell signals
if st_buySignal and st_showLabels
    label.new(bar_index, st_longStop, "Buy", style=label.style_label_up, color=st_longColor, textcolor=color.white, size=size.tiny)
if st_sellSignal and st_showLabels
    label.new(bar_index, st_shortStop, "Sell", style=label.style_label_down, color=st_shortColor, textcolor=color.white, size=size.tiny)

// Fill the state area (optional visual enhancement)
st_midPricePlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=1, display=display.none)
st_longFillColor  = st_highlightState ? (st_dir == 1 ? st_longColor : na) : na
st_shortFillColor = st_highlightState ? (st_dir == -1 ? st_shortColor : na) : na
fill(st_midPricePlot, st_longStopPlot, title="Long State Filling", color=st_longFillColor)
fill(st_midPricePlot, st_shortStopPlot, title="Short State Filling", color=st_shortFillColor)

//============================
// Trading Logic
//============================

// When a bullish reversal occurs, close any short position before entering long.
if st_buySignal
    strategy.close("Short")
    strategy.entry("Long", strategy.long)

// When a bearish reversal occurs, close any long position before entering short.
if st_sellSignal
    strategy.close("Long")
    strategy.entry("Short", strategy.short)

// Exit conditions using Bollinger Bands:
// - For a long position: exit if price reaches (or exceeds) the upper Bollinger Band.
// - For a short position: exit if price reaches (or falls below) the lower Bollinger Band.
if strategy.position_size > 0 and close >= upperBB
    strategy.close("Long", comment="Exit Long via BB Upper")
if strategy.position_size < 0 and close <= lowerBB
    strategy.close("Short", comment="Exit Short via BB Lower")