Search

IQAccount

개요

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 객체 — 종목 필터링 및 개별 종목 조회
IQEnvironmentaum, simulationMethod 등 시뮬레이션 환경 설정 조회