Stratégie de renversement quotidien de Super Trend


Date de création: 2024-02-22 16:22:28 Dernière modification: 2024-02-22 16:22:28
Copier: 0 Nombre de clics: 724
1
Suivre
1617
Abonnés

Stratégie de renversement quotidien de Super Trend

Aperçu

La stratégie de réversion quotidienne de la super tendance est une stratégie de négociation quantitative qui utilise l’indicateur de la super tendance pour déterminer la tendance du marché, en combinant la rupture des prix et le calcul de la zone de fluctuation moyenne réelle, et en utilisant le taux de variation des prix pour filtrer les signaux de la super tendance. La stratégie s’applique à la ligne du jour et à des périodes de temps plus longues, et peut être utilisée dans des marchés tels que les monnaies numériques et les actions.

Principe de stratégie

L’indicateur de tendance supérieure est basé sur la plage de fluctuation réelle moyenne (ATR) et permet de mieux juger de la direction de la tendance du marché. Il est utilisé comme un signal de baisse lorsque le prix franchit la tendance supérieure et comme un signal de hausse lorsque le prix franchit la tendance.

Cette stratégie est accompagnée d’un filtrage des indicateurs de tendance supérieure par l’utilisation d’indicateurs de variation du taux de change des prix (ROC) afin d’éviter les signaux inefficaces. Il ne faut participer aux signaux de tendance supérieure que lorsque les fluctuations des prix sont importantes, sinon il ne faut pas y participer.

En ce qui concerne le stop loss, la stratégie offre deux types de stop loss: un stop loss fixe et un stop loss automatique basé sur l’ATR. Le stop loss fixe est simple et direct, l’ATR peut ajuster la portée du stop loss en fonction de la volatilité du marché.

La condition d’entrée est le renversement de l’indicateur de super-tendance et l’indicateur du taux de variation des prix passe par le filtre. La condition de sortie est le renversement de la super-tendance ou la rupture de la ligne de stop-loss. La stratégie suit le principe du suivi de la tendance et ne permet qu’une position par direction.

Analyse des avantages

Le plus grand avantage de cette stratégie réside dans la plus grande clarté et stabilité de la direction de la tendance à l’aide d’un indicateur de tendance super, et un bruit moindre par rapport à une moyenne mobile ordinaire. De plus, l’ajout d’un indicateur de taux de variation des prix à la stratégie filtre efficacement certains faux signaux.

Le mécanisme d’arrêt automatique de l’ATR permet également à la stratégie de s’adapter à un environnement de marché plus large. Les arrêts s’allègent automatiquement lorsque la volatilité s’intensifie, bloquant au maximum les bénéfices.

D’après les résultats des tests, la stratégie a fait de l’excellent travail en période de hausse. La probabilité de victoire est élevée dans les tendances à longue ligne à grande échelle, avec de longues périodes de gains consécutifs.

Analyse des risques

Le risque principal de cette stratégie est l’erreur de jugement de renversement de tendance, ce qui peut manquer un signal de renversement ou produire un signal de renversement inutile. Cela se produit généralement lorsque les prix se regroupent de manière transversale à plusieurs reprises près de zones de support ou de résistance clés.

En outre, un arrêt trop lâche peut aussi entraîner une expansion des pertes. Les arrêts ATR sont ajustés en fonction de la volatilité du marché, de sorte que les arrêts plus larges peuvent être tirés lors d’un événement soudain sur le marché.

Pour les risques susmentionnés, il est possible de raccourcir le cycle de calcul de l’ATR ou d’ajuster le coefficient multiplicatif de l’arrêt de l’ATR. Des indicateurs supplémentaires peuvent également être ajoutés pour déterminer les zones de résistance de support critiques et éviter que ces zones émettent des signaux trompeurs.

