Stratégie de combinaison entre l'IMD et l'AMH

Auteur:ChaoZhang est là., Date: 2024-01-04 17h23 et 06h
Les étiquettes:

img

Résumé

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.

La logique de la stratégie

  1. Calculer la portée réelle, DIPlus, DIMinus et ADX.

  2. Calculer les moyennes mobiles rapides et lentes de la coque (HMA).

  3. Déclenche l'entrée longue lorsque DIPlus traverse DIMinus et que HMA rapide traverse HMA lente.

  4. Déclenche une entrée courte lorsque DIMinus passe sous DIPlus et que HMA rapide passe sous HMA lente.

  5. Placez des ordres longs/courts sur les signaux d'entrée.

Analyse des avantages

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.

Analyse des risques

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.

Directions d'optimisation

  1. Ajouter le stop-loss ATR basé sur le True Range.

  2. Optimisez les périodes de la coque pour trouver le meilleur mélange.

  3. seuil dynamique pour les signaux longs/courts.

  4. Ajoutez un filtre de momentum pour assurer la continuité de la tendance.

Résumé

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)

Plus de