콘텐츠로 이동

스튜디오 사용법

Quantiq 전략 스튜디오는 QuantiqDSL 전략을 작성하고 테스트하는 웹 기반 코드 편집 환경입니다.

인터페이스 구성

코드 에디터

스튜디오의 중앙에 위치한 Monaco 기반 코드 에디터는 다음 기능을 제공합니다.

  • 구문 강조 — QuantiqDSL 키워드와 함수가 색상으로 구분됩니다.
  • 자동완성ta., math., c. 등을 입력하면 사용 가능한 함수/속성 목록이 표시됩니다.
  • 시그니처 도움말 — 함수 인자 입력 시 파라미터 정보가 표시됩니다.
  • 오류 표시 — 문법 오류나 금지 구문 사용 시 실시간으로 표시됩니다.

AI 어시스트 패널

스튜디오의 우측 AI 어시스트 패널은 전략 코드 초안 생성, 수정 제안, 대화형 보조를 위한 표면입니다.

  • canonical upstream은 local CLI/provider가 아니라 authenticated cloud relay 입니다.
  • runtime은 cloud POST /api/runtime/llm/chat relay를 통해서만 LLM 요청을 전달합니다.
  • Studio 초기 system prompt는 cloud relay 내부에서만 canonical하게 주입되며, runtime은 이를 별도 fetch/cache 하지 않습니다.
  • 외부 provider secret은 cloud server-side 설정만 사용하며, 브라우저나 local runtime이 직접 key를 들고 있지 않습니다.
  • 스튜디오 패널은 더 이상 local provider selector를 1차 사용자 표면으로 노출하지 않습니다.
  • Studio AI는 현재 BASIC 이상 구독에서만 사용할 수 있고, FREE 플랜에서는 입력창이 잠기며 Cloud 업그레이드 안내가 표시됩니다.
  • cloud relay 응답이 non-streaming이어도 스튜디오는 기존 transcript, quick action, 에디터 반영, 차트 테스트 흐름을 유지합니다.
  • relay가 unavailable, timeout, auth failure 상태이면 스튜디오는 local direct provider로 자동 우회하지 않고 명시적 오류를 보여줍니다.

