Estratégia de acompanhamento da tendência baseada em bandas de Bollinger e média móvel exponencial

Autora:ChaoZhang, Data: 2023-11-17 17:36:43
Tags:

img

Resumo

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.

Princípios

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.

Vantagens

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:

  1. Usando Bandas de Bollinger pode determinar efetivamente a direção da tendência e reagir rapidamente a breakouts.

  2. A operação stop loss/take profit baseada na EMA pode maximizar o bloqueio de lucros, controlando os riscos.

  3. A estratégia tem poucos parâmetros fáceis de aplicar - apenas um para o BB e outro para o EMA, muito simples.

  4. Pode ser amplamente aplicado a diferentes produtos com forte adaptabilidade.

Riscos e otimização

A estratégia tem também alguns riscos a ter em conta:

  1. A ruptura das bandas superior/inferior do BB não pode evitar completamente o risco de falsas rupturas.

  2. 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.

  3. É 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:

  1. Adicionar volume ou MACD etc. para filtrar falsos sinais de ruptura.

  2. Otimizar o período de EMA através de testes para encontrar o parâmetro mais adequado para produtos específicos.

  3. 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.

  4. Considere a utilização do RSI, etc., para determinar o ajustamento da posição na tendência de médio prazo.

Resumo

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")

Mais.