수익성 있는 페어 상관 다이버전스 스캐너 v6

발행: (2025년 12월 8일 오후 08:48 GMT+9)
3 min read
원문: Dev.to

Source: Dev.to

개요

이 전략은 Z‑Score 스프레드 분석, 추세 확인, RSI & MACD 모멘텀 체크, 상관관계 필터, ATR 기반 손절/익절 관리 등을 결합하여 두 상관된 자산 간의 다이버전스 기회를 식별합니다. 긍정적인 손익(P&L)과 현실적인 거래 실행을 위해 최적화되었습니다.

주요 기능

  • 페어 다이버전스 감지 – 두 자산의 수익률 간 스프레드를 측정하고 Z‑Score로 정규화합니다.
  • 추세 정렬 – 빠른 EMA와 느린 EMA를 사용해 현재 추세 방향으로 거래가 이루어지도록 합니다.
  • 모멘텀 확인 – RSI와 MACD 필터가 상승 또는 하락 모멘텀을 확인합니다.
  • 상관관계 필터 – 최소 상관관계(기본값 > 0.5)를 요구하여 잘못된 신호를 줄입니다.
  • 위험 관리 – ATR 기반 손절 및 익절 수준을 사용하며, 보상대위험 비율이 1보다 큽니다.
  • 청산 조건 – Z‑Score가 좁은 “정규화” 구역으로 다시 들어올 때 포지션을 청산합니다.

작동 방식

수익률 계산

ret1 = ta.roc(s1, 1)
ret2 = ta.roc(s2, 1)

Z‑Score 스프레드

spread   = ret1 - ret2
spreadMA = ta.sma(spread, zLen)
spreadSD = ta.stdev(spread, zLen)
zScore   = (spread - spreadMA) / spreadSD

추세 필터

emaFast = ta.ema(s1, fastEMA)
emaSlow = ta.ema(s1, slowEMA)
trendLong  = emaFast > emaSlow
trendShort = emaFast  50
rsiShort = rsiVal  signalLine
macdShort = macdLine  0.5

거래 실행

longCond  = zScore   entryZ and trendShort and rsiShort and macdShort and corrFilter

if (longCond)
    strategy.entry("LongSpread", strategy.long)
if (shortCond)
    strategy.entry("ShortSpread", strategy.short)

청산 로직

exitLong  = math.abs(zScore)  emaSlow
trendShort = emaFast  50
rsiShort = rsiVal  signalLine
macdShort = macdLine  0.5

// ATR FOR SL/TP
atrVal = ta.atr(atrLen)
sl = atrVal * atrMult
tp = atrVal * atrMult * 2  // reward > risk

// ENTRY CONDITIONS
longCond  = zScore   entryZ and trendShort and rsiShort and macdShort and corrFilter

exitLong  = math.abs(zScore) < exitZ
exitShort = math.abs(zScore) < exitZ

// EXECUTION
if (longCond)
    strategy.entry("LongSpread", strategy.long)
if (shortCond)
    strategy.entry("ShortSpread", strategy.short)
if (exitLong)
    strategy.close("LongSpread")
if (exitShort)
    strategy.close("ShortSpread")

// ATR‑BASED EXIT
strategy.exit("Exit Long",  "LongSpread", stop=close - sl, limit=close + tp)
strategy.exit("Exit Short", "ShortSpread", stop=close + sl, limit=close - tp)

// PLOTTING
plot(zScore, "Z-Score", color=color.new(color.blue, 0))
hline( entryZ,  "Upper Entry", color=color.red)
hline(-entryZ, "Lower Entry", color=color.green)
hline( exitZ,  "Exit Zone",   color=color.gray)
hline(-exitZ,  "Exit Zone",   color=color.gray)
plot(emaFast, "Fast EMA", color=color.new(color.purple, 0))
plot(emaSlow, "Slow EMA", color=color.new(color.orange, 0))
plot(corrVal, "Correlation", color=color.new(color.teal, 40))
Back to Blog

관련 글

더 보기 »

현실이 사라질 때

2024년 12월, 페이‑페이 리는 가득 찬 스탠포드 강당에 낡은 엽서를 들어 보였다—반 고흐의 *The Starry Night*는 세월에 따라 색이 바래고 주름이 잡혀 있었다. 그녀는 그것을…

알고 계셨나요? (Part 3)

Google Cloud Shell을 환경으로 사용하여 코딩할 수 있습니다! JavaScript, .NET 등 다양한 도구가 포함되어 있습니다. 무엇보다도, 설치할 수 있습니다.