Esta estratégia é uma estratégia de negociação de ruptura de dupla trilha baseada em Bollinger Bands.
A estratégia usa os trilhos superior e inferior das Bandas de Bollinger. As Bandas de Bollinger consistem em uma média móvel e dois canais de desvio padrão correspondentes. Um sinal de venda é gerado quando o preço toca ou quebra o trilho superior das Bandas de Bollinger; Um sinal de compra é gerado quando o preço toca ou quebra o trilho inferior das Bandas de Bollinger. Além disso, a estratégia também define um ponto de stop loss. Quando o preço é inferior a uma certa porcentagem da média móvel, um stop loss será identificado.
Especificamente, a estratégia calcula a média móvel e o dobro do desvio padrão do ciclo especificado (como 20 dias) para traçar as Bandas de Bollinger. O trilho superior é a média móvel mais o dobro do desvio padrão e o trilho inferior é a média móvel menos o dobro do desvio padrão. Quando o preço de fechamento é maior ou igual ao trilho superior, um sinal de venda é emitido; quando o preço de fechamento é menor ou igual ao trilho inferior, um sinal de compra é emitido. Além disso, se o preço for menor que uma certa porcentagem (como 1%) da média móvel, um sinal de stop loss é emitido.
A estratégia utiliza as características das Bandas de Bollinger para emitir sinais de negociação quando ocorrem flutuações anormais de preços, capturando assim oportunidades de reversões de preços.
Em comparação com as estratégias simples de ruptura de dupla pista, esta estratégia adiciona um mecanismo de stop-loss. Isso pode controlar efetivamente a perda causada por sinais errados individuais. A configuração do ponto de stop loss também é relativamente razoável, próxima da média móvel, evitando perda de stop excessiva causando muita perda.
O maior risco desta estratégia é que as próprias Bollinger Bands não podem garantir a validade dos sinais de negociação. Quando ocorrem situações especiais no mercado, os preços podem flutuar acentuadamente e anormalmente, caso em que os sinais de negociação emitidos por Bollinger Bands podem ser errados. Isso provavelmente causará perdas consideráveis.
Além disso, a configuração de pontos de stop loss também pode ser muito agressiva ou conservadora, o que afetará o lucro final.
A estratégia pode ser otimizada nos seguintes aspectos:
Ensaiar diferentes combinações de parâmetros, tais como diferentes valores do ciclo da média móvel, multiplicador do desvio-padrão, percentagem de perda de parada, etc., para encontrar os parâmetros ideais;
Aumentar outros indicadores para julgar e formar condições de filtragem múltiplas para evitar sinais errados;
Otimizar as estratégias de stop loss, tais como a utilização de stop loss móvel, stop loss por lote em vez de stop loss simples;
Confirme os sinais de negociação combinando Bandas de Bollinger de diferentes ciclos de tempo para evitar ficar preso.
Em geral, esta estratégia é uma combinação prática de rastreamento de tendências e estratégias de ruptura de dupla trilha. Pode aproveitar oportunidades de reversões quando as flutuações de preços aumentam e estabelece perdas de parada para controlar riscos. Por meio da otimização de parâmetros, aumento da filtragem de sinal, estratégias de stop loss otimizadas, etc., a estabilidade e a lucratividade da estratégia podem ser ainda melhoradas.
/*backtest start: 2024-01-28 00:00:00 end: 2024-02-04 00:00:00 period: 30m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Bollinger Bands Strategy by Royce Mars", overlay=true) 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 = input.float(2.0, minval=0.001, maxval=50, title="StdDev") stopLossPercent = input.float(1.0, title="Stop Loss Percent", minval=0.1, maxval=10, step=0.1) 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) basis = ma(src, length, maType) dev = mult * ta.stdev(src, length) upper = basis + dev lower = basis - dev // Buy and Sell Conditions buyCondition = close <= lower sellCondition = close >= upper // Stop Loss Condition stopLossCondition = close < basis * (1 - stopLossPercent / 100) // Strategy Execution strategy.entry("Buy", strategy.long, when=buyCondition) strategy.close("Buy", when=sellCondition or stopLossCondition) strategy.entry("Sell", strategy.short, when=sellCondition) strategy.close("Sell", when=buyCondition) // Plotting on the Chart plotshape(buyCondition, title="Buy Signal", color=color.green, style=shape.labelup, location=location.belowbar) plotshape(sellCondition or stopLossCondition, title="Sell Signal", color=color.red, style=shape.labeldown, location=location.abovebar) // Plotting the Bollinger Bands plot(basis, "Basis", color=color.orange) p1 = plot(upper, "Upper Band", color=color.blue) p2 = plot(lower, "Lower Band", color=color.blue) fill(p1, p2, title="Background", color=color.rgb(33, 150, 243, 95))