콘텐츠로 이동

연산자

QuantiqDSL은 Python의 연산자를 지원하며, TSeries 타입에 대한 연산도 자연스럽게 수행됩니다.

산술 연산자

연산자 설명 예시
+ 덧셈 c.close + 100
- 뺄셈 c.high - c.low
* 곱셈 c.close * 2
/ 나눗셈 c.close / c.open

TSeries 간 연산

두 TSeries를 연산하면 각 바(인덱스)별로 연산이 수행되어 새로운 TSeries가 생성됩니다.

c = chart("1D")

# 각 봉의 몸통 크기 (종가 - 시가)
body = c.close - c.open

# 각 봉의 변동 폭
range_ = c.high - c.low

# 변동 대비 몸통 비율
body_ratio = body / range_

TSeries-스칼라 연산

TSeries와 숫자를 연산하면 모든 바에 동일한 연산이 적용됩니다.

# 종가의 2% 위
upper_limit = c.close * 1.02

# 종가에서 100원 차감
adjusted = c.close - 100

비교 연산자

연산자 설명
> 초과
< 미만
>= 이상
<= 이하
== 같음
!= 다름

TSeries 비교는 현재 바 기준

TSeries 간 비교 연산은 현재 바([0])의 값만 비교하여 bool을 반환합니다. 전체 시계열을 비교하는 것이 아닙니다.

c = chart("1D")
sma20 = ta.sma(c.close, 20)

# 현재 종가가 SMA 20 위에 있는가?
if c.close > sma20:        # c.close[0] > sma20[0]과 동일
    log("가격이 이동평균 위")

# 스칼라와 비교
if c.close > 50000:        # c.close[0] > 50000과 동일
    log("5만원 이상")

명시적 인덱싱 비교

특정 바의 값을 비교하려면 인덱싱 후 비교합니다.

# 어제 종가와 오늘 종가 비교
if c.close[0] > c.close[1]:
    log("가격 상승")

# 2봉 전 RSI와 비교
rsi = ta.rsi(c.close, 14)
if rsi[0] > rsi[2]:
    log("RSI 상승 추세")

논리 연산자

연산자 설명 예시
and 논리 AND a > 0 and b > 0
or 논리 OR a > 70 or b > 70
not 논리 NOT not position
rsi = ta.rsi(c.close, 14)
sma = ta.sma(c.close, 20)

# 복합 조건
if rsi[0] < 30 and c.close > sma:
    buy(tag="과매도 + 이평선 위 = 반등 기대")

# or 사용
if rsi[0] > 80 or c.close[0] < c.close[1] * 0.97:
    sell(tag="과매수이거나 3% 이상 하락")

# not 사용
if not position:
    log("현재 미보유 상태")

멤버십 연산자

in 연산자를 사용하여 값이 컬렉션에 포함되어 있는지 확인할 수 있습니다.

bullish_symbols = ["005930", "000660", "035420"]

if symbol in bullish_symbols:
    log("관심 종목")

관련 문서