Cette stratégie est une stratégie de suivi des tendances et de rupture basée sur l'indicateur des bandes récursives développé par alexgrover.
L'indicateur des bandes récursives se compose d'une bande supérieure, d'une bande inférieure et d'une ligne médiane.
Bande supérieure = Max ((Bande supérieure de la barre précédente, prix de clôture + nVolatilité) Marge inférieure = Min(Marge inférieure de la barre précédente, prix de clôture - nVolatilité Ligne médiane = (bande supérieure + bande inférieure)/2
Ici, n est un coefficient de mise à l'échelle, et la volatilité peut être choisie entre ATR, écart type, plage moyenne vraie ou une méthode RFV spéciale.
La stratégie vérifie d'abord si la bande inférieure et la bande supérieure évoluent dans la même direction afin d'éviter de fausses ruptures.
Lorsque le prix dépasse la bande inférieure, allez long. Lorsque le prix dépasse la bande supérieure, allez court.
En outre, une logique de stop loss est mise en œuvre.
Les avantages de cette stratégie sont les suivants:
Cette stratégie comporte également certains risques:
Ces risques peuvent être gérés par l'optimisation des paramètres, la mise en œuvre d'un stop loss, l'augmentation du seuil de glissement, etc.
Quelques orientations pour optimiser davantage la stratégie:
En résumé, il s'agit d'une stratégie de suivi des tendances très pratique et efficace. Elle combine le cadre récursif pour l'efficacité de calcul, utilise le support/résistance de la tendance pour déterminer les principales tendances, ajoute des conditions de momentum pour filtrer les fausses ruptures et assurer la qualité du signal. Avec un réglage approprié des paramètres et un contrôle des risques, elle peut obtenir de bons résultats. Elle mérite une recherche et une optimisation supplémentaires pour s'adapter à des régimes de marché plus complexes.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // @version=5 // Original indicator by alexgrover strategy('Extended Recursive Bands Strategy', overlay=true, commission_type=strategy.commission.percent,commission_value=0.06,default_qty_type =strategy.percent_of_equity,default_qty_value = 100,initial_capital =1000) length = input.int(260, step=10, title='Length') src = input(close, title='Source') method = input.string('Classic', options=['Classic', 'Atr', 'Stdev', 'Ahlr', 'Rfv'], title='Method') bandDirectionCheck = input.bool(true, title='Bands Hold Direction') lookback = input(3) //---- atr = ta.atr(length) stdev = ta.stdev(src, length) ahlr = ta.sma(high - low, length) rfv = 0. rfv := ta.rising(src, length) or ta.falling(src, length) ? math.abs(ta.change(src)) : rfv[1] //----- f(a, b, c) => method == a ? b : c v(x) => f('Atr', atr, f('Stdev', stdev, f('Ahlr', ahlr, f('Rfv', rfv, x)))) //---- sc = 2 / (length + 1) a = 0. a := math.max(nz(a[1], src), src) - sc * v(math.abs(src - nz(a[1], src))) b = 0. b := math.min(nz(b[1], src), src) + sc * v(math.abs(src - nz(b[1], src))) c = (a+b)/2 // Colors beColor = #675F76 buColor = #a472ff // Plots pA = plot(a, color=color.new(beColor, 0), linewidth=2, title='Upper Band') pB = plot(b, color=color.new(buColor, 0), linewidth=2, title='Lower Band') pC = plot(c, color=color.rgb(120,123,134,0), linewidth=2, title='Middle Band') fill(pC, pA, color=color.new(beColor,90)) fill(pC, pB, color=color.new(buColor,90)) // Band keeping direction // By Adulari longc = 0 shortc = 0 for i = 0 to lookback-1 if b[i] > b[i+1] longc:=longc+1 if a[i] < a[i+1] shortc:=shortc+1 bhdLong = if bandDirectionCheck longc==lookback else true bhdShort = if bandDirectionCheck shortc==lookback else true // Strategy if b>=low and bhdLong strategy.entry(id='Long',direction=strategy.long) if high>=a and bhdShort strategy.entry(id='Short',direction=strategy.short) // TP at middle line //if low<=c and strategy.position_size<0 and strategy.position_avg_price>close //strategy.exit(id="Short",limit=close) //if high>=c and strategy.position_size>0 and strategy.position_avg_price<close //strategy.exit(id="Long",limit=close)