
L’idée principale de cette stratégie est d’utiliser le filtre Ehlers SuperSmoother pour traiter les indices stochastiques RSI au hasard, afin de filtrer de nombreux faux signaux et d’obtenir des signaux de négociation plus fiables. Le principe de base est de calculer d’abord l’indice stochastique, puis de le traiter au hasard en utilisant le filtre Ehlers SuperSmoother, puis de le traiter au hasard, et enfin de le croiser avec sa propre moyenne mobile.
La stratégie commence par calculer l’indicateur RSI à la clôture des journaux, puis calculer l’indicateur stochastique basé sur l’indicateur RSI, qui est typiquement un indicateur d’indicateur relativement faible. Afin de filtrer les faux signaux, le RSI stochastique est traité avec un filtre à glissement ultra-smooth d’Ells, et la ligne Stochastic RSI est ensuite croisée en or avec sa propre moyenne mobile, faisant une croix nulle. Le point clé de la stratégie est donc de: 1) calculer l’indicateur Stochastic RSI; 2) utiliser le filtre à glissement ultra-smooth d’Ells; 3) former un signal de transaction avec la moyenne mobile.
Le plus grand avantage de cette stratégie réside dans l’utilisation du filtre ultra-smooth d’Ells, qui permet de filtrer efficacement de nombreux faux signaux, ce qui rend les signaux de négociation plus fiables. De plus, l’indicateur Stochastic RSI possède lui-même de bonnes capacités de rupture et de suivi des tendances.
Le principal risque de cette stratégie est la possibilité de fausses signaux lors de fortes fluctuations du marché. L’indicateur stochastique RSI génère de nombreux faux signaux de hausse et de baisse lorsque les prix fluctuent fortement dans une fourchette plus étroite, au cours de laquelle l’effet du sélecteur ultra-smooth d’Ells est également décompté. De plus, le retard de l’indicateur peut également présenter un certain risque dans certains cas de forte tendance.
Afin de réduire ces risques, il est possible d’ajuster les paramètres de manière appropriée, par exemple en augmentant le cycle de l’indicateur stochastique, en réduisant la douceur, etc., afin de filtrer davantage les faux signaux. En outre, il est possible d’envisager de les combiner avec d’autres indicateurs ou formes, pour former des conditions de filtrage multiples, afin d’éviter le risque d’erreur.
Cette stratégie peut être optimisée principalement dans les domaines suivants:
Optimiser les paramètres de l’indicateur Stochastic RSI. Les paramètres tels que la longueur, les constantes de fluctuation, etc. peuvent être minutieusement testés pour trouver la meilleure combinaison de paramètres.
Il est possible de définir un stop mobile ou un stop fixe pour bloquer les bénéfices et réduire les retraits.
Il est possible d’envisager des combinaisons avec d’autres indicateurs ou formes. Des combinaisons avec des indicateurs de volatilité, des moyennes mobiles, etc. peuvent être envisagées pour créer des conditions de filtrage multiples et réduire davantage le risque.
Ajustez la position en fonction des résultats de l’analyse des grandes périodes. Vous pouvez ajuster dynamiquement la taille de la position pour chaque transaction en fonction des résultats de l’analyse des tendances des périodes de temps plus élevées.
Cette stratégie commence par calculer l’indicateur Stochastic RSI, puis le traite à l’aide du filtre ultra-smooth d’Ells, et finit par former un signal de négociation avec sa propre moyenne mobile, permettant de juger correctement de la tendance. L’avantage de la stratégie réside dans l’utilisation d’une combinaison d’indicateurs et de filtres, permettant de filtrer efficacement les faux signaux et d’obtenir des opportunités de négociation à forte probabilité.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("ES Stoch RSI Strategy [krypt]", overlay=true, calc_on_order_fills=true, calc_on_every_tick=true, initial_capital=10000, currency='USD')
//Backtest Range
FromMonth = input(defval = 06, title = "From Month", minval = 1)
FromDay = input(defval = 1, title = "From Day", minval = 1)
FromYear = input(defval = 2018, title = "From Year", minval = 2014)
ToMonth = input(defval = 7, title = "To Month", minval = 1)
ToDay = input(defval = 30, title = "To Day", minval = 1)
ToYear = input(defval = 2018, title = "To Year", minval = 2014)
PI = 3.14159265359
drop1st(src) =>
x = na
x := na(src[1]) ? na : src
xlowest(src, len) =>
x = src
for i = 1 to len - 1
v = src[i]
if (na(v))
break
x := min(x, v)
x
xhighest(src, len) =>
x = src
for i = 1 to len - 1
v = src[i]
if (na(v))
break
x := max(x, v)
x
xstoch(c, h, l, len) =>
xlow = xlowest(l, len)
xhigh = xhighest(h, len)
100 * (c - xlow) / (xhigh - xlow)
Stochastic(c, h, l, length) =>
rawsig = xstoch(c, h, l, length)
min(max(rawsig, 0.0), 100.0)
xrma(src, len) =>
sum = na
sum := (src + (len - 1) * nz(sum[1], src)) / len
xrsi(src, len) =>
msig = nz(change(src, 1), 0.0)
up = xrma(max(msig, 0.0), len)
dn = xrma(max(-msig, 0.0), len)
rs = up / dn
100.0 - 100.0 / (1.0 + rs)
EhlersSuperSmoother(src, lower) =>
a1 = exp(-PI * sqrt(2) / lower)
coeff2 = 2 * a1 * cos(sqrt(2) * PI / lower)
coeff3 = -pow(a1, 2)
coeff1 = (1 - coeff2 - coeff3) / 2
filt = na
filt := nz(coeff1 * (src + nz(src[1], src)) + coeff2 * filt[1] + coeff3 * filt[2], src)
smoothK = input(7, minval=1, title="K")
smoothD = input(2, minval=1, title="D")
lengthRSI = input(10, minval=1, title="RSI Length")
lengthStoch = input(3, minval=1, title="Stochastic Length")
showsignals = input(true, title="Buy/Sell Signals")
src = input(close, title="Source")
ob = 80
os = 20
midpoint = 50
price = log(drop1st(src))
rsi1 = xrsi(price, lengthRSI)
rawsig = Stochastic(rsi1, rsi1, rsi1, lengthStoch)
sig = EhlersSuperSmoother(rawsig, smoothK)
ma = sma(sig, smoothD)
plot(sig, color=#0094ff, title="K", transp=0)
plot(ma, color=#ff6a00, title="D", transp=0)
lineOB = hline(ob, title="Upper Band", color=#c0c0c0)
lineOS = hline(os, title="Lower Band", color=#c0c0c0)
fill(lineOB, lineOS, color=purple, title="Background")
// Buy/Sell Signals
// use curvature information to filter out some false positives
mm1 = change(change(ma, 1), 1)
mm2 = change(change(ma, 2), 2)
ms1 = change(change(sig, 1), 1)
ms2 = change(change(sig, 2), 2)
sellsignals = showsignals and (mm1 + ms1 < 0 and mm2 + ms2 < 0) and crossunder(sig, ma) and sig[1] > ob
buysignals = showsignals and (mm1 + ms1 > 0 and mm2 + ms2 > 0) and crossover(sig, ma) and sig[1] < os
ploff = 4
plot(buysignals ? sig[1] - ploff : na, style=circles, color=#008fff, linewidth=3, title="Buy Signal", transp=0)
plot(sellsignals ? sig[1] + ploff : na, style=circles, color=#ff0000, linewidth=3, title="Sell Signal", transp=0)
longCondition = buysignals
if (longCondition)
strategy.entry("L", strategy.long, comment="Long", when=(buysignals))
shortCondition = sellsignals
if (shortCondition)
strategy.entry("S", strategy.short, comment="Short", when=(sellsignals))