Direction d’optimisation

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

  1. Adapter les paramètres de l’indicateur de super-tendance pour optimiser les cycles ATR et les multiples ATR afin de rendre les lignes de super-tendance plus lisses.

  2. Ajuster les paramètres de l’indicateur de variation des prix, optimiser les cycles et les seuils de variation des prix, réduire les faux signaux.

  3. Essayez différents mécanismes de stop-loss, tels que le suivi des stops ou l’optimisation de la stop-loss sur les stops fixes.

  4. Ajout d’indicateurs de jugement additionnels pour identifier les résistances de soutien clés et éviter les erreurs de jugement de renversement de tendance.

  5. Tester les paramètres et les effets de différentes variétés pour trouver la combinaison optimale.

  6. Optimiser les retours d’expérience pour trouver le paramètre optimal.

Résumer

La stratégie d’inversion de la ligne solaire de super-tendance est une stratégie de suivi de tendance plus stable et plus fiable dans l’ensemble. Elle est filtrée en combinaison avec l’indicateur de super-tendance et l’indicateur de taux de variation des prix, ce qui permet d’identifier efficacement la direction de la tendance de la ligne moyenne et longue. Le mécanisme d’arrêt automatique ATR lui permet également de s’adapter à la plupart des conditions du marché.

Code source de la stratégie
/*backtest
start: 2024-01-22 00:00:00
end: 2024-02-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Super Trend Daily BF 🚀", overlay=true, precision=2, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075)

/////////////// Time Frame ///////////////
_1 = input(false,  "════════ Test Period ═══════")
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true

///////////// Super Trend /////////////
_2 = input(false,  "══════ Super Trend ══════")
length = input(title="ATR Period", type=input.integer, defval=3)
mult = input(title="ATR Multiplier", type=input.float, step=0.1, defval=1.3)

atr = mult * atr(length)

longStop = hl2 - atr
longStopPrev = nz(longStop[1], longStop)
longStop :=  close[1] > longStopPrev ? max(longStop, longStopPrev) : longStop

shortStop = hl2 + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := close[1] < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop

dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and close > shortStopPrev ? 1 : dir == 1 and close < longStopPrev ? -1 : dir

///////////// Rate Of Change ///////////// 
_3 = input(false,  "══════ Rate of Change ══════")
source = close
roclength = input(30, "ROC Length",  minval=1)
pcntChange = input(6, "ROC % Change", minval=1)
roc = 100 * (source - source[roclength]) / source[roclength]
emaroc = ema(roc, roclength / 2)
isMoving() => emaroc > (pcntChange / 2) or emaroc < (0 - (pcntChange / 2))

///////////////  Strategy  /////////////// 
long = dir == 1 and dir[1] == -1 and isMoving()
short = dir == -1 and dir[1] == 1 and isMoving()

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) 
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) 

/////////////// Dynamic ATR Stop Losses ///////////////
_4 = input(false,  "════════ Stop Loss ═══════")
SL_type = input("Fixed", options=["Fixed", "ATR Derived"], title="Stop Loss Type")
sl_inp = input(6.0, title='Fixed Stop Loss %') / 100
atrLkb = input(20, minval=1, title='ATR Stop Period')
atrMult = input(1.5, step=0.25, title='ATR Stop Multiplier') 
atr1 = atr(atrLkb)

longStop1 = 0.0
longStop1 :=  short_signal ? na : long_signal ? close - (atr1 * atrMult) : longStop1[1]
shortStop1 = 0.0
shortStop1 := long_signal ? na : short_signal ? close + (atr1 * atrMult) : shortStop1[1]

slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na

/////////////// Execution ///////////////
if testPeriod()
    strategy.entry("L", strategy.long, when=long)
    strategy.entry("S", strategy.short, when=short)
    strategy.exit("L SL", "L", stop = SL_type == "Fixed" ? long_sl : longStop1, when=since_longEntry > 0)
    strategy.exit("S SL", "S", stop = SL_type == "Fixed" ? short_sl : shortStop1, when=since_shortEntry > 0)

/////////////// Plotting /////////////// 
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=30)
bgcolor(isMoving() ? dir == 1 ? color.lime : color.red : color.white , transp=80)