
Cette stratégie est basée sur la double ligne moyenne de la courbe de Brin pour prendre des décisions de trading qui suivent la tendance. Elle utilise la convergence et la diffusion de la courbe de Brin pour juger de la variation de la tendance, acheter près de la courbe de Brin, vendre près de la courbe supérieure, réaliser des achats bas et des ventes élevées, et partir à profit.
Cette stratégie utilise simultanément les versions simple et augmentée de Brin.
Les courbes de Brin simples sont des courbes de Brin renforcées qui sont des courbes de Brin renforcées qui sont des courbes de Brin renforcées.
Les orbites supérieures et inférieures sont calculées en utilisant la moyenne orbitale ± N fois la différence standard.
La stratégie juge la tendance en fonction de la distance entre les bandes de Brin et les bandes de descente. Lorsque le spread est inférieur à la limite de référence, cela signifie qu’il est entré dans la zone de tendance et qu’il est possible de suivre la tendance.
Plus précisément, lorsque le prix est proche de la trajectoire descendante, il faut acheter plus, et quand il est proche de la trajectoire montante, il faut vendre. La méthode de stop loss est la méthode de stop loss fixe, avec la possibilité d’activer le suivi des stop losses.
Le bénéfice visé dépend de la plage de placement près de la voie médiane ou de la voie supérieure.
La stratégie permet également de choisir de ne vendre que lorsque le profit est garanti et d’éviter les pertes.
Cette stratégie présente les avantages suivants:
L’application de bandes de broyage simples et de bandes de broyage renforcées permet de comparer les effets des deux types de bandes de broyage, de choisir la meilleure version et d’améliorer l’efficacité de la décision.
Lorsque la courbe de Brin est plus étroite, c’est-à-dire que la courbe est entrée dans une tendance, il y a plus de chances de suivre la tendance.
Le stop-loss à pourcentage fixe est utilisé pour contrôler les pertes individuelles. Il est possible de choisir de s’arrêter à mi-chemin ou à proximité de la voie supérieure et d’activer le stop-loss suivi pour verrouiller davantage de bénéfices.
La vente ne peut empêcher l’expansion de la perte que si elle est assurée par un profit.
La stratégie présente également les risques suivants:
Il existe un certain risque de rétractation dans le trading de tendance, et il faut supporter la pression psychologique de la perte continue.
Lorsque la courbe de Brin est plus large, cela signifie que le marché peut entrer dans une période de choc. Cette stratégie ne fonctionne pas bien et nécessite une suspension de la négociation en attendant la reprise de la tendance.
Les stop-loss à pourcentage fixe peuvent être trop radicaux et doivent être adaptés à des stop-loss plus modérés, tels que les stop-loss ATR.
Cette stratégie peut être optimisée dans les domaines suivants:
Il est possible de tester différents paramètres de la moyenne et du décalage standard pour trouver les combinaisons de paramètres de la bande de Bryn qui conviennent le mieux aux différents marchés.
Les indicateurs MACD, KD et autres peuvent être filtrés en fonction des signaux de la bande de Brin, ce qui réduit les transactions sur les marchés instables.
Il est possible de tester différents modes de stop-loss flottants, ou d’optimiser les points de stop-loss en fonction d’indicateurs tels que l’amplitude, l’ATR.
Optimiser la gestion des positions pour chaque transaction et tester différentes stratégies de compensation.
Cette stratégie intègre les avantages de l’indicateur de la double bande de Brin, en fonction de la largeur de la bande de Brin pour juger de la tendance, pour effectuer des transactions de suivi à faible absorption et à haute dispersion pendant la tendance. En même temps, un mécanisme de stop-loss scientifique est mis en place pour contrôler les risques. La stratégie peut améliorer encore la stabilité en optimisant les paramètres et en combinant le filtrage d’autres indicateurs.
/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 00:00:00
period: 1h
basePeriod: 15m
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/
// © JCGMarkets
//@version=4
strategy("B.Bands | Augmented | Intra-range | Long-Only", shorttitle = "BB|A|IR|L", initial_capital=5000, commission_value=0.075, slippage = 1, overlay = true)
//Technical Indicators Data
show_simp = input(false, title="Trade on Simple Bollinger Bands ", type= input.bool, group="Select Strategy System")
show_augm = input(true, title="Trade on Augmented Bollinger Bands", type= input.bool, group="Select Strategy System")
periods = input(20, title="Periods for Moving Average", type =input.integer, minval = 2, step = 1, group="Technical Inputs")
std = input(2, title="Std", type = input.float, minval=0.1 , step = 0.1, group="Technical Inputs")
// Strategy data
max_spread_bb = input(20000.0, title="Max Spread Tolerance Beetween Bands", type=input.float, step=0.1, group="Strategy Inputs")
entry_source = input(close, title="Entry data source", type=input.source, group="Strategy Inputs")
exit_source = input(high, title="Exit data source", type=input.source, group="Strategy Inputs")
take_profit = input("middle", title = "Profit to band:", options = ["middle", "opposite"], group="Strategy Inputs")
stop_loss = input(3.00, title="Stop Loss %", type=input.float, step=0.05, group="Strategy Inputs")
trailing = input(false, title="Activate trailing stop?", type = input.bool, group="Strategy Inputs")
stop_perc = input(6.00, title="Trailing %", type=input.float, step=0.125, group="Strategy Inputs") * 0.01
sell_profit = input(false, title="Only sell in profit (Stop Loss still active) ", type= input.bool, group="Strategy Inputs")
var SL = 0.0
var SLT= 0.0
//Simple BB Calculation -> adapt if needed with different std for upper-lower, sma-ema, etc
middle_sim = sma(close, periods)
//Augmented BB Calculation -> adapt if needed with different std for upper lower, etc
middle_augm = ema(close, periods)
middle_upp = ema(high, periods)
middle_low = ema(low, periods)
//Multiplier
dev = stdev(close, periods) * std
//Upper & Lower Bands
upper = (middle_sim + dev)
lower = (middle_sim - dev)
//Augmented Bands
upper_augm = (middle_upp + dev)
lower_augm = (middle_low - dev)
//Bands Spread
spread = upper - lower
spread_augm = upper_augm - lower_augm
//From date
filter_from = input( true, title="===> From", group="Date Control")
from_y = input( 2010, title = "from year", group="Date Control")
from_m = input( 1, title = "from month", minval =1, maxval=12, group="Date Control")
from_d = input( 1, title = "from day", minval=1, maxval=31, group="Date Control")
//To date
filter_to = input( true, title="===> To", group="Date Control")
to_y = input( 2030, title = "To year", group="Date Control")
to_m = input( 1, title = "To month", minval =1, maxval=12, group="Date Control")
to_d = input( 1, title = "To day", minval=1, maxval=31, group="Date Control")
// Date Condition
In_date() => true
in_position = strategy.position_size > 0
// Trailing stop
SLT := if in_position and In_date()
stop_inicial = entry_source * (1 - stop_perc)
max(stop_inicial, SLT[1])
else
0
slts = (low <= SLT) and (trailing == true)
//Essential Trade logics
entry_long = (entry_source <= lower) and (spread < max_spread_bb)
entry_long_augm = (entry_source <= lower_augm) and (spread_augm < max_spread_bb)
// Simple Bollinger Conditions
if (not in_position and show_simp and In_date())
if entry_long
// Trigger buy order
position_size = round( strategy.equity / close ) // All available equity for this strategy example
strategy.entry("Entry", strategy.long, qty = position_size )
SL := close * (1 - (stop_loss / 100)) // You could determine wether or not implement stop loss with bool input and if condition here.
if in_position and show_simp and not sell_profit and In_date()
//Exits if not sell in profit
if take_profit == "middle"
strategy.exit("Target", "Entry", limit = middle_sim, stop = SL, comment="Exit")
if take_profit == "opposite"
strategy.exit("Target", "Entry", limit = upper, stop = SL, comment="Exit")
if in_position and show_simp and sell_profit and In_date()
//Exits if sell in profit
if take_profit == "middle"
strategy.exit("Target", "Entry", limit = (strategy.openprofit > 0 ? middle_sim: na), stop = SL, comment="Exit")
if take_profit == "opposite"
strategy.exit("Target", "Entry", limit = (strategy.openprofit > 0 ? upper: na), stop = SL, comment="Exit")
if in_position and show_simp and slts and In_date()
//Trailing activation
strategy.close("Entry", comment="SLT")
if not In_date()
//Exit due out of date range
strategy.close("Entry", comment="Out of date range")
// Augmented Bollinger Conditions
if (not in_position and show_augm and In_date())
if entry_long_augm
// Trigger buy order
position_size = round( strategy.equity / close )
strategy.entry("Entry_A", strategy.long, qty = position_size )
SL := close * (1 - (stop_loss / 100) )
if in_position and show_augm and not sell_profit and In_date()
//Exits and not sell in profit
if take_profit == "middle"
strategy.exit("Target", "Entry_A", limit = middle_augm, stop = SL, comment="Exit")
if take_profit == "opposite"
strategy.exit("Target", "Entry_A", limit = upper_augm, stop = SL, comment="Exit")
if in_position and show_augm and sell_profit and In_date()
//Exit only in profit
if take_profit == "middle"
strategy.exit("Target", "Entry_A", limit = (strategy.openprofit > 0 ? middle_augm:na), stop = SL, comment="Exit")
if take_profit == "opposite"
strategy.exit("Target", "Entry_A", limit = (strategy.openprofit > 0 ? upper_augm: na) , stop = SL, comment="Exit")
if in_position and show_augm and slts and In_date()
//Trigger trailing
strategy.close("Entry_A", comment="SLT")
if not In_date()
//Out of date trigger
strategy.close("Entry_A", comment= "Out of date range")
// Plotting
plot(in_position ? SL > 0 ? SL : na : na , style = plot.style_circles, color = color.red, title = "Stop Loss")
plot(in_position ? trailing ? SLT > 0 ? SLT : na : na : na , style = plot.style_circles, color = color.blue, title = "Trailing Stop" )
s = plot(show_simp ? upper : na , color = color.aqua)
plot(show_simp ? middle_sim : na , color=color.red)
i = plot(show_simp ? lower : na , color = color.aqua)
fill(s,i, color=color.new(color.aqua,90))
plot(show_augm ? middle_augm : na , color=color.blue)
s_a = plot( show_augm ? upper_augm : na, color=color.orange)
i_a = plot( show_augm ? lower_augm : na, color= color.orange)
fill(s_a,i_a, color=color.new(color.orange, 90))