
Ce n’est pas une stratégie multi-indicateurs ordinaire. La combinaison de WaveTrend + Connors RSI + Linear Regression Deviation est la clé du mécanisme de synchronisation de la fenêtre: tous les signaux d’achat doivent apparaître dans la plage de 2 lignes K, les signaux individuels sont directement ignorés. Cette conception filtre directement 90% des faux signaux.
Les stratégies traditionnelles de jugement indépendant des indicateurs sont susceptibles de générer du bruit ou de demander de déclencher simultanément un grand nombre d’opportunités manquées. Cette stratégie a trouvé un équilibre: la fenêtre de tolérance aux erreurs de la ligne K garantit la pertinence du signal et évite des exigences de synchronisation trop strictes.
La longueur du WT est de 10 cycles, avec une ligne de survente de 48 et une ligne de survente de 48. Cette combinaison de paramètres est plus radicale que le RSI traditionnel 30⁄70, captant les signaux de revers des prix plus tôt. L’avantage du WT réside dans la combinaison de la position des prix et de la volatilité, qui est plus fiable que le RSI seul dans des situations de volatilité.
La clé est la façon dont WT est calculé:*L’EMA déviante), cette formule a naturellement une fonction d’ajustement de la volatilité. Lorsque la volatilité du marché augmente, la fraction s’agrandit et la valeur WT est relativement stable, évitant ainsi le problème de la distorsion du RSI ordinaire pendant les hautes volatilités.
Le CRSI n’est pas un RSI ordinaire, il est composé d’un RSI de prix, d’un RSI de tendance à la baisse et d’un pourcentage de variation de prix. Le seuil de survente de 20 est plus radical que le traditionnel 30, mais le mécanisme de triple vérification du CRSI réduit la probabilité de faux signaux.
La longueur du RSI à 6 cycles est réglée sur la courte durée, afin d’améliorer la sensibilité du signal. Au niveau de 15 minutes, 6 cycles correspondent à 1,5 heure de mémoire de prix, permettant de capturer les surventes à court terme sans être trop retardé. Ce paramètre est particulièrement efficace pour les variétés de 24 heures de négociation comme BTC.
LSDD = prix actuel - régression linéaire, indiquant que le prix commence à s’écarter de la ligne de tendance descendante lorsque le LSDD est traversé sur l’axe 0. Le réglage de 20 cycles couvrant 5 heures sur un graphique de 15 minutes permet d’identifier efficacement les changements de tendance à court terme.
La subtilité de cet indicateur réside dans le fait qu’il ne s’agit pas d’un simple suivi de la tendance, mais d’une mesure de la déviation de la tendance. Lorsque les prix commencent à s’écarter de la ligne de retour vers le haut après une baisse continue, cela indique souvent le début d’une reprise. Combiné aux signaux de survente du WT et du CRSI, il forme une double confirmation de “survente + revers de tendance”.
La stratégie est conçue pour être purement multi-titres, avec 30% de fonds à chaque ouverture de position, permettant une mise à niveau. Cette configuration convient à la tendance à la hausse à long terme des crypto-monnaies, tout en gérant les risques grâce au contrôle de la position. Une position unique de 30% permet à la fois d’obtenir des gains suffisants et d’éviter les risques excessifs d’une seule transaction.
Les conditions d’exit sont également strictes: WT surachat ((>48) AND CRSI surachat ((>80) AND LSDD inversion négative, trois conditions doivent être remplies simultanément. Cette conception assure l’intégrité des transactions tendancielles et évite un départ prématuré.
La stratégie a bien fonctionné dans le retrait de 15 minutes de BTC, mais cela ne signifie pas qu’elle fonctionne dans tous les environnements de marché. Dans les marchés de choc horizontal, même la triple confirmation peut produire plus de faux signaux. La stratégie est mieux adaptée aux environnements de marché avec des caractéristiques de tendance claires.
Remarque de risque: les retours historiques ne représentent pas les bénéfices futurs, le marché des crypto-monnaies est très volatil et il existe un risque de perte de capital. Il est recommandé de vérifier suffisamment les transactions papier avant les transactions physiques et de contrôler strictement les positions globales.
/*backtest
start: 2024-10-09 00:00:00
end: 2025-10-07 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT","balance":500000}]
*/
//@version=5
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © alescha13
// WT + CRSI + Linear Regression Long-only Strategy
// Description:
// This long-only trading strategy combines WaveTrend (WT),
// Connors RSI (CRSI), and a Linear Regression Slope (LSDD) trend filter.
// Signals are generated only when all three indicators align within a defined window.
// Exits occur when all indicators turn bearish.
// Backtested on BTC with 15-minute timeframe.
strategy("WT + CRSI + Linear Regression Long-only © alescha13",
overlay=true,
initial_capital=10000,
default_qty_type=strategy.percent_of_equity,
default_qty_value=30,
pyramiding=1,
calc_on_every_tick=false,
process_orders_on_close=true)
// =====================
// Inputs
// =====================
wtLength = input.int(10, "WT Length")
wtOversold = input.int(-48, "WT Oversold Level")
wtOverbought = input.int(48, "WT Overbought Level")
crsiRSILength = input.int(6, "CRSI RSI Length")
crsiOversold = input.int(20, "CRSI Oversold Level")
crsiOverbought = input.int(80, "CRSI Overbought Level")
lsddLen = input.int(20, "Linear Regression Length")
windowSize = input.int(2, "Window size (bars) for all signals", minval=1)
// =====================
// Helper: CRSI Function
// =====================
updown(s) =>
isEqual = s == s[1]
isGrowing = s > s[1]
ud = 0.0
ud := isEqual ? 0 : isGrowing ? (nz(ud[1]) <= 0 ? 1 : nz(ud[1]) + 1) : (nz(ud[1]) >= 0 ? -1 : nz(ud[1]) - 1)
ud
crsiFunc(src, lenrsi) =>
lenupdown = 2
lenroc = 100
rsi = ta.rsi(src, lenrsi)
updownrsi = ta.rsi(updown(src), lenupdown)
percentrank = ta.percentrank(ta.roc(src, 1), lenroc)
math.avg(rsi, updownrsi, percentrank)
// =====================
// WaveTrend (WT) Calculation
// =====================
ap = (high + low + close) / 3.0
esa = ta.ema(ap, wtLength)
d = ta.ema(math.abs(ap - esa), wtLength)
ci = (ap - esa) / (0.015 * d)
wt = ta.ema(ci, 3)
wtBull = ta.crossover(wt, wtOversold)
wtBear = wt > wtOverbought
// =====================
// CRSI Calculation
// =====================
crsiValue = crsiFunc(close, crsiRSILength)
crsiBull = crsiValue < crsiOversold
crsiBear = crsiValue > crsiOverbought
// =====================
// Linear Regression LSDD Calculation
// =====================
slope = ta.linreg(close, lsddLen, 0)
lsdd = close - slope
lsddBull = ta.crossover(lsdd, 0)
lsddBear = lsdd < 0
// =====================
// Window Logic (Synchronize Signals)
// =====================
var int wtBarIndex = na
var int crsiBarIndex = na
var int lsddBarIndex = na
if wtBull
wtBarIndex := bar_index
if crsiBull
crsiBarIndex := bar_index
if lsddBull
lsddBarIndex := bar_index
buySignal = false
if not na(wtBarIndex) and not na(crsiBarIndex) and not na(lsddBarIndex)
maxBar = math.max(wtBarIndex, crsiBarIndex, lsddBarIndex)
minBar = math.min(wtBarIndex, crsiBarIndex, lsddBarIndex)
if (maxBar - minBar) <= windowSize
buySignal := true
wtBarIndex := na
crsiBarIndex := na
lsddBarIndex := na
finalLong = buySignal
// =====================
// Exit Logic
// =====================
sellSignal = wtBear and crsiBear and lsddBear
// =====================
// Entries / Exits
// =====================
if finalLong
strategy.entry("Long", strategy.long, comment="Long Entry")
if sellSignal
strategy.close("Long", comment="Long Exit")
// =====================
// Background Color for Signals
// =====================
bgcolor(finalLong ? color.new(color.green, 85) : na)
bgcolor(sellSignal ? color.new(color.red, 85) : na)
// =====================
// Plots
// =====================
plot(wt, color=color.new(color.blue, 0), title="WT")
plot(crsiValue, color=color.new(color.purple, 0), title="CRSI")
plot(lsdd, color=color.new(color.orange, 0), title="LSDD")
plotshape(finalLong, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(sellSignal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)
// =====================
// Alerts
// =====================
alertcondition(finalLong, title="Long Alert", message="WT + CRSI + LSDD Long Signal")
alertcondition(sellSignal, title="Exit Alert", message="WT + CRSI + LSDD Exit Signal")