La stratégie de négociation RSI-SRSI à plusieurs délais

Auteur:ChaoZhang est là., Date: 2024-02-18 16:13:50 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie de trading combine les indicateurs techniques de l'indice de force relative (RSI) et de l'indice de force relative stochastique (RSI stochastique) pour générer des signaux de trading.

Nom de la stratégie

La stratégie de négociation RSI-SRSI à plusieurs délais

La logique de la stratégie

L'indicateur RSI stochastique observe la fluctuation des valeurs du RSI. Le RSI stochastique inférieur à 5 est survendu et le RSI stochastique supérieur à 50 est suracheté.

La stratégie intègre également la tendance du prix de la crypto-monnaie dans des délais plus longs (par exemple hebdomadaire). Seulement lorsque le RSI de délais plus longs est au-dessus d'un seuil (par exemple 45), des signaux longs sont déclenchés. Cela filtre les signaux de survente non persistants lorsque la tendance globale est à la baisse.

Les signaux d'achat et de vente doivent être confirmés pendant un certain nombre de périodes (par exemple 8 barres) avant qu'un signal de négociation réel ne soit généré afin d'éviter les faux signaux.

Les avantages

  • Méthode classique d'analyse technique utilisant l'indice de volatilité pour identifier les niveaux de surachat/de survente
  • L'indicateur RSI stochastique est utilisé pour détecter les inversions de l'indicateur RSI.
  • Applique des techniques multi-temporelles pour filtrer les faux signaux et améliorer la qualité

Risques et solutions

  • RSI sujette à la génération de faux signaux
    • Combiner d'autres indicateurs pour filtrer les faux signaux
    • Appliquer des techniques de confirmation de tendance
  • Un seuil incorrect peut produire trop de signaux.
    • Optimiser les paramètres pour trouver la meilleure combinaison
  • Les signaux ont besoin de temps de confirmation.
    • Périodes de confirmation du solde - filtrer les faux signaux sans manquer d'occasions

Les domaines d'amélioration

  • Testez plus de combinaisons d'indicateurs pour des signaux plus forts
    • Par exemple, intégrer l'indicateur MACD
  • Utiliser des méthodes d'apprentissage automatique pour trouver des paramètres optimaux
    • Par exemple, les algorithmes génétiques/algorithmes évolutionnaires pour l'optimisation automatisée
  • Ajouter des stratégies de stop-loss pour contrôler les risques liés au seul commerce
    • Définir un stop-loss lorsque le prix franchit le niveau de support

Conclusion

La stratégie repose principalement sur les deux indicateurs techniques classiques, RSI et RSI stochastique, pour générer des signaux de trading. En outre, l'introduction de la confirmation de tendance à partir de délais plus élevés aide à filtrer efficacement les faux signaux et améliore la qualité du signal. Une amélioration supplémentaire des performances peut être obtenue en optimisant les paramètres, en ajoutant des stop loss et d'autres moyens. La logique est simple et facile à comprendre.


/*backtest
start: 2023-02-11 00:00:00
end: 2024-02-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("RSI and Stochatic Strategy", overlay=true, use_bar_magnifier = false)


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

// RSI and SRSI
rsiLength = input(14, title="RSI Length") 
stochLength = input(14, title="Stochastic Length")
kSmooth = input(3, title="K Smooth")
dSmooth = input(3, title="D Smooth")


//////// thresholds ///////////////
st_low = input(5, title="Low SRSI") // stochastic RSI low -- prepare to sell
st_hi = input(50, title="High SRSI") // stochastic RSI high -- prepare to buy
diff = input(5, title="difference") // minimum change in RSI
// inval_diff = input(12, title="difference") // invalidation difference: change in the oposite direction that invalidates rsi falling/rising
rsi_low = input(30, title="Low RSI") // RSI considered low
rsi_hi = input(60, title="High RSI") // RSI considered high
rsi_ht_hi = input(45, title="High higher time frame RSI") // RSI in higher time frame considered high


/// buy trigger duration 
tr_dur = input(8, title="Trigger duration")
low_dur = input(20, title="Monitoring last low")


///////////////// Higher time frame trend ///////////////////
// higher time frame resolution
res2 = input.timeframe("W", title="Higher time-frame")
// Input for the ticker symbol, default is an empty string
// For instance we could monitor BTC higher time frame trend
symbol = input("BTC_USDT:swap", "Input Ticker (leave empty for current)")

// Determine the symbol to use
inputSymbol = symbol == "" ? syminfo.tickerid : symbol
//////////////////////////////////////////////////////////

// Calculate RSI //
rsi = ta.rsi(close, rsiLength)

// Calculate Stochastic RSI //
rsiLowest = ta.lowest(rsi, stochLength)
rsiHighest = ta.highest(rsi, stochLength)
stochRsi = 100 * (rsi - rsiLowest) / (rsiHighest - rsiLowest)

// Apply smoothing
K = ta.sma(stochRsi, kSmooth)
D = ta.sma(K, dSmooth)

// Higher time Frame RSI
cl2 = request.security(inputSymbol, res2, close)
rsi2 = ta.rsi(cl2, 14)

// SRSI BUY/SELL signals 
sell_stoch = (ta.lowest(K, tr_dur) < st_low) or (ta.highest(rsi, tr_dur) < rsi_low)
buy_stoch = ((ta.lowest(K, tr_dur) > st_hi) or (ta.lowest(rsi, tr_dur) > rsi_hi)) and (rsi2 > rsi_ht_hi)

 // valitation / invalidation sell signal
ll = ta.barssince(not sell_stoch)+1
sell_validation = (ta.highest(rsi, ll)>rsi[ll]+diff and rsi < rsi[ll]) or (rsi < rsi[ll]-diff)

// valitation / invalidation buy signal
llb = ta.barssince(not buy_stoch)+1
buy_validation = (ta.lowest(rsi, llb)<rsi[llb]-diff and rsi > rsi[llb]) or (rsi > rsi_hi and rsi - rsi[tr_dur] > 0)

sell_signal = sell_stoch and sell_validation
buy_signal = buy_stoch and buy_validation 

// Define the start date for the strategy
startYear = input(2019, "Start Year")
startMonth = input(1, "Start Month")
startDay = input(1, "Start Day")

// Convert the start date to Unix time
startTime = timestamp(startYear, startMonth, startDay, 00, 00)

// Define the end date for the strategy
endYear = input(2030, "End Year")
endMonth = input(1, "End Month")
endDay = input(1, "End Day")

// Convert the end date to Unix time
endTime = timestamp(endYear, endMonth, endDay, 00, 00)


if true
    if buy_signal
        strategy.entry("buy", strategy.long, comment = "Buy")
    if sell_signal
        strategy.close("buy", "Sell")

Plus de