
La stratégie Triple SuperTrend et Stoch RSI est une stratégie de trading quantitatif qui combine le suivi de la tendance et l’overtrait d’un indicateur de survente de plusieurs périodes. La stratégie utilise trois paramètres différents de l’indicateur SuperTrend pour déterminer la tendance du marché et envoie un signal de transaction combiné à un signal de survente et de survente de l’indicateur Stoch RSI.
La logique de base de la triple stratégie SuperTrend et Stoch RSI est de filtrer les signaux de négociation des indicateurs SuperTrend et Stoch RSI combinés avec différents paramètres de réglage afin d’améliorer la qualité du signal et de réduire le taux de faux signaux.
Tout d’abord, la stratégie utilise trois groupes d’indicateurs de SuperTrend avec différents paramètres pour déterminer la tendance principale du marché. Les paramètres de ces trois groupes d’indicateurs de SuperTrend sont configurés différemment, avec des cadres de temps allant de rapide à lent, pour capturer les changements de tendance à différents niveaux. Lorsque les indicateurs de SuperTrend les plus rapides et les plus rapides émettent simultanément des signaux d’achat/vente, nous estimons initialement que le signal a une certaine fiabilité.
Deuxièmement, la stratégie introduit un indicateur Stoch RSI pour déterminer si le signal est excessivement en survente ou en survente. L’indicateur Stoch RSI, combinant les avantages de l’indicateur RSI aléatoire et de l’indicateur Stochastic aléatoire, permet de déterminer efficacement si le marché est en survente ou en survente. Si les signaux de SuperTrend les plus rapides et les plus rapides correspondent aux signaux de l’indicateur Stoch RSI, nous pouvons émettre un signal d’achat/vente final.
La combinaison de plusieurs indicateurs et de plusieurs périodes de temps permet aux stratégies Triple SuperTrend et Stoch RSI de filtrer efficacement le bruit du marché, d’améliorer la fiabilité des signaux et de réduire les erreurs de trading.
Le plus grand avantage de la triple stratégie SuperTrend et Stoch RSI réside dans la combinaison efficace de plusieurs indicateurs et de plusieurs périodes, ce qui nous apporte les avantages suivants:
La combinaison des trois indicateurs SuperTrend et de l’indicateur Stoch RSI peut réduire considérablement le bruit et les faux signaux présents dans un seul indicateur.
Augmentation du ratio des signaux gagnants. Bien que la fréquence du signal soit réduite, le ratio des signaux gagnants est considérablement amélioré.
Convient pour les marchés tendanciels. Les fluctuations de plusieurs cadres temporels sont utiles pour capturer les tendances de la ligne moyenne et longue, et conviennent aux environnements de marché où les tendances sont plus évidentes.
Il est facile d’obtenir de meilleurs résultats en optimisant les paramètres. Le triple indicateur offre une plus grande possibilité d’optimisation des paramètres.
Les paramètres peuvent être ajustés en fonction de votre style personnel. Vous pouvez modifier les paramètres de manière à ce que la stratégie soit plus adaptée à votre style de trading.
Les stratégies Triple SuperTrend et Stoch RSI présentent également un certain nombre de risques, principalement concentrés sur les aspects suivants:
La fréquence des signaux est réduite. Les stratégies de filtrage à plusieurs niveaux entraînent une diminution notable de la fréquence des transactions.
Il est facile de manquer certains signaux. La conservatisme de la stratégie le rend facile de manquer certaines opportunités potentielles.
Plus il y a d’indicateurs et de paramètres, plus il est difficile d’optimiser la stratégie.
La capacité de suivi est limitée. La combinaison de plusieurs périodes limite également la flexibilité de la stratégie pour suivre les tendances.
Pour les risques mentionnés ci-dessus, nous pouvons optimiser la stratégie en ajustant les paramètres de l’indicateur, en introduisant plus d’indicateurs de jugement auxiliaires, etc. afin d’obtenir une meilleure qualité de profit tout en contrôlant les risques.
Il y a encore de la place pour une optimisation plus poussée des stratégies Triple SuperTrend et Stoch RSI, principalement à partir des éléments suivants:
Modifier la combinaison des paramètres de l’indicateur pour trouver la correspondance optimale des paramètres. Vous pouvez introduire plus de tests de paramètres de l’indicateur de la combinaison pour trouver les paramètres optimaux.
L’ajout d’une stratégie de stop-loss et de contrôle du risque de transaction unique. Cela peut considérablement améliorer la stabilité de la stratégie
L’introduction de plus d’indicateurs de jugement pour la vérification du signal. Par exemple, l’introduction d’indicateurs de volume de transaction pour juger de plusieurs angles.
L’ajout d’une fonction d’adaptation permet aux stratégies d’optimiser et d’ajuster automatiquement les paramètres pour s’adapter aux changements du marché.
L’utilisation d’algorithmes d’IA pour prédire l’exactitude des signaux de mesure.
Avec une optimisation continue, la triple stratégie SuperTrend et Stoch RSI peut se transformer en une stratégie de trading quantitatif stable et efficace, nous apportant une Alpha considérable.
La stratégie Triple SuperTrend et Stoch RSI a réussi à combiner l’analyse de plusieurs périodes avec des jugements de surachat et de survente, formant une stratégie de trading de type tendance unique. Elle conserve en même temps le double avantage de suivre la tendance et de filtrer les indicateurs, augmentant la proportion de signaux de profit tout en réduisant les signaux de bruit. Bien que le risque et l’espace d’optimisation de la stratégie subsistent, sa rentabilité et sa stabilité peuvent être encore améliorées par l’ajustement des paramètres et l’optimisation de la stratégie.
/*backtest
start: 2022-11-29 00:00:00
end: 2023-04-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © M3RZI
//@version=4
strategy("3x Supertrend and Stoch RSI", overlay = true, max_bars_back = 1000)
//INPUTS
STATRLENGTH1 = input(10, title = "Fast Supertrend ATR Length", type = input.integer, group = "SUPERTREND SETTINGS")
STATRMULT1 = input(1, title = "Fast Supertrend ATR Multiplier", type = input.float, group = "SUPERTREND SETTINGS")
STATRLENGTH2 = input(11, title = "Medium Supertrend ATR Length", type = input.integer, group = "SUPERTREND SETTINGS")
STATRMULT2 = input(2, title = "Medium Supertrend ATR Multiplier", type = input.float, group = "SUPERTREND SETTINGS")
STATRLENGTH3 = input(12, title = "Slow Supertrend ATR Length", type = input.integer, group = "SUPERTREND SETTINGS")
STATRMULT3 = input(3, title = "Slow Supertrend ATR Multiplier", type = input.float, group = "SUPERTREND SETTINGS")
stochK = input(3, title = "K (Stochastic Fast)", type = input.integer, group = "STOCHASTIC RSI SETTINGS")
stochD = input(3, title = "D (Signal Line)", type = input.integer, group = "STOCHASTIC RSI SETTINGS")
rsiLength = input(14, title = "RSI Length", type = input.integer, group = "STOCHASTIC RSI SETTINGS")
stochLength = input(14, title = "Stochastic Length", type = input.integer, group = "STOCHASTIC RSI SETTINGS")
rsiSource = input(close, title = "RSI Source", type = input.source, group = "STOCHASTIC RSI SETTINGS")
stochRestrictions = input(false, title = "Restrict crosses to overbought/oversold territory", type = input.bool, group = "STOCHASTIC RSI SETTINGS")
overboughtLine = input(80, title = "Stochastic RSI Upper Band", type = input.integer, group = "STOCHASTIC RSI SETTINGS")
oversoldLine = input(20, title = "Stochastic RSI Lower Band", type = input.integer, group = "STOCHASTIC RSI SETTINGS")
EMALength = input(200, title = "EMA Length", type = input.integer, group = "EMA SETTINGS")
SLStrategy = input("ATR Based", title = "Stop Loss Strategy", options = ["ATR Based"],type = input.string, group = "POSITION EXIT SETTINGS")
SLATRLength = input(14, title = "Stop Loss ATR Length", type = input.integer, group = "POSITION EXIT SETTINGS")
SLATRMult = input(2.7, title = "Stop Loss ATR Multiplier", type = input.float, group = "POSITION EXIT SETTINGS")
TPStrategy = input("ATR Based", title = "Take Profit Strategy", options = ["ATR Based"],type = input.string, group = "POSITION EXIT SETTINGS")
TPATRLength = input(14, title = "Take Profit ATR Length", type = input.integer, group = "POSITION EXIT SETTINGS")
TPATRMult = input(1.6, title = "Take Profit ATR Multiplier", type = input.float, group = "POSITION EXIT SETTINGS")
//SUPERTRENDS
[superTrend1,dir1] = supertrend(STATRMULT1,STATRLENGTH1)
[superTrend2,dir2] = supertrend(STATRMULT2,STATRLENGTH2)
[superTrend3,dir3] = supertrend(STATRMULT3,STATRLENGTH3)
directionST1 = dir1 == 1 and dir1[1] == 1 ? false : dir1 == -1 and dir1[1] == -1 ? true : na
directionST2 = dir2 == 1 and dir2[1] == 1 ? false : dir2 == -1 and dir2[1] == -1 ? true : na
directionST3 = dir3 == 1 and dir3[1] == 1 ? false : dir3 == -1 and dir3[1] == -1 ? true : na
//STOCH RSI
rsi = rsi(rsiSource, rsiLength)
k = sma(stoch(rsi, rsi, rsi, stochLength), stochK)
d = sma(k, stochD)
//EMA
ema = ema(close,EMALength)
//CONDITIONS LONG AND SHORT
var long = false
var longCondition = false
var short = false
var shortCondition = false
var drawing = false
var TP = 0.0
var SL = 0.0
var middle = 0.0
var initial = 0
stopSize = atr(SLATRLength) * SLATRMult
profitSize = atr(TPATRLength) * TPATRMult
longStop = close - stopSize
longProfit = close + profitSize
current = close
shortStop = close + stopSize
shortProfit = close - profitSize
barInitial = bar_index
if stochRestrictions
longCondition := close > ema and ((directionST1 == true and directionST2 == true) or (directionST2 == true and directionST3 == true)) and crossover(k,d) and k < oversoldLine and not long and not drawing
shortCondition := close < ema and ((directionST1 == false and directionST2 == false) or (directionST2 == false and directionST3 == false)) and crossunder(k,d) and k > overboughtLine and not short and not drawing
else
longCondition := close > ema and ((directionST1 == true and directionST2 == true) or (directionST2 == true and directionST3 == true)) and crossover(k,d) and not long and not drawing
shortCondition := close < ema and ((directionST1 == false and directionST2 == false) or (directionST2 == false and directionST3 == false)) and crossunder(k,d) and not short and not drawing
if longCondition
long := true
short := false
drawing := true
TP := longProfit
middle := current
SL := longStop
initial := barInitial
strategy.entry("Long", strategy.long, 10)
strategy.exit("Long exit","Long", limit = TP, stop = SL)
alert("Long signal Supertrend \n Profit:"+tostring(TP)+"\Curret price:"+tostring(close)+"\Stop:"+tostring(SL),alert.freq_once_per_bar_close)
//label.new(bar_index,low,text = "Long\nTP:"+tostring(TP)+"\nSL:"+tostring(SL)+"\nAbierto:"+tostring(current), yloc = yloc.belowbar, textcolor = color.white, color = color.green, size = size.small, style = label.style_label_up)
if shortCondition
short := true
long := false
drawing := true
TP := shortProfit
middle := current
SL := shortStop
initial := barInitial
strategy.entry("Short", strategy.short, 10)
strategy.exit("Short exit","Short",limit = TP , stop = SL)
alert("Short signal Supertrend \n Profit:"+tostring(TP)+"\Curret price:"+tostring(close)+"\Stop:"+tostring(SL),alert.freq_once_per_bar_close)
//label.new(bar_index,high,text = "Short\nTP:"+tostring(TP)+"\nSL:"+tostring(SL)+"\nAbierto:"+tostring(current), yloc = yloc.abovebar, textcolor = color.white, color = color.red, size = size.small, style = label.style_label_down)
if long and (high[1] >= TP or low[1] <= SL)
drawing := false
long := false
if high[1] >= TP
label.new(bar_index[int((bar_index - initial)/2)],TP, text = "Win (Long)", textcolor = color.white, color = color.green, size = size.small, style = label.style_label_down)
else
label.new(bar_index[int((bar_index - initial)/2)],SL, text = "Lose (Long)", textcolor = color.white, color = color.red, size = size.small, style = label.style_label_up)
if short and (low[1] <= TP or high[1] >= SL)
drawing := false
short := false
if low[1] <= TP
label.new(bar_index[int((bar_index - initial)/2)],TP, text = "Win (short)", textcolor = color.white, color = color.green, size = size.small, style = label.style_label_up)
else
label.new(bar_index[int((bar_index - initial)/2)],SL, text = "Lose (short)", textcolor = color.white, color = color.red, size = size.small, style = label.style_label_down)
//STRATEGY
//strategy.entry("buy", strategy.long, 10, when = longCondition)
//strategy.exit("bracket", "buy", 10, limit = TP, stop = SL)
//strategy.entry("short", strategy.long, 10, when = shortCondition)
//strategy.exit("bracket", "short", 10, limit = TP, stop = SL)
//DRAWING
plotshape(longCondition, title = "Long Signal", location=location.belowbar, style=shape.labelup, color=color.green, textcolor=color.white, size=size.small, text="Long")
plotshape(shortCondition, title = "Short Signal", location=location.abovebar, style=shape.labeldown, color=color.red, textcolor=color.white, size=size.small, text="Short")
profitLine = plot(drawing and drawing[1] ? TP : na, title = "Take profit", color = color.green, style = plot.style_linebr)
currentLine =plot(drawing and drawing[1] ? middle : na, title = "Middle Line", color = color.white, style = plot.style_linebr)
lossLine = plot(drawing and drawing[1] ? SL : na, title = "Stop Loss", color = color.red, style = plot.style_linebr)
fill(currentLine,profitLine, title = "Profit Background" ,color = color.new(color.green,75))
fill(currentLine,lossLine, title = "Loss Background" ,color = color.new(color.red,75))
plot(superTrend1, title = "Fast Supertrend", color = dir1 == 1 and dir1[1] == 1 ? color.red : dir1 == -1 and dir1[1] == -1 ? color.green : na)
plot(superTrend2, title = "Medium Supertrend", color = dir2 == 1 and dir2[1] == 1 ? color.red : dir2 == -1 and dir2[1] == -1 ? color.green : na)
plot(superTrend3, title = "Slow Supertrend", color = dir3 == 1 and dir3[1] == 1 ? color.red : dir3 == -1 and dir3[1] == -1 ? color.green : na)
plot(ema, title = "EMA",color = color.yellow)
//plot(k, color = color.blue)
//plot(d, color = color.orange)
//h1 = hline(80)
//h2 = hline(20)
//fill(h1,h2, color = color.new(color.purple,60))