Estratégias de Bandas de Bollinger de Média Móvel Múltipla


Data de criação: 2024-02-06 15:08:26 última modificação: 2024-02-06 15:08:26
cópia: 4 Cliques: 632
1
focar em
1617
Seguidores

Estratégias de Bandas de Bollinger de Média Móvel Múltipla

Visão geral

A estratégia constrói a faixa de Brin para explorar mais oportunidades de negociação através da entrada de diferentes tipos de médias móveis. Ela oferece 12 tipos de médias móveis que podem ser combinadas de forma flexível para obter os melhores parâmetros.

Princípio da estratégia

O núcleo da estratégia é o uso de tipos de médias móveis de entrada do usuário, incluindo SMA, EMA, WMA, DEMA, TMA, VAR, WWMA, ZLEMA, TSF, HULL, TILL e outros 12 tipos, em combinação com os indicadores de Brinell para formar um sinal de negociação. A linha central da Brinell usa uma média móvel selecionada, com uma diferença padrão positiva entre a linha central e a linha central.

O código é dividido em:

  1. Define 12 tipos de média móvel, incluindo SMA, EMA, WMA, etc.
  2. A função getMA, que retorna a média móvel correspondente de acordo com o parâmetro de entrada mav.
  3. Calcule a média, a média superior e a média inferior da faixa de Bryn. A média média média é obtida com a função getMA.
  4. Desenho de Brinbelt.
  5. sinais de crescimento e sinais de vazio. Os preços se encaixam quando se encaixam e se encaixam quando se encaixam

Análise de vantagens

A maior vantagem da estratégia é a oferta de vários tipos de médias móveis. Em diferentes ambientes de mercado, as médias móveis reagem de forma lenta e rápida, e a adoção de vários tipos de médias móveis pode aumentar consideravelmente a adaptabilidade da estratégia. Além disso, a estratégia pode otimizar os parâmetros de comprimento das médias móveis para encontrar as melhores combinações, resultando em sinais de negociação mais precisos.

Análise de Riscos

O principal risco desta estratégia é a confusão do sinal da própria média móvel, que pode ter várias falsas rupturas. Além disso, o indicador de faixa de Bryn também é sensível a mudanças drásticas de preços, e a trajetória central não consegue acompanhar os preços de forma eficaz. Isso requer a adoção de tipos de médias móveis mais estáveis e o ajuste adequado dos parâmetros.

Direção de otimização

A estratégia pode ser melhorada em vários aspectos:

  1. Teste diferentes combinações de médias móveis para encontrar os melhores parâmetros e melhorar a estabilidade do sinal.
  2. Aumentar a estratégia de stop loss para garantir o controle de perdas causadas por sinais errados individuais.
  3. Combinação com outros indicadores para filtrar sinais e evitar transações frequentes, como MACD, KD, etc.
  4. Optimizar a gestão de fundos e ajustar posições.

Resumir

A estratégia é muito inovadora no seu conjunto, oferecendo uma aplicação mais rica em segmentos para o indicador da faixa de Brin. Ao ajustar a média móvel da carteira, é possível obter um sinal mais preciso e estável. Ao mesmo tempo, oferece novas ideias para a otimização da estratégia da faixa de Brin.

Código-fonte da estratégia
/*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)