
La stratégie de verrouillage des oscillations de large bande est une stratégie de rupture de longue ligne basée sur les indicateurs de la bande de Brin pour déterminer si la volatilité du marché a diminué. Lorsque le marché entre dans la phase de remise en état des oscillations, la bande de Brin se déplace vers le bas et une convergence se produit, ce que nous considérons comme une opportunité d’entrée dans le jeu. Nous combinons également l’indicateur de la plage de fluctuation réelle moyenne pour confirmer la diminution de la volatilité des prix.
La stratégie repose principalement sur l’indicateur de la ceinture de Brin pour déterminer si le prix est entré dans une période de basse volatilité. La ligne de milieu de la ceinture de Brin est la moyenne mobile du prix de clôture, les deux écarts de référence de chaque déviation de haut en bas de la ceinture de haut en bas. Lorsque la volatilité des prix diminue, l’espace entre les hauts et les bas de l’orbite se rétrécit de manière significative.
Afin de confirmer davantage la baisse de la volatilité, nous avons testé si la moyenne mobile de l’ATR avait une tendance à la baisse. La baisse de l’ATR moyen est également une preuve latérale de la diminution de la volatilité. Lorsque les deux conditions ci-dessus sont réunies, nous concluons que la convergence de la bande de Brin est déjà apparente, ce qui est un excellent moment pour acheter.
Après avoir acheté, nous activons la stratégie de stop mobile avec deux fois la valeur ATR comme distance de stop. Cela permet de contrôler efficacement les pertes.
Le plus grand avantage de cette stratégie est qu’elle permet de déterminer avec précision le moment où le marché entre dans une période de rattrapage de la basse volatilité, ce qui permet de déterminer le meilleur moment pour acheter. Comparativement aux autres stratégies de longue ligne, la stratégie de verrouillage de la secousse à large bande offre une probabilité de profit plus élevée.
Deuxièmement, la stratégie utilise également le stop-loss mobile pour contrôler activement le risque. Cela permet de minimiser les pertes même si les conditions sont défavorables. C’est ce qui manque à de nombreuses stratégies à long terme.
Le principal risque de la stratégie réside dans le fait que l’indicateur des bandes de Brin ne peut pas être 100% précis pour déterminer les variations de la volatilité des prix. Lorsque la volatilité des bandes de Brin est faussée, le moment où nous achetons peut être défavorable.
En outre, les paramètres de la stratégie peuvent avoir un impact sur les résultats. Nous devons optimiser les paramètres en effectuant de nombreuses réponses pour rendre la stratégie plus robuste.
Nous pouvons envisager d’ajouter d’autres indicateurs pour confirmer que les indicateurs tendanciels ont également des signes de retournement. Par exemple, lorsque les courbes de Burin se contractent, nous demandons également que la différence MACD ait été transférée négativement, ou que le RSI ait été détecté par une zone de survente. Cela peut améliorer encore la précision du moment d’achat.
L’autre direction est de tester l’influence de différents paramètres sur les résultats, tels que les paramètres du cycle de la bande de Boole, du cycle ATR et du multiplicateur de stop-loss mobile. Nous devons utiliser l’optimisation par étapes pour trouver la combinaison optimale de paramètres.
La stratégie de verrouillage des oscillations de large bande est une stratégie de rupture de longue ligne relativement stable qui utilise l’indicateur de la bande de Brin pour déterminer le moment de la baisse de la volatilité des prix et le risque de contrôle efficace des arrêts mobiles. Nous devons encore optimiser davantage les paramètres et combiner d’autres indicateurs pour améliorer la solidité de la stratégie.
/*backtest
start: 2023-02-15 00:00:00
end: 2024-02-21 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/
// © DojiEmoji
//@version=4
strategy("[KL] Bollinger Bands Consolidation Strategy",overlay=true,pyramiding=1)
// Timeframe {
backtest_timeframe_start = input(defval = timestamp("01 Apr 2016 13:30 +0000"), title = "Backtest Start Time", type = input.time)
USE_ENDTIME = input(false,title="Define backtest end-time (If false, will test up to most recent candle)")
backtest_timeframe_end = input(defval = timestamp("19 Apr 2021 19:30 +0000"), title = "Backtest End Time (if checked above)", type = input.time)
within_timeframe = true
// }
// Indicator: BOLL bands {
BOLL_length = 20//input(20,title="Periods to lookback for BOLL and ATR calc. (default 20)")
BOLL_src = close
BOLL_center = sma(BOLL_src, BOLL_length)
BOLL_sDEV_x2 = 2 * stdev(BOLL_src, BOLL_length)
BOLL_upper = BOLL_center + BOLL_sDEV_x2
BOLL_lower = BOLL_center - BOLL_sDEV_x2
plot(BOLL_center, "Basis", color=#872323, offset = 0)
BOLL_p1 = plot(BOLL_upper, "Upper", color=color.navy, offset = 0, transp=50)
BOLL_p2 = plot(BOLL_lower, "Lower", color=color.navy, offset = 0, transp=50)
fill(BOLL_p1, BOLL_p2, title = "Background", color=#198787, transp=85)
// }
// ATR and volatility Indicator {
ATR_x2 = atr(BOLL_length) * 2 // multiplier aligns with BOLL
avg_volat = sma(ATR_x2, BOLL_length)
//}
// Trailing stop loss {
var entry_price = float(0)
var trailing_SL_buffer = float(0)
var stop_loss_price = float(0)
trail_profit_line_color = color.green
UPDATE_ATR_TSL = false
if strategy.position_size == 0 or not within_timeframe // make TSL line less visible
trail_profit_line_color := color.black
stop_loss_price := close - trailing_SL_buffer
else if strategy.position_size > 0
if UPDATE_ATR_TSL and ATR_x2 < trailing_SL_buffer
trailing_SL_buffer := ATR_x2
stop_loss_price := max(stop_loss_price, close[1] - trailing_SL_buffer)
plot(stop_loss_price,color=trail_profit_line_color)
// }
IGNORE_BOLL_SHAPE = false//input(false,title="Ignore BOLL (vs ATR) during entry (experimental)")
IGNORE_VOLATILITY = false///input(false,title="Ignore average ATR during entry (experimental)")
// Main:
if within_timeframe
// ENTRY:
if (ATR_x2 > BOLL_sDEV_x2 or IGNORE_BOLL_SHAPE) and (avg_volat < avg_volat[1] or IGNORE_VOLATILITY)
if strategy.position_size == 0
entry_price := close
trailing_SL_buffer := ATR_x2
stop_loss_price := close - ATR_x2
strategy.entry("Long",strategy.long, comment="enter")
if strategy.position_size > 0
strategy.entry("Long",strategy.long, comment="+")
// EXIT:
if strategy.position_size > 0
if low <= stop_loss_price
if close > entry_price
strategy.close("Long", comment="take profit")
else if low <= entry_price
strategy.close("Long", comment="stop loss")
if strategy.position_size == 0
entry_price := 0