
Cette stratégie, combinée à l’utilisation d’indicateurs de l’indice des moyennes mobiles ((ADX) et de l’indice des mouvements ascendants ((DI+) pour déterminer la direction et la tendance du marché, tout en utilisant des moyennes mobiles rapides et lentes pour déterminer la direction des transactions et le temps de tenue, appartient à la stratégie de trading de suivi de la tendance. Cette stratégie peut capturer efficacement les revers de la courte ligne médiane et fonctionne mieux dans les marchés où le taux de volatilité est faible et la tendance est évidente.
La logique de base de la stratégie est de générer un signal d’achat lorsque la ligne +DI dépasse l’ADX de la direction du bas et un signal de vente lorsque la ligne +DI dépasse l’ADX de la direction du haut. Par conséquent, la stratégie repose sur la croisée entre les indicateurs DI et ADX pour déterminer la tendance du marché et le point de basculement. De plus, la relation de la ligne rapide et moyenne est utilisée pour déterminer la tendance du marché dans son ensemble et ne prend en compte la production d’un signal de transaction que lorsque l’EMA rapide est supérieure à l’EMA lente.
En particulier, un signal d’achat est émis lorsque les conditions suivantes sont remplies: 1, l’EMA rapide est supérieure à l’EMA lente 2 , la ligne DI + dépasse la ligne ADX par le bas 3/ Un seuil de ADX inférieur à 30
Un signal de vente est émis lorsque les conditions suivantes sont remplies: 1 Le seuil de l’ADX est supérieur à 30 2 , la ligne DI descend du haut vers le bas sur la ligne ADX
La stratégie intègre également une logique de stop-loss, qui consiste à se retirer de toutes les positions lorsque le prix est inférieur au prix de stop-loss.
Cette stratégie, combinée au DI, à l’ADX et à l’indicateur de la ligne moyenne, permet de déterminer efficacement le point de basculement de la tendance du marché. Elle présente les avantages suivants:
Cette stratégie comporte également des risques à prendre en compte:
Ces risques peuvent être améliorés par des méthodes telles que l’optimisation de l’ADX et des paramètres de la moyenne, l’ajustement du niveau de stop loss, en combinaison avec d’autres signaux de confirmation d’indicateurs.
Il y a encore de la place pour optimiser cette stratégie:
La stratégie de tendance croisée de l’ADX est globalement plus stable et permet de capturer efficacement l’espace de retournement avant les fluctuations, mais il faut veiller à contrôler les risques. Un meilleur rendement après ajustement des risques peut être obtenu par des paramètres de réglage optimisés supplémentaires, des règles d’entrée et d’arrêt strictes, etc. La stratégie s’applique aux comptes de négociation de courte ligne détenus dans les comptes longs.
/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
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/
// © mohanee
//@version=4
//ADX strategy
SmoothedTrueRange=0.00
SmoothedDirectionalMovementPlus=0.00
SmoothedDirectionalMovementMinus=0.00
strategy(title="ADX strategy", overlay=false,pyramiding=3, default_qty_type=strategy.fixed, default_qty_value=3, initial_capital=10000, currency=currency.USD)
len = input(11, title="ADX Length", minval=1)
threshold = input(30, title="threshold", minval=5)
fastEma=input(13, title="Fast EMA",minval=1, maxval=50)
slowEma=input(55, title="Slow EMA",minval=10, maxval=200)
stopLoss =input(8, title="Stop Loss",minval=1) //
TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0
SmoothedTrueRange:= nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange
SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus:= nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus
DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100
ADX = sma(DX, len)
plot(DIPlus, color=color.green, title="DI+")
//plot(DIMinus, color=color.red, title="DI-")
plot(ADX, color=color.black, title="ADX")
hline(threshold, color=color.black, linestyle=hline.style_dashed)
fastEmaVal=ema(close,fastEma)
slowEmaVal=ema(close,slowEma)
//long condition
longCondition= ADX < threshold and crossover(DIPlus,ADX) and fastEmaVal > slowEmaVal
barcolor(longCondition ? color.yellow: na)
strategy.entry(id="ADXLE", long=true, when= longCondition and strategy.position_size<1)
barcolor(strategy.position_size>1 ? color.blue: na)
bgcolor(strategy.position_size>1 ? color.blue: na)
//Add
strategy.entry(id="ADXLE", comment="Add", long=true, when= strategy.position_size>1 and close<strategy.position_avg_price and crossover(DIPlus,ADX) )
//calculate stop Loss
stopLossVal = strategy.position_avg_price - (strategy.position_avg_price*stopLoss*0.01)
strategy.close(id="ADXLE",comment="SL Exit", when=close<stopLossVal) //close all on stop loss
//exit condition
exitCondition= ADX > threshold and crossunder(DIPlus,ADX) // and fastEmaVal > slowEmaVal
strategy.close(id="ADXLE",comment="TPExitAll", qty=strategy.position_size , when= exitCondition) //close all