
Esta no es una estrategia de múltiples indicadores común. La combinación de WaveTrend + Connors RSI + Lineal Regression Deviation, la clave está en el mecanismo de sincronización de la ventana: todas las señales de compra deben aparecer dentro de las 2 líneas K, las señales individuales se ignoran directamente. Este diseño filtra directamente el 90% de las señales falsas.
Las estrategias tradicionales son susceptibles a generar ruido al juzgar los indicadores de manera independiente o a requerir que se produzcan un gran número de oportunidades perdidas al mismo tiempo. Esta estrategia encuentra un punto de equilibrio: la ventana de tolerancia a errores de la línea K garantiza la correlación de la señal y evita requisitos de sincronización demasiado estrictos.
La longitud del WT es de 10 ciclos, la línea de venta-sobre-48, la línea de compra-sobre-48. Esta combinación de parámetros es más radical que el 30⁄70 del RSI tradicional, y puede capturar una señal de reversión de precios antes. La ventaja del WT es que combina la posición y la volatilidad de los precios, y es más fiable que el RSI simple en situaciones de volatilidad.
La clave está en la forma en que WT calcula:*La diferenciación de WT es la diferenciación de WT entre el EMA desviado y el EMA desviado. Esta fórmula tiene una función natural de ajuste de la tasa de fluctuación. Cuando la fluctuación del mercado se agrava, el divisor se agranda y el valor de WT es relativamente estable, evitando el problema de la desviación del RSI común durante la alta volatilidad.
El CRSI no es el RSI normal, sino que combina el RSI de precios, el RSI de caídas consecutivas y el porcentaje de cambio de precios. El umbral de venta por encima de 20 es más radical que el tradicional 30, pero el mecanismo de triple verificación del CRSI reduce la probabilidad de falsas señales.
La longitud del RSI de 6 ciclos se ajusta a la brevedad con el objetivo de mejorar la sensibilidad de la señal. En el nivel de 15 minutos, 6 ciclos equivalen a 1.5 horas de memoria de precios, que pueden capturar una sobreventa a corto plazo sin retrasarse excesivamente. Este parámetro es especialmente efectivo en variedades de 24 horas como BTC.
LSDD = Precio actual - Regresión lineal, cuando el LSDD cruza el eje 0 indica que el precio comienza a desviarse de la línea de tendencia descendente. La configuración de 20 ciclos que cubre 5 horas en un gráfico de 15 minutos permite identificar eficazmente los cambios de tendencia a corto plazo.
La delicadeza de este indicador reside en que no es un simple seguimiento de la tendencia, sino una medida de la desviación de la tendencia. Cuando el precio comienza a desviarse de la línea de retorno hacia arriba después de una caída continua, a menudo indica el comienzo de un rebote. Combinado con las señales de sobreventa de WT y CRSI, forma una doble confirmación de “sobreventa + reversión de tendencia”.
La estrategia está diseñada para ser puramente múltiple, con un 30% de capital por cada posición abierta, permitiendo una subida de posición. Esta configuración es adecuada para la tendencia ascendente a largo plazo de las criptomonedas, al tiempo que se gestiona el riesgo mediante el control de la posición. Una posición individual del 30% permite obtener suficientes ganancias y evitar el riesgo excesivo de una sola transacción.
Las condiciones de salida son igualmente estrictas: WT sobrecompra ((>48) AND CRSI sobrecompra ((>80) AND LSDD inversa negativa, tres condiciones deben ser satisfechas al mismo tiempo. Este diseño asegura la integridad de las operaciones de tendencia y evita la salida prematura.
La estrategia ha funcionado bien en el retrospectivo de 15 minutos de BTC, pero esto no significa que funcione en todos los entornos de mercado. En los mercados de oscilación horizontal, incluso la triple confirmación puede generar más señales falsas. La estrategia es más adecuada para entornos de mercado con características de tendencia claras.
Nota de riesgo: La retroalimentación histórica no representa ganancias futuras, el mercado de criptomonedas es muy volátil y existe el riesgo de pérdida de capital. Se recomienda una verificación completa de las transacciones en papel antes de las operaciones reales y un control estricto de la posición general.
/*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")