Stratégie de croisement dynamique avec stop loss dynamique

Auteur:ChaoZhang est là., Date: le 29 février 2024 à 13:55:16
Les étiquettes:

img

Résumé

Cette stratégie combine des indicateurs de moyenne mobile et des indicateurs d'indice de mouvement directionnel (DMI) pour générer des signaux d'achat et de vente basés sur des croisements à deux indicateurs.

La logique de la stratégie

  1. Construisez des indicateurs de moyenne mobile en utilisant une EMA courte de 9 jours et une EMA longue de 21 jours. Un signal d'achat est généré lorsque l'EMA courte traverse au-dessus de l'EMA longue. Un signal de vente est généré lorsque l'EMA courte traverse au-dessous de l'EMA longue.
  2. Construire des indicateurs DMI en utilisant ADX, +DI et -DI. Un signal d'achat est déclenché lorsque +DI passe au-dessus de -DI. Un signal de vente est déclenché lorsque -DI passe au-dessus de +DI.
  3. Combiner les signaux EMA et DMI, exigeant que les deux indicateurs remplissent des conditions avant d'émettre des signaux d'achat ou de vente.
  4. Utiliser un stop loss dynamique pour suivre le prix le plus élevé/le prix le plus bas pour le stop loss.

Analyse des avantages

  1. Les combinaisons à double indicateur filtrent les faux signaux et améliorent la précision du signal.
  2. Les indicateurs de dynamique peuvent capter les changements de tendance tôt avec certaines caractéristiques principales.
  3. Le stop-loss dynamique de suivi assure des bénéfices autant que possible tout en contrôlant les risques.

Analyse des risques

  1. Avec les combinaisons à double indicateur, la fréquence du signal est réduite, manquant éventuellement certaines opportunités.
  2. Un mauvais réglage des paramètres des indicateurs peut entraîner une survente ou des signaux de mauvaise qualité.
  3. Un niveau trop élevé de stop loss augmente les risques de perte, tandis qu'un niveau trop élevé augmente les risques de déconnexion de la tendance.

Directions d'optimisation

  1. Testez les combinaisons EMA avec différentes longueurs à court et à long terme pour trouver l'optimum.
  2. Optimiser les paramètres ADX pour améliorer la qualité du signal DMI.
  3. Ajustez les paramètres d'arrêt des pertes pour bloquer les bénéfices tout en gérant les risques.
  4. Envisagez d'ajouter plus de filtres pour améliorer encore la qualité du signal.

Conclusion

Cette stratégie combine les forces des moyennes mobiles et des indicateurs de dynamique pour une double confirmation des signaux, se complétant mutuellement pour améliorer la rentabilité.


/*backtest
start: 2023-02-22 00:00:00
end: 2024-02-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Combined EMA and DMI Strategy with Enhanced Table", overlay=true)

// Input parameters for EMA
shortTermEMA = input.int(9, title="Short-Term EMA Period")
longTermEMA = input.int(21, title="Long-Term EMA Period")
riskPercentageEMA = input.float(1, title="Risk Percentage EMA", minval=0.1, maxval=5, step=0.1)

// Calculate EMAs
emaShort = ta.ema(close, shortTermEMA)
emaLong = ta.ema(close, longTermEMA)

// EMA Crossover Strategy
longConditionEMA = emaShort > emaLong and emaShort[1] <= emaLong[1]
shortConditionEMA = emaShort < emaLong and emaShort[1] >= emaLong[1]

// Input parameters for DMI
adxlen = input(17, title="ADX Smoothing")
dilen = input(17, title="DI Length")

// DMI Logic
dirmov(len) =>
    up = ta.change(high)
    down = -ta.change(low)
    truerange = ta.tr
    plus = fixnan(100 * ta.rma(up > down and up > 0 ? up : 0, len) / truerange)
    minus = fixnan(100 * ta.rma(down > up and down > 0 ? down : 0, len) / truerange)
    [plus, minus]

adx(dilen, adxlen) => 
    [plus, minus] = dirmov(dilen)
    sum = plus + minus
    adxValue = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
    [adxValue, plus, minus]

[adxValue, up, down] = adx(dilen, adxlen)

// DMI Conditions
buyConditionDMI = up > down or (up and adxValue > down)
sellConditionDMI = down > up or (down and adxValue > up)

// Combined Conditions for Entry
longEntryCondition = longConditionEMA and buyConditionDMI
shortEntryCondition = shortConditionEMA and sellConditionDMI

// Combined Conditions for Exit
longExitCondition = shortConditionEMA
shortExitCondition = longConditionEMA

// Enter long trade based on combined conditions
if (longEntryCondition)
    strategy.entry("Long", strategy.long)

// Enter short trade based on combined conditions
if (shortEntryCondition)
    strategy.entry("Short", strategy.short)

// Exit trades
if (longExitCondition)
    strategy.close("Long")

if (shortExitCondition)
    strategy.close("Short")

// Plot EMAs
plot(emaShort, color=color.blue, title="Short-Term EMA")
plot(emaLong, color=color.red, title="Long-Term EMA")

// Create and fill the enhanced table
var tbl = table.new(position.top_right, 4, 1)
if (barstate.islast)
    table.cell(tbl, 0, 0, "ADX: " + str.tostring(adxValue), bgcolor=color.new(color.red, 90), width=15, height=4)
    table.cell(tbl, 1, 0, "+DI: " + str.tostring(up), bgcolor=color.new(color.blue, 90), width=15, height=4)
    table.cell(tbl, 2, 0, "-DI: " + str.tostring(down), bgcolor=color.new(color.orange, 90), width=15, height=4)

   

Plus de