Cette stratégie utilise les ruptures de la bande de Bollinger pour générer des signaux de trading et mettre en œuvre le trading en paire entre deux actifs positivement corrélés MCL et YG. Elle va long MCL et court YG lorsque le prix du MCL touche la bande supérieure, et court MCL et long YG lorsque le prix du MCL touche la bande inférieure, pour trader le long de la tendance des prix.
Premièrement, la stratégie calcule la ligne SMA et StdDev en fonction des prix de clôture sur une certaine période. Puis elle ajoute un décalage au-dessus et en dessous de la SMA pour former les bandes supérieure et inférieure des bandes de Bollinger. Un signal d'achat est généré lorsque le prix touche la bande supérieure, et un signal de vente lorsque le prix touche la bande inférieure.
La stratégie utilise la logique de négociation de rupture des bandes de Bollinger - aller long lorsque le prix dépasse la bande supérieure et aller court lorsque le prix dépasse la bande inférieure. Les bandes de Bollinger ajustent dynamiquement la largeur des bandes en fonction de la volatilité du marché, ce qui aide à filtrer le bruit du marché pendant les périodes d'intervalle.
Il implémente le trading de paires entre deux actifs positivement corrélés MCL et YG. Lorsque MCL dépasse la bande supérieure, cela montre que MCL est en tendance haussière.
Les risques peuvent être réduits en optimisant les paramètres, en sélectionnant des actifs ayant une corrélation et une liquidité plus fortes, en définissant un stop loss approprié, etc.
Dans l'ensemble, la stratégie est simple et directe, capturant les tendances avec des bandes de Bollinger et gagnant de l'alpha du trading en paire. Mais il y a place à l'amélioration de l'ajustement des paramètres, du stop loss et de la sélection des paires.
/*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)