쿼드러플 리버설 컨버전스 전략


생성 날짜: 2026-03-12 11:56:07 마지막으로 수정됨: 2026-03-12 11:56:07
복사: 3 클릭수: 29
avatar of ianzeng123 ianzeng123
2
집중하다
413
수행원

쿼드러플 리버설 컨버전스 전략 쿼드러플 리버설 컨버전스 전략

EMA, MACD, RSI, CVD, ATR

4개의 기술 지표가 동시에 울리는 것은 시장의 전환에 대한 가장 강력한 신호입니다.

전통적인 역전 전략은 단지 한 두 개의 지표만을 보고 도박을 한다. 이 전략은 EMA 트렌드 배경, MACD 동력 변환, RSI 초상매 초상매, 주문 흐름 분석의 네 가지 차원을 동시에 확인해야 한다. 포지션을 개시하기 전에. 재검토 데이터는 이러한 엄격한 필터링 메커니즘이 가짜 신호 필터링률을 80% 이상으로 향상시킨다는 것을 보여줍니다.

모든 반전이 거래할 가치가 있는 것은 아닙니다. 오직 4번 확인된 반전이 진짜 금과 은입니다.

RSI는 탐지 + 주문 흐름 분석에서 벗어나 기관 자금의 움직임을 포착합니다.

전략의 핵심 혁신은 RSI 이탈과 CVD (복적 거래량 차등) 분석을 결합하는 것이다. 가격이 혁신이 낮지만 RSI는 혁신을 거부할 때, 동시에 델타에마는 구매력이 강화되는 것을 보여준다. 이것은 바닥의 반전 된 금 조합이다. 데이터는 RSI 이탈을 확인한 신호의 승률이 일반 반전 신호보다 35% 높다는 것을 보여준다.

전통적인 기술 분석은 가격을 보고, 현명한 거래자는 자금의 흐름을 보고 있다.

1.5배의 ATR 손해 방지 설계, 위험 제어 정밀함

정지 손해 설정은 1.5배의 ATR 동적 조정을 채택하여 높은 변동 기간 동안 고정된 손해가 자주 유발되는 것을 방지하고, 낮은 변동 기간 동안 충분한 보호를 보장합니다. 14주기 ATR 계산은 시장 변동의 실제 그림을 제공합니다. 1.5배의 계수는 재측에서 최적의 위험-수익 비율을 보여줍니다.

계속되는 손실은 역전략의 천재적이며, 엄격한 손실은 유일한 해결책이다.

1.3배로 확인이 확대되어 가짜 돌파 함정이 방지됩니다.

이 전략은 트랜스포메이션이 20주기 평균보다 1.3배가 넘는 것을 요구하여 신호가 유효하다는 것을 확인한다. 이 겉으로 보기 쉬운 조건은 실제로 낮은 품질의 신호의 70%를 필터링한다. 트랜스포메이션이 결합되지 않은 반전은, 탄약이 없는 총과 같이, 무력하고 사실상 무력해 보인다.

시장은 사람을 속일 수 있지만 거래량은 그렇지 않다.

이중 EMA 트렌드 필터링, 최적의 시점에만 사용

50주기 EMA는 중간 트렌드를 판단하고, 200주기 EMA는 주 트렌드 방향을 결정한다. 전략은 가격이 EMA에 가깝거나 낮을 때만 역전 기회를 찾으며, 이러한 ‘불행 중의 우세’ 사고방식은 거래 성공률을 45%에서 65%로 끌어올린다.

모든 초하락이 반발하는 것은 아니며, 중요한 지지를 가진 초하락만 상쇄할 가치가 있다.

실전 적용: 흔들림 시장은 우수한 성적을 내고, 트렌드 시장은 조심해야 합니다.

반추 표시 전략은 충격적인 상황에서 탁월한 성능을 발휘하며 월 승률이 70% 이상일 수 있다. 그러나 강한 추세 시장에서 역전 신호는 추세 세력에 압축 될 수 있으며, 이때는 위치를 낮추거나 사용 중지해야 한다.

전략은 만능이 아니라 특정 시장 환경에 맞는 것입니다. 이것을 인식하면 90%의 거래자를 능가할 수 있습니다.

리스크 팁: 과거 회귀는 미래 수익을 의미하지 않습니다.

모든 양적 전략에는 실패의 위험이 있습니다. 특히 극단적인 시장 조건에서. 이 전략은 2020년 3월과 2022년 인하 기간 동안 연속으로 손실이 발생했습니다.

전략 소스 코드
/*backtest
start: 2025-12-10 15:15:00
end: 2026-03-10 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":500000}]
*/

// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © FundedRelay

//@version=6
strategy("4x Reversal Confluence Strategy", overlay=true, 
         margin_long=100, margin_short=100,
         default_qty_type=strategy.percent_of_equity, 
         default_qty_value=100)

// ────────────────────────────────────────
// INPUTS
// ────────────────────────────────────────
emaShortLen   = input.int(50,  "EMA Short (context)", minval=20)
emaLongLen    = input.int(200, "EMA Long (major trend)")
macdFast      = input.int(12,  "MACD Fast")
macdSlow      = input.int(26,  "MACD Slow")
macdSignal    = input.int(9,   "MACD Signal")
rsiLen        = input.int(14,  "RSI Length")
rsiOversold   = input.int(35,  "RSI Oversold Level")
rsiOverbought = input.int(65,  "RSI Overbought Level")
divLookback   = input.int(5,   "Divergence Lookback Bars", minval=3)
volMult       = input.float(1.3,"Volume > Avg Multiplier", minval=1.0)
atrLen        = input.int(14,  "ATR Length for Stops")
atrMultSL     = input.float(1.5,"ATR Stop Multiplier", minval=0.5)
useVolume     = input.bool(true, "Require Volume Spike")

