BB21_SMA200 Tendência de seguir a estratégia

Autora:ChaoZhang, Data: 2023-11-16 11:04:42
Tags:

img


Resumo

Esta estratégia combina Bollinger Bands e Moving Average para desenhar uma tendência seguindo o sistema de negociação. Ele vai longo quando o preço quebra a faixa superior de Bollinger Bands e a faixa inferior está acima do SMA200, fecha posição parcial quando o preço quebra a faixa inferior e sai de todos quando o preço cruza abaixo do SMA200. A estratégia segue a tendência e corta a perda no tempo quando a tendência muda.

Estratégia lógica

  1. Calcular a SMA200 como média móvel exponencial para determinar a tendência principal
  2. Calcular Bandas de Bollinger, incluindo banda superior, banda média e banda inferior, e preencher a cor como faixa de lucro
  3. Quando as bandas superior e inferior estão acima do SMA200, indica uma tendência de alta.
  4. Quando o preço atravessa a faixa média das Bandas de Bollinger para cima, vá longo
  5. Quando o preço atravessa a faixa inferior para baixo, feche a posição parcial
  6. Quando o preço cruza abaixo do SMA200, indica uma inversão da tendência principal, feche todas as posições
  7. Defina o ponto de parada de perdas para evitar perdas excessivas
  8. Calcular o tamanho da operação com base no capital da conta e no risco aceitável

A premissa desta estratégia para identificar uma tendência é que as Bandas de Bollinger devem estar completamente acima do SMA200, apenas indo longo quando uma tendência de alta clara se apresenta.

Análise das vantagens

  1. Usar Bandas de Bollinger em vez de um único indicador para identificar uma tendência clara
  2. O SMA200 determina a principal direcção da tendência, evita a negociação desnecessária no mercado limitado por intervalo
  3. Previsão de prejuízo
  4. Parar perdas em tempo útil em pontos-chave para minimizar as perdas
  5. Calcular o tamanho da negociação introduz a gestão do risco para evitar perdas excessivas numa única negociação

Análise de riscos

  1. Os sinais de ruptura gerados a partir das bandas de Bollinger podem ter sinais falsos relativamente elevados
  2. Os pontos de stop loss parciais devem ser otimizados para evitar uma stop loss prematura.
  3. Se o ponto de stop loss for muito apertado, o stop loss pode ser acionado com demasiada frequência
  4. O período de SMA deve ser testado e otimizado para equilibrar o atraso e a sensibilidade
  5. O método de cálculo do tamanho da transação pode precisar de otimização para evitar o tamanho excessivo em transações individuais

Estes riscos poderiam ser reduzidos através de testes cuidadosos dos parâmetros das bandas de Bollinger, da otimização da estratégia de stop loss parcial, do ajuste do período de SMA e da introdução de métodos de gestão de risco mais científicos.

Orientações de otimização

  1. Teste e otimize os parâmetros das Bandas de Bollinger para reduzir os falsos sinais
  2. Pesquise como definir pontos de stop loss parciais adequados
  3. Período de SMA ideal de ensaio
  4. Considerar paradas adaptativas em vez de pontos fixos de paragem de perda
  5. Estudo utilizando o dimensionamento das posições baseado na volatilidade para um cálculo mais científico do tamanho das transacções
  6. Backtest com custos de negociação para simular negociação real
  7. Considerar a combinação com outros indicadores para melhorar a robustez da estratégia

Conclusão

Esta estratégia integra Bandas de Bollinger e SMA para projetar um sistema de tendência relativamente completo. É confiável na identificação da existência de tendências e tem forte capacidade de rastreamento de tendências. Ao otimizar continuamente a estratégia de stop loss, reduzir erros de sinal e introduzir técnicas de gerenciamento de risco científico, esta estratégia pode se tornar um sistema valioso para rastrear na negociação ao vivo.


/*backtest
start: 2022-11-09 00:00:00
end: 2023-11-15 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/
// © mohanee

//@version=4
strategy(title="BB9_MA200_Strategy", overlay=true, pyramiding=1,     default_qty_type=strategy.cash,  initial_capital=10000, currency=currency.USD)  //default_qty_value=10, default_qty_type=strategy.fixed, 


var stopLossVal=0.00

//variables BEGIN
smaLength=input(200,title="MA Length")
bbLength=input(21,title="BB Length")  

bbsrc = input(close, title="BB Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")


stopLoss = input(title="Stop Loss%", defval=5, minval=1)

riskCapital = input(title="Risk % of capital  == Based on this trade size is claculated    numberOfShares = (AvailableCapital*risk/100) / stopLossPoints", defval=10, minval=1)


sma200=ema(close,smaLength)

plot(sma200, title="SMA 200", color=color.orange)


//bollinger calculation
basis = sma(bbsrc, bbLength)
dev = mult * stdev(bbsrc, bbLength)
upperBand = basis + dev
lowerBand = basis - dev
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)

//plot bb
plot(basis, "Basis", color=color.teal, style=plot.style_circles , offset = offset)
p1 = plot(upperBand, "Upper", color=color.teal, offset = offset)
p2 = plot(lowerBand, "Lower", color=color.teal, offset = offset)
fill(p1, p2, title = "Background", color=color.teal, transp=95)


strategy.initial_capital = 50000

//Entry---

strategy.entry(id="LE", comment="LE capital="+tostring(strategy.initial_capital + strategy.netprofit ,"######.##"), qty=( (strategy.initial_capital + strategy.netprofit ) * riskCapital / 100)/(close*stopLoss/100) , long=true,  when=strategy.position_size<1 and upperBand>sma200 and lowerBand > sma200 and crossover(close, basis) )     //  // aroonOsc<0  //(strategy.initial_capital * 0.10)/close


barcolor(color=strategy.position_size>=1? color.blue: na)

//partial Exit
tpVal=strategy.position_size>1 ? strategy.position_avg_price * (1+(stopLoss/100) ) : 0.00
strategy.close(id="LE", comment="Partial points="+tostring(close - strategy.position_avg_price, "####.##"),  qty_percent=30 , when=abs(strategy.position_size)>=1 and close>tpVal and crossunder(lowerBand, sma200)   )   //close<ema55 and rsi5Val<20 //ema34<ema55


//close All on stop loss
//stoploss
stopLossVal:=   strategy.position_size>1 ? strategy.position_avg_price * (1-(stopLoss/100) ) : 0.00

strategy.close_all( comment="SL Exit points="+tostring(close - strategy.position_avg_price, "####.##"),  when=abs(strategy.position_size)>=1 and close < stopLossVal  )  //close<ema55 and rsi5Val<20 //ema34<ema55  //close<ema89//

strategy.close_all( comment="BB9 X SMA200 points="+tostring(close - strategy.position_avg_price, "####.##"),  when=abs(strategy.position_size)>=1 and  crossunder(basis, sma200)  )  //close<ema55 and rsi5Val<20 //ema34<ema55  //close<ema89
    

Mais.