콘텐츠로 이동

메타데이터

메타데이터 함수는 전략의 버전, 설명, 사용자 정의 파라미터를 선언합니다. 스크립트 상단에 배치하는 것이 관례입니다.

version()

전략 스크립트의 버전을 지정합니다.

version("1.0")

파라미터:

이름 타입 설명
ver str 버전 문자열

Note

현재 지원 버전은 "1.0"입니다. 향후 DSL 문법이 변경될 경우 버전 기반으로 호환성을 관리합니다.

description()

전략에 대한 설명 텍스트를 지정합니다. 전략 목록에서 표시됩니다.

description("RSI와 이동평균을 조합한 추세 추종 전략")

파라미터:

이름 타입 설명
desc str 전략 설명 텍스트

param()

사용자 정의 파라미터를 선언합니다. 이 선언 자체가 스크립트 파라미터 기본값의 SSOT입니다.

param("rsi_period", "RSI 계산 기간", 14)
param("oversold_level", "과매도 기준선", 30)
param("overbought_level", "과매수 기준선", 70)
param("strategy_name", "전략 표시 이름", "RSI Strategy")

파라미터:

이름 타입 설명
name str 파라미터 이름
description str 파라미터 설명
default int, float, str 기본값

파라미터 사용

선언한 파라미터는 script_params 딕셔너리를 통해 접근합니다.

param("period", "RSI 계산 기간", 14)
param("threshold", "매수 기준값", 30)

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

if rsi[0] < script_params["threshold"]:
    buy(tag="RSI 과매도")

파라미터 활용 이점

  • 파라미터 기본값을 코드에 명시적으로 남길 수 있습니다.
  • 동일한 전략 코드를 여러 실행 컨텍스트에서 재사용할 수 있습니다.
  • 동일한 전략 코드로 다양한 설정을 테스트할 수 있습니다.

수정 경계

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

실행 시점의 script_params 변경은 전략 탭의 로컬 전략 스코프에서만 적용되며 cloud에 저장되지 않습니다.

Cloud parser cache field naming

커뮤니티 스크립트 업로드/수정 payload에서 parser cache를 함께 보낼 때의 canonical 필드 이름은 runtime_parser_result_json입니다. cloud 응답에서는 runtimeParserResultJson으로 내려옵니다.

예전 이름인 params_json, param_parsed_metadata_json, param_metadata_json은 더 이상 지원하지 않습니다. 새 연동에서는 runtime_parser_result_json만 사용해야 합니다.

예제: 파라미터화된 볼린저밴드 전략

version("1.0")
description("파라미터화된 볼린저밴드 전략")
param("bb_period", "볼린저밴드 기간", 20)
param("bb_std", "표준편차 배수", 2.0)
param("timeframe", "조회 타임프레임", "1D")

c = chart(script_params["timeframe"])
upper, mid, lower = ta.bbands(c.close, script_params["bb_period"], script_params["bb_std"])

c.line("Upper", upper, color="red")
c.line("Mid", mid, color="gray")
c.line("Lower", lower, color="green")

if c.close[0] < lower[0]:
    buy(tag="하단밴드 이탈 — 반등 기대")
elif c.close[0] > upper[0]:
    sell(tag="상단밴드 이탈 — 과열")
else:
    hold()

관련 문서