콘텐츠로 이동

실행 모델

QuantiqDSL 전략이 어떻게 실행되는지 이해하면 예상치 못한 동작을 방지하고 더 안정적인 전략을 작성할 수 있습니다.


클라우드와 런타임의 역할 분리

Quantiq는 두 부분으로 나뉩니다.

클라우드 런타임 (내 PC)
역할 전략 코드 저장, 계정 관리, 커뮤니티 실제 주문 실행, 지표 계산, 리스크 검사
위치 Quantiq 서버 사용자 PC에서 실행되는 프로그램
민감 정보 저장하지 않음 증권사 API 키, 주문 정보 처리

주문은 항상 내 PC에서 직접 증권사로 전달됩니다. 클라우드를 경유하지 않습니다.


이벤트 기반 실행

스크립트는 이벤트가 발생할 때마다 처음부터 끝까지 다시 실행됩니다.

이벤트 종류

price_change — 실시간 가격 변동

if event == "price_change":
    # 가격이 바뀔 때마다 실행
    if price < position.avg_price * 0.97:
        sell(tag="3% 손절")

candle_close — 봉 마감

if event == "candle_close":
    # 봉이 확정될 때 실행 (권장)
    if barstate("1D").is_confirmed:
        # 일봉 마감 기준 판단

봉 마감 기준 전략을 권장합니다

price_change 이벤트는 장중에 수백~수천 번 발생합니다. 특별한 이유가 없다면 봉 마감(candle_close) 또는 barstate().is_confirmed를 사용하는 것이 더 안정적입니다.

실행 순서

매 이벤트마다 아래 순서로 처리됩니다.

이벤트 수신
스크립트 전체 실행 (처음부터 끝까지)
마지막 결정 함수 채택 (buy/sell/hold 중 하나)
order_on 게이트 확인 (봉 마감 시에만 주문)
리스크 검사 (손절, 익절, 계좌 한도)
주문 전송 (통과한 경우)

의사결정 규칙

한 번의 실행에서 buy, sell, hold 중 하나만 최종 결정이 됩니다. 여러 번 호출하면 마지막 호출만 유효합니다.

buy(tag="첫 번째 시도")
sell(tag="두 번째 시도")
# 최종 결정: SELL (마지막 호출)

모든 분기에서 반드시 하나의 결정이 내려지도록 if/elif/else를 완성하세요.

# 올바른 패턴
if 조건_A:
    buy(tag="A 조건")
elif 조건_B:
    sell(tag="B 조건")
else:
    hold()      # 나머지 경우에도 반드시 결정

상태 유지 (var)

일반 변수는 이벤트마다 초기화됩니다. 이전 실행의 값을 기억하려면 var를 사용하세요.

# 잘못된 방법 — 항상 1
count = 0
count += 1

# 올바른 방법 — 실행 간 누적
var.init(count=0)
var.count += 1
log("총 실행 횟수:", var.count)

자세한 내용: var 네임스페이스


주문 타이밍 (order_on)

rule.order_on()으로 주문이 실행될 봉 마감 조건을 선언합니다.

rule.order_on("5T")   # 5분봉 마감 시에만 주문

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에서 증권사로 직접 전달

다음 단계