Stratégie de stop loss coulissant coordonné


Date de création: 2023-11-02 16:28:55 Dernière modification: 2023-11-02 16:28:55
Copier: 0 Nombre de clics: 562
1
Suivre
1617
Abonnés

Stratégie de stop loss coulissant coordonné

Aperçu

La stratégie utilise le RSI stochastique et l’indicateur du taux de variation des prix pour identifier la direction de la tendance vers le multibillet et gère le risque avec la méthode des arrêts de glissement de coordonnées.

Principe de stratégie

Tout d’abord, la stratégie utilise l’indicateur RSI de longueur 5 et l’indicateur stochastique de longueur 7 pour calculer le RSI stochastique. Il est un signal haussier lorsque la valeur K du RSI stochastique est supérieure à la valeur D et un signal baissier lorsque la valeur K est inférieure à la valeur D.

Deuxièmement, la stratégie calcule l’indicateur de variation des prix EMA ROC. Lorsque l’EMA ROC est supérieur à la moitié de la dépréciation ou inférieur à la moitié négative de la dépréciation, le prix est considéré comme en mouvement actif.

Ensuite, en combinant les signaux de plus-value du RSI stochastique et l’indicateur du taux de variation des prix, il est possible d’identifier la direction de la tendance. Lorsque le RSI stochastique est positif et que les prix évoluent activement, faites plus; lorsque le RSI stochastique est négatif et que les prix évoluent activement, faites moins.

Enfin, la stratégie utilise la méthode de gestion des risques de stop-loss en glissement de coordonnées. Après l’ouverture de la position, continuez à actualiser le prix le plus élevé ou le prix le plus bas et utilisez un certain pourcentage de distance entre le prix le plus élevé ou le prix le plus bas comme point d’arrêt.

Analyse des avantages

Cette stratégie présente les avantages suivants:

  1. L’indicateur Stochastic RSI est utilisé pour identifier efficacement les tendances et les situations de survente.

  2. L’indicateur de volatilité des prix permet de filtrer les marchés qui se sont effondrés et d’éviter les faux signaux.

  3. La méthode d’arrêt de glissement des coordonnées permet de maximiser les gains et de contrôler les risques.

  4. Les paramètres de stratégie ont beaucoup d’espace d’optimisation et peuvent être ajustés pour différentes variétés.

  5. La stratégie est simple, claire et facile à comprendre.

Analyse des risques

Cette stratégie comporte aussi des risques:

  1. Le RSI stochastique peut générer des faux signaux et doit être confirmé par d’autres facteurs.

  2. La panne de défilement des coordonnées peut être trop radicale pour être évitée par les gaps nocturnes.

  3. Une inversion à court terme peut entraîner le déclenchement d’un stop loss.

  4. Les paramètres de la stratégie doivent être optimisés pour les différentes variétés, sinon ils peuvent ne pas être efficaces.

  5. Le coût des transactions peut affecter la rentabilité de la stratégie et une fréquence raisonnable des transactions doit être prise en compte.

Direction d’optimisation

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

  1. Optimiser les paramètres du RSI stochastique pour réduire le taux de faux signaux. Différents paramètres de valeur K et de valeur D peuvent être testés.

  2. Optimiser les paramètres de l’indicateur de variation des prix pour améliorer l’efficacité du filtrage. Différentes périodes de fenêtre et seuils de variation peuvent être testés.

  3. Combiner des indicateurs de jugement de tendance pour éviter d’être stoppé par une inversion. Par exemple, ajouter des indicateurs tels que les moyennes mobiles.

  4. Optimiser le ratio de stop loss et réduire le risque de prise de risque.

  5. Ajout d’une gestion des positions pour contrôler les risques individuels. Par exemple, fixer un montant de stop loss ou ajuster dynamiquement les positions en fonction du solde du compte.

  6. Test des paramètres de différentes variétés pour améliorer l’adaptation.

Résumer

L’idée générale de la stratégie est claire et simple. Elle utilise le RSI stochastique pour identifier la direction de la tendance et, en combinaison avec des signaux de filtrage indiquant le taux de variation des prix, peut capturer efficacement les opportunités de tendance de la ligne moyenne et longue.

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

//@version=4
strategy("Sto2", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// Time Frame ///////////////
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true
    
///////////// Stochastic calc /////////////
smoothK = input(1, minval=1)
smoothD = input(7, minval=1)
lengthRSI = input(5, minval=1)
lengthStoch = input(7, minval=1)
src = input(close, title="RSI Source")

up = sma(max(change(src), 0), lengthRSI) 
down = sma(-min(change(src), 0), lengthRSI)
rsi1 = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))

k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = sma(k, smoothD)

///////////// Rate Of Change ///////////// 
source = close, roclength = input(14, minval=1), pcntChange = input(2, minval=1)
roc = 100 * (source - source[roclength]) / source[roclength]
emaroc = ema(roc, roclength / 2)
isMoving() => emaroc > (pcntChange / 2) or emaroc < (0 - (pcntChange / 2))

/////////////// STRATEGY ///////////////
long = k > d and isMoving()
short = k < d and isMoving()

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])
sl_inp = input(2.0, title='Stop Loss %') / 100
tp_inp = input(9.0, title='Take Profit %') / 100 
 
take_level_l = strategy.position_avg_price * (1 + tp_inp)
take_level_s = strategy.position_avg_price * (1 - tp_inp) 

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) // LONG SL
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) // SHORT SL

slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na

// Strategy
if testPeriod()
    strategy.entry("Long Entry",  strategy.long, when=long)
    strategy.entry("Short Entry", strategy.short, when=short)
    strategy.exit("Long Ex", "Long Entry", stop=long_sl, limit=take_level_l, when=since_longEntry > 0)
    strategy.exit("Short Ex", "Short Entry", stop=short_sl, limit=take_level_s, when=since_shortEntry > 0)
    
///////////// Plotting /////////////
bgcolor(isMoving() ? long ? color.green : short ? color.red : na : color.white, transp=80)
p1 = plot(k, color=color.gray, linewidth=0)
p2 = plot(d, color=color.gray, linewidth=0)
h0 = hline(100)
h1 = hline(50)
h3 = hline(0)
fill(p1, p2, color = k > d ? color.lime : color.red, transp=70)