
La estrategia utiliza brechas en la banda de Brin para detectar señales de negociación, logrando un par de operaciones sobre dos activos positivamente relacionados, MCL y YG. Cuando el precio de MCL toca la banda de Brin para subir, se hace más MCL y se hace más YG; cuando el precio de MCL toca la banda de Brin para bajar, se hace más MCL y se hace más YG, logrando una negociación progresiva sobre la tendencia del precio.
En primer lugar, la estrategia calcula la media SMA y la diferencia estándar StdDev en función de los precios de cierre en un período determinado. Luego, se agrega una cantidad de desviación por debajo de la media SMA, formando el tren superior y el tren inferior de la banda de Bryn.
La estrategia adopta el pensamiento de negociación de ruptura de la banda de burling, es decir, el precio se ve más cuando se rompe la vía, y se ve nada cuando se rompe la vía. La banda de burling se adapta a los cambios en el mercado mediante el ajuste dinámico de la anchura del canal, que puede filtrar eficazmente el ruido de los mercados oscilantes. A diferencia de la vía fija, la anchura del canal de la banda de burling se amplía o se reduce con los cambios en la volatilidad del mercado.
Cuando el MCL se rompe en la vía, indica que el precio del MCL está en una tendencia ascendente, y se hace más MCL, al mismo tiempo que se hace un YG, es decir, comprar un activo más fuerte y vender un activo más débil para beneficiarse de la ampliación de la diferencia de precios de los dos activos.
Se puede reducir el riesgo mediante la optimización de los parámetros, la selección de objetos de negociación de mayor relevancia y mejor liquidez, y el establecimiento de posiciones de parada razonables.
La estrategia en general es simple y directa, captura de tendencias a través de la banda de Brin y obtiene ganancias alfa de las operaciones de pareja. Pero hay algunos espacios de optimización como la optimización de parámetros, el stop loss y la opción de pareja. Se puede obtener un mejor efecto de la estrategia probando diferentes parámetros, objetos de negociación e introduciendo adecuadamente métodos como el filtro de tendencias.
/*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)