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.
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.
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.
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)