연산자¶
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와 숫자를 연산하면 모든 바에 동일한 연산이 적용됩니다.
비교 연산자¶
| 연산자 | 설명 |
|---|---|
> |
초과 |
< |
미만 |
>= |
이상 |
<= |
이하 |
== |
같음 |
!= |
다름 |
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 연산자를 사용하여 값이 컬렉션에 포함되어 있는지 확인할 수 있습니다.