Esta estrategia utiliza las rupturas de la banda de Bollinger para generar señales comerciales e implementar el comercio de pares entre dos activos positivamente correlacionados MCL y YG. Se hace largo MCL y corto YG cuando el precio de MCL toca la banda superior, y se hace corto MCL y largo YG cuando el precio de MCL toca la banda inferior, para operar a lo largo de la tendencia del precio.
En primer lugar, la estrategia calcula la línea SMA y StdDev en función de los precios de cierre durante un cierto período. Luego se agrega un desplazamiento por encima y por debajo de la SMA para formar las bandas superior e inferior de las bandas de Bollinger. Se genera una señal de compra cuando el precio toca la banda superior, y una señal de venta cuando el precio toca la banda inferior.
La estrategia utiliza la lógica de negociación de breakout de las bandas de Bollinger: ir largo cuando el precio se rompe por encima de la banda superior y ir corto cuando el precio se rompe por debajo de la banda inferior. Las bandas de Bollinger ajustan dinámicamente el ancho de las bandas en función de la volatilidad del mercado, lo que ayuda a filtrar el ruido del mercado durante los períodos de rango.
Implementa el comercio de pares entre dos activos positivamente correlacionados MCL y YG. Cuando MCL rompe por encima de la banda superior, muestra que MCL está en una tendencia alcista.
Los riesgos pueden reducirse optimizando los parámetros, seleccionando activos con una correlación y liquidez más fuertes, estableciendo un stop loss adecuado, etc.
En general, la estrategia es simple y directa, capturando tendencias con bandas de Bollinger y ganando alfa de la negociación de pares. Pero hay margen de mejora en el ajuste de parámetros, stop loss y selección 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)