
A estratégia usa a ruptura da faixa de Brin para detectar sinais de negociação, permitindo a parceria de negociação de dois ativos positivamente correlacionados, MCL e YG. Quando o preço da MCL toca a faixa de Brin para subir, faça mais MCL e faça mais YG. Quando o preço da MCL toca a faixa de Brin para descer, faça mais MCL e faça mais YG, permitindo a negociação de tendências de preços.
Primeiro, a estratégia calcula a média SMA e a diferença padrão StdDev com base no preço de fechamento em um determinado período. Em seguida, adiciona um desvio abaixo da média SMA, formando um trajeto superior e um trajeto inferior da faixa de Bryn. Quando o preço toca a trajetória superior, gera um sinal de compra, e quando toca a trajetória inferior, gera um sinal de venda.
A estratégia usa o conceito de negociação de ruptura da faixa de brinquedos, ou seja, o preço é maior quando o preço se eleva e é menor quando ele desce. A faixa de brinquedos ajusta dinamicamente a largura do canal para se adaptar às mudanças no mercado, podendo filtrar efetivamente o ruído do mercado de turbulência. Ao contrário do canal fixo, a largura do canal da faixa de brinquedos aumenta ou diminui com as mudanças na volatilidade do mercado.
Quando o MCL é quebrado, indica que o preço do MCL está em uma tendência ascendente, fazendo mais MCL, ao mesmo tempo em que faz o YG, ou seja, compra os ativos mais fortes e vende os ativos mais fracos para lucrar com a ampliação da diferença de preços dos dois ativos.
Pode-se reduzir o risco por meio de métodos como a otimização de parâmetros, a escolha de objetos de negociação mais relevantes e com melhor liquidez e a definição de posições de parada razoáveis.
A estratégia geral é simples e direta, capturando a tendência por meio da faixa de Bryn e obtendo ganhos alfa de parcerias. Mas há espaço para otimização de alguns parâmetros, como otimizar, parar e optar por parcerias. Melhores resultados podem ser obtidos testando diferentes parâmetros, objetos de negociação e introduzindo adequadamente métodos como filtragem de tendência.
/*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)