[알고리즘 트레이딩] 오버랩(Overlap, 가격조정) 감지 방법 연구
1. 오버랩(Overlap)이란?
트레이딩에서 "오버랩(Overlap)"이란 시장 가격이 이전의 스윙(swing) 영역으로 되돌아오는 현상을 의미합니다. 즉, 새로운 저점(low)이나 고점(high)을 형성한 후 다시 기존 가격대 안으로 돌아오는 경우를 말합니다.
이 현상은 시장이 조정(Correction) 상태인지, 아니면 새로운 추세(Trend)가 시작되는지를 판단하는 데 중요한 역할을 합니다. 오버랩이 발생하면 현재의 움직임이 단순 조정일 가능성이 높고, 반대로 오버랩 없이 한 방향으로 지속된다면 새로운 추세가 형성되고 있을 가능성이 큽니다.
2. 오버랩을 활용한 트레이딩 전략
(1) 오버랩이 발생했을 때 (Correction 신호)
✅ 시장이 하락 중일 때, 새로운 저점이 나오지만 이전 저점 범위로 다시 되돌아오면 → 조정일 가능성이 높음
✅ 상승장에서 새로운 고점이 나오고 다시 기존 범위로 되돌아오면 → 단기 조정 가능성
✅ 트레이딩 전략: 오버랩이 확인되면 무리한 추격매매를 피하고, 조정이 끝난 후 진입을 고려
(2) 오버랩이 발생하지 않았을 때 (New Trend 신호)
✅ 시장이 한 방향으로 강하게 움직이며 이전 가격대에 다시 들어오지 않음 → 새로운 추세 가능성
✅ 상승장이면 계속 고점을 높여가고, 하락장이면 저점을 낮춰가면서 지속적인 움직임을 보임
✅ 트레이딩 전략: 추세 추종(Trend Following) 전략 활용, 예를 들어 상승장이 유지되면 지속 매수, 하락장이 유지되면 지속 매도
3. 오버랩 감지 알고리즘 구현 (Python & Pandas)
오버랩을 감지하기 위해 Pandas를 활용한 간단한 구현을 소개합니다.
import pandas as pd
def detect_overlap(df, swing_period=5):
df = df.copy()
df['swing_low'] = df['low'].rolling(swing_period).min()
df['prev_swing_low'] = df['swing_low'].shift(1)
df['overlap'] = (df['low'] < df['prev_swing_low']) & (df['close'] > df['prev_swing_low'])
return df
# 샘플 데이터 생성
data = {
'high': [100, 102, 105, 103, 98, 96, 94, 97, 101, 103, 106, 104, 102],
'low': [98, 99, 100, 97, 95, 93, 91, 94, 99, 100, 103, 101, 100],
'close': [99, 101, 103, 98, 96, 94, 92, 95, 100, 102, 105, 103, 101]
}
df = pd.DataFrame(data)
df = detect_overlap(df, swing_period=3)
print(df[['low', 'prev_swing_low', 'overlap']])
위 코드에서는 특정 기간 동안의 최저점(swing low) 을 계산하고, 새로운 저점이 발생한 후 다시 그 범위 안으로 돌아왔는지를 확인하여 오버랩 발생 여부를 True/False로 출력합니다.
4. 머신러닝을 활용한 오버랩 감지
단순한 규칙 기반 감지를 넘어, 머신러닝을 활용하면 더 정교하게 오버랩을 감지할 수 있습니다.
(1) 머신러닝 모델을 활용하는 이유
✅ 다양한 기술적 지표(EMA, RSI, 볼린저 밴드)를 활용하여 오버랩 발생 확률을 학습 가능
✅ 단순 규칙 기반보다 더 높은 정확도 제공
✅ 과거 데이터를 활용해 자동 최적화 가능
(2) 랜덤 포레스트(Random Forest) 기반 오버랩 감지 모델
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import numpy as np
# 기술적 지표 추가
df['SMA_5'] = df['close'].rolling(5).mean()
df['SMA_10'] = df['close'].rolling(10).mean()
df['Volatility'] = df['high'] - df['low']
df['Overlap'] = df['overlap'].astype(int) # 타겟 변수 설정
features = ['SMA_5', 'SMA_10', 'Volatility']
X = df[features].fillna(0)
y = df['Overlap']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print(f'모델 정확도: {accuracy_score(y_test, y_pred):.2f}')
이 모델은 단순한 오버랩 감지 로직을 머신러닝으로 학습하여, 더 정교한 조정 여부를 판단할 수 있도록 개선한 것입니다.
5. 결론 및 향후 개선 방향
✔ 오버랩 패턴을 활용하면 시장이 조정 중인지, 새로운 추세가 시작되는지를 판단할 수 있음
✔ 단순한 규칙 기반 감지 외에도, 머신러닝을 활용하면 정확도를 높이고 자동화 가능
✔ 향후 딥러닝(LSTM) 적용 및 강화학습 기반 트레이딩 자동화로 발전 가능
댓글
댓글 쓰기