Stratégie de trading quantitative dynamique avec stop-profit et stop-loss croisés à double moyenne mobile EMA

EMA
Date de création: 2024-11-18 15:53:49 Dernière modification: 2024-11-18 15:53:49
Copier: 5 Nombre de clics: 611
1
Suivre
1617
Abonnés

Aperçu

La stratégie est un système de trading quantitatif basé sur une croisée de lignes équivalentes, combiné à un mécanisme de stop-loss dynamique. Le cœur de la stratégie est d’identifier les tendances du marché à travers la croisée des moyennes mobiles à 10 cycles et 26 cycles (EMA) et de négocier en cas de rebond. Le système utilise un paramètre de point de stop-loss fixe, protégeant la sécurité des fonds grâce à des contrôles de risque stricts.

Principe de stratégie

La stratégie utilise deux EMAs de différentes périodes comme indicateurs centraux: l’EMA à 10 cycles à court terme et l’EMA à 26 cycles à long terme. Lorsque la courte moyenne à court terme traverse la moyenne à long terme vers le haut, le système identifie la tendance à la hausse et génère un signal d’achat; lorsque la courte moyenne à court terme traverse la moyenne à long terme vers le bas, le système identifie la tendance à la baisse et génère un signal de vente.

Avantages stratégiques

  1. Signal clair: utilisation d’une croix uniforme comme signal de transaction, les règles sont simples et claires, faciles à exécuter et à surveiller
  2. Risque maîtrisé: avec des points de stop-loss fixes, le risque de chaque transaction est effectivement contrôlé
  3. Suivi de la tendance: une combinaison de croisement équilibré et de reprise des prix permet de mieux saisir les tendances
  4. Automatisation élevée: logique stratégique claire et facile à programmer pour automatiser les transactions
  5. Adaptabilité: adapté à différentes variétés commerciales, en particulier les variétés à forte volatilité

Risque stratégique

  1. Risque de choc: les faux signaux peuvent être fréquents dans les marchés à choc intermédiaire
  2. Risque de glissement: risque de glissement plus important en cas de forte volatilité du marché
  3. Risque de stop-loss: le stop-loss fixe peut ne pas être suffisamment flexible dans certaines conditions de marché
  4. Lagueur de signal: les signaux de croisement de ligne moyenne ont une certaine latence et peuvent manquer les meilleurs points d’entrée.
  5. Gestion des risques financiers: un contrôle raisonnable du montant de chaque transaction

Orientation de l’optimisation de la stratégie

  1. Stop loss dynamique: il est possible d’envisager d’ajuster la position de stop loss en fonction de la volatilité du marché
  2. Filtrage des signaux: augmentation des indicateurs auxiliaires tels que le trafic, la volatilité et autres pour filtrer les faux signaux
  3. Filtrage temporel: augmenter le filtrage des périodes de négociation pour éviter les périodes de forte volatilité
  4. Gestion des positions: ajout d’un mécanisme de blocage partiel permettant de conserver certaines positions pour continuer à suivre la tendance
  5. Gestion des fonds: ajout d’un système de gestion des fonds dynamique qui ajuste automatiquement le volume des transactions en fonction de la valeur nette du compte

Résumer

La stratégie est conçue pour être simple et intuitive, les contrôles de risque sont clairs et adaptés aux variétés de transactions plus volatiles. Grâce à une optimisation et à un ajustement des paramètres raisonnables, la stratégie est susceptible de générer des rendements stables dans les transactions sur le marché réel. Il est recommandé aux traders de faire un retour d’expérience adéquat et de simuler les transactions avant de les utiliser sur le marché réel et d’optimiser les paramètres en fonction de la situation réelle.

Code source de la stratégie
/*backtest
start: 2023-11-18 00:00:00
end: 2024-11-17 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("30 Pips Target & 15 Pips Stop-Loss with One Signal at a Time", overlay=true)

// Define settings for target and stop-loss in pips
target_in_pips = 30
stoploss_in_pips = 10

// Convert pips to price value based on market (for forex, 1 pip = 0.0001 for major pairs like GBP/JPY)
pip_value = syminfo.mintick * 10  // For forex, 1 pip = 0.0001 or 0.01 for JPY pairs
target_value = target_in_pips * pip_value
stoploss_value = stoploss_in_pips * pip_value

// Define EMAs (10-EMA and 26-EMA) for the crossover strategy
ema10 = ta.ema(close, 10)
ema26 = ta.ema(close, 26)

// Buy signal: when 10 EMA crosses above 26 EMA
longCondition = ta.crossover(ema10, ema26)
// Sell signal: when 10 EMA crosses below 26 EMA
shortCondition = ta.crossunder(ema10, ema26)

// Define price levels with explicit type float
var float long_entry_price = na
var float long_take_profit = na
var float long_stop_loss = na
var float short_entry_price = na
var float short_take_profit = na
var float short_stop_loss = na

// Variable to track if a trade is active
var bool inTrade = false

// Check if the trade hit stop loss or take profit
if (inTrade)
    if (not na(long_take_profit) and close >= long_take_profit)
        inTrade := false  // Exit the trade after hitting target
        long_entry_price := na
        long_take_profit := na
        long_stop_loss := na
        strategy.close("Long")

    if (not na(long_stop_loss) and close <= long_stop_loss)
        inTrade := false  // Exit the trade after hitting stoploss
        long_entry_price := na
        long_take_profit := na
        long_stop_loss := na
        strategy.close("Long")

    if (not na(short_take_profit) and close <= short_take_profit)
        inTrade := false  // Exit the trade after hitting target
        short_entry_price := na
        short_take_profit := na
        short_stop_loss := na
        strategy.close("Short")

    if (not na(short_stop_loss) and close >= short_stop_loss)
        inTrade := false  // Exit the trade after hitting stoploss
        short_entry_price := na
        short_take_profit := na
        short_stop_loss := na
        strategy.close("Short")

// Only generate new signals if not already in a trade
if (not inTrade)
    if (longCondition)
        long_entry_price := close
        long_take_profit := close + target_value
        long_stop_loss := close - stoploss_value
        strategy.entry("Long", strategy.long)  // Enter a long trade
        strategy.exit("Take Profit/Stop Loss", "Long", limit=long_take_profit, stop=long_stop_loss)
        inTrade := true  // Mark trade as active

    if (shortCondition)
        short_entry_price := close
        short_take_profit := close - target_value
        short_stop_loss := close + stoploss_value
        strategy.entry("Short", strategy.short)  // Enter a short trade
        strategy.exit("Take Profit/Stop Loss", "Short", limit=short_take_profit, stop=short_stop_loss)
        inTrade := true  // Mark trade as active

// Plot the levels on the chart only when in a trade
plot(inTrade and not na(long_take_profit) ? long_take_profit : na, color=color.green, linewidth=2, style=plot.style_linebr, title="Take Profit (Long)")
plot(inTrade and not na(long_stop_loss) ? long_stop_loss : na, color=color.red, linewidth=2, style=plot.style_linebr, title="Stop Loss (Long)")

plot(inTrade and not na(short_take_profit) ? short_take_profit : na, color=color.green, linewidth=2, style=plot.style_linebr, title="Take Profit (Short)")
plot(inTrade and not na(short_stop_loss) ? short_stop_loss : na, color=color.red, linewidth=2, style=plot.style_linebr, title="Stop Loss (Short)")

plotshape(series=longCondition and not inTrade, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(series=shortCondition and not inTrade, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")