멀티 타임프레임 (Multi-Timeframe)¶
QuantiqDSL은 하나의 전략에서 여러 타임프레임의 데이터를 동시에 참조할 수 있습니다. 이를 통해 상위 타임프레임에서 추세를 확인하고 하위 타임프레임에서 진입 타이밍을 잡는 전략을 구현할 수 있습니다.
기본 사용법¶
chart()를 여러 번 호출하여 다른 타임프레임의 데이터를 가져옵니다.
각 ScaleChart 객체는 독립적인 OHLCV 시계열을 가지며, 개별적으로 지표를 계산할 수 있습니다.
d1 = chart("1D")
h1 = chart("1H")
m5 = chart("5T")
# 각 타임프레임에서 독립적으로 지표 계산
sma_d1 = ta.sma(d1.close, 20) # 일봉 20일 SMA
rsi_h1 = ta.rsi(h1.close, 14) # 1시간봉 14기간 RSI
ema_m5 = ta.ema(m5.close, 12) # 5분봉 12기간 EMA
탑다운 분석¶
멀티 타임프레임의 가장 일반적인 활용은 탑다운 분석입니다.
flowchart TD
A[일봉 - 추세 방향 확인] --> B[1시간봉 - 모멘텀 확인]
B --> C[5분봉 - 진입 타이밍]
C --> D[매매 결정]
예제: 3단계 확인 전략¶
version("1.0")
description("탑다운 멀티 타임프레임 전략")
# 1단계: 일봉 — 추세 확인
d1 = chart("1D")
sma20_d1 = ta.sma(d1.close, 20)
sma60_d1 = ta.sma(d1.close, 60)
daily_trend_up = sma20_d1 > sma60_d1
# 2단계: 1시간봉 — 모멘텀 확인
h1 = chart("1H")
rsi_h1 = ta.rsi(h1.close, 14)
macd_line, signal, hist = ta.macd(h1.close, 12, 26, 9)
momentum_ok = rsi_h1[0] < 60 and hist[0] > hist[1]
# 3단계: 5분봉 — 진입 타이밍
m5 = chart("5T")
ema5_m5 = ta.ema(m5.close, 5)
ema20_m5 = ta.ema(m5.close, 20)
# 차트 표시 (5분봉 기준)
m5.line("EMA 5", ema5_m5, color="orange")
m5.line("EMA 20", ema20_m5, color="blue")
# 매매 결정: 3단계 모두 충족 시
if daily_trend_up and momentum_ok and ema5_m5.cross_up(ema20_m5):
buy(tag="일봉 상승추세 + 시간봉 모멘텀 + 5분봉 크로스")
elif not daily_trend_up and rsi_h1[0] > 60 and ema5_m5.cross_down(ema20_m5):
sell(tag="일봉 하락추세 + 시간봉 약세 + 5분봉 크로스")
else:
hold()
지원 타임프레임 조합¶
| 조합 | 상위 TF | 중간 TF | 하위 TF | 용도 |
|---|---|---|---|---|
| 데이 트레이딩 | 1H/4H | 15T/30T | 1T/5T | 일중 매매 |
| 스윙 트레이딩 | 1D/1W | 4H | 1H | 2~5일 보유 |
| 포지션 트레이딩 | 1W | 1D | 4H | 장기 보유 |
타임프레임별 지표 비교¶
version("1.0")
description("RSI 멀티 타임프레임 비교")
m5 = chart("5T")
h1 = chart("1H")
d1 = chart("1D")
rsi_m5 = ta.rsi(m5.close, 14)
rsi_h1 = ta.rsi(h1.close, 14)
rsi_d1 = ta.rsi(d1.close, 14)
log(f"RSI — 5분: {rsi_m5[0]:.1f}, 1시간: {rsi_h1[0]:.1f}, 일봉: {rsi_d1[0]:.1f}")
# 모든 타임프레임에서 과매도일 때만 강한 매수
all_oversold = rsi_m5[0] < 30 and rsi_h1[0] < 35 and rsi_d1[0] < 40
if all_oversold:
buy(tag="전 타임프레임 과매도")
주의사항¶
타임프레임 혼합 주의
- 하위 타임프레임 시계열을 상위 타임프레임 지표에 직접 넣지 마세요.
- 각 타임프레임의 데이터는 해당 타임프레임의 지표에만 사용하세요.
# (X) 잘못된 사용 — 5분봉 close를 일봉 SMA에 사용
m5 = chart("5T")
d1 = chart("1D")
wrong_sma = ta.sma(m5.close, 20) # 이것은 5분봉 20기간 SMA
# (O) 올바른 사용 — 각 타임프레임별로 계산
sma_m5 = ta.sma(m5.close, 20) # 5분봉 20기간 SMA
sma_d1 = ta.sma(d1.close, 20) # 일봉 20일 SMA
바 수 제한
상위 타임프레임일수록 사용 가능한 바 수가 적을 수 있습니다. c.bars로 사용 가능한 바 수를 확인하세요.