Stratégie d'inversion combinée de l'indicateur RSI à moyenne mobile double

Auteur:ChaoZhang est là., Date: 2023-11-10 18h01:09 Je vous en prie
Les étiquettes:

img

Résumé

Cette stratégie combine une moyenne mobile double, un indice de force relative (RSI) et un SAR parabolique (PSAR) pour identifier les points d'inversion des prix et prendre des décisions d'achat et de vente en conséquence.

Principaux

La stratégie utilise principalement les indicateurs techniques suivants pour déterminer les points d'inversion des prix:

  1. La moyenne mobile double: Calcule la moyenne mobile rapide (ligne rapide MA) et la moyenne mobile lente (ligne lente MA). Lorsque la ligne rapide traverse au-dessus de la ligne lente, elle indique un marché haussier et va long. Lorsque la ligne rapide traverse en dessous de la ligne lente, elle indique un marché baissier et va court.

  2. Indicateur RSI: L'indicateur RSI évalue les conditions de surachat et de survente en calculant le gain de clôture moyen et la perte de clôture moyenne sur une période donnée.

  3. Indicateur PSAR: SAR parabolique indique la direction de la tendance. Les points SAR inférieurs au prix indiquent un marché haussier et supérieurs au prix indiquent un marché baissier.

  4. Indicateur ADX: ADX mesure la force d'une tendance en calculant le mouvement directionnel.

La logique des signaux d'achat et de vente est la suivante:

Signal d'achat: le MA rapide dépasse le MA lent, le RSI est inférieur à 30 (survente), les points SAR sont supérieurs au prix, l'ADX est supérieur à 20.

Signal de vente: le MA rapide est inférieur au MA lent, le RSI est supérieur à 70 (suracheté), les points SAR sont inférieurs au prix, l'ADX est supérieur à 20.

Lorsque le signal d'achat ou de vente se produit, prenez une position avec respectivement 10% du capital. Fermez la position en temps opportun lorsque le signal d'inversion échoue.

Les avantages

  • Les doubles MAs déterminent la direction de la tendance majeure, le RSI et le SAR filtrant les faux signaux, ce qui permet d'identifier avec précision les points d'inversion.

  • La combinaison de plusieurs indicateurs empêche les signaux erronés d'un seul indicateur.

  • Le stop loss évite les risques excessifs.

  • La logique simple et claire le rend facile à mettre en œuvre.

  • Il fonctionne à la fois pour la tendance haussière et la tendance baissière.

Risques et solutions

  • Il est possible que les MAs doubles aient une fausse rupture.

  • Le RSI peut générer des signaux erronés s'il n'est pas correctement réglé.

  • Suspendez les transactions lorsque l'ADX est inférieur à 20 pour éviter les transactions inversées sur les marchés sans direction.

  • La valeur de l'offre est calculée en fonction de la volatilité du marché.

  • La fréquence de négociation est élevée, les périodes de négociation sont ajustées à une fréquence de négociation inférieure.

Amélioration

  • Testez différentes périodes d'AM pour trouver la combinaison optimale.

  • Testez différents paramètres de l'indice de volatilité pour mieux évaluer le taux de surachat/de survente.

  • Ajoutez d'autres indicateurs comme les bandes de Bollinger, KDJ pour enrichir la logique.

  • Définir un stop loss dynamique basé sur différents produits et marchés.

  • Ajoutez le dimensionnement des positions pour mieux suivre les tendances.

  • Testez différents paramètres ADX pour trouver la meilleure valeur pour déterminer la force de la tendance.

  • Ajouter une fonction de perte d'arrêt automatique.

Conclusion

Cette stratégie identifie la direction de la tendance majeure en utilisant des MAs doubles, et utilise RSI, SAR pour un filtrage supplémentaire des signaux. Elle peut déterminer efficacement les points de renversement après l'optimisation des paramètres et capturer les tendances autour des renversements.


/*backtest
start: 2023-10-10 00:00:00
end: 2023-11-09 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
//Based on Senpai BO 3
strategy(title="Senpai_Strat_3", shorttitle="Senpai_Strat_3", overlay=false, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
src = close

//psar
start = input(0.02)
increment = input(0.02)
maximum = input(0.2)
psar = sar(start, increment, maximum)


//ADX Init
adxlen = input(30, title="ADX Smoothing")	
dilen = input(30, title="DI Length")	
dirmov(len) =>	
	up = change(high)
	down = -change(low)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange)
	minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange)
	[plus, minus]
	
adx(dilen, adxlen) => 	
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
	[adx, plus, minus]
	
[sig, up, down] = adx(dilen, adxlen)	


// BB Init
source = close
length = input(50, minval=1)
mult = input(0.5, title="Mult Factor", minval=0.001, maxval=50)
alertLevel=input(0.1)
impulseLevel=input(0.75)
showRange = input(false, type=bool)


//RSI CODE
up1 = rma(max(change(src), 0), 14)
down1 = rma(-min(change(src), 0), 14)
rsi = down1 == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up1 / down1))


//BB CODE
basis = sma(source, length)
dev = mult * stdev(source, length)
upper = basis + dev
lower = basis - dev
bbr = source>upper?(((source-upper)/(upper-lower))/10): source<lower?(((source-lower)/(upper-lower))/10) : 0.05
bbi = bbr - nz(bbr[1]) 

//////////////////// Algo

//if (rsi>50 and n1>n2)
   //strategy.exit("Close", "Short")
  // strategy.entry("Long", strategy.long)
//if (rsi<50 and n2>n1)
   //strategy.exit("Close", "Long")
//   strategy.entry("Short", strategy.short)

//col = ma30 > ma50 > ma200 and rsi <=53?lime: ma50 < ma200  and rsi >= 60?red : silver
//short1 =  sig<18.5 and high>=upper and rsi>=70 and psar<close = 100%
//long1 = sig<18.5 and low<=lower and rsi<=30 and psar>close = 100%
short1 =  sig<18.5 and high>=upper and rsi>=70 and psar<close
long1 = sig<18.5 and low<=lower and rsi<=30 and psar>close

//Entry

long = long1[1] == 0 and long1 == 1
short = short1[1] == 0 and short1 == 1
longclose = long[3] == 1
shortclose = short[3] == 1
strategy.entry("short", strategy.short,qty = 10, when=short)
strategy.entry("long", strategy.long,qty=10, when=long)
strategy.close("long",when=longclose)
strategy.close("short",when=shortclose)



/////////////////////
///PLOT

plot(long,"long",color=green,linewidth=1)
plot(short,"short",color=red,linewidth=1)
plot(longclose,"close",color=blue,linewidth=1)
plot(shortclose,"close",color=orange,linewidth=1)


//plot(short,"short",color=red,linewidth=1)
//

//strategy.exit(id="long",qty = 100000,when=longclose)
//strategy.exit(id="short",qty = 100000,when=shortclose)

//strategy.exit(id="Stop", profit = 20, loss = 100)

Plus de