콘텐츠로 이동

멀티 타임프레임 (Multi-Timeframe)

QuantiqDSL은 하나의 전략에서 여러 타임프레임의 데이터를 동시에 참조할 수 있습니다. 이를 통해 상위 타임프레임에서 추세를 확인하고 하위 타임프레임에서 진입 타이밍을 잡는 전략을 구현할 수 있습니다.

기본 사용법

chart()를 여러 번 호출하여 다른 타임프레임의 데이터를 가져옵니다.

m5  = chart("5T")    # 5분봉
m15 = chart("15T")   # 15분봉
h1  = chart("1H")    # 1시간봉
d1  = chart("1D")    # 일봉

각 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로 사용 가능한 바 수를 확인하세요.


관련 문서