MCL-YG Bollinger Band Breakout Pair Trading Strategy

Autora:ChaoZhang, Data: 2023-11-14 13:49:12
Tags:

img

Resumo

Esta estratégia usa breakouts de Bollinger Band para gerar sinais de negociação e implementar negociação de pares entre dois ativos positivamente correlacionados MCL e YG. Vai longo MCL e curto YG quando o preço do MCL toca a faixa superior, e vai curto MCL e longo YG quando o preço do MCL toca a faixa inferior, para negociar ao longo da tendência do preço.

Estratégia lógica

Em primeiro lugar, a estratégia calcula a linha SMA e StdDev com base nos preços de fechamento durante um determinado período. Em seguida, adiciona um deslocamento acima e abaixo da SMA para formar as faixas superior e inferior das Bandas de Bollinger. Um sinal de compra é gerado quando o preço toca a faixa superior e um sinal de venda quando o preço toca a faixa inferior.

A estratégia utiliza a lógica de negociação de breakout das Bandas de Bollinger - vá longo quando o preço quebra acima da faixa superior e vá curto quando o preço quebra abaixo da faixa inferior. As Bandas de Bollinger ajustam dinamicamente a largura das bandas com base na volatilidade do mercado, o que ajuda a filtrar o ruído do mercado durante os períodos de variação. Ao contrário das bandas de canal fixo, as Bandas de Bollinger se alargam durante a alta volatilidade e se estreitam durante a baixa volatilidade. Isso permite filtrar algum ruído quando a volatilidade é alta e capturar breakouts menores quando a volatilidade é baixa.

Implementa negociação de pares entre dois ativos positivamente correlacionados MCL e YG. Quando o MCL quebra acima da faixa superior, mostra que o MCL está em uma tendência de alta.

Vantagens

  1. A negociação de breakout baseada em Bandas de Bollinger pode filtrar eficazmente o ruído do mercado e identificar tendências
  2. A negociação em pares de ativos correlacionados pode obter retornos alfa da divergência de preços
  3. O dimensionamento dinâmico das posições ajuda a controlar o risco para operações individuais
  4. A lógica padrão de entrada e saída de ruptura torna a lógica da estratégia simples e clara

Riscos

  1. A regulação dos parâmetros das bandas de Bollinger pode conduzir a um número excessivo de sinais ou sinais pouco claros
  2. A diminuição da correlação entre os ativos pode reduzir os lucros da negociação do par
  3. Os breakouts podem ser enganados por sinais falsos em mercados agitados, causando perdas
  4. Não haver stop loss pode levar a perdas aumentadas para transações individuais

Os riscos podem ser reduzidos através da otimização dos parâmetros, seleção de ativos com correlação e liquidez mais fortes, definição de stop loss adequados, etc.

Oportunidades de otimização

  1. Otimizar os parâmetros das bandas de Bollinger para encontrar a melhor combinação
  2. Teste mais pares de ativos correlacionados e selecione a melhor combinação
  3. Adicionar a lógica de stop loss para limitar as perdas para transações individuais
  4. Adicionar mais filtros para evitar falsos sinais de fuga
  5. Incorporar outros fatores como confirmação de volume para melhorar o tempo de entrada

Resumo

Em geral, a estratégia é simples e direta, capturando tendências com Bandas de Bollinger e ganhando alfa a partir da negociação de pares. Mas há espaço para melhoria no ajuste de parâmetros, stop loss e seleção de pares.


/*backtest
start: 2022-11-07 00:00:00
end: 2023-11-13 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © shark792

//@version=5

// 1. Define strategy settings
strategy(title="MCL-YG Pair Trading Strategy", overlay=true,
     pyramiding=0, initial_capital=10000,
     commission_type=strategy.commission.cash_per_order,
     commission_value=4, slippage=2)

smaLength = input.int(title="SMA Length", defval=20)
stdLength = input.int(title="StdDev Length", defval=20)

ubOffset = input.float(title="Upper Band Offset", defval=1, step=0.5)
lbOffset = input.float(title="Lower Band Offset", defval=1, step=0.5)

usePosSize = input.bool(title="Use Position Sizing?", defval=true)
riskPerc   = input.float(title="Risk %", defval=0.5, step=0.25)


// 2. Calculate strategy values
smaValue = ta.sma(close, smaLength)
stdDev   = ta.stdev(close, stdLength)

upperBand = smaValue + (stdDev * ubOffset)
lowerBand = smaValue - (stdDev * lbOffset)

riskEquity  = (riskPerc / 100) * strategy.equity
atrCurrency = (ta.atr(20) * syminfo.pointvalue)
posSize     = usePosSize ? math.floor(riskEquity / atrCurrency) : 1


// 3. Output strategy data
plot(series=smaValue, title="SMA", color=color.teal)

plot(series=upperBand, title="UB", color=color.green,
     linewidth=2)
plot(series=lowerBand, title="LB", color=color.red,
     linewidth=2)


// 4. Determine long trading conditions
enterLong = ta.crossover(close, upperBand)
exitLong  = ta.crossunder(close, smaValue)


// 5. Code short trading conditions
enterShort = ta.crossunder(close, lowerBand)
exitShort  = ta.crossover(close, smaValue)


// 6. Submit entry orders
if enterLong
    strategy.entry(id="EL", direction=strategy.long, qty=posSize)

if enterShort
    strategy.entry(id="ES", direction=strategy.short, qty=posSize)


// 7. Submit exit orders
strategy.close(id="EL", when=exitLong)
strategy.close(id="ES", when=exitShort)



Mais.