Esta estratégia gera sinais de negociação baseados em Bandas de Bollinger e médias móveis duplas, com filtragem de tendências para atingir uma alta taxa de ganho e uma boa relação lucro-perda.
Use as faixas superior, média e inferior da banda de Bollinger para geração de sinal longo / curto.
Utilize médias móveis de médio prazo de 20 períodos e médias móveis de longo prazo de 60 períodos para determinar a direção da tendência.
Ajuste dinamicamente a posição de stop loss com base na largura da banda de Bollinger. Quando a largura for superior a 0,5%, stop loss na banda inferior. Quando for inferior a 0,5%, reduza a stop loss para metade do intervalo de banda inferior.
Condições de entrada: quebra da faixa inferior como sinal de compra durante a tendência de alta. quebra da faixa superior como sinal de venda durante a tendência de baixa.
Condições de saída: obter lucro ao tocar a faixa superior ou a MA curta em longs.
Condições de stop loss: Stop out quando o preço ultrapassa o intervalo dinâmico da faixa inferior nos longs. Stop out quando o preço ultrapassa o intervalo dinâmico da faixa superior nos shorts.
A utilização de MAs duplas para determinar a tendência ajuda a filtrar o ruído dos mercados não tendência ou de gama.
A faixa média BB fornece suporte/resistência, as faixas superior/inferior servem como níveis dinâmicos de stop loss para controlar o risco.
Ajustar o intervalo de stop loss com base na largura BB reduz a possibilidade de ser parado, mantendo o stop razoável.
Negociar na direcção da tendência leva a uma maior taxa de ganhos.
Os MAs duplos podem gerar falsas rupturas com frequência, perdendo pontos de virada da tendência.
Os BBs podem ser atacados em mercados agitados e não em tendência, podem reduzir a frequência de negociação.
Possui um intervalo de stop loss mais amplo.
Incapaz de capitalizar de forma eficaz em retrações de curto prazo, pode encurtar o período de detenção.
Otimizar os períodos de autorização de importação para encontrar a melhor adaptação às condições de mercado.
Otimizar o parâmetro do multiplicador BB para equilibrar a perda de parada.
Adicionar outros indicadores de confirmação multifatorial para melhorar a qualidade do sinal.
Incorporar volume/momento para confirmar a tendência, evitar divergências.
Optimização da gestão do dinheiro, por exemplo, stop loss fracionário fixo e fixo para controlar o risco de negociação única.
Gestão de choques de preços, por exemplo, grandes diferenças durante a noite.
Esta é uma estratégia robusta em geral usando MAs duplos para a direção da tendência e BBs para suporte / resistência e paradas dinâmicas. Existem limitações como sinais de tendência falsos e paradas muito próximas. Outras otimizações podem ser feitas em todo o sistema MA, estratégia de stop loss, gerenciamento de dinheiro etc. para aumentar a robustez em várias condições de mercado.
/*backtest start: 2022-10-18 00:00:00 end: 2023-10-24 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy(title="yuthavithi BB Scalper 2 strategy", overlay=true) len = input(20, minval=1, title="Length") multiplier = input(4, minval=1, title="multiplier") trendTimeFrame = input(60, minval=1, title="Trend Time Frame") useTrendFilter = input(true, type=bool, title = "Use Trend Filter") src = input(close, title="Source") out = sma(src, len) //plot(out, title="SMA", color=blue) stdOut = stdev(close, len) bbUpper = out + stdOut * multiplier bbLower = out - stdOut * multiplier bbUpper2 = out + stdOut * (multiplier / 2) bbLower2 = out - stdOut * (multiplier / 2) bbUpperX2 = out + stdOut * multiplier * 2 bbLowerX2 = out - stdOut * multiplier * 2 bbWidth = (bbUpper - bbLower) / out closeLongTerm = request.security(syminfo.tickerid, tostring(trendTimeFrame), close) smaLongTerm = request.security(syminfo.tickerid, tostring(trendTimeFrame), sma(close,20)) //plot(smaLongTerm, color=red) trendUp = useTrendFilter ? (closeLongTerm > smaLongTerm) : true trendDown = useTrendFilter? (closeLongTerm < smaLongTerm) : true bearish = ((cross(close,bbUpper2) == 1) or (cross(close,out) == 1)) and (close[1] > close) and trendDown bullish = ((cross(close,bbLower2) == 1) or (cross(close,out) == 1)) and (close[1] < close) and trendUp closeBuy = (high[1] > bbUpper[1]) and (close < bbUpper) and (close < open) and trendUp closeSell = (((low[1] < bbLower[1]) and (close > bbLower)) or ((low[2] < bbLower[2]) and (close[1] > bbLower[1]))) and (close > open) and trendDown cutLossBuy = iff(bbWidth > 0.005, (low < bbLower) and (low[1] > bbLower[1]) and trendUp, (low < bbLowerX2) and (low[1] > bbLowerX2[1]) and trendUp) cutLossSell = iff(bbWidth > 0.005, (high > bbUpper) and (high[1] < bbUpper[1]) and trendDown, (high > bbUpperX2) and (high[1] < bbUpperX2[1]) and trendDown) if (bullish) strategy.entry("Buy", strategy.long, comment="Buy") if (bearish) strategy.entry("Sell", strategy.short, comment="Sell") strategy.close("Buy", closeBuy or cutLossBuy) strategy.close("Sell", closeSell or cutLossSell)