Stratégie de négociation en cas de renversement de l'indice RSI

Auteur:ChaoZhang est là., Date: le 28 septembre 2023 à 16h09
Les étiquettes:

Résumé

Cette stratégie utilise l'indicateur RSI pour juger des tendances du marché et générer des signaux de trading lorsque des conditions de surachat ou de survente se produisent. Elle vise à capturer les mouvements d'inversion à court terme sur le marché. Elle intègre également des moyennes mobiles et une logique de prise de profit / stop-loss pour filtrer les signaux et contrôler les risques.

La logique de la stratégie

  1. Calculez le RSI à 14 périodes et fixez la ligne de surachat à 67 et la ligne de survente à 44.

  2. Lorsque le RSI franchit la ligne de surachat, un signal de vente est généré.

  3. Ajouter un filtre de moyenne mobile. Les signaux de vente ne se produisent que lorsque la fermeture est inférieure à la MA du jour précédent; Les signaux d'achat ne se produisent que lorsque la fermeture est supérieure à la MA du jour précédent.

  4. Incorporer une logique de prise de profit et de stop-loss. Des points fixes ou des sorties basées sur le RSI peuvent être utilisés.

Analyse des avantages

  1. Capture les opportunités d'inversion à court terme en utilisant les niveaux de surachat/survente du RSI.

  2. Le filtre de moyenne mobile évite de négocier contre la tendance.

  3. Le contrôle de la prise de bénéfices et du stop-loss contrôle la perte d'une seule transaction.

  4. Peut détecter les opportunités d'inversion de tendance tôt.

Risques et solutions

  1. Le décalage du RSI peut provoquer de faux signaux.

  2. Le stop-loss fixe peut être trop large ou trop étroit.

  3. La prise de bénéfices fixe peut sortir trop tôt ou viser trop petit.

  4. Ne parvient pas à filtrer les marchés, ce qui entraîne une survente et des pertes.

Directions d'optimisation

  1. Testez les paramètres de l'indice de résistance sur différentes périodes.

  2. Ajustez les niveaux de surachat/survente du RSI.

  3. Essayez d'autres moyennes mobiles ou d'autres filtres.

  4. Testez les objectifs/arrêts de profit fixes par rapport aux objectifs/arrêts de profit dynamiques.

  5. Optimiser les valeurs profit/stop pour s'adapter à la volatilité du marché.

  6. Ajoutez des filtres pour éviter les fouets dans les marchés variés.

  7. Considérez la confluence de plusieurs délais pour améliorer la qualité du signal.

Résumé

Cette stratégie consiste à négocier des inversions en utilisant le RSI combiné avec des moyennes mobiles et une logique de prise de profit / stop-loss. Elle vise à capturer les virages à court terme sur le marché. Une optimisation des paramètres et des filtres supplémentaires peuvent améliorer la rentabilité tout en réduisant les risques.


/*backtest
start: 2022-09-21 00:00:00
end: 2023-09-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//© профешинил хомячело
//@version = 4

strategy("RSI Strategy Professional Хомячело", overlay=false)
length = input( 14 )
overSold = input( 44 )
overBought = input( 67 )
price = open
rsi = rsi(price, length)
band1 = hline(overSold, "overSold12", color=#C0C0C0)
band0 = hline(overBought, "overBought12", color=#C0C0C0)
plot(rsi, "RSI", color=color.red)
fill(band1, band0, color=color.black, transp=90, title="Background")
src = close
a = sma(src, 1)
aaa = strategy.opentrades + 1

n = input(defval = 0.0576923077, title = "AvgPrice - n")
//n = 0.0576923077

buysignal = crossover(rsi, overSold) and (a < (strategy.position_avg_price - n) or strategy.opentrades == 0)
sellsignal = crossunder(rsi, overBought) and (a > (strategy.position_avg_price + n) or strategy.opentrades == 0)


// crossover(rsi, overSold)
// crossunder(rsi, overBought)
if (not na(rsi))
    if(buysignal)
        strategy.entry("LONG", strategy.long, comment = tostring(a) + "\n(" + tostring(aaa) + ")")
        n += 1000
    if(sellsignal)
        strategy.entry("SHORT", strategy.short, comment = tostring(a) + "\n(" + tostring(aaa) + ")")
        n += 1000

//лонги орні       
    if(rsi < 15 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("LONG", strategy.long, comment = "ЙОБАНИЙ НАСРАВ ТА БЕРИ ЛОНГ НА ВСЬО ШО Є НАХУЙ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")
    if(rsi < 20 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("LONG", strategy.long, comment = "ЛОНГ НА ВСЮ КОТЛЄТУ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")
//шорти орні
    if(rsi > 85 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("SHORT", strategy.short, comment = "ЙОБАНИЙ НАСРАВ ТА БЕРИ ШОРТ НА ВСЬО ШО Є НАХУЙ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")
    if(rsi > 80 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("SHORT", strategy.short, comment = "ШОРТ НА ВСЮ КОТЛЄТУ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")


//стоп-лосс і ціль

//rsi
rsion = input(defval = false, title = "Тейк-профіт по RSI")
rcl = input(defval = 73.0, title = "RSI тейк по лонгу")
rcs = input(defval = 44.0, title = "RSI тейк по шорту")
possize = input(defval = 250.0, title = "Маржа")
posp = input(defval = 3.0, title = "Плече")

//tick
ut = input(defval = false, title = "Тейк-профіт")
tar = input(defval = 4500.0, title = "Тейк-профіт у тіках")
us = input(defval = false, title = "Стоп-лосс")
stop = input(defval = 0.0, title = "Стоп-лосс у тіках")
tar:=tar/syminfo.mintick
stop:=stop/syminfo.mintick

if(ut==true and us==false)
    strategy.exit(id="LX", from_entry = "LONG", profit = tar, comment = "ТейкL")
    strategy.exit(id="SX", from_entry = "SHORT", profit = tar, comment = "ТейкS")
if(us==true and ut==false)
    strategy.exit(id="LX", from_entry = "LONG", loss = stop, comment = "СтопL")
    strategy.exit(id="SX", from_entry = "SHORT", loss = stop, comment = "СтопS")
    
if(ut==true and us==true)
    strategy.exit(id="LX", from_entry = "LONG", profit = tar, loss = stop, comment ="Тейк/СтопL")
    strategy.exit(id="SX", from_entry = "SHORT", profit = tar, loss = stop, comment ="Тейк/СтопS")
    
//закриття по rsi
if(rsion == 1 )
    pr = round(((a / strategy.position_avg_price - 1) * possize * posp), 2)
    ppr = round(((a / strategy.position_avg_price - 1) * 100 * posp), 2)
    spr = round((1 - (a / strategy.position_avg_price)) * possize * posp, 2)
    sppr = round((100 - (a / strategy.position_avg_price * 100)) * posp, 2)
    
    if(rsi > rcl)
        strategy.close(id="LONG", comment = "LT\n" + tostring(ppr) + "%\n" + tostring(pr) + "$\n" + tostring(a))
    if(rsi < rcs)
        strategy.close(id="SHORT", comment = "ST\n" + tostring(sppr) + "%\n" + tostring(spr) + "$\n" + tostring(a))

Plus de