Estratégia de rompimento de momentum de Bollinger multiperíodo combinada com estratégia de média móvel de Hull

VWMA HMA BB MTF RSI
Data de criação: 2024-11-29 17:00:00 última modificação: 2024-11-29 17:00:00
cópia: 0 Cliques: 507
1
focar em
1617
Seguidores

Estratégia de rompimento de momentum de Bollinger multiperíodo combinada com estratégia de média móvel de Hull

Visão geral

A estratégia é um sistema de negociação baseado em análise de vários prazos, combinando a geração de sinais de negociação com as bandas de Bollinger, as médias móveis de Hull e as médias móveis ponderadas. A estratégia opera principalmente em um período de 1 hora, enquanto integra dados de mercado de três períodos de tempo de 5 minutos, 1 hora e 3 horas, confirmando oportunidades de negociação por meio de uma combinação de múltiplos indicadores técnicos.

Princípio da estratégia

A lógica central da estratégia baseia-se na confirmação cruzada de múltiplos indicadores técnicos. A estratégia monitora simultaneamente a relação entre o preço e os diferentes tipos de equilíbrio em vários períodos de tempo, incluindo a média móvel ponderada de 5 minutos (VWMA), a média móvel ponderada de 1 hora e a média móvel de 3 horas (HMA). Quando o preço está acima de todos os indicadores de períodos de tempo, o sistema gera um sinal múltipla quando o preço se move para cima; ao contrário, quando o preço está abaixo de todos os indicadores, o sistema gera um sinal de vazio quando o preço se move para baixo.

Vantagens estratégicas

  1. Análise de múltiplos períodos de tempo reduz o risco de falsas brechas e aumenta a confiabilidade dos sinais de negociação
  2. Definições de stop-loss dinâmicas para adaptar-se a diferentes cenários de mercado
  3. Gestão de posições baseada em títulos de conta assegura a racionalidade do uso dos fundos
  4. A escolha de vários mecanismos de saída aumenta a adaptabilidade da estratégia
  5. A interface gráfica fornece uma visualização clara dos sinais de transação para facilitar a análise e o julgamento
  6. Integração de vários indicadores técnicos avançados para melhorar a precisão das decisões de negociação

Risco estratégico

  1. O uso de múltiplos indicadores pode atrasar sinais de negociação
  2. Sinais de fuga falsos frequentes podem ocorrer em um mercado volátil
  3. A proporção fixa de stop loss pode não ser adequada para todos os cenários de mercado
  4. O processamento de dados com múltiplos períodos de tempo pode aumentar a complexidade da execução da estratégia
  5. Risco de deslizamento em mercados altamente voláteis

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

  1. Introdução de indicadores de volatilidade para ajustar dinamicamente os níveis de take-profit e stop-loss
  2. Adição de identificação de cenários de mercado, usando diferentes configurações de parâmetros em diferentes estados de mercado
  3. Mecanismos de filtragem de sinais optimizados para reduzir os danos causados por falsas brechas
  4. Adição de análise de volume de transações para aumentar a confiabilidade dos sinais de ruptura
  5. Desenvolver mecanismos de otimização de parâmetros adaptativos para aumentar a estabilidade da estratégia

Resumir

A estratégia, através da combinação de análise de múltiplos ciclos de tempo e múltiplos indicadores técnicos, constrói um sistema de negociação relativamente completo. A vantagem da estratégia reside na confiabilidade do sinal e na eficácia do gerenciamento de risco, mas também há problemas como atraso de sinal e otimização de parâmetros.

