Cette stratégie combine l'indice de mouvement directionnel (DMI) et la moyenne mobile de la coque (HMA) pour identifier l'orientation du marché avec DMI et confirmer la force de la tendance avec HMA, sans gestion des risques.
Calculer la portée réelle, DIPlus, DIMinus et ADX.
Calculer les moyennes mobiles rapides et lentes de la coque (HMA).
Déclenche l'entrée longue lorsque DIPlus traverse DIMinus et que HMA rapide traverse HMA lente.
Déclenche une entrée courte lorsque DIMinus passe sous DIPlus et que HMA rapide passe sous HMA lente.
Placez des ordres longs/courts sur les signaux d'entrée.
La double confirmation de l'indicateur de tendance DMI et de l'indicateur de tendance Hull MA assure une précision dans la capture de la tendance du marché et évite les problèmes.
Le principal risque provient de l'absence de stop loss, de l'incapacité à contrôler les pertes lorsque des fluctuations massives se produisent sur le marché.
Les solutions possibles incluent l'ajout d'un stop loss en mouvement, l'optimisation du mélange de paramètres, etc.
Ajouter le stop-loss ATR basé sur le True Range.
Optimisez les périodes de la coque pour trouver le meilleur mélange.
seuil dynamique pour les signaux longs/courts.
Ajoutez un filtre de momentum pour assurer la continuité de la tendance.
La combinaison de DMI et HMA fonctionne de manière exceptionnelle pour identifier les tendances avec simplicité et efficacité.
/*backtest start: 2022-12-28 00:00:00 end: 2024-01-03 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/ // © Tuned_Official //@version=4 strategy(title="DMI + HMA - No Risk Management", overlay = false, pyramiding=1, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.025) //Inputs hullLen1 = input(title="Hull 1 length", type=input.integer, defval=29) hullLen2 = input(title="Hull 2 length", type=input.integer, defval=2) len = input(title="Length for DI", type=input.integer, defval=76) //Calculations 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 = 0.0 SmoothedTrueRange := nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange SmoothedDirectionalMovementPlus = 0.0 SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus SmoothedDirectionalMovementMinus = 0.0 SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus //Indicators fasthull = hma(close, hullLen1) slowhull = hma(close, hullLen2) DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100 DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100 DX = abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100 ADX = sma(DX, len) //Plots plot(DIPlus, color=color.green, title="DI+") plot(DIMinus, color=color.red, title="DI-") plot(ADX, color=color.black, title="ADX") //conditions go_long = crossover(DIPlus, DIMinus) and fasthull > slowhull //crossover(fasthull, slowhull) and DIPlus > DIMinus go_short = crossover(DIMinus, DIPlus) and fasthull < slowhull //crossunder(fasthull, slowhull) and DIMinus > DIPlus //Entry if strategy.position_size < 0 or strategy.position_size == 0 strategy.order("long", strategy.long, when=go_long) if strategy.position_size > 0 or strategy.position_size == 0 strategy.order("Short", strategy.short, when=go_short)