Stratégie de trading automatique longue et courte basée sur l'indicateur RSI


Date de création: 2024-02-29 14:14:01 Dernière modification: 2024-02-29 14:14:01
Copier: 25 Nombre de clics: 686
1
Suivre
1617
Abonnés

Stratégie de trading automatique longue et courte basée sur l’indicateur RSI

Aperçu

Cette stratégie est basée sur l’indicateur RSI et a pour but de concevoir un système de trading automatique à plus-vacu. Ce système permet d’entrer automatiquement en position de plus-vacu lorsque le RSI est sur-acheté et sur-vendu, et de s’arrêter activement lorsque des conditions spécifiques sont déclenchées.

Principe de stratégie

Cette stratégie utilise l’indicateur RSI pour juger du phénomène de sur-achat et de survente du marché. Plus précisément, lorsque l’indicateur RSI est inférieur à la ligne de survente définie, une entrée en survente est effectuée; lorsque l’indicateur RSI est supérieur à la ligne de survente définie, une entrée en survente est effectuée.

En outre, la stratégie définit des conditions d’exit. Si le RSI franchit à nouveau la ligne d’excédent, il déclenchera un arrêt de perte de plusieurs ordres. De même, si le RSI franchit à nouveau la ligne d’excédent, il déclenchera un arrêt de perte de billets vides.

Analyse des avantages

Le plus grand avantage de cette stratégie réside dans l’utilisation de l’indicateur RSI pour juger de la survente du marché, une méthode d’analyse technique plus mature et plus fiable dans le trading quantitatif. Comparée à la simple stratégie de moyenne mobile, cette stratégie peut capturer plus précisément les points de retournement du marché, ce qui augmente la marge de profit du système de négociation.

En outre, la stratégie définit des conditions de sortie qui permettent de contrôler efficacement le risque de perte dans un mouvement unidirectionnel. Cela contraste nettement avec la stratégie traditionnelle de suivi de la tendance, qui permet d’éviter les situations de prise de position.

Analyse des risques

Le risque le plus élevé de cette stratégie est que les signaux de trading émis par le RSI peuvent être mal interprétés. Aucun indicateur technique ne peut être 100% précis pour déterminer le mouvement du marché, l’indicateur RSI n’est pas une exception.

Pour réduire ce risque, la stratégie a mis en place une limite de perte. Cependant, il est plus probable que la limite de perte soit déclenchée dans des situations unilatérales. Une intervention manuelle est nécessaire pour fermer manuellement la position erronée.

Direction d’optimisation

Il y a encore de la place pour optimiser cette stratégie:

  1. La combinaison de plusieurs indicateurs confirme le signal d’entrée, évitant ainsi les entrées erronées causées par le jugement de l’indicateur RSI seul. Par exemple, l’indicateur de moyenne mobile peut être ajouté.

  2. Optimiser les paramètres du RSI pour trouver des paramètres de longueur du RSI plus appropriés, afin de rendre les jugements de survente plus précis.

  3. Optimiser les paramètres de la ligne d’arrêt, tout en évitant au maximum les pertes, mais en veillant à ce que la ligne d’arrêt ne soit pas trop sensible

Résumer

Dans l’ensemble, cette stratégie de trading automatique basée sur le RSI a l’avantage d’identifier efficacement les conditions de marché en survente et en survente. En entrant dans des positions de plus et de moins pendant les niveaux extrêmes du RSI, elle vise à profiter des retournements de marché.

Code source de la stratégie
/*backtest
start: 2023-02-22 00:00:00
end: 2024-02-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=4

strategy("Soran Strategy 2 - LONG SIGNALS", pyramiding=1, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=50, overlay=false)


// ----------------- Inputs ----------------- //

reso = input(title="Resolution", type=input.resolution, defval="")
length = input(20, title="RSI Length", type=input.integer)
ovrsld = input(30, "RSI Oversold level", type=input.float)
ovrbgt = input(85, "RSI Overbought level", type=input.float)
lateleave = input(28, "Number of candles", type=input.integer)
// lateleave : numbers of bars in overbought/oversold zones where the position is closed. The position is closed when this number is reached or when the zone is left (the first condition).

// best parameters BTCUSDTPERP M15 : 20 / 30 / 85 / 28


stratbull = input(title="Enter longs ?", type = input.bool, defval=true)
stratbear = input(title="Enter shorts ?", type = input.bool, defval=true)

stratyear = input(2020, title = "Strategy Start Year")
stratmonth = input(1, title = "Strategy Start Month")
stratday = input(1, title = "Strategy Start Day")
stratstart = timestamp(stratyear,stratmonth,stratday,0,0)


// --------------- Laguerre ----------------- //

laguerre = input(title="Use Laguerre on RSI ?", type=input.bool, defval=false)
gamma = input(0.06, title="Laguerre Gamma")

laguerre_cal(s,g) =>
    l0 = 0.0
    l1 = 0.0
    l2 = 0.0
    l3 = 0.0
    l0 := (1 - g)*s+g*nz(l0[1])
    l1 := -g*l0+nz(l0[1])+g*nz(l1[1])
    l2 := -g*l1+nz(l1[1])+g*nz(l2[1])
    l3 := -g*l2+nz(l2[1])+g*nz(l3[1])
    (l0 + 2*l1 + 2*l2 + l3)/6


// ---------------- Rsi VWAP ---------------- //

rsiV = security(syminfo.tickerid, reso, rsi(vwap(close), length))

rsiVWAP = laguerre ? laguerre_cal(rsiV,gamma) : rsiV


// ------------------ Plots ----------------- //

prsi = plot(rsiVWAP, color = rsiVWAP>ovrbgt ? color.red : rsiVWAP<ovrsld ? color.green : color.white, title="RSI on VWAP", linewidth=1, style=plot.style_line)
hline = plot(ovrbgt, color = color.gray, style=plot.style_line)
lline = plot(ovrsld, color = color.gray, style=plot.style_line)
fill(prsi,hline, color = rsiVWAP > ovrbgt ? color.red : na, transp = 30)
fill(prsi,lline, color = rsiVWAP < ovrsld ? color.green : na, transp = 30)


// ---------------- Positions: only shows Buy and close Buy positions --------------- //

timebull = stratbull 
timebear = stratbear 

strategy.entry("Long", true, when = timebull and crossover(rsiVWAP, ovrsld), comment="")
strategy.close("Long", when = timebull and crossover(rsiVWAP, ovrbgt)[lateleave] or crossunder(rsiVWAP, ovrbgt), comment="")