스튜디오가 기대하는 응답 형식 규칙도 cloud relay prompt 안에 포함됩니다. 사용자 관점에서는 아래처럼 보이는 것이 정상입니다.

  • 일반 답변은 한글 중심 Markdown 텍스트로 보입니다.
  • DSL 코드 제안은 ```dsl fenced block 안에 제시됩니다.
  • 설명이나 예시는 DSL 코드블록 대신 일반 텍스트나 다른 코드블록으로 나옵니다.
  • 선택지가 필요한 경우 응답 마지막에 [llm option] / llm_option(...) 형식이 포함되고, 스튜디오는 이를 quick action 버튼으로 렌더링합니다.

LLM이 스크립트 초안 작성만 하는 것이 아니라 내부적으로 백테스트, 비교 실행, 파라미터 탐색 같은 보조 작업을 수행하는 경우에는 대화 본문과 별도로 진행 카드결과 카드가 함께 보일 수 있습니다.

  • 진행 카드는 assistant가 현재 어떤 작업을 수행 중인지 요약해서 보여주는 보조 표면입니다.
  • 이 카드는 내부 relay hop을 설명하기보다, 사용자가 "assistant가 로컬에서 준비하고 실행해 결과를 정리한다"로 이해할 수 있는 표현을 사용합니다.
  • 진행 상태는 준비중, 백테스트 실행중, 비교 실행중, 파라미터 탐색중, 결과 정리중, 완료, 실패, 취소됨 수준으로 표시될 수 있습니다.
  • 비교 실행과 파라미터 탐색 단계에서는 단계 n/m, 실행 n/m 같은 중간 진행 수치가 함께 표시될 수 있습니다.
  • 결과 카드는 최종 답변과 별개로 유지되며, 최소한 요약 제목, 핵심 bullet, 실행 횟수, 최고 후보, 완료/부분완료/실패 상태를 보여줍니다.
  • assistant 최종 텍스트가 짧거나 비어 있어도 진행 카드와 결과 카드는 별도로 남을 수 있습니다.
  • 취소 버튼은 실제 실행 중인 단계에서만 나타날 수 있고, 재시도는 실패 또는 부분완료 결과에서만 제공될 수 있습니다.

운영 메모:

  • runtime 사용자 표면은 이제 local provider selector나 direct provider compatibility 경로를 노출하지 않습니다.
  • 따라서 설정/운영 문제를 점검할 때도 “cloud 인증 상태”와 “cloud relay 가용성”을 먼저 확인하는 편이 맞습니다.

차트 영역

에디터 우측 또는 하단에 배치된 차트 영역에서:

  • 전략이 생성한 오버레이(라인, 밴드, 히스토그램 등)가 표시됩니다.
  • 사용자가 DSL로 선언한 marker와 시스템 주문 marker가 차트 위에 표시됩니다.
  • 차트의 타임프레임을 변경할 수 있습니다.

스튜디오 차트는 marker 정책상 다음 규칙을 따릅니다.

  • 사용자 marker는 선언한 chart/timeframe에만 표시됩니다.
  • 시스템 주문 marker는 항상 strategy.order_on 기준 차트에만 표시됩니다.
  • 스크립트에 strategy.order_on 차트를 직접 선언하지 않아도, 스튜디오는 해당 차트를 자동으로 포함합니다.
  • canonical 차트에는 주문발행기준 배지와 강조 스타일이 붙습니다.
  • 주문발행기준 배지에 마우스를 올리면 canonical 차트 선정 이유를 tooltip으로 확인할 수 있습니다.
  • strategy.order_on="tick"인 경우 스튜디오에서는 canonical 차트를 1T로 대표 표시합니다.
  • chart("60T")chart("1H")는 같은 hourly class로 취급합니다. 따라서 차트 정렬, preload/window, 기본 날짜 범위도 같은 hourly 규칙을 사용합니다.
  • 여러 차트와 sub pane을 함께 띄우면 크로스헤어와 시점이 함께 따라가며, sub pane도 자체 시간축을 표시합니다.
  • 차트 상단 OHLCV 레전드는 시가/고가/저가/종가/거래량 한글 표기로 통일합니다.
  • 같은 봉에서 동일한 사용자/status marker를 반복 등록하면 기존 marker를 덮어써 하나로 유지합니다. 같은 봉이라도 marker identity가 다르면 함께 표시될 수 있습니다.
  • intent와 submitted는 차트에서 같은 매수/매도 marker 계열로 보이며, 취소 상태는 차트보다 주문 패널/로그에서 확인하는 것이 기준입니다.

한국 주식 intraday 차트 세션 정책

Quantiq의 기본 intraday 차트와 지표 계산은 정규장 연속매매 구간만 사용합니다.

  • 사용 구간: 09:00 <= t < 15:20
  • 제외 구간:
  • 08:00~09:00 장전/NXT 프리마켓
  • 15:20~15:30 종가 동시호가
  • 15:40~16:00 시간외 종가
  • 16:00~18:00 시간외 단일가
  • NXT 애프터마켓

따라서 일부 증권사 MTS/HTS처럼 15:30 이후 또는 20:00까지 보이는 차트와 마지막 구간이 다를 수 있습니다. 이는 오류가 아니라, Quantiq가 기본적으로 장중 연속매매 기반 전략/지표를 우선하기 때문입니다.

intraday 기본 날짜 범위 정책

Quantiq는 화면 용도에 따라 intraday 차트의 기본 날짜 범위 끝점을 다르게 적용합니다.

화면/기능 기본 끝 날짜 이유
전략 상세 차트 당일 포함 실시간 캔들/오버레이를 즉시 확인
모니터 차트 당일 포함 실시간 모니터링 목적
시뮬레이션 당일 포함 장중에도 현재 데이터로 시뮬 가능
보고서(full report) 당일 포함 시뮬레이션과 동일한 데이터 기반
스튜디오 차트 전일까지 미완료 세션 제외로 지표 일관성 유지

사용자가 직접 날짜를 지정하면 위 기본값은 적용되지 않습니다.

추가로 higher timeframe overlay를 테스트할 때도, 스튜디오는 각 scale의 direct candle snapshot을 함께 사용합니다. 예를 들어 5T 메인 차트 위에 60T EMA를 그리는 스크립트는 60T를 minute window로 재해석하지 않고 hourly candle 범위를 기준으로 선을 계산합니다.

스튜디오 차트는 위 과거 스냅샷 정책을 유지하기 위해 runtime WebSocket의 실시간 candle/overlay delta를 다시 붙이지 않습니다. 즉 스튜디오는 편집/과거 검증용 표면이고, 전략 상세와 모니터 차트가 runtime 실시간 표면을 담당합니다.

사이드바

사이드바에서는 다음을 관리합니다.

  • 종목 선택 — 전략을 실행할 종목을 선택합니다.
  • 실행 로그log(), print() 출력을 확인합니다.
  • 백테스트 설정 — 현재 코드 기준으로 시뮬레이션을 실행합니다.

전략 작성 워크플로

1. 새 전략 생성

  1. 스튜디오 상단 메뉴에서 새 전략을 클릭합니다.
  2. 전략 이름을 입력합니다.
  3. 빈 에디터에 코드를 작성하기 시작합니다.

처음 스튜디오를 열었을 때 저장된 작업본이 없으면 스튜디오는 runtime /api/templates가 내려준 첫 번째 스타터 템플릿으로 초기 진입합니다.

  • 이 템플릿 목록은 runtime 내부 상수가 아니라 cloud의 system template 세트에서 공급됩니다.
  • 현재 기본 시작점은 듀얼 EMA 크로스 스타터 입니다.
  • runtime /api/state.default_script는 비워 두고, 실제 초기 코드는 템플릿 목록 응답으로 채웁니다.

  • 가장 흔한 추세 추종 구조를 바로 수정해 보기 위한 시작점입니다.

  • param(name, description, default), strategy.order_on, bar.is_confirmed, position.qty를 모두 포함합니다.
  • 메인 차트 overlay와 매수/매도 marker가 있어, 저장과 시뮬레이션 전에 차트 표시까지 한 번에 확인하기 좋습니다.

즉 기본 스타터는 “빈 코드”가 아니라, 바로 고쳐 쓰고 저장할 수 있는 최소 실전형 골격입니다.

스타터 템플릿 동작 규칙:

  • cloud는 여러 개의 curated starter template을 읽기 전용 system template 으로 제공합니다.
  • 일부 built-in 템플릿 row가 누락된 상태여도 cloud는 다음 템플릿 조회 시 빠진 curated starter를 다시 보강합니다.
  • 템플릿은 QUANTIQ 소유의 관리 자산으로 보이며, 원본 자체를 덮어쓸 수 없습니다.
  • 템플릿을 열고 수정한 뒤 저장하면 항상 내 private 작업본 으로 저장됩니다.
  • cloud template surface를 읽을 수 없으면 스튜디오는 로컬 fallback bundle을 쓰지 않고 템플릿 목록 오류로 처리합니다.

1-1. 커뮤니티 스크립트 열기

탐색 탭에서 커뮤니티 스크립트를 둘러볼 때는 목록과 상세 화면 모두 community 스크립트로 취급됩니다. 즉, 탐색 상세는 내 스크립트가 아니라 커뮤니티 게시물의 읽기 전용 맥락을 유지합니다.

여기서 스튜디오에서 열기를 선택하면 코드를 기반으로 작업을 이어갈 수 있지만, 이후 저장은 기존 커뮤니티 게시물을 덮어쓰지 않고 새 private 작업본 저장 흐름으로 이어집니다.

스타터/커뮤니티 예제는 다음처럼 성격을 나눠서 보는 것이 좋습니다.

  • 스타터 템플릿: 빠르게 수정해 쓰는 기본 골격
  • 커뮤니티 스크립트: 다른 해석 방식과 진입 구조를 참고하는 예제 라이브러리

현재 예제 라이브러리는 다음 범주를 중심으로 구성됩니다.

  • 추세, 모멘텀, 변동성, 거래량, 가격행동, 멀티 타임프레임
  • 평균회귀, 패턴, 복합 전략, 수동 계산 지표

1-2. 커뮤니티 등록

커뮤니티 등록은 저장된 private 스크립트에서만 시작할 수 있습니다.

  1. 스튜디오에서 코드를 저장합니다.
  2. 상단의 커뮤니티 등록 버튼을 클릭합니다.
  3. 게시물 제목, 요약, 개요, 태그, 커버 자산, 샘플 차트 자산, 공개 상태를 입력합니다.
  4. 등록을 완료하면 새 게시물이 생성됩니다.

중요한 규칙:

  • 게시물의 코드와 제목은 등록 후 수정할 수 없습니다.
  • 게시 후 수정 가능한 항목은 요약, 개요, 태그, 커버 자산, 샘플 차트 자산, 공개 상태입니다.
  • 코드 변경이 필요하면 기존 게시물을 숨기거나 삭제하고, 저장된 private 스크립트에서 새 게시물을 다시 등록해야 합니다.
  • 스튜디오는 게시 진입점만 담당하고, 게시 후 관리는 탐색 탭의 내 게시물에서 진행합니다.

2. 코드 작성

에디터에서 QuantiqDSL 코드를 작성합니다. 자동완성을 적극 활용하세요.

version("1.0")
description("RSI 과매도 반등 전략")
param("rsi_period", "RSI 계산 기간", 14)
param("oversold", "과매도 기준선", 30)

c = chart("1D")
rsi = ta.rsi(c.close, script_params["rsi_period"])

c.line("RSI", rsi, color="purple")
c.hline("과매도", script_params["oversold"], color="red")

if rsi[0] < script_params["oversold"] and rsi.cross_up(script_params["oversold"]):
    buy(tag=f"RSI {rsi[0]:.1f} 과매도 탈출")

3. 저장 및 테스트

  • Ctrl+S 또는 저장 버튼으로 저장합니다.
  • 저장만으로는 커뮤니티에 공개되지 않습니다. 이 단계에서 생성되는 것은 내 계정의 private draft입니다.
  • 공개 게시물은 상단의 커뮤니티 등록을 통해 별도로 생성합니다.
  • 종목을 선택하고 백테스트를 실행해 현재 코드 기준 결과를 확인합니다.

LLM 어시스트를 함께 쓰는 경우 추가로 기억할 점:

  • cloud 로그인 세션이 없거나 relay가 비활성이면 LLM 응답 자체가 실패할 수 있습니다.
  • 이 실패는 “로컬에 다른 provider를 하나 더 붙여 자동 우회”하는 방식으로 숨기지 않습니다.
  • 즉 스튜디오의 LLM 어시스트는 runtime 단독 기능이 아니라 cloud relay availability에 의존하는 협력 기능입니다.
  • permission denied: 현재 계정의 구독 플랜이 BASIC 미만이거나 Cloud AI 사용 권한이 없는 상태입니다.
  • relay unavailable: cloud relay 서버 설정이나 가용성이 준비되지 않은 상태입니다.
  • timeout: upstream 응답이 지연된 상태이므로 잠시 뒤 재시도하는 편이 안전합니다.
  • cloud auth/server configuration failure: cloud 로그인 세션이나 cloud server-side LLM 설정을 먼저 점검해야 합니다.

3-1. 게시 후 관리 위치

게시 후에는 탐색 탭에서 다음 두 surface를 구분해서 사용합니다.

  • 커뮤니티: 공개 게시물을 둘러보고 상세를 읽는 영역
  • 내 게시물: 내가 등록한 게시물을 관리하는 영역

내 게시물에서는 다음 작업을 수행할 수 있습니다.

  • 게시물 상세 확인
  • 메타 정보 수정
  • PUBLIC / HIDDEN 전환
  • 게시물 삭제

HIDDEN은 공개 탐색에서만 숨기고 게시물 자체는 유지합니다. 공개 이력이나 반응을 보존하고 싶다면 삭제보다 HIDDEN을 먼저 고려하는 것이 안전합니다.

4. 모니터링

작성 중인 전략의 차트/로그 결과를 확인합니다.

  • 차트에 오버레이와 시그널 마커 확인
  • 사이드바 로그에서 log() 출력 확인
  • 백테스트 결과 확인

에디터 단축키

단축키 기능
Ctrl+S 저장
Ctrl+Space 자동완성 트리거
Ctrl+Z 실행 취소
Ctrl+Shift+Z 다시 실행
Ctrl+D 줄 복제
Ctrl+/ 주석 토글
Ctrl+Shift+K 줄 삭제

Diff 뷰어

전략 코드를 수정한 후, Diff 뷰어를 사용하여 변경 사항을 비교할 수 있습니다.

  • 이전 저장 버전과 현재 코드의 차이를 시각적으로 확인합니다.
  • AI 보조 경로와 무관하게, 코드 diff 자체는 현재 에디터 상태와 저장본 비교 기준으로만 동작합니다.

파라미터 선언과 수정 경계

param()은 스크립트의 실행 파라미터와 설명, 기본값을 소스코드 안에서 선언합니다.

param("fast_period", "빠른 이동평균 기간", 5)
param("slow_period", "느린 이동평균 기간", 20)
param("rsi_threshold", "RSI 기준값", 70)

canonical 문법은 param(name, description, default) 입니다. 스튜디오에는 별도의 파라미터 편집 패널이 없으므로, 파라미터 기본값을 바꾸려면 코드를 직접 수정해야 합니다.

실행 시점의 파라미터 조정은 거래 탭의 전략 편집 패널에서만 수행합니다. 이 값은 cloud에 저장되거나 업로드되지 않습니다.

게시물 삭제 주의사항

게시물 삭제는 물리 삭제입니다.

  • 삭제된 게시물은 복구되지 않습니다.
  • 게시물과 함께 연결된 반응 데이터가 사라질 수 있습니다.
  • 보존이 필요하면 삭제 대신 HIDDEN을 사용하세요.

다음 단계