Esta é uma estratégia de tendência baseada no indicador Bollinger Bands. Ele usa a quebra das bandas superiores e inferiores de Bollinger Bands para determinar a direção da tendência e abrir posições correspondentes. Quando os preços começam a cair, ele usa um stop loss com espaçamento dinâmico para sair das posições e obter lucros.
A estratégia usa Bandas de Bollinger para determinar a direção da tendência. As Bandas de Bollinger são construídas calculando o desvio padrão dos preços para formar as bandas superior e inferior.
A lógica específica de negociação é a seguinte:
Calcular as bandas média, superior e inferior das Bandas de Bollinger.
Quando o preço atravessa a faixa superior, vá longo.
Use um stop loss para controlar os riscos e sair quando os preços começarem a cair.
Volte a entrar na tendência quando os preços romperem as faixas novamente.
Usar Bandas de Bollinger para determinar tendências e combinar com um stop loss dinâmico pode controlar efetivamente os riscos.
As vantagens desta estratégia incluem:
Usando Bandas de Bollinger para determinar tendências, simples e eficaz.
A combinação de entrada de ruptura e de stop loss dinâmico equilibra a captura da tendência e o controlo do risco.
Estrutura de código limpa e concisa, fácil de entender e modificar.
Poucos parâmetros, fáceis de otimizar.
Aplicável a diferentes produtos, flexível.
Bons resultados de backtest, com grande potencial de lucro.
Os principais riscos são:
As bandas de Bollinger baseiam-se apenas em estatísticas, riscos de ajustamento da curva.
Difícil de distinguir a expansão da gama e as tendências reais, pode causar erros de julgamento.
Pontos de stop loss muito apertados, riscos de serem interrompidos por oscilações normais.
Sem consideração dos custos de transacção.
Período de ensaio posterior limitado, riscos de sobreajuste.
As soluções são:
Otimizar parâmetros ou adicionar outros indicadores para verificação do sinal.
Melhorar a identificação das oscilações e dos canais.
Ajustar dinamicamente a perda de parada com base no ATR, etc.
Adicione comissão, custos de deslizamento.
Expandir o período de backtest, verificação em vários mercados.
A estratégia pode ser otimizada por:
Teste de efeitos combinados de diferentes indicadores.
Melhoramento da identificação das oscilações de tendência.
Introdução de aprendizagem de máquina para otimização de parâmetros dinâmicos.
Otimizar a estratégia de stop loss com base nos resultados dos backtests.
Avaliação e adição dos custos de transacção.
Optimização do espaço dos parâmetros para configurações ideais.
Adicionar a gestão de fundos ao controlo dos riscos de posição.
Esta estratégia determina a direção da tendência com Bollinger Bands e controla o risco com stop loss. A lógica geral é simples e clara. Ele tem boa capacidade de captura de tendência, mas pode ser melhorado através da introdução de mais indicadores técnicos, otimização de parâmetros, adição de custos, etc. para torná-lo mais robusto.
/*backtest start: 2022-09-15 00:00:00 end: 2023-09-21 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="Bollinger Band Breakout", shorttitle = "BB Strategy",initial_capital=1000, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, commission_type = strategy.commission.percent, commission_value = 0.3, max_bars_back = 1000, overlay=true) // Inputs // sma = input(20, minval=1) mult = input(1.2, minval=0.001, maxval=50) src = input(close) // alert msg // message_long_entry = input("long entry") message_short_entry = input("short entry") // Calculations // basis = sma(close, sma) dev = mult * stdev(close, sma) upper = basis + dev lower = basis - dev // Backtest // fromyear = input(2019, defval = 2019, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(1, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") leverage = input(1, "Leverage") term = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)) // PLOT // plot(basis, color = color.gray, linewidth = 2) lu = plot(upper, color = color.green, linewidth = 2) ll = plot(lower, color = color.red, linewidth = 2) fill(lu, ll, color = color.gray) // Signals // long = crossover(close, upper) short = crossunder(close, lower) // Strategy entry // strategy.initial_capital = 50000 if (long and term) strategy.entry("long", strategy.long, qty=strategy.initial_capital/close*leverage, when = long and barstate.isconfirmed, alert_message = message_long_entry) if (short and term) strategy.entry("short", strategy.short, qty=strategy.initial_capital/close*leverage, when = short and barstate.isconfirmed, alert_message = message_short_entry) // strategy exit // strategy.exit("long tsl", "long", loss = close*0.075 / syminfo.mintick, trail_points = close*0.05 / syminfo.mintick, trail_offset = close*0.005 / syminfo.mintick) strategy.exit("short tsl", "short", loss = close*0.075 / syminfo.mintick, trail_points = close*0.05 / syminfo.mintick, trail_offset = close*0.005 / syminfo.mintick)