
이것은 일반적인 다중 지표 전략이 아닙니다. WaveTrend + Connors RSI + 선형 회귀 편향의 조합은 창 동기화 메커니즘에 있습니다. 모든 구매 신호는 2K 선의 범위 내에서 나타나야하며 개별 신호는 직접 무시됩니다.
전통적인 전략은 각 지표의 독립적인 판단으로 노이즈가 발생하거나 동시에 많은 기회를 놓치게 된다. 이 전략은 균형점을 찾는다: K 선의 오류 허용 창은 신호의 관련성을 보장하면서도 너무 엄격한 동기화 요구 사항을 피한다.
WT의 길이는 10주기, 초상도선-48, 초상도선-48로 설정되어 있다. 이 파라미터 조합은 전통적인 RSI의 30/70보다 더 급진적이며, 가격 반전 신호를 더 일찍 포착할 수 있다. WT의 장점은 가격 위치와 변동성을 결합하여, 변동적인 상황에서 단순한 RSI보다 더 신뢰할 수 있다는 것이다.
중요한 것은 WT의 계산 방식입니다:*편향된 EMA), 이 공식은 자연적으로 변동률 조정 기능을 갖는다. 시장의 변동이 심할 때 분모가 커지고, WT 값은 상대적으로 안정되어 일반 RSI가 높은 변동 동안의 부정확성 문제를 피한다.
CRSI는 일반 RSI가 아닌 가격 RSI, 연속 하락 RSI 및 가격 변화 백분율 순위를 혼합합니다. 20의 초과 판매 경계는 전통적인 30보다 더 급진적이지만 CRSI의 3번 검증 메커니즘은 가짜 신호의 가능성을 낮춘다.
6주기의 RSI 길이는 신호의 민감성을 높이기 위해 짧게 설정되어 있습니다. 15분 수준에서 6주기는 1.5시간의 가격 기억과 같습니다. 이는 단기 오버셀을 포착할 수 있고 과도하게 지연되지 않습니다. 이 파라미터는 BTC와 같은 24시간 거래되는 품종에 특히 효과적입니다.
LSDD = 현재 가격 - 선형 회귀 값, LSDD에 0 축을 통과하면 가격이 하향 트렌드 라인에서 벗어나는 것을 나타냅니다. 20 주기의 설정은 15 분 차트에서 5 시간을 커버하여 중·단기 트렌드 변화를 효과적으로 식별합니다.
이 지표의 정교함은 단순한 트렌드를 따르는 것이 아니라 트렌드 편차를 측정하는 데 있습니다. 가격이 계속 하락한 후 회귀선 위로 이탈하기 시작하면 종종 반전의 시작을 예고합니다. WT와 CRSI의 과매매 신호를 결합하여 “과매 + 트렌드 반전”의 이중 확인을 형성합니다.
이 전략은 순수 다목적으로 설계되었으며, 매번 30%의 자금을 입점할 때마다 1번의 입점을 허용한다. 이러한 설정은 암호화폐의 장기적인 상승 추세에 적합하며, 입점 통제를 통해 위험을 관리한다. 30%의 단일 입장은 충분한 수익을 얻을 수 있으며, 단편 거래의 과도한 위험을 피할 수 있다.
탈퇴 조건은 똑같이 엄격하다: WT 오버바이 ((>48) AND CRSI 오버바이 ((>80) AND LSDD 트로피, 세 가지 조건이 동시에 충족되어야 한다. 이 디자인은 추세 거래의 무결성을 보장하고 조기 출구를 방지한다.
이 전략은 BTC의 15분 수준에서 재검토를 잘 수행했지만, 모든 시장 환경에서 효과가 있다는 것을 의미하지는 않습니다. 가로 수평의 흔들림 시장에서, 삼중 확인조차도 더 많은 가짜 신호를 일으킬 수 있습니다. 이 전략은 명확한 추세 특성이있는 시장 환경에 가장 적합합니다.
위험 팁: 역사적인 회전은 미래의 수익을 의미하지 않으며, 암호화폐 시장의 변동성이 매우 높으며, 자본 손실 위험이 있습니다. 실제 거래 전에 충분한 종이 거래 검증을 수행하고, 전체 포지션을 엄격하게 제어하는 것이 좋습니다.
/*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")