
Cette stratégie, combinée à l’indicateur de stop-loss Chande Kroll et à l’indicateur de tendance moyenne (ADX), permet de réaliser une stratégie de suivi de tendance relativement simple. Les stop-loss Chande Kroll sont utilisés pour générer des signaux d’entrée de positions longues et courtes, tandis que les ADX sont utilisés pour filtrer les conditions de marché sans tendance évidente, afin d’éviter que les chocs de marché sans direction ne provoquent des stop-loss répétitifs.
La stratégie commence par calculer les longues lignes stop_long et les courtes lignes stop_short des arrêts de Chande Kroll. La longue ligne est calculée à partir du prix le plus élevé au cours de la dernière période p, et la courte ligne à partir du prix le plus bas au cours de la dernière période p. Ensuite, les points les plus élevés et les plus bas des longues et courtes lignes au cours de la dernière période q sont utilisés comme lignes de stop courtes et longues.
Un signal stop_short est généré lorsque la courte ligne est passée au-dessus du prix de clôture. Un signal stop_long est généré lorsque la longue ligne est passée en dessous du prix de clôture.
En outre, la stratégie de l’ADX est incluse dans l’indicateur de jugement de la tendance à la faiblesse. Un signal d’arrêt n’est déclenché que lorsque l’ADX est supérieur à la marge. Cela permet de filtrer les fausses informations sur les pertes d’arrêt lors des secousses de correction.
Cette stratégie combine les avantages d’un indicateur de tendance et d’un indicateur de stop-loss, permettant à la fois de capturer les retournements de tendance en temps opportun et d’éviter les whip saws des marchés sans direction. L’optimisation des paramètres de stop-loss de Chande Kroll peut aplanir les silos, assurant que le stop-loss n’intervient que lorsque la tendance se retourne. L’indicateur ADX assure que le stop-loss n’intervient que lorsque la tendance est évidente, évitant ainsi les sauts de marché en secousse.
Si le paramètre ADX n’est pas correct, vous risquez de manquer une opportunité de début de tendance. Si le seuil ADX est trop élevé, vous risquez de manquer une opportunité d’entrée en raison d’une valeur ADX trop basse au début de la tendance.
Un point d’arrêt trop proche peut également entraîner une ouverture et une fermeture fréquentes des positions stratégiques. Cela augmente les coûts de transaction et les coûts de dérapage. Le point d’arrêt doit être réglé de manière raisonnable pour donner une certaine perspective à la tendance.
Il est possible de considérer que le signal stop ne peut être déclenché que lorsque l’ADX dépasse une certaine limite, ce qui améliore la fiabilité de l’heure d’entrée. Il est également possible de combiner les jugements avec d’autres indicateurs de tendance, tels que la combinaison de la valeur de l’ADX avec la pente de l’EMA.
Il est également possible d’envisager de modifier la ligne de stop en fonction de la dynamique de l’ATR, en élargissant l’espace de stop lorsque les fluctuations du marché augmentent, pour éviter d’être trop sensible. Ou il peut être combiné avec des indicateurs auxiliaires comme le MACD pour évaluer la tendance à la faiblesse et modifier la ligne de stop en fonction de la dynamique.
Cette stratégie intègre les avantages des stop-loss de Chande Kroll et des indicateurs ADX, permettant une stratégie de suivi de tendance relativement simple et pratique. La stabilité et la rentabilité de la stratégie peuvent être encore améliorées par l’optimisation des paramètres.
/*backtest
start: 2022-10-30 00:00:00
end: 2023-06-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title = "Chande Kroll Stop", overlay=true)
p = input.int(10, minval=1)
x = input.int(1, minval=1)
q = input.int(9, minval=1)
first_high_stop = ta.highest(high, p) - x * ta.atr(p)
first_low_stop = ta.lowest(low, p) + x * ta.atr(p)
stop_short = ta.highest(first_high_stop, q)
stop_long = ta.lowest(first_low_stop, q)
plot(stop_long, color=color.blue)
plot(stop_short, color=color.orange)
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
ADX_sig = input.int(20, title="minimum ADX threshold for signal")
dirmov(len) =>
up = ta.change(high)
down = -ta.change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
truerange = ta.rma(ta.tr, len)
plus = fixnan(100 * ta.rma(plusDM, len) / truerange)
minus = fixnan(100 * ta.rma(minusDM, len) / truerange)
[plus, minus]
adx(dilen, adxlen) =>
[plus, minus] = dirmov(dilen)
sum = plus + minus
adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
if ta.crossunder(close, stop_long) and sig>ADX_sig
strategy.entry("long", strategy.long)
if ta.crossover(close, stop_short) and sig>ADX_sig
strategy.entry("short", strategy.short)