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)¶
- 이미 값이 존재하면 덮어쓰지 않습니다.
- 값이
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등 영속 데이터를 사용하세요.
권장 패턴¶
- 카운터: 연속 신호 횟수
- 스위치: 진입/청산 상태 플래그
- 기준값: 마지막 진입가, 최근 최고/최저