Stratégie de négociation de quantité d'actions combinant une moyenne mobile exponentielle avec un stop-loss et un stop-loss en pourcentage

Auteur:ChaoZhang est là., Date: 2024-01-03 16h25 et 54 min
Les étiquettes:

img

Résumé

Le noyau de cette stratégie consiste à utiliser des croisements de moyennes mobiles exponentielles comme signaux de trading, combinés à un stop loss et à un stop loss pourcentage pour verrouiller les bénéfices et contrôler les risques.

La logique de la stratégie

  1. Calculer l'EMA rapide et l'EMA lente, avec une période d'EMA rapide de 20 jours et une période d'EMA lente de 50 jours. Générer un signal d'achat lorsque l'EMA rapide dépasse l'EMA lente, et un signal de vente lorsque l'EMA rapide dépasse l'EMA lente.

  2. Après l'entrée, définissez un stop loss de suivi en fonction de la direction de la détention, par exemple 7% pour la position longue et 7% pour la position courte.

  3. En même temps, fixez un prix de stop loss basé sur le prix d'entrée et la direction de la détention, par exemple 2% en dessous du prix d'entrée pour les transactions longues et 2% au-dessus du prix d'entrée pour les transactions courtes.

  4. Comparez le prix de stop-loss et le prix de stop-loss, utilisez celui qui est plus proche du prix du marché comme le stop-loss final pour ce commerce, envoyez un ordre de stop-loss.

Les avantages

  1. Des signaux de négociation de moyennes mobiles simples et faciles à mettre en œuvre.

  2. Le verrouillage par arrêt de perte de trailers garantit des bénéfices dans toute la mesure du possible, tout en évitant des pertes inutiles dues à de faux signaux.

  3. Le pourcentage de stop loss est intuitif et facile à ajuster pour contrôler la perte maximale par transaction.

  4. La combinaison de trailing stops et de fixed stops permet à la fois de réduire les profits et de contrôler les risques.

Risques et contre-mesures

  1. Les moyennes mobiles peuvent générer de faux signaux facilement, ajouter d'autres filtres comme le volume.

  2. Les arrêts de trail parfois déclenchés trop tôt, relâcher un peu le pourcentage de trail.

  3. Le paramètre de pourcentage doit être testé et réglé.

  4. Les sorties mécaniques de stop loss pourraient manquer les opportunités d'inversion du marché, incorporer des indicateurs techniques pour juger du déclencheur de stop.

Directions d'optimisation

  1. Essayez différentes combinaisons d'EMA pour trouver l'équilibre optimal.

  2. Ajoutez des indicateurs comme le volume pour filtrer les faux signaux.

  3. Testez plus d'actions pour trouver des pourcentages de stop loss appropriés.

  4. Essayez des arrêts adaptatifs qui s'adaptent aux conditions du marché.

  5. Incorporer des indicateurs tels que le RSI pour déterminer le moment du stop loss.

Résumé

Cette stratégie intègre des signaux de négociation moyennes mobiles, des arrêts de suivi et des arrêts en pourcentage.


/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-02 00:00:00
period: 10m
basePeriod: 1m
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/
// © wouterpruym1828

//@version=5
strategy(title=" Combining Trailing Stop and Stop loss (% of instrument price)",
     overlay=true, pyramiding=1, shorttitle="TSL&SL%")

//INDICATOR SECTION

// Indicator Input options+
i_FastEMA = input.int(title = "Fast EMA period", minval = 0, defval = 20)
i_SlowEMA = input.int(title = "Slow EMA period", minval = 0, defval = 50)
     
// Calculate moving averages
fastEMA = ta.ema(close, i_FastEMA)
slowEMA = ta.ema(close, i_SlowEMA)

// Plot moving averages
plot(fastEMA, title="Fast SMA", color=color.blue)
plot(slowEMA, title="Slow SMA", color=color.orange)




//STRATEGY SECTION  

// Calculate trading conditions
buy  = ta.crossover(fastEMA, slowEMA)
sell = ta.crossunder(fastEMA, slowEMA)

// STEP 1:
// Configure trail stop loss level with input options (optional)

longTrailPerc = input.float(title="Long Trailing Stop (%)", minval=0.0, step=0.1, defval=7) * 0.01

shortTrailPerc = input.float(title="Short Trailing Stop (%)", minval=0.0, step=0.1, defval=7) * 0.01

//Configure stop loss level with input options (optional)

longStopPerc = input.float(title="Long Stop Loss (%)", minval=0.0, step=0.1, defval=2)*0.01

shortStopPerc = input.float(title="Short Stop Loss (%)", minval=0.0, step=0.1, defval=2)*0.01


// STEP 2:
// Determine trail stop loss prices
longTrailPrice = 0.0, shortTrailPrice = 0.0

longTrailPrice := if (strategy.position_size > 0)
    stopValue = high * (1 - longTrailPerc)
    math.max(stopValue, longTrailPrice[1])
else
    0

shortTrailPrice := if (strategy.position_size < 0)
    stopValue = low * (1 + shortTrailPerc)
    math.min(stopValue, shortTrailPrice[1])
else
    999999

// Determine stop loss prices
entryPrice = 0.0

entryPrice := strategy.opentrades.entry_price(strategy.opentrades - 1)


longLossPrice = entryPrice * (1 - longStopPerc)

shortLossPrice = entryPrice * (1 + shortStopPerc)


// Plot stop loss values for confirmation

plot(series=(strategy.position_size > 0) ? longTrailPrice : na,
     color=color.fuchsia, style=plot.style_cross,
     linewidth=2, title="Long Trail Stop")
plot(series=(strategy.position_size < 0) ? shortTrailPrice : na,
     color=color.fuchsia, style=plot.style_cross,
     linewidth=2, title="Short Trail Stop")

plot(series=(strategy.position_size > 0) ? longLossPrice : na,
     color=color.olive, style=plot.style_cross,
     linewidth=2, title="Long Stop Loss")
plot(series=(strategy.position_size < 0) ? shortLossPrice : na,
     color=color.olive, style=plot.style_cross,
     linewidth=2, title="Short Stop Loss")

// Submit entry orders
if (buy)
    strategy.entry("Buy", strategy.long)

if (sell)
    strategy.entry("Sell", strategy.short)


//Evaluating trailing stop or stop loss to use

longStopPrice = longTrailPrice < longLossPrice ? longLossPrice : longTrailPrice

shortStopPrice = shortTrailPrice > shortLossPrice ? shortLossPrice : shortTrailPrice

// STEP 3:
// Submit exit orders for stop price

if (strategy.position_size > 0)
    strategy.exit(id="Buy Stop", stop=longStopPrice)

if (strategy.position_size < 0)
    strategy.exit(id="Sell Stop", stop=shortStopPrice)


Plus de