목차
개요
IQEnvironment는 iQ 스튜디오 전략 코드에서 전역으로 접근 가능한 싱글톤 환경 설정 객체입니다.
시뮬레이션의 초기 예수금, 수수료·세금, 시작·종료일, 매매 체결 방식 등 핵심 파라미터를 읽거나 설정할 수 있습니다. simulationMethod처럼 설정 변경이 필요한 속성은 initialize() 함수 안에서 설정하는 것이 권장됩니다. initialize() 함수는 기본 계좌가 생성된 직후에 호출됩니다.
function initialize() {
IQEnvironment.simulationMethod = SimulationMethod.normal; // 매매 방식 설정
logger.debug('초기 AUM: ' + IQUtil.getNumberWithCommas(IQEnvironment.aum.toFixed(0)));
}
JavaScript
복사
속성 목록
속성 | 타입 | 기본값 | 읽기/쓰기 | 설명 |
aum | number | 사용자 설정값 | 읽기 | 초기 예수금 (AUM) |
stockCommission | number | 0.0015 | 읽기/쓰기 | 주식 거래 수수료율 |
etfCommission | number | 0.0015 | 읽기/쓰기 | ETF 거래 수수료율 |
stockTax | number | 0.003 | 읽기/쓰기 | 증권 거래세율 |
simulationStart | Date | 사용자 설정값 | 읽기 | 시뮬레이션 시작일 |
simulationEnd | Date | 사용자 설정값 | 읽기 | 시뮬레이션 종료일 |
simulationMethod | SimulationMethod | SimulationMethod.normal | 읽기/쓰기 | 매매 체결 방식 |
aum
시뮬레이션 시작 시 사용자가 지정한 초기 예수금입니다. 기본 계좌(IQAccount.getDefaultAccount())의 초기 현금 잔고와 동일합니다.
Basket 생성 시 자산 배분 비율 계산의 기준값으로 주로 활용합니다.
function initialize() {
// AUM의 80%를 주식 바스켓, 20%를 채권 바스켓에 배분
var stock_port = new Basket(IQAccount.getDefaultAccount(), 20, IQEnvironment.aum * 0.8);
var bond_port = new Basket(IQAccount.getDefaultAccount(), 1, IQEnvironment.aum * 0.2);
}
JavaScript
복사
stockCommission
주식 거래 수수료율입니다. 기본값은 0.0015 (0.15%).
매수·매도 시 자동으로 차감됩니다. 전략에 따라 현실적인 수수료율로 조정할 수 있습니다.
function initialize() {
IQEnvironment.stockCommission = 0.00015; // 0.015%로 조정 (온라인 증권사 기준)
}
JavaScript
복사
etfCommission
ETF 거래 수수료율입니다. 기본값은 0.0015 (0.15%).
function initialize() {
IQEnvironment.etfCommission = 0.00015; // ETF 수수료 별도 설정
}
JavaScript
복사
stockTax
증권 거래세율입니다. 기본값은 0.003 (0.3%). 매도 시에만 부과됩니다.
한국 증권 거래세는 법 개정에 따라 변경될 수 있습니다. 시뮬레이션 기간에 맞는 세율을 적용하세요. (2025년 기준 코스피·코스닥 0.18%)
function initialize() {
IQEnvironment.stockTax = 0.0018; // 0.18%로 조정
}
JavaScript
복사
simulationStart / simulationEnd
시뮬레이션 시작일·종료일입니다. 타입은 JavaScript Date 객체입니다. 읽기 전용이며 iQ 스튜디오 설정 화면에서 지정합니다.
logger.debug('시뮬레이션 기간: '
+ IQEnvironment.simulationStart.toString()
+ ' ~ '
+ IQEnvironment.simulationEnd.toString());
JavaScript
복사
simulationMethod
매매 체결 방식을 결정합니다. 당일 장 마감 후 종목을 결정한다는 가정 하에 기본값은 SimulationMethod.normal(익일 시가)입니다.
SimulationMethod 상수
상수 | 체결 가격 | 설명 |
SimulationMethod.normal | 익일 시가 (기본값) | 당일 onDayClose() 종료 후 다음 거래일 시가로 체결 |
SimulationMethod.average | 익일 평균가 | 다음 거래일의 고가·저가·종가 평균으로 체결 |
SimulationMethod.day | 당일 종가 | 당일 장 마감과 동시에 체결된다고 가정. 이상적 시나리오 |
주의: SimulationMethod.day(당일 종가)는 실제로 달성하기 어려운 이상적 가정입니다. 실전 전략 검증 시 SimulationMethod.normal(익일 시가)을 사용하는 것이 더 현실적입니다.
function initialize() {
IQEnvironment.simulationMethod = SimulationMethod.normal; // 익일 시가 (기본값)
// IQEnvironment.simulationMethod = SimulationMethod.average; // 익일 평균가
// IQEnvironment.simulationMethod = SimulationMethod.day; // 당일 종가
}
JavaScript
복사
활용 패턴
패턴 1: 현실적 비용 설정
온라인 증권사 기준의 수수료와 현행 거래세를 반영합니다.
function initialize() {
IQEnvironment.stockCommission = 0.00015; // 0.015% (온라인 증권사 평균)
IQEnvironment.etfCommission = 0.00015;
IQEnvironment.stockTax = 0.0018; // 0.18% (2025년 기준)
IQEnvironment.simulationMethod = SimulationMethod.normal;
logger.debug('수수료: ' + (IQEnvironment.stockCommission * 100) + '%'
+ ' | 거래세: ' + (IQEnvironment.stockTax * 100) + '%'
+ ' | 초기AUM: ' + IQUtil.getNumberWithCommas(IQEnvironment.aum.toFixed(0)));
}
JavaScript
복사
패턴 2: 시뮬레이션 기간 확인 후 분기 처리
function initialize() {
var startYear = IQEnvironment.simulationStart.getFullYear();
logger.debug('시뮬레이션 시작 연도: ' + startYear);
}
JavaScript
복사
관련 API
•
Account 객체 — aum 속성과 연계되는 계좌 초기 잔고
•
IQAccount 객체 — 계좌 컨테이너
•
Basket 객체 — IQEnvironment.aum을 기반으로 초기 예산 설정
