Stratégie de glissement de prise de bénéfices étape par étape


Date de création: 2023-11-28 16:05:24 Dernière modification: 2023-11-28 16:05:24
Copier: 0 Nombre de clics: 778
1
Suivre
1619
Abonnés

Stratégie de glissement de prise de bénéfices étape par étape

Aperçu

Cette stratégie est une stratégie de sortie qui utilise un stop-loss par étapes combiné à un stop-loss à l’échelle. Elle déplace le stop-loss vers le point d’équilibre de la perte après avoir atteint le premier stop-loss et le stop-loss vers le premier stop-loss après avoir atteint le deuxième stop-loss, ce qui permet un mécanisme de stop-loss à l’échelle.

Principe de stratégie

La stratégie consiste principalement à réaliser des points d’arrêt par étapes:

  1. Il y a un arrêt de perte et trois arrêts.
  2. La fonction de calcul qui définit le nombre de gains actuels et le prix d’arrêt.
  3. La fonction de jugement qui définit la phase de profit.
  4. Modifiez le prix de stop loss pour réaliser un stop loss de point de glissement à différents stades de gain.

Plus précisément, il a d’abord défini une distance d’arrêt de 100 points et trois distances d’arrêt de 100/200/300 points. Ensuite, il a défini une fonction pour calculer le nombre d’avantages en fonction du prix actuel et du prix d’ouverture de la position.curProfitInPts, ainsi que la fonction de calcul du prix stop-loss en fonction de la distance entre les pointscalcStopLossPrice

La logique de base est la suivante:getCurrentStageFonction qui détermine si une position est en cours et si le nombre d’avantages obtenus a dépassé un certain point d’arrêt. Si le nombre d’avantages est dépassé, il passe à la prochaine étape. Par exemple, après avoir atteint 100 points d’arrêt, il passe à la deuxième étape et après avoir atteint 200 points d’arrêt, il passe à la troisième étape.

Enfin, modifier le prix d’arrêt en fonction des étapes pour atteindre le point d’arrêt. Le premier arrêt est maintenu à sa position initiale, le second est déplacé vers l’équilibre des pertes et des gains, le troisième vers le premier point d’arrêt.

Analyse des avantages

Cette stratégie de points d’arrêt par étapes présente les avantages suivants:

  1. Il est possible de bloquer une partie des bénéfices tout en conservant une marge de profit plus importante.
  2. L’utilisation d’un stop-loss pour suivre les prix réduit la possibilité de rétrograder un PRODID ou de faire une perte.
  3. Le risque est mieux maîtrisé par des arrêts multiples que par des arrêts ponctuels.
  4. La logique de la stratégie est claire, simple et compréhensible.

Analyse des risques

Cette stratégie comporte aussi des risques:

  1. L’arrêt par étapes peut entraîner l’échec de l’arrêt en temps opportun, il est préférable de manquer le point de sortie. Il peut être optimisé en ajustant le nombre de points d’arrêt.
  2. Un décalage trop élevé peut entraîner un déclenchement prématuré de l’arrêt. Il est possible de tester différents décalages.
  3. L’impossibilité d’arrêter les pertes entraîne également un risque de perte plus élevé.

Direction d’optimisation

Cette stratégie peut être optimisée dans les directions suivantes:

  1. Test de différentes distances de rupture de frein, paramètres d’optimisation
  2. Dans des circonstances exceptionnelles, un mécanisme d’arrêt rapide est envisagé.
  3. Les paramètres techniques sont combinés pour déterminer les points d’arrêt et de perte.
  4. Optimisation de l’amplitude du point de glissement pour équilibrer les arrêts et les pertes.
Code source de la stratégie
/*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)