Meilleure stratégie de slippage trailing stop


Date de création: 2023-09-21 20:58:22 Dernière modification: 2023-09-21 20:58:22
Copier: 0 Nombre de clics: 741
1
Suivre
1617
Abonnés

Aperçu

Cette stratégie utilise un mécanisme de suivi des stop-loss en glissement pour déplacer la ligne de stop-loss en fonction de l’amplitude des fluctuations des prix, pour réaliser un stop-loss dynamique. L’objectif de la stratégie est de protéger les bénéfices tout en minimisant le risque de déclenchement prématuré des stop-loss.

Principe de stratégie

Cette stratégie est basée sur la détermination de la direction de la tendance par les lignes bi-médianes. Les signaux d’entrée sont des lignes médianes rapides traversant des lignes médianes lentes.

L’innovation réside dans la conception du mécanisme d’arrêt des pertes:

  1. Définir une ligne de départ de stop loss. Activer le stop loss tracking lorsque le prix franchit cette ligne.

  2. La ligne de stop-loss est suivie en fonction du pourcentage de glissement. Si vous définissez un pourcentage de glissement de 3%, la ligne de stop-loss sera inférieure à 3% du prix minimum.

  3. Lorsque le prix revient dans une direction négative et touche la ligne de traçabilité du stop-loss, le stop-loss est placé.

Cette conception assure à la fois que les arrêts de perte suivent automatiquement les bénéfices et réduit la probabilité que les pertes soient arrêtées alors que les bénéfices sont bons.

Avantages stratégiques

  • Stop à la proportion des points de glissement, suivi automatique des stop
  • Configurer une ligne de démarrage pour éviter un arrêt de fonctionnement prématuré
  • Suivi dynamique des stop-loss et protection des bénéfices
  • Évitez d’être bloqué par un rappel à court terme
  • La ligne de départ et la proportion de points de glissement peuvent être ajustées en fonction du marché

Risque stratégique

  • Le jugement de la ligne moyenne peut être retardé et générer de faux signaux.
  • Une mauvaise configuration de la ligne de démarrage peut entraîner un arrêt de la perte trop tôt ou trop tard
  • Le rapport des points de glissement est mal réglé, trop lâche ou trop serré
  • Il n’est pas possible d’éviter complètement le risque d’être piégé.
  • Paramètres à optimiser pour les fluctuations du marché

Le risque peut être réduit par:

  • Optimisation des cycles de moyenne pour une meilleure précision de la sélection
  • Tester différents paramètres de la ligne de départ pour trouver le meilleur point
  • Test du ratio de points de glissement optimal en fonction des retraits historiques
  • Réfléchissez à la réintégration et réduisez les pertes
  • Ajouter d’autres jugements conditionnels pour éviter un retour en arrière

Direction d’optimisation

Cette stratégie peut être optimisée dans les domaines suivants:

  1. Optimisation des paramètres de cycle bi-médian

Tester différents paramètres de combinaison de lignes rapides et lentes

  1. Optimiser ou supprimer la ligne de départ

Activer directement le suivi des pertes ou définir des paramètres différents selon les variétés

  1. Tester différents paramètres de rapport de glissement

Trouver le meilleur rapport entre les points d’arrêt et les variétés

  1. Rejoindre le mécanisme de réadmission

Les conditions de réintégration après une sortie de stop loss

  1. Ajuster le stop loss en fonction de la volatilité

La marge de stop loss peut être allégée de manière appropriée en cas de forte volatilité du marché.

Résumer

Cette stratégie utilise un stop-loss suivi par des points de glissement, qui permet de régler la position de stop-loss de manière dynamique après la ligne de départ. Cette stratégie permet d’ajuster automatiquement la force de stop-loss en fonction des fluctuations du marché, ce qui permet de préserver les bénéfices et de réduire les pertes inutiles.

