Desvio padrão triplo - Estratégia de negociação quantitativa inovadora de banda de Bollinger combinada com otimização de média móvel de 100 dias

MA BB SMA SD
Data de criação: 2024-12-13 11:20:13 última modificação: 2024-12-13 11:20:13
cópia: 3 Cliques: 483
1
focar em
1617
Seguidores

Desvio padrão triplo - Estratégia de negociação quantitativa inovadora de banda de Bollinger combinada com otimização de média móvel de 100 dias

Visão geral

Esta estratégia é uma estratégia de negociação quantitativa baseada em um breakout da faixa de Brin, com um uptrend de 3x a diferença padrão e um downtrend de 1x a diferença padrão, combinando a média móvel de 100 dias como um midtrend. A estratégia capta tendências de longo prazo principalmente detectando um uptrend de preço e usa o downtrend como um sinal de parada.

Princípio da estratégia

O princípio central da estratégia é baseado nas características estatísticas da faixa de Brin. A trajectória superior usa um desvio padrão de 3x, o que significa que, sob a hipótese de distribuição normal, a probabilidade de o preço romper a trajetória superior é de apenas 0,15%, portanto, quando ocorre uma ruptura, geralmente indica a formação de uma tendência significativa. A trajectória central usa uma média móvel de 100 dias, que é um período suficientemente longo para filtrar efetivamente o ruído do mercado de curto prazo. A trajectória inferior usa um desvio padrão de 1x, como uma linha de parada, que é relativamente conservadora e ajuda a parar as perdas.

Vantagens estratégicas

  1. Capacidade de captação de tendências: com uma configuração de três vezes a diferença padrão, é possível capturar com eficiência oportunidades importantes de ruptura de tendências.
  2. O controle de risco é razoável: o uso de 1x a diferença padrão como linha de parada, é mais conservador no controle de risco.
  3. Os parâmetros são muito ajustáveis: o múltiplo de diferença padrão para cima e para baixo e o ciclo da média móvel podem ser ajustados de acordo com diferentes características do mercado.
  4. Forte sistematização: lógica estratégica clara, função de feedback perfeita, com precisão estatística do desempenho das transações.
  5. Ampla adaptabilidade: pode ser aplicada em vários campos, como o mercado de ações e o mercado de criptomoedas.

Risco estratégico

  1. Risco de Falso Breakout: O mercado pode ter uma rápida retracção após breakouts de curto prazo, levando a falsos sinais.
  2. Retiradas maiores: Retiradas maiores podem ocorrer em mercados de alta volatilidade.
  3. Risco de atraso: a linha média de 100 dias tem um certo atraso, podendo perder algumas corridas rápidas.
  4. Dependência do cenário de mercado: pode haver frequência de entrada e saída em mercados turbulentos, gerando custos de transação excessivos.

Direção de otimização da estratégia

  1. Introdução de confirmação de transação: pode ser adicionado um mecanismo de confirmação de transação para aumentar a confiabilidade do sinal.
  2. Otimização do mecanismo de parada de perdas: pode ser considerado a introdução de tracking stop ou stop ATR dinâmico, aumentando a flexibilidade de parada de perdas.
  3. Adição de filtro de tendências: pode ser adicionado um indicador de tendência de longo prazo, apenas para negociar na direção da tendência principal.
  4. Optimizar o gerenciamento de posições: pode ajustar o tamanho das posições de acordo com a dinâmica da força da ruptura.
  5. Adição de filtro de tempo: permite evitar a negociação em horários específicos do mercado.

Resumir

Trata-se de uma estratégia de acompanhamento de tendências concebida de forma racional e logicamente clara. Através das características estatísticas e de acompanhamento de tendências do Brin Belt e das médias móveis, é possível capturar de forma eficaz oportunidades importantes de ruptura no mercado.

Código-fonte da estratégia
/*backtest
start: 2024-11-12 00:00:00
end: 2024-12-11 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © MounirTrades007

// @version=6
strategy("Bollinger Bands", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=200)

// Get user input
var g_bb        = "Bollinger Band Settings"
upperBandSD     = input.float(title="Upper Band Std Dev", defval=3.0, tooltip="Upper band's standard deviation multiplier", group=g_bb)
lowerBandSD     = input.float(title="Lower Band Std Dev", defval=1.0, tooltip="Lower band's standard deviation multiplier", group=g_bb)
maPeriod        = input.int(title="Middle Band MA Length", defval=100, tooltip="Middle band's SMA period length", group=g_bb)
var g_tester    = "Backtester Settings"
drawTester      = input.bool(title="Draw Backtester", defval=true, group=g_tester, tooltip="Turn on/off inbuilt backtester display")

// Get Bollinger Bands
[bbIgnore1, bbHigh, bbIgnore2] = ta.bb(close, maPeriod, upperBandSD)
[bbMid, bbIgnore3, bbLow]      = ta.bb(close, maPeriod, lowerBandSD)

// Prepare trade persistent variables
drawEntry   = false
drawExit    = false

// Detect bollinger breakout
if close > bbHigh and barstate.isconfirmed and strategy.position_size == 0
    drawEntry := true
    strategy.entry(id="Trade", direction=strategy.long)
    alert("Bollinger Breakout Detected for " + syminfo.ticker, alert.freq_once_per_bar_close)

// Detect bollinger sell signal
if close < bbLow and barstate.isconfirmed and strategy.position_size != 0
    drawExit := true
    strategy.close(id="Trade")
    alert("Bollinger Exit detected for " + syminfo.ticker, alert.freq_once_per_bar_close)

// Draw bollinger bands
plot(bbMid, color=color.blue, title="Middle SMA")
plot(bbHigh, color=color.green, title="Upper Band")
plot(bbLow, color=color.red, title="Lower Band")

// Draw signals
plotshape(drawEntry, style=shape.triangleup, color=color.green, location=location.belowbar, size=size.normal, title="Buy Signal")
plotshape(drawExit, style=shape.xcross, color=color.red, location=location.belowbar, size=size.normal, title="Sell Signal")

// // =============================================================================
// // START BACKTEST CODE
// // =============================================================================

// // Prepare stats table
// var table testTable = table.new(position.top_right, 2, 2, border_width=1)
// f_fillCell(_table, _column, _row, _title, _value, _bgcolor, _txtcolor) =>
//     _cellText = _title + "\n" + _value
//     table.cell(_table, _column, _row, _cellText, bgcolor=_bgcolor, text_color=_txtcolor)

// // Draw stats table
// var bgcolor = color.black
// if barstate.islastconfirmedhistory
//     if drawTester
//         dollarReturn = strategy.equity - strategy.initial_capital
//         f_fillCell(testTable, 0, 0, "Total Trades:", str.tostring(strategy.closedtrades), bgcolor, color.white)
//         f_fillCell(testTable, 0, 1, "Win Rate:", str.tostring(strategy.wintrades / strategy.closedtrades * 100, "##.##") + "%", bgcolor, color.white)
//         f_fillCell(testTable, 1, 0, "Equity:", "$" + str.tostring(strategy.equity, "###,###.##"), bgcolor, color.white)
//         f_fillCell(testTable, 1, 1, "Return:", str.tostring((strategy.netprofit / strategy.initial_capital) * 100, "##.##") + "%", dollarReturn > 0 ? color.green : color.red, color.white)

// // =============================================================================
// // END BACKTEST CODE
// // =============================================================================