Estratégia avançada de negociação de tendências com base em Bandas de Bollinger e padrões de velas

BB ATR RR PSR MA SD WBR
Data de criação: 2024-11-27 14:18:33 última modificação: 2024-11-27 14:18:33
cópia: 1 Cliques: 413
1
focar em
1617
Seguidores

Estratégia avançada de negociação de tendências com base em Bandas de Bollinger e padrões de velas

Visão geral

Esta é uma estratégia de acompanhamento de tendências baseada na análise da forma de uma faixa de Bollinger com um gráfico de curvatura. A estratégia é baseada na observação da forma de um gráfico de curvatura quando o preço toca a faixa de Bollinger, combinado com a relação de taxa de um indicador de alta e baixa para determinar o possível ponto de reversão do mercado.

Princípio da estratégia

A lógica central da estratégia baseia-se nos seguintes elementos-chave: primeiro, determinar o alcance da oscilação dos preços através do cálculo de bolinhas de 20 ciclos; segundo, analisar o índice de um indicador de alta e baixa do gráfico de parâmetros quando o preço toca a faixa de bolinhas e, quando o índice ultrapassa o limiar definido, é visto como um potencial sinal de reversão; terceiro, estabelecer o ponto de parada por meio do cálculo dos pontos de suporte e resistência chave; e, finalmente, calcular a posição de cada transação com base em uma proporção fixa do total da conta (%) para a gestão dinâmica do risco. A estratégia também oferece várias opções de entrada, incluindo o preço de fechamento, o preço de abertura, o máximo e o mínimo do dia.

Vantagens estratégicas

  1. Controle de risco preciso: um modelo de gerenciamento de risco de proporção fixa, garantindo que as aberturas de risco de cada transação estejam dentro de limites controláveis
  2. Flexibilidade de entrada: oferece várias opções de preços de entrada para diferentes estilos de negociação
  3. Combinação de indicadores técnicos: Combinação de bandas de Boling com análise de morfologia de filtragem para aumentar a confiabilidade do sinal
  4. Parar de forma razoável: Parar de acordo com as leis de funcionamento do mercado, através da configuração de pontos de resistência de suporte crítico
  5. Gerenciamento de transações perfeito: Inclui mecanismos de vencimento de pedidos, evitando erros de operação causados por sinais de vencimento

Risco estratégico

  1. Risco de volatilidade rápida do mercado: a taxa de referência pode produzir falsos sinais em mercados com forte volatilidade
  2. Risco de gestão de fundos: o modelo de risco de proporção fixa pode levar a posições excessivas em casos de perdas contínuas
  3. Risco de configuração de stop loss: o cálculo da resistência de suporte pode não ser preciso em certas condições de mercado
  4. Dependência do ciclo de tempo: estratégias baseadas principalmente no nível da linha do sol, podendo perder oportunidades em menores prazos de tempo

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

  1. Introdução de indicadores de volume de transação: pode aumentar a confiabilidade do sinal, aumentando a análise de volume de transação na confirmação do sinal
  2. Mecanismos de parada de perda otimizados: considerar a introdução de parada dinâmica, ajustando automaticamente a distância de parada de acordo com a volatilidade do mercado
  3. Aumentar o filtro de cenário de mercado: adicionar indicadores de intensidade de tendência e ajustar os parâmetros de estratégia em diferentes cenários de mercado
  4. Melhorar a gestão de posições: considerar a introdução de mecanismos de gestão de posições dinâmicas, ajustando as aberturas de risco de acordo com a volatilidade do mercado
  5. Aumentar o filtro de tempo: um filtro de tempo pode ser adicionado para evitar a negociação em momentos de maior volatilidade do mercado

Resumir

A estratégia combina ferramentas clássicas de análise técnica com métodos modernos de gerenciamento de risco, construindo um sistema de negociação relativamente completo. Os principais benefícios da estratégia estão em seus rígidos controles de risco e mecanismos de entrada flexíveis, mas também exigem atenção às mudanças do ambiente de mercado e à validação da confiabilidade dos sinais em aplicações práticas.

