Stratégie de suivi de tendance des bandes de Bollinger à double moyenne mobile


Date de création: 2023-11-01 14:15:11 Dernière modification: 2023-11-01 14:15:11
Copier: 0 Nombre de clics: 614
1
Suivre
1617
Abonnés

Stratégie de suivi de tendance des bandes de Bollinger à double moyenne mobile

Aperçu

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.

Principe de stratégie

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.

Analyse des avantages

Cette stratégie présente les avantages suivants:

  1. La double ceinture de Brin, pour une meilleure prise de décision

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.

  1. La largeur des voies de la ceinture de Brin indique le degré de tendance

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.

  1. Une méthode flexible pour arrêter les pertes

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.

  1. Les mécanismes de protection contre les pertes

La vente ne peut empêcher l’expansion de la perte que si elle est assurée par un profit.

Analyse des risques

La stratégie présente également les risques suivants:

  1. Les risques de retrait

Il existe un certain risque de rétractation dans le trading de tendance, et il faut supporter la pression psychologique de la perte continue.

  1. Le risque de secousses

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.

  1. Risque de déclenchement du stop-loss

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.

Direction d’optimisation

Cette stratégie peut être optimisée dans les domaines suivants:

  1. Optimiser les paramètres de la bande de Bryn

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.

  1. Filtrage en combinaison avec d’autres indicateurs

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.

  1. Optimiser les stratégies de stop loss

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.

  1. Optimisation de la gestion des fonds

Optimiser la gestion des positions pour chaque transaction et tester différentes stratégies de compensation.

Résumer

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.

Code source de la stratégie
/*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))