
Cette stratégie utilise principalement la moyenne du RSI et les variations soudaines des prix pour identifier les tendances et les points de retournement du marché. L’idée centrale est d’envisager la création de positions en cas de survente du RSI et de rechercher des opportunités de retournement en cas de variations soudaines des prix.
Calculer la moyenne SMA du RSI. Lorsque le RSI passe de 60 ou de 40 en haut ou en bas de la ligne SMA, considérez cela comme un surachat et un survente et envisagez de prendre une position inverse.
Lorsque le RSI change au-delà d’une certaine valeur, on considère qu’il y a un changement soudain. En combinaison avec la vérification des prix de clôture réels, cela sert de signal pour établir une position inversée.
En utilisant un filtrage multigroup d’EMA, on ne considère la formation d’un multiple que lorsque le cours suit une EMA de plus courte période; on ne considère la formation d’un vide que lorsque le cours suit une EMA de plus courte période.
Il utilise les valeurs moyennes du RSI, les mouvements soudains et le filtrage de l’EMA pour trouver les meilleures positions.
L’utilisation de la moyenne du RSI permet d’évaluer plus précisément le phénomène de survente et de survente, ce qui est utile pour saisir les opportunités de reprise.
Les changements brusques sont souvent le signe d’un changement de tendance et de direction des prix, et l’utilisation de ce signal peut améliorer la timeliness de l’entrée.
Le filtrage multigamme de l’EMA permet d’éviter davantage de faux signaux et ainsi de réduire les pertes inutiles.
L’intégration de divers paramètres comme critère de jugement peut améliorer la stabilité et la fiabilité de la stratégie.
Le RSI est instable et le taux de réussite du SMA est faible. Les paramètres du RSI peuvent être optimisés de manière appropriée ou remplacés par d’autres indicateurs.
Les changements soudains peuvent être des tremblements à court terme et non une véritable inversion. La longueur des cycles d’induction peut être augmentée pour améliorer l’exactitude du jugement.
Le filtrage directionnel EMA présente une latence. La sensibilité de l’EMA est améliorée en testant des EMA à plus courtes périodes.
Dans l’ensemble, cette stratégie est sensible aux ajustements de paramètres et nécessite un test minutieux pour trouver la combinaison optimale de paramètres.
Testez l’ADX, le MACD et d’autres indicateurs en combinaison avec le RSI pour trouver un meilleur point d’entrée.
L’ajout d’algorithmes d’apprentissage automatique permettant de déterminer la véracité et la stabilité des signaux d’achat et de vente spontanés à l’aide de modèles de formation.
Améliorer encore l’efficacité du filtrage de la direction des EMAs, par exemple en améliorant la compréhension globale des EMAs de différentes périodes.
L’ajout d’une stratégie d’adaptation aux arrêts de perte permet d’ajuster dynamiquement le seuil de perte en fonction de la volatilité du marché.
Continuez à optimiser les paramètres pour trouver la meilleure combinaison de paramètres. Les critères d’optimisation peuvent prendre en compte le ratio de Sharpe, etc.
Cette stratégie utilise d’abord la valeur moyenne du RSI pour déterminer les situations de survente et de survente. Ensuite, elle établit une position inversée en cas de variation soudaine. En même temps, elle utilise l’EMA pour le filtrage auxiliaire.
/*backtest
start: 2023-12-12 00:00:00
end: 2023-12-19 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © samwillington
//@version=5
strategy("sma RSI & sudden buy and sell Strategy v1", overlay=true)
price = close
length = input( 14 )
inst_length = input( 10 )
var rbc = 0
var float rsiBP = 0.0
var rsc = 0
var float rsiSP = 0.0
bars = input(10)
lookbackno2 = input.int(20)
rsi_buy = 0
rsi_sell = 0
//EMA inputs
input_ema20 = input.int(20)
ema20 = ta.ema(price, input_ema20)
input_ema50 = input.int(50)
ema50 = ta.ema(price, input_ema50)
input_ema100 = input.int(100)
ema100 = ta.ema(price, input_ema100)
input_ema200 = input.int(200)
ema200 = ta.ema(price, input_ema200)
input_ema400 = input.int(400)
ema400 = ta.ema(price, input_ema400)
input_ema800 = input.int(800)
ema800 = ta.ema(price, input_ema800)
vrsi = ta.rsi(price, length)
hi2 = ta.highest(price, lookbackno2)
lo2 = ta.lowest(price, lookbackno2)
buy_diff_rsi = vrsi - ta.rsi(close[1], length)
sell_diff_rsi = ta.rsi(close[1],length) - vrsi
//RSI high low
var int sudS = 0
var int sudB = 0
var float sudSO = 0.0
var float sudSC = 0.0
var float sudBO = 0.0
var float sudBC = 0.0
var sudBuy = 0
var sudSell = 0
var countB = 0
var countS = 0
var co_800 = false
var co_400 = false
var co_200 = false
var co_100 = false
var co_50 = false
var co_20 = false
co_800 := ta.crossover(price , ema800)
co_400 := ta.crossover(price , ema400)
co_200 := ta.crossover(price , ema200)
co_100 := ta.crossover(price , ema100)
co_50 := ta.crossover(price , ema50)
co_20 := ta.crossover(price , ema20)
if(ta.crossunder(price , ema20))
co_20 := false
if(ta.crossunder(price , ema50))
co_50 := false
if(ta.crossunder(price , ema100))
co_100 := false
if(ta.crossunder(price , ema200))
co_200 := false
if(ta.crossunder(price , ema400))
co_400 := false
if(ta.crossunder(price , ema800))
co_800 := false
if((price> ema800) and (price > ema400))
if(co_20)
if(co_50)
if(co_100)
if(co_200)
strategy.close("Sell")
strategy.entry("Buy", strategy.long, comment="spl Buy")
co_20 := false
co_50 := false
co_100 := false
co_200 := false
// too much rsi
if(vrsi > 90)
strategy.close("Buy")
strategy.entry("Sell", strategy.short, comment="RSI too overbuy")
if(vrsi < 10)
strategy.close("Sell")
strategy.entry("Buy", strategy.long, comment="RSI too oversold")
var sudbcount = 0 // counting no. of bars till sudden rise
var sudscount = 0 // counting no. of bars till sudden decrease
if(sudB == 1)
sudbcount := sudbcount + 1
if(sudS == 1)
sudscount := sudscount + 1
if((buy_diff_rsi > inst_length) and (hi2 > price))
sudB := 1
sudBO := open
sudBC := close
if((sell_diff_rsi > inst_length) )
sudS := 1
sudSO := open
sudSC := close
if(sudbcount == bars)
if(sudBC < price)
strategy.close("Sell")
strategy.entry("Buy", strategy.long, comment="sudd buy")
sudbcount := 0
sudB := 0
sudbcount := 0
sudB := 0
if(sudscount == bars)
if(sudSC > price)
strategy.close("Buy")
strategy.entry("Sell", strategy.short, comment="sudd sell")
sudscount := 0
sudS := 0
sudscount := 0
sudS := 0
over40 = input( 40 )
over60 = input( 60 )
sma =ta.sma(vrsi, length)
coo = ta.crossover(sma, over60)
cuu = ta.crossunder(sma, over40)
if (coo)
strategy.close("Sell")
strategy.entry("Buy", strategy.long, comment="modified buy")
if (cuu)
strategy.close("Buy")
strategy.entry("Sell", strategy.short, comment="modefied sell")
//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)