Stratégie de trading quantitative basée sur StochRSI


Date de création: 2023-12-07 16:05:17 Dernière modification: 2023-12-07 16:05:17
Copier: 0 Nombre de clics: 627
1
Suivre
1619
Abonnés

Stratégie de trading quantitative basée sur StochRSI

Aperçu

Cette stratégie est basée sur le StochRSI. Cette stratégie utilise principalement le StochRSI pour juger de la situation de survente et de survente, en combinaison avec le RSI pour filtrer certains faux signaux, faire court lorsque le StochRSI affiche une zone de survente et faire plus lorsque la zone de survente est affichée, réaliser un profit.

Principe de stratégie

Cette stratégie utilise principalement l’indicateur StochRSI pour déterminer les zones de survente du marché. L’indicateur StochRSI est composé de lignes K et D, où la ligne K reflète la position du RSI actuel dans la gamme de prix du RSI au cours de la période la plus récente. La ligne D est la moyenne mobile de la ligne K.

Plus précisément, la stratégie commence par calculer la valeur de l’indicateur RSI de longueur 14, puis applique l’indicateur StochRSI à l’indicateur RSI. La longueur de paramètre de l’indicateur StochRSI est de 14, la ligne de cycle de lissage K est de 3, et la ligne D est de 3. Lorsque la ligne K traverse la zone de survente définie par l’utilisateur (par défaut 1), faites plus; lorsque la ligne K traverse la zone de survente définie par l’utilisateur (par défaut 99), faites moins.

En outre, la stratégie a également des paramètres de stop loss et de stop. Le paramètre de stop loss est défini par défaut comme 10000; le stop est défini en fonction des paramètres comme un arrêt de trailing de la courbe, le nombre de points de trail par défaut est de 300 et le décalage est de 0.

Analyse des avantages

  1. L’indicateur StochRSI est plus fiable pour détecter les zones de survente qu’un seul RSI
  2. Combinaison de signaux de filtrage RSI pour éviter les fausses ruptures
  3. Réglage des risques de contrôle du mécanisme d’arrêt des dommages

Analyse des risques

  1. Le StochRSI peut être exposé à un faux signal de tête
  2. Il est nécessaire de régler raisonnablement les paramètres de surachat et de survente, sinon les opérations seront erronées.
  3. Un point d’arrêt trop petit est facilement pris en compte, un point d’arrêt trop grand peut générer des gains limités.

Pour les risques ci-dessus, il est possible de définir des cycles de paramètres plus longs ou d’envisager de les utiliser en combinaison avec d’autres indicateurs pour filtrer les signaux, d’ajuster les paramètres d’achat et de vente excessive aux différents marchés et de tester différents paramètres de stop-loss.

Direction d’optimisation

  1. On peut envisager de l’utiliser avec d’autres combinaisons d’indicateurs, comme le MACD, les lignes de Brin, etc., pour filtrer les faux signaux
  2. Différents paramètres peuvent être testés avec des réglages périodiques pour s’adapter à plus de conditions de marché
  3. Optimiser le point d’arrêt de perte en testant plusieurs fois le test de retour pour trouver les paramètres optimaux

Résumer

Cette stratégie est basée sur le StochRSI pour déterminer les zones de survente et de survente. Comparé au seul RSI, le StochRSI, combiné à l’idée de KDJ, permet de déterminer plus précisément le point de basculement.

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

//@version= 2
strategy("STOCHRSI JURE", overlay=false)
lengthrsi = input(10)
overSold = input( 1 )
overBought = input(99)

call_trail_stop = input(300)
call_trail_offset = input(0)
call_sl = input(10000)

price = ohlc4
vrsi = rsi(price, lengthrsi)

smoothK = input(3, minval=1)
smoothD = input(3, minval=1)
lengthRSI = input(14, minval=1)
lengthStoch = input(14, minval=1)
src = input(close, title="RSI Source")

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


plot( k, color=blue, linewidth=1, title="K")
plot( d, color=red, linewidth=1, title="D")

if (crossover(k, overSold) ) 
    strategy.entry("BUY", strategy.long, stop=close, oca_name="TREND",  comment="BUY")
    strategy.exit("BUY EXIT", "BUY", trail_points=call_trail_stop, trail_offset=call_trail_offset, loss = call_sl)


if (crossunder(k, overBought) ) 
    strategy.entry("SELL", strategy.short,stop=close, oca_name="TREND", comment="SELL")
    strategy.exit("SELL EXIT", "SELL", trail_points=call_trail_stop, trail_offset=call_trail_offset, loss = call_sl)
    

//if (  ( crossover(k,d)) and ( (vrsi<overSold) or crossover(vrsi,overSold) )  and   year >= yearfrom and year <= yearuntil and month>=monthfrom and month <=monthuntil and dayofmonth>=dayfrom and dayofmonth < dayuntil) 
//    strategy.entry("BUY", strategy.long, stop=close, oca_name="TREND", oca_type=strategy.oca.cancel, comment="BUY")
//else
//    strategy.cancel(id="BUY")

//if ( ( crossunder(k,d) ) and ( (vrsi >overBought) or crossunder(vrsi,overBought) ) and   year >= yearfrom and year <= yearuntil and month>=monthfrom and month <=monthuntil and dayofmonth>=dayfrom and dayofmonth < dayuntil ) 
//    strategy.entry("SELL", strategy.short,stop=close, oca_name="TREND", oca_type=strategy.oca.cancel, comment="SELL")
//else
//    strategy.cancel(id="SELL")