제어 흐름¶
QuantiqDSL은 Python의 기본 제어 흐름 구문을 지원합니다.
조건문 (if/elif/else)¶
rsi = ta.rsi(c.close, 14)
if rsi[0] < 30:
buy(tag="RSI 과매도")
elif rsi[0] > 70:
sell(tag="RSI 과매수")
else:
hold(tag="중립 구간")
중첩 조건문¶
c = chart("1D")
rsi = ta.rsi(c.close, 14)
sma = ta.sma(c.close, 20)
if c.close > sma:
# 상승 추세
if rsi[0] < 40:
buy(tag="추세 상승 + RSI 저점")
else:
hold(tag="추세 상승, 진입 대기")
else:
# 하락 추세
if rsi[0] > 60:
sell(tag="추세 하락 + RSI 고점")
else:
hold(tag="추세 하락, 관망")
반복문 (for)¶
for 반복문은 range(), 리스트, enumerate(), zip() 등과 함께 사용할 수 있습니다.
# range 사용
total = 0.0
for i in range(10):
total = total + c.close[i]
avg = total / 10
log("최근 10봉 평균:", avg)
# 리스트 순회
periods = [5, 10, 20, 50]
for p in periods:
sma = ta.sma(c.close, p)
c.line(f"SMA {p}", sma, color="blue")
# enumerate 사용
timeframes = ["5T", "15T", "1H"]
for idx, tf in enumerate(timeframes):
sc = chart(tf)
log(f"[{idx}] {tf} 종가:", sc.close[0])
반복문 (while)¶
while 반복문도 사용 가능합니다.
# 특정 조건까지 과거 바 탐색
idx = 0
while idx < c.bars and c.close.is_valid(idx):
if c.close[idx] < c.low[0]:
log(f"{idx}봉 전에 현재 저가 이하 발견")
break
idx = idx + 1
무한 루프 주의
QuantiqDSL은 실행 시간 제한(timeout)이 있으므로 무한 루프는 자동 종료됩니다. 그래도 while 사용 시에는 반드시 종료 조건을 명확히 작성하세요.
루프 제어¶
break¶
반복문을 즉시 종료합니다.
# 최근 20봉 중 거래량 폭증 봉 찾기
spike_bar = -1
for i in range(20):
avg_vol = ta.sma(c.volume, 20)
if c.volume[i] > avg_vol[i] * 3:
spike_bar = i
break
if spike_bar >= 0:
log(f"{spike_bar}봉 전 거래량 폭증 감지")
continue¶
현재 반복을 건너뛰고 다음 반복으로 진행합니다.