Esta estratégia constrói Bandas de Bollinger com diferentes tipos de médias móveis como entrada para descobrir mais oportunidades de negociação.
O núcleo desta estratégia consiste em usar os tipos de médias móveis selecionados pela entrada do usuário, incluindo SMA, EMA, WMA, DEMA, TMA, VAR, WWMA, ZLEMA, TSF, HULL, TILL, etc., 12 no total, combinados com Bandas de Bollinger para formar sinais de negociação. A faixa média das Bandas de Bollinger adota a média móvel selecionada, enquanto as bandas superior e inferior são um desvio padrão positivo / negativo distante da faixa média. Curto quando o preço quebra a faixa superior, longo quando o preço quebra a faixa inferior. Combinando diferentes tipos de médias móveis, os parâmetros podem ser otimizados para sinais de negociação mais estáveis e precisos.
Os principais componentes do código são:
A maior vantagem desta estratégia é fornecer vários tipos de médias móveis. Diferentes ambientes de mercado se adequam a diferentes médias móveis em termos de sensibilidade de reação. Adotar vários tipos de médias móveis aumenta muito a adaptabilidade da estratégia. Além disso, esta estratégia permite otimização de parâmetros para os comprimentos das médias móveis, a fim de encontrar combinações ideais e, portanto, obter sinais de negociação mais precisos.
O principal risco desta estratégia reside em sinais caóticos das próprias médias móveis, com possibilidades de múltiplas falhas. Além disso, o indicador Bollinger Bands é bastante sensível a oscilações de preços selvagens, dificultando a faixa média para rastrear o preço efetivamente. Isso exige que tipos mais estáveis de médias móveis sejam usados, juntamente com um ajuste adequado dos parâmetros.
A estratégia pode ser otimizada a partir dos seguintes aspectos:
A estratégia é bastante inovadora em geral, enriquecendo o indicador de Bollinger Bands com aplicações mais sofisticadas. Ao ajustar as médias móveis combinadas, podem ser obtidos sinais mais precisos e estáveis. Também abre novas ideias para otimizar as estratégias de Bollinger Bands. Com ajuste e otimizações de parâmetros, essa estratégia pode se tornar uma ferramenta de negociação muito prática.
/*backtest start: 2023-01-30 00:00:00 end: 2023-10-13 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Bollinger Bands Strategy (MA type)", overlay=true) src = input(close, title="Source") length = input(20,step=10, minval=1) mult = input(1,type=input.float, minval=0.001, maxval=50, title="StdDev") length1=input(26, "Long Moving Average Length", minval=1) length2=input(9, "Trigger Length", minval=1) T3a1 = input(0.7, "TILLSON T3 Volume Factor", step=0.1) //////////// mav = input(title="Moving Average Type", defval="VAR", options=["SMA", "EMA", "WMA", "DEMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF", "HULL", "TILL"]) Var_Func(src,length)=> valpha=2/(length+1) vud1=src>src[1] ? src-src[1] : 0 vdd1=src<src[1] ? src[1]-src : 0 vUD=sum(vud1,9) vDD=sum(vdd1,9) vCMO=nz((vUD-vDD)/(vUD+vDD)) VAR=0.0 VAR:=nz(valpha*abs(vCMO)*src)+(1-valpha*abs(vCMO))*nz(VAR[1]) VAR=Var_Func(src,length) DEMA = ( 2 * ema(src,length)) - (ema(ema(src,length),length) ) Wwma_Func(src,length)=> wwalpha = 1/ length WWMA = 0.0 WWMA := wwalpha*src + (1-wwalpha)*nz(WWMA[1]) WWMA=Wwma_Func(src,length) Zlema_Func(src,length)=> zxLag = length/2==round(length/2) ? length/2 : (length - 1) / 2 zxEMAData = (src + (src - src[zxLag])) ZLEMA = ema(zxEMAData, length) ZLEMA=Zlema_Func(src,length) Tsf_Func(src,length)=> lrc = linreg(src, length, 0) lrc1 = linreg(src,length,1) lrs = (lrc-lrc1) TSF = linreg(src, length, 0)+lrs TSF=Tsf_Func(src,length) HMA = wma(2 * wma(src, length / 2) - wma(src, length), round(sqrt(length))) T3e1=ema(src, length) T3e2=ema(T3e1,length) T3e3=ema(T3e2,length) T3e4=ema(T3e3,length) T3e5=ema(T3e4,length) T3e6=ema(T3e5,length) T3c1=-T3a1*T3a1*T3a1 T3c2=3*T3a1*T3a1+3*T3a1*T3a1*T3a1 T3c3=-6*T3a1*T3a1-3*T3a1-3*T3a1*T3a1*T3a1 T3c4=1+3*T3a1+T3a1*T3a1*T3a1+3*T3a1*T3a1 T3=T3c1*T3e6+T3c2*T3e5+T3c3*T3e4+T3c4*T3e3 getMA(src, length) => ma = 0.0 if mav == "SMA" ma := sma(src, length) ma if mav == "EMA" ma := ema(src, length) ma if mav == "WMA" ma := wma(src, length) ma if mav == "DEMA" ma := DEMA ma if mav == "TMA" ma := sma(sma(src, ceil(length / 2)), floor(length / 2) + 1) ma if mav == "VAR" ma := VAR ma if mav == "WWMA" ma := WWMA ma if mav == "ZLEMA" ma := ZLEMA ma if mav == "TSF" ma := TSF ma if mav == "HULL" ma := HMA ma if mav == "TILL" ma := T3 ma ma ////////// basis = getMA(src, length) dev = mult * stdev(src, length) upper = basis + dev lower = basis - dev offset = input(0, "Offset",minval = -500, maxval = 500) plot(basis, "Basis",color=#FF6D00, offset = offset) p1 = plot(upper, "Upper", color=#2962FF, offset = offset) p2 = plot(lower, "Lower", color=#2962FF, offset = offset) fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95)) ///////// buyEntry = crossover(src, lower) sellEntry = crossunder(src, upper) if (crossover(src, lower)) strategy.entry("BBandLE", strategy.long, stop=lower, oca_name="BollingerBands", comment="BBandLE") else strategy.cancel(id="BBandLE") if (crossunder(src, upper)) strategy.entry("BBandSE", strategy.short, stop=upper, oca_name="BollingerBands", comment="BBandSE") else strategy.cancel(id="BBandSE") //plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)