Esta estratégia baseia-se no indicador de Bollinger Bands. Ele vai longo quando o preço quebra acima da faixa inferior e fecha a posição quando o preço toca a faixa superior.
Calcular a banda média SMA como a média móvel simples dos preços de fechamento recentes.
Calcular o desvio-padrão StdDev para refletir o intervalo de flutuação dos preços.
Adicione o deslocamento superior do desvio padrão à banda média SMA para obter a banda superior.
Subtrair o deslocamento inferior do desvio padrão da banda média SMA para obter a banda inferior.
Vá longo quando o preço de fechamento quebra acima da faixa inferior de baixo para cima.
Fechar a posição quando o preço tocar a faixa superior, uma vez que o preço é considerado anormal.
A maior vantagem desta estratégia é a utilização das propriedades estatísticas das Bandas de Bollinger para rastrear efetivamente as flutuações anormais do mercado e capturar tendências.
Bandas de Bollinger As bandas superior e inferior podem adaptar-se automaticamente à volatilidade do mercado.
Os sinais de fuga são mais confiáveis para a entrada.
A reversão para o meio é razoável para obter lucro.
Espaço de ajuste de parâmetros para ajustar a diferentes mercados.
Pode capturar tendências de médio a longo prazo e também ser utilizado a curto prazo.
Os riscos potenciais desta estratégia são principalmente:
Mau desempenho das Bandas de Bollinger em mercados de intervalo, evitar entradas erradas.
Os sinais de fuga podem ser falsos, precisam de julgamentos prudentes.
A posição de lucro é muito idealizada, pode ser otimizada para a ação real do preço.
A configuração inadequada dos parâmetros pode conduzir a um excesso de negociação ou a um excesso de conservadorismo.
O período de ensaio posterior deve ser suficientemente longo para evitar a adaptação da curva.
Medidas de gestão de riscos correspondentes:
Adicionar indicadores de volume de negociação aos sinais de filtragem.
Otimizar parâmetros e dados de ensaio de diferentes mercados.
Adicione os níveis de stop loss e de lucro.
Avaliar as divergências de sinal, evitar perseguir altos e vender baixos.
A estratégia pode ser otimizada nos seguintes aspectos:
Tente diferentes combinações de parâmetros de Bollinger Bands para encontrar o ideal.
Adicionar MA, MACD etc para filtrar sinais de ruptura.
Aplicar algoritmos de aprendizagem de máquina para otimizar parâmetros de Bollinger.
Avaliar a força das rupturas e ajustar o dimensionamento da posição.
Testes de retorno por períodos mais longos para testar a estabilidade.
Adicionar mecanismos de stop loss para controlar o risco.
Em resumo, a estratégia de Bandas de Bollinger é uma estratégia geral confiável de tendência. Ela pode efetivamente capturar flutuações anormais de preços. Mas também devemos notar seu desvio do preço real e otimizar constantemente os parâmetros.
/*backtest start: 2023-09-11 00:00:00 end: 2023-09-12 04:00:00 period: 10m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="BB training No Repainting (OTS Mode)", overlay=true) // Strategy Rules: // 1. Enter trade when price crosses above the lower band // 2. Exit trade when price touches the upper band // // Chart Properties testStartYear = input(2010, "Backtest Start Year") testStartMonth = input(01, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0) testStopYear = input(2030, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(30, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0) // A switch to control background coloring of the test period testPeriodBackground = input(title="Color Background?", type=input.bool, defval=true) testPeriodBackgroundColor = testPeriodBackground and time >= testPeriodStart and time <= testPeriodStop ? #6c6f6c : na bgcolor(testPeriodBackgroundColor, transp=97) // User provided values smaLength = input(title="SMA Length", type=input.integer, defval=20) // Middle band period length (moving average) stdLength = input(title="StdDev Length", type=input.integer, defval=20) // Range to apply bands to ubOffset = input(title="Upper Band Offset", type=input.float, defval=2.0, step=0.5) // Number of standard deviations above MA lbOffset = input(title="Lower Band Offset", type=input.float, defval=2.0, step=0.5) // Number of standard deviation below MA testPeriod() => time >= testPeriodStart and time <= testPeriodStop ? true : false smaValue = sma(close, smaLength) // Middle band stdDev = stdev(close, stdLength) upperBand = smaValue + stdDev * ubOffset // Top band lowerBand = smaValue - stdDev * lbOffset // Bottom band // Plot bands to chart plot(series=smaValue, title="SMA", color=color.green) plot(series=upperBand, title="UB", color=color.blue, linewidth=2) plot(series=lowerBand, title="LB", color=color.blue, linewidth=2) longCondition = (crossover(close, lowerBand)) closeLongCondition = (close >= upperBand) if (longCondition and testPeriod()) strategy.entry(id="CALL", long=true) strategy.close(id="CALL", when=closeLongCondition)