Código-fonte da estratégia
/*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("1H- 280, 2.7", overlay=true)


// Fetch the indicator values from different timeframes
vwma5 = request.security(syminfo.tickerid, "5", ta.wma(close, 233), lookahead = barmerge.lookahead_off)
vwma_hourly = request.security(syminfo.tickerid, "60", ta.wma(close, 89), lookahead = barmerge.lookahead_off)
hullma155_3h = request.security(syminfo.tickerid, "180", ta.hma(close, 155), lookahead = barmerge.lookahead_off)


// Calculate the deviation value
deviation = close * 0.032


// Initialize the signal variables
var float signalLine = na
var color lineColor = na


// Long Entry Conditions
longCondition_5min = close > vwma5
longCondition_hourly = close > vwma_hourly
longCondition_3h = close > hullma155_3h


// Short Entry Conditions
shortCondition_5min = close < vwma5
shortCondition_hourly = close < vwma_hourly
shortCondition_3h = close < hullma155_3h


// Long Entry
if longCondition_5min and longCondition_hourly and longCondition_3h
    signalLine := close + deviation
    lineColor := color.rgb(0, 255, 0, 1)


// Short Entry
if shortCondition_5min and shortCondition_hourly and shortCondition_3h
    signalLine := close - deviation
    lineColor := color.rgb(255, 0, 0, 1)


// Plotting the connecting line
plot(signalLine, title="Signal Line", color=lineColor, linewidth=1, style=plot.style_line)


// Colorize the signal line
bgcolor(signalLine > close ? color.rgb(0, 255, 0, 99) : color.rgb(255, 0, 0, 99), transp=90)



// Strategy settings
useTPSL = input(true, "Use TP/SL for closing long positions?")
useDownbreakOutbreak = input(false, "Use Downbreak and Outbreak for closing positions?")
useM7FClosing = input(false, "Use M7F Signal for closing positions?")


length1 = input.int(280, minval=1)
src = input(close, title="Source")
mult = input.float(2.7, minval=0.001, maxval=50, title="StdDev")


basis = ta.vwma(src, length1)
dev = mult * ta.stdev(src, length1)
upper = basis + dev
lower = basis - dev


offset = input.int(0, "Offset", minval = -500, maxval = 500)


length2 = input.int(55, minval=1)
src2 = input(close, title="Source")
hullma = ta.wma(2 * ta.wma(src2, length2 / 2) - ta.wma(src2, length2), math.floor(math.sqrt(length2)))


hullmacrosslower = ta.crossover(hullma, lower)
hullmacrossupper = ta.crossunder(hullma, upper)


breakout = ta.crossover(ohlc4, upper)
breakdown = ta.crossunder(ohlc4, upper)
outbreak = ta.crossover(ohlc4, lower)
downbreak = ta.crossunder(ohlc4, lower)


// Calculate position size and leverage
margin_pct = 1
leverage = 1
position_size = strategy.equity * margin_pct
qty = position_size / close / leverage


// Define take profit and stop loss levels
take_profit = 0.14
stop_loss = 0.06


// Opening a long position
if breakout
    strategy.entry("Long", strategy.long, qty, limit=close*(1+take_profit), stop=close*(1-stop_loss))


// Opening a short position
if downbreak
    strategy.entry("Short", strategy.short, qty, limit=close*(1-take_profit), stop=close*(1+stop_loss))


// Closing positions based on chosen method
if useTPSL
    // Using TP/SL for closing long positions
    if strategy.position_size > 0 and breakdown
        strategy.close("Long", comment="Breakdown")
else if useDownbreakOutbreak
    // Using Downbreak and Outbreak for closing positions
    if strategy.position_size > 0 and (breakdown or downbreak)
        strategy.close("Long", comment="Breakdown")
    if strategy.position_size < 0 and (outbreak or downbreak)
        strategy.close("Short", comment="Outbreak")
else if useM7FClosing
    // Using M7F Signal for closing positions
    if strategy.position_size > 0 and (signalLine < close)
        strategy.close("Long", comment="M7F Signal")
    if strategy.position_size < 0 and (signalLine > close)
        strategy.close("Short", comment="M7F Signal")


// Plotting entry signals
plotshape(hullmacrosslower, title="High Bear Volatility", style=shape.arrowup, text="^^^^^", color=color.rgb(75, 202, 79), location=location.belowbar)
plotshape(hullmacrossupper, title="High Bull Volatility", style=shape.arrowdown, text="-----", color=color.rgb(215, 72, 72), location=location.abovebar)
plotshape(breakout ? 1 : na, title="Breakout", style=shape.arrowup, text="", color=color.rgb(75, 202, 79), location=location.belowbar, size=size.tiny)
plotshape(breakdown ? 1 : na, title="Breakdown", style=shape.arrowdown, text="", color=color.rgb(201, 71, 71), location=location.abovebar, size=size.tiny)
plotshape(outbreak ? 1 : na, title="Outbreak", style=shape.arrowup, text="", color=color.rgb(0, 110, 255), location=location.belowbar, size=size.tiny)
plotshape(downbreak ? 1 : na, title="Downbreak", style=shape.arrowdown, text="", color=color.rgb(255, 111, 0), location=location.abovebar, size=size.tiny)