Esta estratégia utiliza Bandas de Bollinger para determinar a direção da tendência atual e a média móvel exponencial para o stop loss e tomar a gestão de lucros para capturar efetivamente a tendência.
A estratégia primeiro calcula a linha do meio, banda superior e banda inferior das Bandas de Bollinger. A linha do meio é a média móvel simples do preço de fechamento ao longo de n dias. As bandas superior e inferior são deslocadas para cima e para baixo por dois desvios padrão da linha do meio. Quando o preço de fechamento está acima da banda superior, indica uma tendência de alta. Quando o preço de fechamento está abaixo da banda inferior, indica uma tendência de queda.
A estratégia julga a direção da tendência atual comparando a relação entre o preço de fechamento e as faixas superior/inferior das Bandas de Bollinger.
Além disso, a média móvel exponencial é introduzida como uma parada para parar a perda e tirar lucro. Especificamente, se o preço se mover para baixo depois de longo, a linha de stop loss se moverá para baixo, gradualmente apertando a distância de stop loss para maximizar o bloqueio de lucro.
A estratégia que combina as bandas de Bollinger para a direcção da tendência e a EMA para a gestão de stop loss/take profit tem as seguintes vantagens:
Usando Bandas de Bollinger pode determinar efetivamente a direção da tendência e reagir rapidamente a breakouts.
A operação stop loss/take profit baseada na EMA pode maximizar o bloqueio de lucros, controlando os riscos.
A estratégia tem poucos parâmetros fáceis de aplicar - apenas um para o BB e outro para o EMA, muito simples.
Pode ser amplamente aplicado a diferentes produtos com forte adaptabilidade.
A estratégia tem também alguns riscos a ter em conta:
A ruptura das bandas superior/inferior do BB não pode evitar completamente o risco de falsas rupturas.
A configuração do parâmetro EMA precisa de testes cuidadosos de acordo com produtos específicos. Um período EMA muito curto pode aumentar os tempos de stop loss. Muito longo diminuirá a eficácia do trailing.
É necessário evitar uma otimização excessiva, pois muitas combinações de parâmetros BB e EMA podem levar a um sobreajuste.
Para abordar os riscos e as direcções de otimização, podem ser considerados os seguintes aspectos:
Adicionar volume ou MACD etc. para filtrar falsos sinais de ruptura.
Otimizar o período de EMA através de testes para encontrar o parâmetro mais adequado para produtos específicos.
Tentar manter os parâmetros BB e EMA tão estáveis quanto possível para evitar riscos de sobreajuste decorrentes de uma otimização excessiva.
Considere a utilização do RSI, etc., para determinar o ajustamento da posição na tendência de médio prazo.
Esta estratégia integra o uso de Bandas de Bollinger para determinar a tendência e EMA para gerenciamento de stop loss / take profit para formar um sistema de rastreamento de tendência relativamente completo. Pode capturar rapidamente a direção da tendência e bloquear os lucros ajustando continuamente a linha de stop loss. No geral, a estratégia é relativamente simples, prática e adaptável, vale a pena testar e otimizar ainda mais.
/*backtest start: 2022-11-10 00:00:00 end: 2023-11-16 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © zxcv55602 //@version=4 strategy(shorttitle=" BB+EMA", title="Bollinger Bands", overlay=true) date1 = input(title="Start Date", type=input.time, defval=timestamp("2020-01-01T00:00:00")) date2 = input(title="Stop Date", type=input.time, defval=timestamp("2030-01-01T00:00:00")) length = input(40, minval=1) src = input(close, title="Source") mult = input(2.0,title="StdDev",step=0.1) basis = sma(src, length) dev = mult * stdev(src, length) upper = basis + dev lower = basis - dev //offset = input(0, "Offset", minval = -500, maxval = 500) offset=0 stopcon=input(title="stopcon/lot", type=input.bool, defval=true) lot1=input(title="lot",defval=1) stoploss=input(title="stopcon",defval=1000) emacon=input(title="emacon", type=input.bool, defval=true) ema_value=input(title="value",defval=30, minval=2,step=1) plot(basis, "Basis", color=#FF6D00, offset = offset) p1 = plot(upper, "Upper", color=color.new(color.blue,50), offset = offset) p2 = plot(lower, "Lower", color=color.new(color.blue,50), offset = offset) ema1=ema(close,ema_value) plot(ema1, "SMA", color=#2962FF) period() => true //----------- if period() if strategy.opentrades==0 and ema1<upper if close>upper lot_L=stoploss/((close-lower)/2) strategy.entry("OP_L",strategy.long,qty=stopcon==true?lot_L:lot1,stop=emacon==true?max(basis,ema1):basis) if strategy.opentrades==0 and ema1>lower if close<lower lot_S=stoploss/((upper-close)/2) strategy.entry("OP_S",strategy.short,qty=stopcon==true?lot_S:lot1,stop=emacon==true?min(basis,ema1):basis) if strategy.position_size>0 strategy.exit("OP_L",stop=emacon==true?max(basis,ema1):basis,comment="exit_L") if strategy.position_size<0 strategy.exit("OP_S",stop=emacon==true?min(basis,ema1):basis,comment="exit_S")