
A estratégia é baseada em uma estratégia de negociação de ruptura de dupla faixa de Brin. Ela usa a faixa de Brin como sinal de compra e venda, e define um ponto de parada para controlar o risco.
A estratégia usa um traço superior e um traço inferior da faixa de Brin. A faixa de Brin é composta por uma linha de equilíbrio e seus correspondentes dois canais de diferença padrão. Um sinal de venda é gerado quando o preço toca ou quebra a faixa de Brin. Um sinal de compra é gerado quando o preço toca ou quebra a faixa de Brin.
Concretamente, a estratégia traça a faixa de Bryn através do cálculo da média de um determinado período (por exemplo, 20 dias) e do dobro de sua diferença padrão. A linha de cima é a média mais o dobro da diferença padrão e a linha de baixo é a média menos o dobro da diferença padrão. Um sinal de venda é emitido quando o preço de fechamento é maior ou igual à linha de cima; um sinal de compra é emitido quando o preço de fechamento é menor ou igual à linha de baixo.
A estratégia utiliza a característica da faixa de Bryn para emitir um sinal de negociação em caso de flutuação anormal do preço, capturando assim a oportunidade de uma reversão do preço. Em comparação com a estratégia de simplesmente seguir a linha de equilíbrio, a estratégia pode gerar um sinal de negociação quando a flutuação aumenta, evitando até certo ponto o risco de falsas rupturas.
Comparado com a estratégia simples de quebra de duas trajetórias, a estratégia aumenta o mecanismo de parada. Isso permite controlar efetivamente os danos causados por sinais errados individuais. A configuração do ponto de parada também é mais razoável, mais próxima da média, evitando os excessivos danos causados por paradas muito radicais.
O maior risco dessa estratégia é que a faixa de Brin não garante a eficácia dos sinais de negociação. Quando ocorrem situações especiais no mercado, os preços podem sofrer grandes e irracionais flutuações, e os sinais de negociação emitidos pela faixa de Brin podem ser errados.
Além disso, a configuração do ponto de parada pode ser muito radical ou conservadora, o que afeta o lucro final. Se o ponto de parada for muito grande, o sinal eficaz pode ser interrompido com frequência; e se o ponto de parada for muito pequeno, o controle de perda não será eficaz.
A estratégia pode ser melhorada em vários aspectos:
Teste diferentes combinações de parâmetros, como o ciclo de média, o múltiplo de diferença padrão, a porcentagem de parada, etc., para encontrar o parâmetro ideal;
Adicionar outros indicadores de julgamento para criar condições de filtragem múltipla e evitar sinais errados;
Otimização de estratégias de suspensão de perdas, como a substituição de suspensões simples por suspensões móveis ou por suspensões em lotes;
A confirmação de sinais de transação é feita através de uma faixa de Brin combinada com diferentes períodos de tempo, evitando que a transação seja encaixada.
A estratégia em geral é uma combinação prática de acompanhamento de tendências e quebra de duas pistas. É capaz de aproveitar oportunidades de reversão quando a flutuação dos preços aumenta e estabelece um stop loss para controlar o risco. Os meios de otimização de parâmetros, aumento de filtragem de sinais e otimização da estratégia de stop loss podem aumentar ainda mais a estabilidade e a lucratividade da estratégia.
/*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))