Stratégie de trading automatique basée sur les indices de rentabilité

Auteur:ChaoZhang est là., Date: le 29 février 2024 14:14:01
Les étiquettes:

img

Résumé

Cette stratégie conçoit un système de trading automatisé pour les positions longues et courtes basé sur l'indicateur RSI. Il entre dans les transactions lorsque l'indicateur RSI montre des niveaux de surachat ou de survente, et sort avec des stop-loss déclenchés par des conditions spécifiques.

La logique de la stratégie

La stratégie utilise l'indicateur RSI pour identifier les conditions de marché de surachat / survente. Plus précisément, lorsque le RSI tombe en dessous de la ligne de survente, il entre dans des positions longues; lorsque le RSI dépasse la ligne de surachat, il entre dans des positions courtes.

En outre, les règles de sortie sont établies dans la stratégie. Après avoir ouvert des positions longues, si le RSI franchit à nouveau la ligne de surachat, il déclenchera des pertes d'arrêt pour fermer les longs; de même, après avoir ouvert des positions courtes, si le RSI franchit à nouveau la ligne de survente, il fermera les courtes.

Analyse des avantages

Le principal avantage de cette stratégie est l'utilisation de l'indicateur RSI pour juger des scénarios de surachat/survente, qui est une méthode d'analyse technique relativement mature et fiable dans le trading quantitatif.

En outre, le mécanisme de stop loss contrôle efficacement le risque à la baisse lors de fortes tendances unidirectionnelles, ce qui contraste nettement avec les stratégies traditionnelles de suivi des tendances où les coureurs peuvent facilement avoir des ennuis.

Analyse des risques

Le plus grand risque est que l'indicateur RSI puisse donner de mauvais signaux de trading occasionnellement. Aucun indicateur technique ne peut être précis à 100% pour prédire les mouvements du marché, y compris le RSI.

Pour atténuer ce risque, des stop-loss sont mis en œuvre dans la stratégie. Mais les chances de déclenchement d'un stop-loss peuvent encore être élevées pendant les fortes tendances, et une intervention manuelle serait nécessaire pour fermer les mauvaises positions.

Directions d'optimisation

Il reste encore des possibilités d'optimisation:

  1. Incorporer d'autres indicateurs pour confirmer les signaux d'entrée et éviter les entrées erronées du seul RSI. Des moyennes mobiles, etc., pourraient être ajoutés.

  2. Optimiser les paramètres de l'indicateur de volatilité pour trouver de meilleures valeurs de longueur pour détecter plus précisément les surachats/survente.

  3. Le placement de stop-loss doit être réglé afin d'équilibrer la prévention des pertes et l'évitement des sorties prématurées.

Conclusion

Dans l'ensemble, cette stratégie de trading automatisée basée sur RSI a l'avantage d'identifier efficacement les conditions de marché de surachat et de survente. En entrant dans des positions longues et courtes pendant les niveaux extrêmes de RSI, elle vise à tirer profit des renversements du marché. Le mécanisme de stop loss aide également à limiter les pertes lors de fortes tendances unidirectionnelles.


/*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="")


Plus de