O recurso está a ser carregado... Carregamento...

O valor da posição em risco deve ser calculado de acordo com o método de classificação da posição em risco.

Autora:ChaoZhang, Data: 2024-12-11 14:52:24
Tags:BBATRMASMAEMASMMAWMAVWMAS.D.

img

Resumo

Esta estratégia é um sistema de negociação inteligente baseado em bandas de Bollinger e indicadores ATR, incorporando mecanismos de captação de lucro e stop-loss de vários níveis. A estratégia entra principalmente em posições longas identificando sinais de reversão perto da banda de Bollinger inferior e gerencia o risco usando paradas de tração dinâmicas. O sistema é projetado com uma meta de lucro de 20% e um nível de stop-loss de 12%, ao mesmo tempo em que incorpora paradas de tração dinâmicas baseadas em ATR para proteger os lucros, permitindo que as tendências tenham espaço suficiente para se desenvolver.

Princípios de estratégia

A lógica do núcleo inclui vários componentes-chave:

  1. Condições de entrada: Requer uma vela verde que siga uma vela vermelha que toque na banda inferior de Bollinger, indicando normalmente um sinal de reversão potencial.
  2. Seleção de média móvel: Suporta vários tipos (SMA, EMA, SMMA, WMA, VWMA), com SMA por defeito de 20 períodos.
  3. Parâmetros de Bollinger Bands: utiliza 1,5 desvios padrão para largura de banda, mais conservadores do que os tradicionais 2 desvios padrão.
  4. Mecanismo de captação de lucros: Fixa um objectivo inicial de lucro de 20%.
  5. Mecanismo de stop-loss: Implementa um stop-loss fixo de 12% para proteger o capital.
  6. Paragem dinâmica:
    • Ativar o ATR trailing stop após atingir a meta de lucro
    • Inicia a parada de tração dinâmica ATR após tocar a banda de Bollinger superior
    • Utiliza o multiplicador ATR para ajustar dinamicamente a distância de parada de atraso

Vantagens da estratégia

  1. Controlo de riscos a vários níveis:
    • Previsão de prejuízo
    • Previsão de prejuízo
    • O Bollinger Band superior e a parada dinâmica desencadeada proporcionam uma proteção adicional
  2. A selecção flexível das médias móveis permite a adaptação às diferentes condições de mercado
  3. A parada de tração dinâmica baseada no ATR ajusta-se automaticamente com base na volatilidade do mercado, evitando saídas prematuras
  4. Os sinais de entrada combinam padrões de preços e indicadores técnicos, melhorando a fiabilidade do sinal
  5. Apoia a gestão de posições e a definição de custos de transacção mais próximas das condições reais de negociação

Riscos estratégicos

  1. Os mercados que oscilam rapidamente podem conduzir a negociações frequentes, aumentando os custos de transacção
  2. O stop-loss fixo de 12% pode ser demasiado restrito em mercados de alta volatilidade
  3. Os sinais Bollinger Bands podem gerar sinais falsos em mercados de tendência
  4. O ATR trailing stop pode resultar em maiores drawdowns durante uma forte volatilidade Medidas de atenuação:
  • Uso recomendado em períodos de tempo mais longos (30 minutos a 1 hora)
  • Ajustar a percentagem de stop-loss com base nas características específicas do instrumento
  • Considere adicionar filtros de tendência para reduzir os falsos sinais
  • Ajustar dinamicamente o multiplicador ATR para diferentes ambientes de mercado

Orientações para a otimização da estratégia

  1. Optimização de entrada:
  • Adicionar mecanismo de confirmação de volume
  • Incorporar indicadores de força de tendência para filtragem de sinais
  • Considere adicionar indicadores de impulso para confirmação
  1. Optimização de stop-loss:
  • Conversão de stop-loss fixo para stop dinâmico baseado em ATR
  • Desenvolver um algoritmo adaptativo de stop-loss
  • Ajustar dinamicamente a distância de parada com base na volatilidade
  1. Optimização da média móvel:
  • Teste diferentes combinações de períodos
  • Métodos do período adaptativo da investigação
  • Considere usar a ação do preço em vez de médias móveis
  1. Optimização da gestão de posições:
  • Desenvolver um sistema de dimensionamento de posições baseado na volatilidade
  • Implementar mecanismos de entrada e saída em escala
  • Adicionar controlo da exposição ao risco

Resumo