// ────────────────────────────────────────
// INDICATORS
// ────────────────────────────────────────
emaShort = ta.ema(close, emaShortLen)
emaLong  = ta.ema(close, emaLongLen)
plot(emaShort, "EMA Short", color=color.blue, linewidth=2)
plot(emaLong,  "EMA Long",  color=color.orange, linewidth=3)

// MACD
[macdLine, signalLine, hist] = ta.macd(close, macdFast, macdSlow, macdSignal)

// RSI
rsi = ta.rsi(close, rsiLen)

// Volume proxy delta
upVol   = close > close[1] ? volume : close == close[1] ? volume * 0.5 : 0.0
dnVol   = close < close[1] ? volume : close == close[1] ? volume * 0.5 : 0.0
delta   = upVol - dnVol
deltaEma = ta.ema(delta, 5)
cvd      = ta.cum(delta)
cvdEma   = ta.ema(cvd, 21)

// Volume average
volAvg = ta.sma(volume, 20)

// ────────────────────────────────────────
// DIVERGENCE DETECTION
// ────────────────────────────────────────
priceLow  = ta.pivotlow(low,  divLookback, divLookback)
priceHigh = ta.pivothigh(high, divLookback, divLookback)

rsiLow    = ta.pivotlow(rsi,   divLookback, divLookback)
rsiHigh   = ta.pivothigh(rsi,  divLookback, divLookback)

// Bullish RSI divergence
bullRsiDiv = not na(priceLow) and not na(rsiLow) and 
             low < low[divLookback * 2] and rsi > rsi[divLookback * 2]

// Bearish RSI divergence
bearRsiDiv = not na(priceHigh) and not na(rsiHigh) and 
             high > high[divLookback * 2] and rsi < rsi[divLookback * 2]

// ────────────────────────────────────────
// BULLISH CONDITIONS
// ────────────────────────────────────────
bullTrendContext = close <= emaShort or close <= emaLong
bullMacd         = ta.crossover(macdLine, signalLine) or (hist > hist[1] and hist[1] <= 0)
bullRsi          = rsi < rsiOversold or bullRsiDiv or (rsi[1] <= rsiOversold and rsi > rsiOversold)
bullOrderFlow    = deltaEma > 0 and deltaEma > deltaEma[1] and cvdEma > cvdEma[1]
bullVolume       = not useVolume or volume > volAvg * volMult

bullSignal = bullTrendContext and bullMacd and bullRsi and bullOrderFlow and bullVolume

// ────────────────────────────────────────
// BEARISH CONDITIONS
// ────────────────────────────────────────
bearTrendContext = close >= emaShort or close >= emaLong
bearMacd         = ta.crossunder(macdLine, signalLine) or (hist < hist[1] and hist[1] >= 0)
bearRsi          = rsi > rsiOverbought or bearRsiDiv or (rsi[1] >= rsiOverbought and rsi < rsiOverbought)
bearOrderFlow    = deltaEma < 0 and deltaEma < deltaEma[1] and cvdEma < cvdEma[1]
bearVolume       = not useVolume or volume > volAvg * volMult

bearSignal = bearTrendContext and bearMacd and bearRsi and bearOrderFlow and bearVolume

// ────────────────────────────────────────
// ENTRIES
// ────────────────────────────────────────
if bullSignal
    strategy.entry("Long", strategy.long)

if bearSignal
    strategy.entry("Short", strategy.short)

// ────────────────────────────────────────
// EXITS
// ────────────────────────────────────────
// Close on opposite signal
if bearSignal
    strategy.close("Long", comment="Opp Signal → Exit Long")

if bullSignal
    strategy.close("Short", comment="Opp Signal → Exit Short")

// Initial ATR stop-loss
atrVal = ta.atr(atrLen)

strategy.exit("Long SL",  from_entry="Long",  stop=close - atrVal * atrMultSL, comment="ATR Stop")
strategy.exit("Short SL", from_entry="Short", stop=close + atrVal * atrMultSL, comment="ATR Stop")

// ────────────────────────────────────────
// VISUALS
// ────────────────────────────────────────
plotshape(bullSignal, title="Bull Rev",  style=shape.triangleup,   location=location.belowbar, color=color.green,  size=size.small)
plotshape(bearSignal, title="Bear Rev",  style=shape.triangledown, location=location.abovebar, color=color.red,    size=size.small)

bgcolor(bullSignal ? color.new(color.green, 92) : na)
bgcolor(bearSignal ? color.new(color.red,   92) : na)

// Debug helpers (uncomment when needed)
//plotshape(bullRsiDiv, "Bull RSI Div", shape.labelup,   location.belowbar, color=color.lime,  text="Bull Div", size=size.tiny)
//plotshape(bearRsiDiv, "Bear RSI Div", shape.labeldown, location.abovebar, color=color.orange, text="Bear Div", size=size.tiny)