실행 모델¶
QuantiqDSL 전략이 어떻게 실행되는지 이해하면 예상치 못한 동작을 방지하고 더 안정적인 전략을 작성할 수 있습니다.
클라우드와 런타임의 역할 분리¶
Quantiq는 두 부분으로 나뉩니다.
| 클라우드 | 런타임 (내 PC) | |
|---|---|---|
| 역할 | 전략 코드 저장, 계정 관리, 커뮤니티 | 실제 주문 실행, 지표 계산, 리스크 검사 |
| 위치 | Quantiq 서버 | 사용자 PC에서 실행되는 프로그램 |
| 민감 정보 | 저장하지 않음 | 증권사 API 키, 주문 정보 처리 |
주문은 항상 내 PC에서 직접 증권사로 전달됩니다. 클라우드를 경유하지 않습니다.
이벤트 기반 실행¶
스크립트는 이벤트가 발생할 때마다 처음부터 끝까지 다시 실행됩니다.
이벤트 종류¶
price_change — 실시간 가격 변동
candle_close — 봉 마감
봉 마감 기준 전략을 권장합니다
price_change 이벤트는 장중에 수백~수천 번 발생합니다. 특별한 이유가 없다면 봉 마감(candle_close) 또는 barstate().is_confirmed를 사용하는 것이 더 안정적입니다.
실행 순서¶
매 이벤트마다 아래 순서로 처리됩니다.
이벤트 수신
↓
스크립트 전체 실행 (처음부터 끝까지)
↓
마지막 결정 함수 채택 (buy/sell/hold 중 하나)
↓
order_on 게이트 확인 (봉 마감 시에만 주문)
↓
리스크 검사 (손절, 익절, 계좌 한도)
↓
주문 전송 (통과한 경우)
의사결정 규칙¶
한 번의 실행에서 buy, sell, hold 중 하나만 최종 결정이 됩니다. 여러 번 호출하면 마지막 호출만 유효합니다.
모든 분기에서 반드시 하나의 결정이 내려지도록 if/elif/else를 완성하세요.
상태 유지 (var)¶
일반 변수는 이벤트마다 초기화됩니다. 이전 실행의 값을 기억하려면 var를 사용하세요.
# 잘못된 방법 — 항상 1
count = 0
count += 1
# 올바른 방법 — 실행 간 누적
var.init(count=0)
var.count += 1
log("총 실행 횟수:", var.count)
자세한 내용: var 네임스페이스
주문 타이밍 (order_on)¶
rule.order_on()으로 주문이 실행될 봉 마감 조건을 선언합니다.
order_on 게이트가 열리지 않은 이벤트에서는 buy(), sell(), exit()이 호출되어도 주문이 전송되지 않습니다. release()는 예외로 즉시 실행됩니다. hold()는 항상 즉시 처리됩니다.
지원 값: "tick", "1T", "3T", "5T", "10T", "15T", "30T", "60T", "1H" — 일봉(1D) 이상은 지원하지 않습니다.
백테스트¶
스튜디오에서 백테스트를 실행하면 과거 데이터로 전략의 동작을 검증할 수 있습니다.
- 실거래와 동일한 주문 판단 로직을 사용합니다
- 봉 마감 타이밍이 실거래와 동일하게 적용됩니다
- 거래량이 0인 봉(무체결 구간)에서는 시장가 주문이 체결되지 않습니다
백테스트 결과는 미래를 보장하지 않습니다
백테스트는 전략의 논리적 타당성을 확인하는 도구입니다. 과거 성과가 미래 수익을 보장하지 않으며, 실제 시장 상황은 백테스트와 다를 수 있습니다.
조건검색 연동¶
거래 탭에서 HTS 조건검색식을 전략에 연결하면, 조건을 만족하는 종목이 자동으로 전략의 감시 대상에 추가됩니다.
- 전략 활성화 시 즉시 조건 결과를 조회하여 종목을 바인딩합니다
- 이후 주기적으로 조건 결과를 갱신합니다
- 조건에서 제외된 종목은 포지션이 없으면 다음 갱신 시 감시 목록에서 제거됩니다
자세한 내용: 거래 탭 사용법
실행 흐름 전체 요약¶
1. 스크리닝
종목 직접 지정 또는 HTS 조건검색으로 감시 종목 수집
2. 위험종목 필터링
관리종목, 거래정지 등 기본 제외 대상 자동 차단
3. 스크립트 실행
이벤트마다 전략 코드 실행 → buy/sell/hold 결정
4. 리스크 검사
종목·전략·계좌 한도 확인 (3단계)
5. 주문 전송
검사 통과 시 내 PC에서 증권사로 직접 전달
다음 단계¶
- var 네임스페이스 — 실행 간 상태 유지 방법
- 컨텍스트 변수 —
event,position,price등 실행 컨텍스트 - 의사결정 —
buy(),sell(),exit(),release()상세