
Это не обычная мультииндикаторная стратегия. Комбинация WaveTrend + Connors RSI + линейный отклонение от отклонения заключается в синхронизации окон: все сигналы покупки должны появляться в пределах 2 K-линий, а отдельные сигналы игнорируются.
Традиционные стратегии либо создают шум, когда каждый показатель рассматривается отдельно, либо требуют одновременного запуска большого количества пропущенных возможностей. Эта стратегия находит баланс: допустимое окно K-линий гарантирует релевантность сигнала и избегает слишком строгих требований к синхронизации.
Длина WT устанавливается на 10 циклов, сверхпродажная линия - 48, сверхпокупаемая линия - 48. Эта комбинация параметров более радикальна, чем традиционная RSI 30⁄70, и может быстрее улавливать сигналы об обратном движении цены. Преимущество WT заключается в том, что он сочетает в себе положение цены и волатильность, и более надежен, чем просто RSI, в условиях колебаний.
Ключевой момент в том, как WT рассчитывает:*Эта формула имеет естественную функцию корректировки волатильности. Когда рыночная волатильность усиливается, дифференциал увеличивается, и значение WT остается относительно стабильным, избегая искажения обычного RSI во время высокой волатильности.
CRSI отличается от обычного RSI, который сочетает в себе RSI цены, RSI последовательности падений и процентный рейтинг изменения цены. Низкий предел 20 является более радикальным, чем традиционный 30, но механизм тройной проверки CRSI снижает вероятность ложных сигналов.
6 циклов RSI настроены на короткую длину, чтобы повысить чувствительность сигнала. На 15-минутном уровне 6 циклов эквивалентны 1,5 часам ценной памяти, чтобы не задерживаться и не задерживать краткосрочные перепродажи. Этот параметр особенно эффективен для 24-часовой торговли BTC.
LSDD = текущая цена - линейная регрессия, показывающая, что цена начинает отклоняться от нисходящей трендовой линии, когда LSDD проходит по 0-й оси. Настройка на 20 циклов, которая охватывает 5 часов на 15-минутном графике, позволяет эффективно идентифицировать изменения в краткосрочной тенденции.
Индикатор отличается тем, что он не просто следит за тенденцией, а измеряет отклонение от тенденции. Когда цена после длительного падения начинает отклоняться от обратной линии вверх, это часто предвещает начало отскока. В сочетании с сигналом перепродажи WT и CRSI образуется двойное подтверждение “перепродажи + трендовый поворот”.
Стратегия разработана как чисто многоголовая, с 30% капитала за каждое открытие позиции, позволяющая 1 пополнение позиции. Такая настройка подходит для долгосрочной восходящей тенденции криптовалюты, одновременно управляя риском с помощью контроля позиции. Одиночные позиции в 30% позволяют получить достаточную прибыль и избежать чрезмерного риска от одной сделки.
Условия выхода также строгие: WT перекупа ((>48) AND CRSI перекупа ((>80) AND LSDD переутомление, три условия должны быть удовлетворены одновременно. Такая конструкция обеспечивает целостность трендовых сделок, избегая преждевременного выхода из игры.
Стратегия хорошо работает в 15-минутных отзывах на BTC, но это не означает, что она работает во всех рыночных условиях. В поперечных рыночных колебаниях, даже тройное подтверждение может привести к большему количеству ложных сигналов.
Примечание о риске: исторический отсчет не означает будущую прибыль, криптовалютный рынок сильно колеблется, существует риск потери капитала. Рекомендуется провести полное проверку бумажных сделок перед физическим обращением и строго контролировать общие позиции.
/*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")