Stratégie d'inversion du stop suiveur


Date de création: 2023-12-01 13:41:41 Dernière modification: 2023-12-01 13:41:41
Copier: 0 Nombre de clics: 629
1
Suivre
1619
Abonnés

Stratégie d’inversion du stop suiveur

Aperçu

Il s’agit d’une stratégie très simple. Elle ne comporte qu’un seul stop tracking. Lorsque le stop est déclenché, la position est inversée et un stop tracking est défini pour la nouvelle position.

Principe de stratégie

La stratégie est basée sur l’un des trois types de stop loss: Stop Percentage, Stop ATR et Stop Absolut. Lorsque le stop loss est déclenché, la position est inversée et un stop tracking est défini pour la nouvelle position.

Plus précisément, la stratégie calcule d’abord le stop-loss en fonction du type de stop-loss choisi. Ensuite, elle détermine s’il y a un signal de placement, c’est-à-dire si le sommet est supérieur au prix de stop-loss précédent et le bas est inférieur au prix de stop-loss précédent.

Analyse des avantages

Le plus grand avantage de cette stratégie est qu’elle est très simple, ne nécessite que le suivi d’un seul stop et ne nécessite pas de prise en compte de la sélection des points d’entrée et de la sélection des points de sortie. La configuration flexible des valeurs de stop rend également son application plus large.

Par rapport aux arrêts fixes, il utilise des arrêts de suivi qui permettent de verrouiller des gains plus importants, tout en réduisant la probabilité que les arrêts soient impactés. Chaque arrêt déclenché par un retour de position peut capturer des opportunités de retour de prix.

Analyse des risques

Les principaux risques que cette stratégie peut comporter sont les risques liés à la mise en place d’un prix d’arrêt inapproprié. Une valeur d’arrêt trop élevée peut entraîner une expansion des pertes; une valeur d’arrêt trop faible peut entraîner un déclenchement fréquent des pertes. Cela nécessite une optimisation ciblée en fonction des conditions du marché.

Un autre risque est que la direction de l’inversion de position après le déclenchement d’un stop loss ne soit pas précise, ce qui peut entraîner une perte d’opportunité de reprise ou une perte supplémentaire. Cela nécessite une combinaison de tendances et de résistances de soutien pour déterminer le meilleur moment de reprise.

Direction d’optimisation

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

  1. Une meilleure compréhension des tendances et une meilleure prévention des contre-attaques
  2. Optimisation de la méthode de calcul des stop-loss afin de suivre le marché plus dynamiquement
  3. Augmentation du jugement sur la rupture, assurant un signal de retour plus probable
  4. Indicateurs tels que la volatilité sont utilisés pour déterminer le meilleur moment de reprise

Résumer

La stratégie est rentable grâce à un simple mécanisme de suivi des arrêts de perte, une stratégie de quantification adaptée aux débutants. Par rapport à la stratégie de stop loss traditionnelle, elle ajoute un mécanisme de refonte de la position après le déclenchement de la stop loss, ce qui permet d’obtenir des gains supplémentaires. Grâce à un test et une optimisation continus, la stratégie peut devenir un programme de quantification très pratique.

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

//@version=4
strategy(title="Trailing SL Strategy [QuantNomad]", shorttitle = "TrailingSL [QN]", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 50)

////////////
// Inputs //

sl_type    = input("%", options = ["%", "ATR", "Absolute"])

sl_perc    = input(4,     title = "% SL",        type = input.float)
atr_length = input(10,    title = "ATR Length")
atr_mult   = input(2,     title = "ATR Mult",    type = input.float)
sl_absol   = input(10,    title = "Absolute SL", type = input.float)

// BACKTESTING RANGE
// From Date Inputs
fromDay   = input(defval = 1,    title = "From Day",   minval = 1, maxval = 31)
fromMonth = input(defval = 1,    title = "From Month", minval = 1, maxval = 12)
fromYear  = input(defval = 2016, title = "From Year",  minval = 1970)
 
// To Date Inputs
toDay   = input(defval = 1,    title = "To Day",   minval = 1, maxval = 31)
toMonth = input(defval = 1,    title = "To Month", minval = 1, maxval = 12)
toYear  = input(defval = 2100, title = "To Year",  minval = 1970)
 
// Calculate start/end date and time condition
startDate  = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear,   toMonth,   toDay,   00, 00)

time_cond = time >= startDate and time <= finishDate

//////////////////
// CALCULATIONS //

// SL values
sl_val = sl_type == "ATR"      ? atr_mult * atr(atr_length) : 
         sl_type == "Absolute" ? sl_absol : 
         close * sl_perc / 100
         
// Init Variables
pos         = 0
trailing_sl = 0.0

// Signals
long_signal  = nz(pos[1]) !=  1 and high > nz(trailing_sl[1])
short_signal = nz(pos[1]) != -1 and low  < nz(trailing_sl[1]) 

// Calculate SL
trailing_sl := short_signal     ? high + sl_val : 
               long_signal      ? low  - sl_val : 
               nz(pos[1]) ==  1 ? max(low  - sl_val, nz(trailing_sl[1])) :  
               nz(pos[1]) == -1 ? min(high + sl_val, nz(trailing_sl[1])) : 
               nz(trailing_sl[1])
               
// Position var               
pos := long_signal  ? 1 : short_signal ? -1 : nz(pos[1]) 

//////////////
// PLOTINGS //

plot(trailing_sl, linewidth = 2, color = pos == 1 ? color.green : color.red)

//////////////
// STRATEGY //

if (time_cond and pos != 1)
    strategy.entry("long",  true, stop = trailing_sl)
  
if (time_cond and pos != -1) 
    strategy.entry("short", false, stop = trailing_sl)