Cette stratégie utilise principalement la valeur moyenne du RSI et les changements soudains de prix pour identifier la tendance du marché et les points d'inversion. L'idée principale est d'envisager d'établir des positions lorsque le RSI est suracheté ou survendu et de rechercher des opportunités d'inversion lorsque des changements soudains de prix se produisent.
Calculer la SMA du RSI. Lorsque le SMA du RSI dépasse 60 ou tombe en dessous de 40, il est considéré comme suracheté ou survendu, et des positions inversées seront envisagées.
Lorsque le changement de l'indice de volatilité dépasse une certaine valeur, il est considéré comme un changement soudain.
Utilisez plusieurs EMA pour le filtrage. Seulement lorsque le prix dépasse la EMA de la période courte, la position longue sera considérée. Seulement lorsque le prix tombe en dessous de la EMA de la période courte, la position courte sera considérée.
En combinant l'utilisation de la moyenne RSI, des changements soudains et du filtrage EMA, de meilleurs points d'entrée peuvent être identifiés.
L'utilisation de la moyenne RSI permet de juger avec précision des conditions de surachat et de survente, ce qui favorise la capture des opportunités de renversement.
Les changements soudains signifient souvent des changements dans la tendance et la direction des prix, l'utilisation de ce signal peut améliorer la rapidité des entrées.
Le filtrage à plusieurs niveaux de l'EMA permet d'éviter davantage les faux signaux et de réduire les pertes inutiles.
La combinaison de plusieurs paramètres comme critères de décision peut améliorer la stabilité et la fiabilité de la stratégie.
Les paramètres du RSI peuvent être optimisés ou remplacés par d'autres indicateurs.
Les changements soudains pourraient être des fluctuations à court terme plutôt que de véritables retours en arrière.
Il y a un retard dans le filtrage de direction de l'EMA. Testez des EMA à plus courte période pour améliorer la sensibilité.
En général, cette stratégie est assez sensible au réglage des paramètres. Des tests minutieux sont nécessaires pour trouver des combinaisons optimales de paramètres. Utilisez le stop loss pour contrôler les risques.
Testez d'autres indicateurs comme ADX, MACD combiné avec RSI pour trouver de meilleurs points d'entrée.
Améliorer les algorithmes d'apprentissage automatique pour juger de l'authenticité et de la stabilité des signaux d'achat/vente soudains.
Améliorer encore le filtrage des directions des EMA, par exemple en utilisant un jugement composite des EMA de différentes périodes.
Ajouter une stratégie de stop loss adaptative pour ajuster dynamiquement la plage de stop loss en fonction de la volatilité du marché.
Continuer l'optimisation des paramètres pour trouver des combinaisons optimales de paramètres.
Cette stratégie utilise d'abord la moyenne RSI pour déterminer les conditions de surachat/survente. Les positions inversées sont ensuite établies lorsque des changements soudains se produisent. L'EMA est également utilisée comme filtre auxiliaire. Avec des paramètres appropriés, cette stratégie peut déterminer efficacement les changements de tendance du marché. Dans l'ensemble, elle a une bonne stabilité et une bonne valeur pratique. Il y a encore de la place pour l'amélioration, nécessitant des tests et une optimisation persistants.
/*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)