
RSI, EMA, DIVERGENCE, VOLUME, ATR
이것은 또 다른 평범한 반전 전략이 아닙니다. 이 전략은 반전 거래의 성공률을 새로운 수준으로 끌어 올리는 RSI 이탈, 구조 거부, 반전 K 라인 및 거래량으로 확인된 4 개의 기술 지표 공명입니다.
핵심 논리 직격 해로: 가격의 핵심 지지 저항 지점에서 거부 신호가 발생했을 때, 다중 기술 지표가 공진을 형성하여 거래를 촉발해야합니다. 이러한 엄격한 필터링 메커니즘은 많은 가짜 신호를 효과적으로 필터링하지만 거래 주파수가 감소합니다.
RSI 이탈은 이 전략의 핵심 무기이다. 5주기 중심점 검출을 통해 시스템이 자동으로 가격의 새로운 고/저가 RSI 지표와 동시되지 않는 이탈 현상을 식별한다. 구체적인 매개 변수 설정: RSI 사이클 14, 이탈 확인 10주기가 필요한 가격 대조.
보드 이탈: 가격 혁신이 낮지만 RSI 혁신이 낮지 않아 하향 동력이 쇠퇴했다는 것을 나타냅니다. 보드 이탈: 가격 혁신이 높지만 RSI 혁신이 높지 않아 위력이 부족하다는 것을 암시합니다. 이러한 이탈 신호는 트렌드 끝에 특히 훌륭하지만 강한 트렌드에서 초기 신호가 발생할 수 있습니다.
주요 장점: 반전 신호는 일반적으로 2-5 주기를 앞두고 가격 반전으로 거래자에게 귀중한 사전 배치 기회를 제공합니다.
50⁄200 쌍 EMA 시스템은 명확한 트렌드 프레임워크를 구축한다. 구조 거부 신호는 가격이 핵심 평균선에 닿는 것을 요구하지만 효과적으로 돌파하지 못하며, 그 다음으로 빠르게 반발하거나 회귀한다. 이러한 “거짓 돌파”는 종종 강력한 반전의 전조이다.
보금자 구조: 가격이 200 EMA를 탐색하지만 종결 가격이 다시 올라 50 EMA보다 높습니다. 보금자 구조: 가격이 200 EMA를 타격하지만 종결 가격이 다시 내려 50 EMA보다 낮습니다. 이러한 디자인은 거래 방향과 주요 경향의 일관성을 보장합니다.
실전 효과: 트렌딩 시장에서 구조적 거부 신호의 승률은 65~70%에 달하며, 무작위 진입의 50% 기준선을 훨씬 초과한다.
전략은 두 가지의 고전적인 반전 K선 모드를 내장한다: 침수 형태와 선/상중선 변형. 이 형태는 다공력의 순간적인 전환을 직관적으로 반영하며, 단기 반전의 신뢰할 수 있는 선행 지표이다.
보 역전: 현재 K선 개체가 전 선을 완전히 삼켜버리거나, 긴 하향선과 개체가 상반부에 위치한다.
핵심 매개 변수: 개체 길이는 그림자 선의 2배 이상으로 회전 신호의 신뢰성을 보장한다. 이 엄격한 필리링은 십자별과 같은 모호한 모양의 간섭을 피한다.
거래량은 가격행동의 진실성을 검증하는 궁극적인 지표이다. 전략은 반전 신호와 함께 1.5배의 평균 거래량을 증폭시켜 가격을 반전시키기 위해 충분한 자금이 있는지 확인한다.
거래량 논리: 상향 역전에는 양전선이 필요하고, 하향 역전에는 양전선이 필요. 20주기 거래량 평균선이 기준으로, 현재 거래량이 기준의 150%를 초과해야 신호를 유발할 수 있다.
실전적 의미: 무량 반전이 종종 거짓 신호이며, 대량 반전의 지속성은 훨씬 강하다. 통계적으로, 대량 반전 신호의 평균 지속주기는 무량 반전보다 40% 이상 길다.
중지 손실 설정은 1.2 배의 ATR, 중지 중지 설정은 2.5 배의 ATR, 리스크 수익률은 1:2.08에 달한다. 이러한 동적 조정 메커니즘은 다른 시장의 변동적 특성에 적응할 수 있으며, 고정 점수 중지 손실이 높은 변동성 동안 자주 유발되는 문제를 피한다.
ATR 주기는 14로 설정되어 민감성과 안정성을 균형을 맞추고 있다. 높은 변동성 시장에서, 중지 거리는 자동으로 확장되어, 노이즈 방해가 줄어들며, 낮은 변동성 환경에서, 중지 손실이 강화되어, 자금 효율성이 향상된다.
중요한 경고: 이 전략은 연속적인 손실의 위험이 있으며, 특히 변동성 시장에서 좋지 않습니다. 트렌드 필터와 함께 트렌드 필터를 사용하는 것이 좋습니다. 수평 정리 기간 동안 자주 거래하는 것을 피하십시오.
최소 공명 수를 3으로 설정하는 것은 대량의 피트백을 통해 검증된 최적의 변수이다. 2로 설정하면 거래 빈도를 증가시키지만 승률을 감소시키고, 4로 설정하면 정확도를 향상시키지만 거래 기회를 크게 감소시킨다.
다른 시장 특성에 맞게 변수를 조정합니다.
이 전략은 트렌딩 시장에서 우수한 성과를 거뒀지만, 투자자들은 과거의 성과는 미래의 수익을 의미하지 않으며, 엄격한 위험 관리와 자금 관리가 성공의 열쇠라는 것을 알아야 한다.
/*backtest
start: 2026-01-07 15:30:00
end: 2026-03-15 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("Quad Confluence Reversal v13 – Funded Relay FIXED", overlay=true, margin_long=100, margin_short=100, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// ────────────────────────────────────────────────
// INPUTS
// ────────────────────────────────────────────────
rsiLen = input.int(14, "RSI Length", minval=5)
volMult = input.float(1.5, "Volume Surge ×", minval=1.0, step=0.1)
minConfl = input.int(3, "Min Confluences (2-4)", minval=2, maxval=4)
useDiv = input.bool(true, "Use Divergence")
useStr = input.bool(true, "Use Structure Rejection")
useCdl = input.bool(true, "Use Reversal Candle")
useVol = input.bool(true, "Use Volume Confirmation")
showLbl = input.bool(true, "Show Signal Labels")
slMult = input.float(1.2, "SL ATR ×", step=0.1)
tpMult = input.float(2.5, "TP ATR ×", step=0.1)
// ────────────────────────────────────────────────
// INDICATORS
// ────────────────────────────────────────────────
rsi = ta.rsi(close, rsiLen)
emaFast = ta.ema(close, 50)
emaSlow = ta.ema(close, 200)
volAvg = ta.sma(volume, 20)
atrVal = ta.atr(14)
// ────────────────────────────────────────────────
// CONFLUENCE CONDITIONS
// ────────────────────────────────────────────────
bool divBull = false
bool divBear = false
if useDiv
float pLowPrice = ta.pivotlow(low, 5, 5)
float pLowRsi = ta.pivotlow(rsi, 5, 5)
float pHighPrice = ta.pivothigh(high, 5, 5)
float pHighRsi = ta.pivothigh(rsi, 5, 5)
if not na(pLowPrice) and not na(pLowRsi)
divBull := low < pLowPrice[10] and rsi > pLowRsi[10]
if not na(pHighPrice) and not na(pHighRsi)
divBear := high > pHighPrice[10] and rsi < pHighRsi[10]
bool strBull = close > emaSlow and low <= emaSlow and close > emaFast
bool strBear = close < emaSlow and high >= emaSlow and close < emaFast
bool cdlBull = (close > open and open <= low[1] and close >= high[1]) or
(low < low[1] and close > open and (close - open) > (high - close)*2)
bool cdlBear = (close < open and open >= high[1] and close <= low[1]) or
(high > high[1] and close < open and (open - close) > (close - low)*2)
bool volBull = volume > volAvg * volMult and close > open
bool volBear = volume > volAvg * volMult and close < open
// ────────────────────────────────────────────────
// CONFLUENCE COUNTERS – BLOQUES INDENTADOS (esto elimina el error)
// ────────────────────────────────────────────────
int conflBull = 0
if useDiv
if divBull
conflBull += 1
if useStr
if strBull
conflBull += 1
if useCdl
if cdlBull
conflBull += 1
if useVol
if volBull
conflBull += 1
int conflBear = 0
if useDiv
if divBear
conflBear += 1
if useStr
if strBear
conflBear += 1
if useCdl
if cdlBear
conflBear += 1
if useVol
if volBear
conflBear += 1
bool goLong = conflBull >= minConfl
bool goShort = conflBear >= minConfl
// ────────────────────────────────────────────────
// ENTRIES & EXITS
// ────────────────────────────────────────────────
if goLong
strategy.entry("Long 🟢", strategy.long)
if goShort
strategy.entry("Short 🔴", strategy.short)
strategy.exit("Exit Long", from_entry = "Long 🟢", stop = close - atrVal * slMult, limit = close + atrVal * tpMult)
strategy.exit("Exit Short", from_entry = "Short 🔴", stop = close + atrVal * slMult, limit = close - atrVal * tpMult)
// ────────────────────────────────────────────────
// PLOTS & VISUALS
// ────────────────────────────────────────────────
plot(emaFast, "EMA 50", color.orange, linewidth=1)
plot(emaSlow, "EMA 200", color.purple, linewidth=2)
plotshape(goLong, title="Long Signal", style=shape.triangleup, location=location.belowbar, color=color.new(#00FF41, 0), size=size.small, text="🟢📈")
plotshape(goShort, title="Short Signal", style=shape.triangledown, location=location.abovebar, color=color.new(#FF3366, 0), size=size.small, text="🔴📉")
if showLbl and goLong
label.new(bar_index, low, "🟢 LONG\nConfs: " + str.tostring(conflBull) + "/4", color=color.new(#00FF41, 40), textcolor=color.black, style=label.style_label_up, size=size.normal)
if showLbl and goShort
label.new(bar_index, high, "🔴 SHORT\nConfs: " + str.tostring(conflBear) + "/4", color=color.new(#FF3366, 40), textcolor=color.black, style=label.style_label_down, size=size.normal)
// ────────────────────────────────────────────────
// ALERTS
// ────────────────────────────────────────────────
alertcondition(goLong, title="🟢 LONG ATTACK", message="LONG – {{conflBull}}/4 – Vol Surge: {{volume > volAvg * volMult ? 'YES 🔥' : 'NO'}}")
alertcondition(goShort, title="🔴 SHORT ATTACK", message="SHORT – {{conflBear}}/4 – Vol Surge: {{volume > volAvg * volMult ? 'YES 🔥' : 'NO'}}")