
Esta não é uma estratégia multi-indicador comum. A combinação de WaveTrend + Connors RSI + linear regression bias, a chave está no mecanismo de sincronização de janela: todos os sinais de compra devem aparecer dentro de 2 linhas K, e os sinais individuais são ignorados diretamente.
As estratégias tradicionais são susceptíveis de gerar ruído quando os indicadores são julgados independentemente, ou exigem um grande número de oportunidades perdidas. Esta estratégia encontra um ponto de equilíbrio: a janela de tolerância a erros da linha K garante a relevância do sinal e evita requisitos de sincronização muito rígidos.
O WT tem 10 ciclos de comprimento, 48 de venda e 48 de compra. Esta combinação de parâmetros é mais radical do que o tradicional RSI de 30⁄70, e pode capturar sinais de reversão de preços mais cedo. A vantagem do WT é que combina a posição do preço e a volatilidade, sendo mais confiável do que o RSI simples em situações de turbulência.
A chave é a forma como o WT é calculado:*EMA de desvios), esta fórmula tem uma função natural de ajuste de taxa de flutuação. Quando a flutuação do mercado aumenta, a divisão aumenta e o valor do WT é relativamente estável, evitando o problema de distorção do RSI comum durante a alta flutuação.
O CRSI não é um RSI comum, mas uma combinação de RSI de preço, RSI de queda contínua e percentual de mudança de preço. O limiar de oversold de 20 é mais radical do que o tradicional de 30, mas o mecanismo de tripla verificação do CRSI reduz a probabilidade de falsos sinais.
O RSI de 6 ciclos é definido para ser mais curto, a fim de aumentar a sensibilidade do sinal. Em níveis de 15 minutos, 6 ciclos equivalem a 1,5 horas de memória de preço, tanto para capturar a sobrevenda de curto prazo quanto para não se atrasar excessivamente. Este parâmetro é especialmente eficaz em variedades de negociação de 24 horas como o BTC.
LSDD = Preço atual - Regressão linear, quando o LSDD cruza o eixo 0 indica que o preço começa a se desviar da linha de tendência descendente. A configuração de 20 ciclos cobrindo 5 horas em um gráfico de 15 minutos permite identificar efetivamente mudanças de tendência de curto prazo.
O que é interessante sobre este indicador é que ele não é simplesmente um acompanhamento de tendência, mas uma medida de desvio de tendência. Quando os preços começam a se desviar da linha de retorno para cima após uma queda contínua, geralmente sinalizam o início de uma retomada. Combinado com os sinais de oversold do WT e do CRSI, forma uma dupla confirmação de “oversold + reversão de tendência”.
A estratégia foi projetada para ser puramente multi-cabeça, com 30% de capital por cada posição aberta, permitindo 1 adição de posição. Esta configuração é adequada para a tendência ascendente de longo prazo das criptomoedas, além de gerenciar o risco por meio do controle de posição. Uma posição individual de 30% pode obter ganhos suficientes e evitar o risco excessivo de uma única transação.
As condições de saída são igualmente rigorosas: WT Overbought ((> 48) AND CRSI Overbought ((> 80) AND LSDD Transversal Negativo, três condições devem ser satisfeitas simultaneamente. Este design garante a integridade da negociação de tendência e evita a saída prematura.
A estratégia tem um bom desempenho no retrospecto no nível de 15 minutos do BTC, mas isso não significa que ela seja eficaz em todos os cenários de mercado. Em mercados de choque horizontal, mesmo a tripla confirmação pode produzir mais falsos sinais. A estratégia é mais adequada para cenários de mercado com características de tendência claras.
A retrospectiva histórica não representa o lucro futuro, o mercado de criptomoedas é muito volátil e existe o risco de perda de capital. Recomenda-se a verificação completa de transações em papel antes da liquidação física e o controle rigoroso da posição geral.
/*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")