콘텐츠로 이동

var 네임스페이스

var는 전략 실행 사이에서 상태를 유지하기 위한 저장 영역입니다. 이벤트가 다시 들어와도 같은 전략/종목 범위 안에서 값을 이어서 사용할 수 있습니다.

핵심 동작

  • 미정의 속성 조회는 None을 반환합니다.
  • var.init(...)은 값이 아직 없을 때만 초기화합니다.
  • 실행 종료 시 to_dict()로 직렬화 가능한 값만 저장됩니다.
  • 저장 데이터 전체 크기는 전략×종목 기준 64KB 제한입니다.

기본 사용법

version("1.0")
description("연속 조건 카운터")

c = chart("1D")
rsi = ta.rsi(c.close, 14)

var.init(hit_count=0, peak_price=0.0)

if rsi[0] < 30:
    var.hit_count = var.hit_count + 1
else:
    var.hit_count = 0

var.peak_price = max(var.peak_price, c.close[0])

if var.hit_count >= 3:
    buy(tag=f"RSI 3회 연속 과매도, peak={var.peak_price:.0f}")
else:
    hold(tag=f"hit={var.hit_count}")

API

var.init(**kwargs)

var.init(count=0, flag=False, last_price=0.0)
  • 이미 값이 존재하면 덮어쓰지 않습니다.
  • 값이 None이거나 미정의일 때만 설정됩니다.

속성 읽기/쓰기

if var.last_signal is None:
    var.last_signal = "NONE"

if c.close[0] > c.close[1]:
    var.last_signal = "UP"

저장 가능한 타입

  • str, int, float, bool, None
  • 위 타입으로만 구성된 list, tuple, dict(str -> value)

저장 제외: - 함수, 클래스 인스턴스, DSL 내부 객체(TSeries/ScaleChart 등)

제한 사항

  • 크기 제한: 64KB 초과 시 저장이 거부되고 빈 상태로 처리될 수 있습니다.
  • 키는 문자열 속성명 형태로 사용합니다.
  • _로 시작하는 내부 속성은 저장 대상에서 제외됩니다.

var 리셋 시점

var에 저장된 상태는 다음 상황에서 초기화됩니다:

시점 설명
엔진 재시작 프로세스 메모리에만 유지되므로 재시작 시 소실
전략 스크립트 변경 스크립트 해시 변경으로 캐시 키가 달라져 이전 var 분리
모드 전환 (paper↔live) 엔진 상태 초기화에 포함
워밍업(bulk) 실행 워밍업 경로에서 var_data를 전달하지 않으므로 빈 상태로 시작

중요: var는 영속 스토리지에 저장되지 않습니다. 중요한 거래 상태는 position 등 영속 데이터를 사용하세요.

권장 패턴

  • 카운터: 연속 신호 횟수
  • 스위치: 진입/청산 상태 플래그
  • 기준값: 마지막 진입가, 최근 최고/최저

관련 문서