Code source de la stratégie
/*backtest
start: 2022-09-14 00:00:00
end: 2023-09-20 00:00:00
period: 2d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//@author=Daveatt

SystemName = "BEST Trailing Stop Strategy"
TradeId = "BEST"

InitCapital = 100000
InitPosition = 100
InitCommission = 0.075
InitPyramidMax = 1
CalcOnorderFills = true
CalcOnTick = true
DefaultQtyType = strategy.fixed
DefaultQtyValue = strategy.fixed
Precision = 2
Overlay=true


// strategy(title=SystemName, shorttitle=SystemName, overlay=Overlay, 
//  pyramiding=InitPyramidMax, initial_capital=InitCapital, default_qty_type=DefaultQtyType, default_qty_value=InitPosition, commission_type=strategy.commission.percent, 
//  commission_value=InitCommission, calc_on_order_fills=CalcOnorderFills, calc_on_every_tick=CalcOnTick, precision=2)


src = close
// Calculate moving averages
fastSMA = sma(close, 15)
slowSMA = sma(close, 45)

// Calculate trading conditions
enterLong  = crossover(fastSMA, slowSMA)
enterShort = crossunder(fastSMA, slowSMA)

// trend states
since_buy  = barssince(enterLong)
since_sell = barssince(enterShort)
buy_trend  = since_sell > since_buy
sell_trend = since_sell < since_buy 

change_trend = (buy_trend and sell_trend[1]) or (sell_trend and buy_trend[1])

//plot(buy_trend ? 1 : 0, title='buy_trend', transp=100)
//plot(sell_trend ? 1 : 0, title='sell_trend', transp=100)

// get the entry price
entry_price = valuewhen(enterLong or enterShort, close, 0)

// Plot moving averages
plot(series=fastSMA, color=color.teal)
plot(series=slowSMA, color=color.orange)

// Plot the entries
plotshape(enterLong, style=shape.circle, location=location.belowbar, color=color.green, size=size.small)
plotshape(enterShort, style=shape.circle, location=location.abovebar, color=color.red, size=size.small)



///////////////////////////////
//======[ Trailing STOP ]======//
///////////////////////////////

// use SL?
useSL = input(true, "Use stop Loss")
// Configure trail stop level with input
StopTrailPerc = input(title="Trail Loss (%)", type=input.float, minval=0.0, step=0.1, defval=3) * 0.01
// Will trigger the take profit trailing once reached
use_SL_Trigger = input(true, "Use stop Loss Trigger")
StopTrailTrigger   = input(2.0, "SL Trigger (%)",minval=0,step=0.5,type=input.float) * 0.01


StopLossPriceTrigger = 0.0
StopLossPriceTrigger := if (use_SL_Trigger)
    if buy_trend
        entry_price * (1 + StopTrailTrigger) 
    else
        entry_price * (1 - StopTrailTrigger)
else
    -1


var SL_Trigger_Long_HIT = false
SL_Trigger_Long_HIT := useSL and use_SL_Trigger and buy_trend and high >= StopLossPriceTrigger
 ? true : SL_Trigger_Long_HIT[1]


var SL_Trigger_Short_HIT = false
SL_Trigger_Short_HIT := useSL and use_SL_Trigger and sell_trend and low <= StopLossPriceTrigger
 ? true : SL_Trigger_Short_HIT[1]


display_long_SL_trigger     = useSL and buy_trend  and use_SL_Trigger 
 and SL_Trigger_Long_HIT == false and StopLossPriceTrigger != -1
display_short_SL_trigger    = useSL and sell_trend and use_SL_Trigger 
 and SL_Trigger_Short_HIT == false and StopLossPriceTrigger != -1
display_SL_trigger          = display_long_SL_trigger or display_short_SL_trigger

plot(display_SL_trigger ? StopLossPriceTrigger : na, title='SLPriceTrigger', transp=0, 
 color=color.maroon, style=plot.style_circles, linewidth=3)


// Determine trail stop loss prices
longStopPrice = 0.0, shortStopPrice = 0.0

longStopPrice := if useSL and buy_trend
    stopValue = low * (1 - StopTrailPerc)
    max(stopValue, longStopPrice[1])
else
    0

shortStopPrice := if useSL and sell_trend
    stopValue = high * (1 + StopTrailPerc)
    min(stopValue, shortStopPrice[1])
else
    999999

//////////////////////////////////////////////////////////////////////////////////////////
//*** STOP LOSS HIT CONDITIONS TO BE USED IN ALERTS  ***//
//////////////////////////////////////////////////////////////////////////////////////////

cond_long_stop_loss_hit  = useSL and buy_trend and crossunder(low, longStopPrice[1]) 
 and (SL_Trigger_Long_HIT or use_SL_Trigger == false)
cond_short_stop_loss_hit = useSL and sell_trend and crossover(high, shortStopPrice[1]) 
 and (SL_Trigger_Short_HIT or use_SL_Trigger == false)


// Plot stop loss values for confirmation
plot(series=useSL and buy_trend and low >= longStopPrice 
 and (SL_Trigger_Long_HIT or use_SL_Trigger == false)
 ? longStopPrice : na,
 color=color.fuchsia, style=plot.style_cross,
 linewidth=2, title="Long Trail Stop")

plot(series=useSL and sell_trend and high <= shortStopPrice 
 and (SL_Trigger_Short_HIT or use_SL_Trigger == false)
 ? shortStopPrice : na,
 color=color.fuchsia, style=plot.style_cross,
 linewidth=2, title="Short Trail Stop")

close_long  = cond_long_stop_loss_hit
close_short = cond_short_stop_loss_hit

// Submit entry orders
strategy.entry(TradeId + " L", long=true, when=enterLong)
strategy.close(TradeId + " L", when=close_long)

//if (enterShort)
strategy.entry(TradeId + " S", long=false, when=enterShort)
strategy.close(TradeId + " S", when=close_short)


if change_trend
    SL_Trigger_Long_HIT := false
    SL_Trigger_Short_HIT := false