Código-fonte da estratégia
/*backtest
start: 2024-01-01 00:00:00
end: 2024-11-26 00:00:00
period: 12h
basePeriod: 12h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Trade Entry Detector, based on Wick to Body Ratio when price tests Bollinger Bands", overlay=true, default_qty_type=strategy.fixed)

// Input for primary analysis time frame
timeFrame = "D"  // Daily time frame

// Bollinger Band settings
length = input.int(20, title="Bollinger Band Length", minval=1)
mult = input.float(2.0, title="Standard Deviation Multiplier", minval=0.1)
source = input(close, title="Source")

// Entry ratio settings
wickToBodyRatio = input.float(1.0, title="Minimum Wick-to-Body Ratio", minval=0)

// Order Fill Timing Option
fillOption = input.string("Daily Close", title="Order Fill Timing", options=["Daily Close", "Daily Open", "HOD", "LOD"])

// Account and risk settings
accountBalance = 100000  // Account balance in dollars
riskPercentage = 1.0     // Risk percentage per trade
riskAmount = (riskPercentage / 100) * accountBalance // Fixed 1% risk amount

// Request daily data for calculations
dailyHigh = request.security(syminfo.tickerid, timeFrame, high)
dailyLow = request.security(syminfo.tickerid, timeFrame, low)
dailyClose = request.security(syminfo.tickerid, timeFrame, close)
dailyOpen = request.security(syminfo.tickerid, timeFrame, open)

// Calculate Bollinger Bands on the daily time frame
dailyBasis = request.security(syminfo.tickerid, timeFrame, ta.sma(source, length))
dailyDev = mult * request.security(syminfo.tickerid, timeFrame, ta.stdev(source, length))
dailyUpperBand = dailyBasis + dailyDev
dailyLowerBand = dailyBasis - dailyDev

// Calculate the body and wick sizes on the daily time frame
dailyBodySize = math.abs(dailyOpen - dailyClose)
dailyUpperWickSize = dailyHigh - math.max(dailyOpen, dailyClose)
dailyLowerWickSize = math.min(dailyOpen, dailyClose) - dailyLow

// Conditions for a candle with an upper wick or lower wick that touches the Bollinger Bands
upperWickCondition = (dailyUpperWickSize / dailyBodySize >= wickToBodyRatio) and (dailyHigh > dailyUpperBand)
lowerWickCondition = (dailyLowerWickSize / dailyBodySize >= wickToBodyRatio) and (dailyLow < dailyLowerBand)

// Define the swing high and swing low for stop loss placement
var float swingLow = na
var float swingHigh = na

if (ta.pivothigh(dailyHigh, 5, 5))
    swingHigh := dailyHigh[5]

if (ta.pivotlow(dailyLow, 5, 5))
    swingLow := dailyLow[5]

// Determine entry price based on chosen fill option
var float longEntryPrice = na
var float shortEntryPrice = na

if lowerWickCondition
    longEntryPrice := fillOption == "Daily Close" ? dailyClose :
                      fillOption == "Daily Open" ? dailyOpen :
                      fillOption == "HOD" ? dailyHigh : dailyLow

if upperWickCondition
    shortEntryPrice := fillOption == "Daily Close" ? dailyClose :
                       fillOption == "Daily Open" ? dailyOpen :
                       fillOption == "HOD" ? dailyHigh : dailyLow

// Execute the long and short entries with expiration
var int longOrderExpiry = na
var int shortOrderExpiry = na

if not na(longEntryPrice)
    longOrderExpiry := bar_index + 2  // Order expires after 2 days

if not na(shortEntryPrice)
    shortOrderExpiry := bar_index + 2  // Order expires after 2 days

// Check expiration and execute orders
if (longEntryPrice and bar_index <= longOrderExpiry and high >= longEntryPrice)
    longStopDistance = close - nz(swingLow, close)
    longPositionSize = longStopDistance > 0 ? riskAmount / longStopDistance : na
    if (not na(longPositionSize))
        strategy.entry("Long", strategy.long, qty=longPositionSize)
    longEntryPrice := na  // Reset after entry

if (shortEntryPrice and bar_index <= shortOrderExpiry and low <= shortEntryPrice)
    shortStopDistance = nz(swingHigh, close) - close
    shortPositionSize = shortStopDistance > 0 ? riskAmount / shortStopDistance : na
    if (not na(shortPositionSize))
        strategy.entry("Short", strategy.short, qty=shortPositionSize)
    shortEntryPrice := na  // Reset after entry

// Exit logic: hit the opposing Bollinger Band
if (strategy.position_size > 0) // Long position
    strategy.exit("Exit Long", "Long", limit=dailyUpperBand)
else if (strategy.position_size < 0) // Short position
    strategy.exit("Exit Short", "Short", limit=dailyLowerBand)

if (strategy.position_size > 0) // Long position
    strategy.exit("Stop Loss Long", "Long", stop=swingLow)
else if (strategy.position_size < 0) // Short position
    strategy.exit("Stop Loss Short", "Short", stop=swingHigh)

// Plot daily Bollinger Bands and levels on the chosen time frame
plot(dailyUpperBand, color=color.blue, linewidth=1, title="Daily Upper Bollinger Band")
plot(dailyLowerBand, color=color.blue, linewidth=1, title="Daily Lower Bollinger Band")
plot(dailyBasis, color=color.gray, linewidth=1, title="Daily Middle Bollinger Band")