A estratégia das faixas de Bollinger Crossover da média móvel única

Autora:ChaoZhang, Data: 2023-12-22 14:10:14
Tags:

img

Resumo

Esta estratégia é baseada em média móvel única e indicador de Bollinger Bands. Ela gera sinais de compra e venda quando o preço quebra a faixa superior ou inferior de Bollinger Bands. Também incorpora a direção da média móvel para determinar a tendência, levando apenas muito tempo quando MA está subindo e curto quando MA está caindo.

Estratégia lógica

A estratégia utiliza principalmente os seguintes indicadores para julgamento:

  1. Média móvel (SMA): média móvel simples do preço CLOSE, representando a tendência de preços.
  2. Banda superior de Bollinger: representa o nível de resistência, a ruptura indica um forte ímpeto.
  3. Banda de Bollinger inferior: representa o nível de suporte, a desagregação indica uma possível inversão da tendência.

Os sinais de negociação específicos são:

  1. Comprar sinal: Quando o preço de fechamento atravessa a faixa superior e o MA está subindo.
  2. Signalização de venda: Quando o preço de fechamento atravessa a faixa inferior e o MA está caindo.

Ao combinar a tendência e o breakout, o sinal de negociação torna-se mais confiável e evita o falso breakout.

Vantagens

  1. Regras simples e claras, fáceis de compreender e de aplicar.
  2. A MA avalia a tendência geral de evitar o mercado de alta curta e baixa longa.
  3. Bollinger Bands banda superior e inferior localiza pontos de ruptura locais com precisão.
  4. Relativamente baixos, correspondem às preferências de risco da maioria das pessoas.

Riscos

  1. Indicador único tende a gerar sinais falsos, pode ser melhorado por ajuste de parâmetros.
  2. Não pode lidar com grandes flutuações do mercado, pode ajustar o stop loss em conformidade.
  3. Incapaz de lucrar mais com mega tendências, pode considerar um tamanho de posição maior.

Melhorias

  1. Otimizar os períodos de MA para se adequarem a mais produtos.
  2. Adicione outros filtros como o MACD para reduzir os falsos sinais.
  3. Ajuste dinâmico de stop loss para limitar o drawdown máximo.
  4. Introduzir a gestão do dinheiro para estabilizar o desempenho da PNL.

Conclusão

Em geral, esta é uma estratégia simples, mas prática adequada para a maioria das pessoas. Com alguns ajustes e otimizações, pode ser mais robusta e adaptável a mais situações de mercado.


/*backtest
start: 2023-12-14 00:00:00
end: 2023-12-18 19:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title="single sma cross", shorttitle="single sma cross",default_qty_type = strategy.percent_of_equity, default_qty_value = 100,overlay=true,currency="USD")
s=input(title="s",defval=90)
p=input(title="p",type=float,defval=.9,step=.1)

sa=sma(close,s)
plot(sa,color=red,linewidth=3)
band=stdev(close,s)*p
plot(band+sa,color=lime,title="")
plot(-band+sa,color=lime,title="")

// ===Strategy Orders============================================= ========
inpTakeProfit = input(defval = 0, title = "Take Profit", minval = 0)
inpStopLoss = input(defval = 0, title = "Stop Loss", minval = 0)
inpTrailStop = input(defval = 0, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)
useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na
useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na
useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na
useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na

longCondition = crossover(close,sa+band) and rising(sa,5)
shortCondition = crossunder(close,sa-band) and falling(sa,5)
crossmid = cross(close,sa)


strategy.entry(id = "Long", long=true, when = longCondition)
strategy.close(id = "Long", when = shortCondition)
strategy.entry(id = "Short", long=false, when = shortCondition)
strategy.close(id = "Short", when = longCondition)
strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset, when=crossmid)
strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset, when=crossmid)

Mais.