개요
IQAccount는 iQ 스튜디오 전략 코드에서 전역으로 접근 가능한 싱글톤 객체입니다.
Account 객체가 계좌 하나를 나타낸다면, IQAccount는 그 계좌들의 컨테이너(Container) 역할을 합니다. 프로젝트가 시작되면 내부적으로 기본 계좌 하나가 자동 생성되며, IQAccount.getDefaultAccount()로 접근할 수 있습니다. 멀티 계좌 시뮬레이션이 필요하면 addAccount()로 계좌를 추가할 수 있습니다.
// 기본 계좌 가져오기
var acc = IQAccount.getDefaultAccount();
logger.debug('기본 계좌번호: ' + acc.accountNum);
logger.debug('총 평가액(전 계좌 합산): ' + IQUtil.getNumberWithCommas(IQAccount.totalEquity().toFixed(0)));
JavaScript
복사
메서드 목록
메서드 | 반환 타입 | 설명 |
addAccount(accountNum, accountName, balance) | Account | 새로운 계좌를 생성하여 추가 |
getDefaultAccount() | Account | 기본 계좌 반환 |
getAccount(accountNum) | Account 또는 null | 계좌번호로 계좌 반환 |
getAccountByName(accountName) | Account 또는 null | 계좌이름으로 계좌 반환 |
totalEquity() | number | 전체 계좌의 평가액 합산 |
속성
accounts
등록된 모든 Account 객체의 배열.
// 전체 계좌 순회
for (var i = 0; i < IQAccount.accounts.length; i++) {
var acc = IQAccount.accounts[i];
logger.debug(acc.accountName + ' 평가액: '
+ IQUtil.getNumberWithCommas(acc.getTotalEquity().toFixed(0)));
}
JavaScript
복사
addAccount(accountNum, accountName, balance)
새로운 계좌를 생성하고 IQAccount에 등록합니다.
여러 전략을 독립된 계좌로 분리하여 성과를 비교하거나, 자산군별로 별도 계좌를 운용할 때 사용합니다.
파라미터
파라미터 | 타입 | 설명 |
accountNum | string | 계좌번호. 고유한 식별자로 사용됩니다. |
accountName | string | 계좌 이름. |
balance | number | 초기 예수금 (원/달러 단위) |
반환값
생성된 Account 객체.
Sample
function initialize() {
// 각각 5천만원 예수금을 가진 두 개의 계좌 추가
IQAccount.addAccount('0000-0000-01', 'momentum_account', IQEnvironment.aum * 0.5);
IQAccount.addAccount('0000-0000-02', 'value_account', IQEnvironment.aum * 0.5);
}
JavaScript
복사
getDefaultAccount()
시뮬레이션 시작 시 자동으로 생성되는 기본 계좌를 반환합니다.
별도의 계좌를 추가하지 않은 경우, 이 계좌 하나만 사용됩니다.
파라미터
없음.
반환값
Account — 기본 계좌 객체
Sample
var acc = IQAccount.getDefaultAccount();
logger.debug('기본 계좌번호: ' + acc.accountNum);
logger.debug('현금잔고: ' + IQUtil.getNumberWithCommas(acc.cash.toFixed(0)));
JavaScript
복사
getAccount(accountNum)
accountNum에 해당하는 계좌 하나를 반환합니다.
파라미터
파라미터 | 타입 | 설명 |
accountNum | string | 조회할 계좌번호 |
반환값
해당 계좌번호의 Account 객체. 존재하지 않으면 null.
주의: 반환값이 null일 수 있으므로 반드시 null 체크 후 사용하세요.
Sample
var secondAcc = IQAccount.getAccount('0000-0000-01');
if (secondAcc == null) {
logger.debug('해당 계좌가 없습니다.');
} else {
logger.debug('계좌 평가액: ' + IQUtil.getNumberWithCommas(secondAcc.getTotalEquity().toFixed(0)));
}
JavaScript
복사
getAccountByName(accountName)
accountName에 해당하는 계좌 하나를 반환합니다.
파라미터
파라미터 | 타입 | 설명 |
accountName | string | 조회할 계좌 이름 |
반환값
해당 이름의 Account 객체. 존재하지 않으면 null.
주의: 반환값이 null일 수 있으므로 반드시 null 체크 후 사용하세요.
Sample
var valueAcc = IQAccount.getAccountByName('value_account');
if (valueAcc != null) {
logger.debug('가치계좌 현금: ' + IQUtil.getNumberWithCommas(valueAcc.cash.toFixed(0)));
}
JavaScript
복사
totalEquity()
IQAccount에 등록된 모든 계좌의 총 평가액을 합산하여 반환합니다.
단일 계좌 전략에서는 getDefaultAccount().getTotalEquity()와 동일한 결과를 반환합니다. 멀티 계좌 전략에서 전체 포트폴리오의 성과를 측정할 때 사용합니다.
파라미터
없음.
반환값
number — 모든 계좌의 getTotalEquity() 합산값
Sample
function onDayClose(now) {
var total = IQAccount.totalEquity();
var totalReturn = (total / IQEnvironment.aum - 1) * 100;
logger.debug('전체 포트폴리오 평가액: ' + IQUtil.getNumberWithCommas(total.toFixed(0))
+ ' | 누적수익률: ' + totalReturn.toFixed(2) + '%');
}
JavaScript
복사
활용 패턴
패턴 1: 단일 계좌 기본 운용 (가장 일반적)
var acc;
function initialize() {
acc = IQAccount.getDefaultAccount();
}
function onDayClose(now) {
logger.debug('현금: ' + IQUtil.getNumberWithCommas(acc.cash.toFixed(0))
+ ' | 총 평가액: ' + IQUtil.getNumberWithCommas(acc.getTotalEquity().toFixed(0)));
}
JavaScript
복사
패턴 2: 멀티 계좌 — 전략별 분리 운용
서로 다른 전략을 독립 계좌로 운용하고 성과를 비교합니다.
var momentumAcc, valueAcc;
var splitRatio = 0.5; // 각 계좌 50%씩 배분
function initialize() {
momentumAcc = IQAccount.addAccount('0000-0000-01', 'momentum', IQEnvironment.aum * splitRatio);
valueAcc = IQAccount.addAccount('0000-0000-02', 'value', IQEnvironment.aum * splitRatio);
}
function onDayClose(now) {
// 전략별 수익률 비교
var mReturn = (momentumAcc.getTotalEquity() / (IQEnvironment.aum * splitRatio) - 1) * 100;
var vReturn = (valueAcc.getTotalEquity() / (IQEnvironment.aum * splitRatio) - 1) * 100;
logger.debug('[모멘텀] ' + mReturn.toFixed(2) + '% | [가치] ' + vReturn.toFixed(2) + '%');
logger.debug('[전체합산] ' + IQUtil.getNumberWithCommas(IQAccount.totalEquity().toFixed(0)));
}
JavaScript
복사
패턴 3: IQEnvironment.aum을 활용한 계좌 초기 예수금 배분
function initialize() {
var totalAum = IQEnvironment.aum;
// 주식 80%, 채권(인버스 ETF) 20%
IQAccount.addAccount('stock-acc', '주식계좌', totalAum * 0.8);
IQAccount.addAccount('bond-acc', '채권계좌', totalAum * 0.2);
}
JavaScript
복사
관련 API
•
Account 객체 — 개별 계좌의 매수/매도/잔고/평가액
•
IQStock 객체 — 종목 필터링 및 개별 종목 조회
•
IQEnvironment — aum, simulationMethod 등 시뮬레이션 환경 설정 조회
