Stratégie de stop loss dynamique croisée avec indicateur de momentum


Date de création: 2024-02-29 13:55:16 Dernière modification: 2024-02-29 13:55:16
Copier: 0 Nombre de clics: 671
1
Suivre
1617
Abonnés

Stratégie de stop loss dynamique croisée avec indicateur de momentum

Aperçu

Cette stratégie combine les indices des moyennes mobiles et des indices des indices mobiles, permettant la croisée des signaux des deux indicateurs pour émettre des signaux d’achat et de vente. En outre, la stratégie ajoute le suivi dynamique des arrêts de perte pour contrôler les risques.

Principe de stratégie

  1. Construction d’une moyenne mobile à l’aide d’une EMA à 9 jours à court terme et d’une EMA à 21 jours à long terme. Génération d’un signal d’achat lorsque l’EMA à court terme est traversée par une EMA à long terme; génération d’un signal de vente lorsque l’EMA à court terme est traversée par une EMA à long terme.
  2. Utilisez ADX, +DI et -DI pour construire l’indicateur DMI. Lorsque +DI est porté sur -DI, c’est un signal d’achat; lorsque -DI est porté sur +DI, c’est un signal de vente.
  3. La combinaison des signaux EMA et DMI est utilisée pour émettre un signal d’achat et de vente réel lorsque les conditions sont remplies.
  4. Utilisez un stop loss dynamique pour suivre le prix le plus élevé / le prix le plus bas.

Analyse des avantages

  1. Les deux indicateurs sont combinés pour filtrer les faux signaux et améliorer l’exactitude du signal. Les indicateurs à court terme capturent les changements de tendance; les indicateurs à long terme déterminent la direction de la tendance générale.
  2. L’indicateur de dynamique capte les tendances des prix à l’avance et présente certaines caractéristiques de leadership.
  3. Le système de stop-loss dynamique permet de bloquer au maximum les bénéfices tout en contrôlant les risques.

Analyse des risques

  1. La combinaison de ces deux indicateurs réduit les signaux d’achat et de vente et peut entraîner la perte de certaines opportunités.
  2. Une mauvaise configuration des paramètres de l’indicateur peut entraîner une fréquence de transaction trop élevée ou une mauvaise qualité du signal.
  3. Un arrêt de perte trop lâche augmente le risque de perte; un arrêt trop strict augmente le risque de décalage avec la tendance.

Direction d’optimisation

  1. Testez des combinaisons de paramètres longs et courts EMA de différentes longueurs pour trouver le paramètre optimal.
  2. Testez les différentes options de paramètres ADX pour améliorer la qualité du signal DMI.
  3. Optimiser les paramètres de stop-loss pour maximiser les profits et contrôler les risques.
  4. L’ajout de plus d’indicateurs de filtrage peut être envisagé pour améliorer encore la qualité du signal.

Résumer

Cette stratégie intègre les avantages des moyennes mobiles et des indicateurs dynamiques, des signaux de double confirmation, et utilise la complémentarité entre les indicateurs pour améliorer la rentabilité de la stratégie. Dans le même temps, le mécanisme de suivi dynamique des arrêts de perte permet de contrôler efficacement les risques de la stratégie.

Code source de la stratégie
/*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)