Estratégia do indicador PB de banda média

Autora:ChaoZhang, Data: 2024-01-17 17:10:53
Tags:

img

Resumo

Esta estratégia calcula o indicador médio PB e as bandas de Bollinger para determinar a relação de cruz de ouro e cruz morta entre o indicador PB e os trilhos superior e inferior das bandas de Bollinger.

Princípio da estratégia

O indicador médio PB combina a estabilidade do sistema de média móvel e a sensibilidade do indicador PB. Ele usa a diferença entre médias móveis rápidas e lentas de diferentes ciclos para expressar as tendências de mudança de preços para determinar as tendências longas e curtas.

A estratégia também usa o indicador Bollinger Band para identificar condições de sobrecompra e sobrevenda do preço das ações. O indicador Bollinger Band consiste em três curvas: trilho médio, trilho superior e trilho inferior. O trilho médio é a média móvel de n dias; os trilhos superior e inferior são calculados com base no trilho médio e na volatilidade histórica. Quando o preço das ações está perto do trilho superior, está na zona de sobrecompra; quando está perto do trilho inferior, está na zona de sobrevenda, e a área ao redor do trilho médio é uma faixa de preços razoável para o estoque.

Em resumo, esta estratégia usa inteligentemente o indicador PB médio para determinar a tendência de alta ou baixa dos preços das ações, e as bandas de Bollinger como um indicador auxiliar para determinar as condições de sobrecompra e sobrevenda, para encontrar sinais de negociação da relação entre os dois indicadores.

Análise das vantagens

As principais vantagens desta estratégia são:

  1. Usar o indicador médio PB para determinar as alterações nas tendências dos preços, alta sensibilidade
  2. Ajudar com as bandas de Bollinger a identificar zonas de sobrecompra e sobrevenda para melhorar a precisão da determinação dos pontos de entrada e saída
  3. Lógica estratégica simples, fácil de implementar
  4. Os dados de backtest mostram rendimentos relativamente satisfatórios

Análise de riscos

Os principais riscos desta estratégia são:

  1. Tanto o indicador PB médio quanto as Bandas de Bollinger dependem de dados históricos para o cálculo.
  2. O indicador PB e as Bandas de Bollinger são bastante sensíveis às configurações dos parâmetros.
  3. As alterações macroeconómicas no ambiente durante o período de execução da estratégia, tais como a crise económica, as alterações de política, etc., podem causar o fracasso da estratégia.

Para abordar os riscos acima, métodos como a otimização das configurações dos parâmetros, o rigor do stop loss, considerando os factores macro, a monitorização manual podem ser utilizados para a mitigação do risco.

Orientações de otimização

As direcções de otimização desta estratégia incluem:

  1. Otimizar os parâmetros do indicador PB médio e das Bandas de Bollinger para encontrar a melhor combinação de parâmetros
  2. Adicionar outros indicadores para filtragem, tais como MACD, KDJ, etc. para melhorar o desempenho da estratégia
  3. Adicionar mecanismos de stop loss para controlar efetivamente a perda única
  4. Incorporar indicadores de prazo maior para determinar a tendência principal para evitar a negociação contra a tendência

Conclusão

O desempenho geral desta estratégia é bastante satisfatório. Com o indicador PB médio como seu núcleo e as Bandas de Bollinger para ajudar a determinar os sinais de negociação, ele tem lógica simples, alta sensibilidade e resultados de backtest decentes. Continuando a otimizar as configurações de parâmetros, adicionando outros indicadores de assistência, implementando stop loss rigoroso, etc., a lucratividade e a estabilidade da estratégia podem ser melhoradas. Vale a pena verificar na negociação e aplicação ao vivo.


/*backtest
start: 2024-01-09 00:00:00
end: 2024-01-16 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("BandPass EOS", overlay=false, initial_capital = 1000)

src = input(close, "Source", input.source)
Period1 = input(41, "Fast Period", input.integer)
Period2 = input(54, "Slow Period", input.integer)
showBG = input(false, "Show crosses on background?", input.bool)
UseReversalStop = input(true, "Use additional triggers?", input.bool)

//Super Passband Filter
a1 = 0.0
a2 = 0.0
PB = 0.0
RMS = 0.0
if bar_index > Period1
    a1 := 5 / Period1
    a2 := 5 / Period2
    PB := (a1 - a2) * src + (a2 * (1 - a1) - a1 * (1 - a2)) * src[1] + 
       (1 - a1 + 1 - a2) * nz(PB[1]) - (1 - a1) * (1 - a2) * nz(PB[2])
    for i = 0 to 49 by 1
        RMS := RMS + PB[i] * PB[i]
        RMS
    RMS := sqrt(RMS / 40)
    RMS
z = 0

buy = PB > PB [5] and crossover(PB, -RMS) or PB > PB [5] and crossover (PB, RMS) or PB > PB [5] and crossover (PB, z)
sell = PB < PB [5] and crossunder(PB, RMS) or PB < PB [5] and crossunder (PB, -RMS) or PB < PB [5] and crossunder (PB, z)
signal = buy ? 1 : sell ? -1 : 0
bg = buy ? color.green : sell ? color.red : color.white
bg := showBG ? bg : na
upperFill = PB>RMS ? color.lime : na
lowerFill = PB<-RMS ? color.red : na

p1 = plot(PB,"PB",color.red)
p2 = plot(RMS,"+RMS",color.blue)
p3 = plot(-RMS,"-RMS",color.blue)
bgcolor(bg)
fill(p1,p2,upperFill)
fill(p1,p3,lowerFill)
hline(0)



//PERIOD
testStartYear = input(2018, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true
    
lcolor = PB > PB [5] and crossover(PB, -RMS) or PB > PB [5] and crossover (PB, RMS) or PB > PB [5] and crossover (PB, z)
scolor = PB < PB [5] and crossunder(PB, RMS) or PB < PB [5] and crossunder (PB, -RMS) or PB < PB [5] and crossunder (PB, z)

c1 = (PB < PB [5] and crossunder(PB, RMS) or PB < PB [5] and crossunder (PB, -RMS) or PB < PB [5] and crossunder (PB, z))
c2 = (PB > PB [5] and crossover(PB, -RMS) or PB > PB [5] and crossover (PB, RMS) or PB > PB [5] and crossover (PB, z))

plot (c1 ? PB : na, style = plot.style_circles, color = color.red, linewidth = 3)
plot (c2 ? PB : na, style = plot.style_circles, color = color.green, linewidth = 3)

if (PB > PB [5] and crossover(PB, -RMS) or PB > PB [5] and crossover (PB, RMS) or PB > PB [5] and crossover (PB, z))
    strategy.entry("long", strategy.long, when = testPeriod())


if (PB < PB [5] and crossunder(PB, RMS) or PB < PB [5] and crossunder (PB, -RMS) or PB < PB [5] and crossunder (PB, z))
    strategy.entry("short", strategy.short, when = testPeriod())

    

Mais.