Stratégie de stop profit et stop loss à moyenne mobile sur trois indices


Date de création: 2024-02-04 10:38:42 Dernière modification: 2024-02-04 10:38:42
Copier: 0 Nombre de clics: 680
1
Suivre
1617
Abonnés

Stratégie de stop profit et stop loss à moyenne mobile sur trois indices

Aperçu

La stratégie de stop-loss à trois indices est une stratégie de suivi de tendance basée sur les moyennes mobiles d’indices de trois périodes différentes. Elle utilise simultanément l’indicateur de la moyenne réelle de l’amplitude pour définir un stop-loss et assurer la gestion des risques.

Principe de stratégie

La stratégie utilise trois moyennes mobiles: la ligne rapide, la ligne moyenne et la ligne lente. Faites plus lorsque la ligne lente traverse la ligne moyenne et faites plus quand la ligne rapide traverse la ligne moyenne. C’est une stratégie de suivi de tendance typique qui détermine la direction de la tendance par une conversion plurielle de trois lignes uniformes.

En outre, la stratégie utilise l’indicateur d’amplitude réelle moyenne pour calculer le stop-loss. Plus précisément, le stop-loss multiple est le prix d’entrée + l’amplitude réelle moyenne.*Coefficient d’arrêt; un seul arrêt vide pour le prix d’entrée - amplitude réelle moyenne*Le coefficient d’arrêt. Le principe d’arrêt est similaire à celui de l’arrêt. Cela permet de limiter efficacement le risque unilatéral.

Analyse des avantages

  1. Les indicateurs de décision sont intuitifs et faciles à comprendre.
  2. Il s’agit d’une méthode très systématique et facile à quantifier.
  3. Le suivi des tendances et le contrôle des risques.

Analyse des risques

  1. Il y a un certain retard dans la capture des virages en temps opportun.
  2. Les tremblements de terre peuvent entraîner des dommages.
  3. Les paramètres doivent être optimisés, sinon ils ne sont pas efficaces.

Les mesures de réponse au risque comprennent: une réduction appropriée du cycle de la moyenne, l’optimisation du coefficient de stop-loss et l’ajout d’autres indicateurs de décision pour aider à la prise de décision.

Direction d’optimisation

  1. Combinaison de plusieurs indices de la moyenne pour trouver le paramètre optimal.
  2. Ajout d’autres indices techniques tels que le MACD, le RSI, etc.
  3. Paramètres d’optimisation automatique utilisant un algorithme d’apprentissage automatique.
  4. Le stop loss est ajusté en fonction de la dynamique de l’amplitude réelle.
  5. Les émotions sont des indicateurs qui permettent d’éviter les transactions surchargées.

Résumer

Cette stratégie est généralement une stratégie de suivi de tendance qui est stable en termes d’efficacité, de paramètres simples et faciles à mettre en œuvre. Le risque unilatéral peut être limité par un arrêt et un arrêt dynamiques de la largeur d’onde réelle moyenne. Cependant, il faut faire attention à l’optimisation des paramètres et à la combinaison des indicateurs pour éviter une optimisation excessive et un retard de décision.

Code source de la stratégie
/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//© Densz
strategy("3EMA with TP & SL (ATR)", overlay=true )

// INPUTS
startTime           =       input(title="Start Time", type = input.time, defval = timestamp("01 Jan 2017 00:00 +0000"))
endTime             =       input(title="End Time", type = input.time, defval = timestamp("01 Jan 2022 00:00 +0000"))

slowEMALength       =       input(title="Slow EMA Length", type = input.integer, defval = 55)
middleEMALength     =       input(title="Middle EMA Length", type = input.integer, defval = 21)
fastEMALength       =       input(title="Fast EMA Length", type = input.integer, defval = 9)

trendMALength       =       input(title="Trend indicator MA Length", type = input.integer, defval = 200)

atrLength           =       input(title="ATR Length", type = input.integer, defval = 14)
tpATRMult           =       input(title="Take profit ATR multiplier", type = input.integer, defval = 3)
slATRMult           =       input(title="Stop loss ATR multiplier", type = input.integer, defval = 2)

rsiLength           =       input(title="RSI Length", type = input.integer, defval = 14)

// Indicators
slowEMA             =       ema(close, slowEMALength)
middEMA             =       ema(close, middleEMALength)
fastEMA             =       ema(close, fastEMALength)
atr                 =       atr(atrLength)

rsiValue            =       rsi(close, rsiLength)
isRsiOB             =       rsiValue >= 80
isRsiOS             =       rsiValue <= 20

sma200              =       sma(close, trendMALength)

inDateRange         =       true

// Plotting
plot(slowEMA, title="Slow EMA", color=color.red, linewidth=2, transp=50)
plot(middEMA, title="Middle EMA", color=color.orange, linewidth=2, transp=50)
plot(fastEMA, title="Fast EMA", color=color.green, linewidth=2, transp=50)

plot(sma200, title="SMA Trend indicator", color=color.purple, linewidth=3, transp=10)
plotshape(isRsiOB, title="Overbought", location=location.abovebar, color=color.red, transp=0, style=shape.triangledown, text="OB")
plotshape(isRsiOS, title="Oversold", location=location.belowbar, color=color.green, transp=0, style=shape.triangledown, text="OS")

float takeprofit    =       na
float stoploss      =       na

var line tpline     =       na
var line slline     =       na

if strategy.position_size != 0
    takeprofit := takeprofit[1]
    stoploss := stoploss[1]
    line.set_x2(tpline, bar_index)
    line.set_x2(slline, bar_index)
    line.set_extend(tpline, extend.none)
    line.set_extend(slline, extend.none)
    
// STRATEGY
goLong  = crossover(middEMA, slowEMA) and inDateRange
closeLong = crossunder(fastEMA, middEMA) and inDateRange


if goLong
    takeprofit := close + atr * tpATRMult
    stoploss := close - atr * slATRMult
    // tpline := line.new(bar_index, takeprofit, bar_index, takeprofit, color=color.green, width=2, extend=extend.right, style=line.style_dotted)
    // slline := line.new(bar_index, stoploss, bar_index, stoploss, color=color.red, width=2, extend=extend.right, style=line.style_dotted)
    // label.new(bar_index, takeprofit, "TP", style=label.style_labeldown)
    // label.new(bar_index, stoploss, "SL", style=label.style_labelup)
    strategy.entry("Long", strategy.long, when = goLong)
    strategy.exit("TP/SL", "Long", stop=stoploss, limit=takeprofit)
if closeLong
    takeprofit := na
    stoploss := na
    strategy.close(id = "Long", when = closeLong)

if (not inDateRange)
    strategy.close_all()