Arrêt progressif avec stratégie de prise partielle de profit

Auteur:ChaoZhang est là., Date: 2023-11-28 16h05 et 24h
Les étiquettes:

img

Résumé

Il s'agit d'une stratégie de sortie qui utilise un arrêt progressif avec une prise partielle de profit. Il déplace le stop loss au seuil de rentabilité après avoir atteint le premier niveau de prise de profit, et passe au premier niveau de prise de profit après avoir atteint le deuxième niveau. Cela permet de verrouiller certains profits tout en maintenant le potentiel de profit.

La logique de la stratégie

Les éléments clés de cette stratégie sont les suivants:

  1. En définissant un stop loss et un 3, on prend les niveaux de profit en points.
  2. Définition des fonctions permettant de calculer les bénéfices courants en points et le prix stop-loss.
  3. Définition d'une fonction permettant de déterminer le niveau de profit actuel.
  4. Modification du prix de stop loss basé sur le stade de profit au prix de trail.

Plus précisément, il fixe d'abord un stop-loss de 100 points et prend des bénéfices à 100/200/300 points.curProfitInPtsLa fonction calcule le bénéfice courant en fonction du prix actuel et du prix d'entrée.calcStopLossPriceLa fonction calcule le prix de stop loss en fonction de la distance de point.

La logique clé réside dans legetCurrentStagePar exemple, l'étape 2 est atteinte après un profit de 100 points, et l'étape 3 après un profit de 200 points.

Enfin, le stop loss est modifié en fonction de l'étape.

Analyse des avantages

Les avantages de cette stratégie d'arrêt progressif:

  1. Permet de saisir certains bénéfices tout en conservant un potentiel de profit supplémentaire.
  2. Le stop loss suivant suit le prix et réduit les chances de retrait.
  3. Les contrôles de prise de profit en plusieurs étapes risquent mieux qu'une prise de profit.
  4. Une logique simple et claire.

Analyse des risques

Il y a quelques risques à prendre en considération:

  1. La prise de profit progressive peut manquer de meilleures opportunités de sortie.
  2. Si la distance d'arrêt du sentier est trop élevée, l'arrêt peut être déclenché prématurément.
  3. L'incapacité de réduire les pertes peut également entraîner des pertes plus importantes.

Optimisation

Certaines façons d'améliorer cette stratégie:

  1. Testez différents profits et arrêtez des distances pour optimiser les paramètres.
  2. Considérez les mécanismes d'arrêt rapide des pertes pour des situations spécifiques.
  3. Utiliser des indicateurs techniques pour déterminer les objectifs de profit et les niveaux de stop.
  4. Équilibrer les sorties rentables et les distances d'arrêt.

/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-27 00:00:00
period: 3m
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/
// © adolgov

// @description
// when tp1 is reached, sl is moved to break-even
// when tp2 is reached, sl is moved to tp1
// when tp3 is reached - exit

//@version=4
strategy("Stepped trailing strategy example", overlay=true)

// random entry condition
longCondition = crossover(sma(close, 14), sma(close, 28))
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

// sl & tp in points
sl = input(100)
tp1 = input(100)
tp2 = input(200)
tp3 = input(300)

curProfitInPts() =>
    if strategy.position_size > 0
        (high - strategy.position_avg_price) / syminfo.mintick
    else if strategy.position_size < 0
        (strategy.position_avg_price - low) / syminfo.mintick
    else
        0
        
calcStopLossPrice(OffsetPts) =>
    if strategy.position_size > 0
        strategy.position_avg_price - OffsetPts * syminfo.mintick
    else if strategy.position_size < 0
        strategy.position_avg_price + OffsetPts * syminfo.mintick
    else
        0
        
calcProfitTrgtPrice(OffsetPts) =>
    calcStopLossPrice(-OffsetPts)

getCurrentStage() =>
    var stage = 0
    if strategy.position_size == 0 
        stage := 0
    if stage == 0 and strategy.position_size != 0
        stage := 1
    else if stage == 1 and curProfitInPts() >= tp1
        stage := 2
    else if stage == 2 and curProfitInPts() >= tp2
        stage := 3
    stage

stopLevel = -1.
profitLevel = calcProfitTrgtPrice(tp3)

// based on current stage set up exit
// note: we use same exit ids ("x") consciously, for MODIFY the exit's parameters
curStage = getCurrentStage()
if curStage == 1
    stopLevel := calcStopLossPrice(sl)
    strategy.exit("x", loss = sl, profit = tp3, comment = "sl or tp3")
else if curStage == 2
    stopLevel := calcStopLossPrice(0)
    strategy.exit("x", stop = stopLevel, profit = tp3, comment = "breakeven or tp3")
else if curStage == 3
    stopLevel := calcStopLossPrice(-tp1)
    strategy.exit("x", stop = stopLevel, profit = tp3, comment = "tp1 or tp3")
else
    strategy.cancel("x")
    
// this is debug plots for visulalize TP & SL levels
plot(stopLevel > 0 ? stopLevel : na, style = plot.style_linebr)
plot(profitLevel > 0 ? profitLevel : na, style = plot.style_linebr)

Plus de