A estratégia constrói um sistema de negociação de vários níveis usando Bandas de Bollinger e indicadores ATR, empregando métodos de gerenciamento dinâmicos para entrada, stop-loss e lucro. Seus pontos fortes estão em seu sistema abrangente de controle de risco e capacidade de se adaptar à volatilidade do mercado. Através das direções de otimização sugeridas, a estratégia tem espaço significativo para melhoria. É particularmente adequado para uso em prazos maiores e pode ajudar os investidores que detêm ativos de qualidade a otimizar seus tempos de entrada e saída.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Demo GPT - Bollinger Bands Strategy with Tightened Trailing Stops", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_value=0.1, slippage=3)

// Input settings
length = input.int(20, minval=1)
maType = input.string("SMA", "Basis MA Type", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
src = input(close, title="Source")
mult = 1.5 // Standard deviation multiplier set to 1.5
offset = input.int(0, "Offset", minval=-500, maxval=500)
atrMultiplier = input.float(1.0, title="ATR Multiplier for Trailing Stop", minval=0.1) // ATR multiplier for trailing stop

// Time range filters
start_date = input(timestamp("2018-01-01 00:00"), title="Start Date")
end_date = input(timestamp("2069-12-31 23:59"), title="End Date")
in_date_range = true

// Moving average function
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)

// Calculate Bollinger Bands
basis = ma(src, length, maType)
dev = mult * ta.stdev(src, length)
upper = basis + dev
lower = basis - dev

// ATR Calculation
atr = ta.atr(length) // Use ATR for trailing stop adjustments

// Plotting
plot(basis, "Basis", color=#2962FF, offset=offset)
p1 = plot(upper, "Upper", color=#F23645, offset=offset)
p2 = plot(lower, "Lower", color=#089981, offset=offset)
fill(p1, p2, title="Background", color=color.rgb(33, 150, 243, 95))

// Candle color detection
isGreen = close > open
isRed = close < open

// Flags for entry and exit conditions
var bool redTouchedLower = false
var float targetPrice = na
var float stopLossPrice = na
var float trailingStopPrice = na

if in_date_range
    // Entry Logic: First green candle after a red candle touches the lower band
    if close < lower and isRed
        redTouchedLower := true
    if redTouchedLower and isGreen
        strategy.entry("Long", strategy.long)
        targetPrice := close * 1.2       // Set the target price to 20% above the entry price
        stopLossPrice := close * 0.88   // Set the stop loss to 12% below the entry price
        trailingStopPrice := na         // Reset trailing stop on entry
        redTouchedLower := false

    // Exit Logic: Trailing stop after 20% price increase
    if strategy.position_size > 0 and not na(targetPrice) and close >= targetPrice
        if na(trailingStopPrice)
            trailingStopPrice := close - atr * atrMultiplier // Initialize trailing stop using ATR
        trailingStopPrice := math.max(trailingStopPrice, close - atr * atrMultiplier) // Tighten dynamically based on ATR

    // Exit if the price falls below the trailing stop after 20% increase
    if strategy.position_size > 0 and not na(trailingStopPrice) and close < trailingStopPrice
        strategy.close("Long", comment="Trailing Stop After 20% Increase")
        targetPrice := na // Reset the target price
        stopLossPrice := na // Reset the stop loss price
        trailingStopPrice := na // Reset trailing stop

    // Stop Loss: Exit if the price drops 12% below the entry price
    if strategy.position_size > 0 and not na(stopLossPrice) and close <= stopLossPrice
        strategy.close("Long", comment="Stop Loss Triggered")
        targetPrice := na // Reset the target price
        stopLossPrice := na // Reset the stop loss price
        trailingStopPrice := na // Reset trailing stop

    // Trailing Stop: Activate after touching the upper band
    if strategy.position_size > 0 and close >= upper and isGreen
        if na(trailingStopPrice)
            trailingStopPrice := close - atr * atrMultiplier // Initialize trailing stop using ATR
        trailingStopPrice := math.max(trailingStopPrice, close - atr * atrMultiplier) // Tighten dynamically based on ATR

    // Exit if the price falls below the trailing stop
    if strategy.position_size > 0 and not na(trailingStopPrice) and close < trailingStopPrice
        strategy.close("Long", comment="Trailing Stop Triggered")
        trailingStopPrice := na // Reset trailing stop
        targetPrice := na // Reset the target price
        stopLossPrice := na // Reset the stop loss price


Relacionados

Mais.