Search

Account

목차

개요

Account시뮬레이션 계좌 하나를 나타내는 객체입니다.
현재는 주식 종목만을 대상으로 하므로 파생상품이나 제3시장 계좌 등을 별도 구분하지 않습니다. 기본 계좌는 시뮬레이션 시작 시 자동으로 생성되며, IQAccount.getDefaultAccount()로 가져올 수 있습니다. 필요하다면 IQAccount.addAccount()를 통해 여러 계좌를 추가 생성할 수 있습니다.
// 기본 계좌 가져오기 var acc = IQAccount.getDefaultAccount(); logger.debug('계좌번호: ' + acc.accountNum); logger.debug('현금잔고: ' + IQUtil.getNumberWithCommas(acc.cash.toFixed(0)));
JavaScript
복사

1. 속성 (Properties)

속성은 함수 호출 없이 직접 접근하는 읽기 전용 값입니다.

accountNum

계좌번호. 기본 계좌는 시스템이 내부적으로 부여합니다.
logger.debug(IQAccount.getDefaultAccount().accountNum);
JavaScript
복사

accountName

계좌 이름.
logger.debug(IQAccount.getDefaultAccount().accountName);
JavaScript
복사

cash

현재 현금 잔고.
매수 시 차감되고, 매도 시 증가합니다. 수수료·거래세도 이 잔고에서 처리됩니다.
var acc = IQAccount.getDefaultAccount(); logger.debug('현금잔고: ' + IQUtil.getNumberWithCommas(acc.cash.toFixed(0)));
JavaScript
복사

aum

시뮬레이션 시작 시 설정된 초기 예수금 (AUM, Assets Under Management).
시뮬레이션 진행 중 cash는 매매에 따라 변동하지만, aum은 초깃값을 그대로 유지합니다.
var acc = IQAccount.getDefaultAccount(); logger.debug('초기 예수금: ' + IQUtil.getNumberWithCommas(acc.aum.toFixed(0)));
JavaScript
복사

2. buy(code, quantity) — 매수

계좌에 종목을 매수 주문합니다.
IQEnvironment.simulationMethod 설정에 따라 당일 종가 또는 다음 거래일 시가·평균가로 체결됩니다.

파라미터

파라미터
타입
설명
code
string
[한국] A로 시작하는 6자리 종목코드. 예) A005930 [미국] 종목 Symbol. 예) AAPL
quantity
number
매수 수량 (주)

반환값

없음.

주의사항

• 현금 잔고(cash)가 부족하면 매수 주문이 실행되지 않습니다. • 분산투자 목적의 여러 종목 매매는 Basket 객체 사용을 권장합니다.

Sample

var acc = IQAccount.getDefaultAccount(); acc.buy('A005930', 10); // 삼성전자 10주 매수
JavaScript
복사

3. sell(code, quantity) — 매도

계좌에 종목을 매도 주문합니다.
IQEnvironment.simulationMethod 설정에 따라 당일 종가 또는 다음 거래일 시가·평균가로 체결됩니다.

파라미터

파라미터
타입
설명
code
string
[한국] A로 시작하는 6자리 종목코드. 예) A005930 [미국] 종목 Symbol. 예) AAPL
quantity
number
매도 수량 (주)

반환값

없음.

주의사항

• 보유 수량을 초과하는 수량으로 매도 주문을 낼 수 없습니다.

Sample

var acc = IQAccount.getDefaultAccount(); acc.sell('A005930', 5); // 삼성전자 5주 매도
JavaScript
복사

4. getTotalEquity() — 계좌 평가액

현금 잔고와 보유 종목의 평가액을 합산하여 계좌 총 평가액을 반환합니다.

파라미터

없음.

반환값

number — 현금 잔고 + 보유 종목 시가 평가액의 합계

Sample

var acc = IQAccount.getDefaultAccount(); logger.debug('계좌 총 평가액: ' + IQUtil.getNumberWithCommas(acc.getTotalEquity().toFixed(0)));
JavaScript
복사

5. getEggs() — 보유 잔고 조회

계좌에 보유 중인 종목 잔고 목록을 반환합니다.

파라미터

없음.

반환값

Egg[]Egg 객체의 배열
보유 종목이 없으면 빈 배열([])을 반환합니다.

Sample

var acc = IQAccount.getDefaultAccount(); var eggs = acc.getEggs(); for (var i = 0; i < eggs.length; i++) { var egg = eggs[i]; logger.debug(i + '번째 보유종목 — 코드: ' + egg.code + ', 수량: ' + egg.quantity + ', 평균매수가: ' + IQUtil.getNumberWithCommas(egg.mean.toFixed(0))); }
JavaScript
복사

6. Egg 객체

getEggs()가 반환하는 배열의 개별 원소입니다. 보유 종목 한 건을 나타냅니다.
속성
타입
설명
code
string
종목 코드 (한국: A로 시작하는 6자리, 미국: Symbol)
quantity
number
보유 수량 (주)
mean
number
평균 매수 가격 (원/달러)
var eggs = IQAccount.getDefaultAccount().getEggs(); for (var i = 0; i < eggs.length; i++) { var egg = eggs[i]; var stock = IQStock.getStock(egg.code); if (stock != null) { var currentPrice = stock.getClose(); var gainRate = (currentPrice - egg.mean) / egg.mean * 100; logger.debug(stock.name + ' | 수량: ' + egg.quantity + ' | 평균가: ' + IQUtil.getNumberWithCommas(egg.mean.toFixed(0)) + ' | 현재가: ' + IQUtil.getNumberWithCommas(currentPrice.toFixed(0)) + ' | 수익률: ' + gainRate.toFixed(2) + '%'); } }
JavaScript
복사

7. 활용 패턴

패턴 1: 단순 매수/매도

특정 종목을 직접 매수·매도하는 가장 기본적인 패턴입니다.
var acc = IQAccount.getDefaultAccount(); function onDayClose(now) { var sse = IQStock.getStock('A005930'); // 삼성전자 if (sse == null) return; // 단순 조건 매수: 현재가가 20일 이동평균 위에 있을 때 if (sse.getClose() > sse.getMA(20) && acc.cash > sse.getClose() * 10) { acc.buy('A005930', 10); } // 단순 조건 매도: 현재가가 20일 이동평균 아래로 내려왔을 때 if (sse.getClose() < sse.getMA(20)) { acc.sell('A005930', 10); } }
JavaScript
복사

패턴 2: 현금 비중 기반 매수 수량 계산

현금의 일정 비율만 투자하도록 수량을 계산합니다.
주의: 수수료·거래세를 고려해 cash의 100%를 매수에 사용하면 잔고 부족이 발생할 수 있습니다. 항상 5% 이상의 현금을 확보하도록 비중을 설계하세요.
var acc = IQAccount.getDefaultAccount(); function calcBuyQuantity(stock, weightRatio) { var budget = acc.cash * weightRatio; // 현금의 weightRatio 비율만큼 예산 할당 var price = stock.getClose(); if (price <= 0) return 0; return Math.floor(budget / price); // 매수 가능 수량 (소수점 버림) } function onDayClose(now) { var sse = IQStock.getStock('A005930'); if (sse == null || !sse.isListed()) return; var qty = calcBuyQuantity(sse, 0.3); // 현금의 30%만큼 매수 if (qty > 0) { acc.buy('A005930', qty); logger.debug('삼성전자 매수: ' + qty + '주'); } }
JavaScript
복사

패턴 3: 보유 잔고 기반 전량 매도

보유 중인 모든 종목을 순회하며 조건에 따라 전량 매도합니다.
var acc = IQAccount.getDefaultAccount(); function onDayClose(now) { var eggs = acc.getEggs(); for (var i = 0; i < eggs.length; i++) { var egg = eggs[i]; var stock = IQStock.getStock(egg.code); if (stock == null) continue; // 보유 종목이 20일 이동평균 아래이면 전량 매도 if (stock.getClose() < stock.getMA(20)) { acc.sell(egg.code, egg.quantity); logger.debug(stock.name + ' 전량 매도: ' + egg.quantity + '주'); } } }
JavaScript
복사

패턴 4: 수익률 추적

계좌 전체의 누적 수익률을 계산합니다.
var acc = IQAccount.getDefaultAccount(); function onDayClose(now) { var totalEquity = acc.getTotalEquity(); var totalReturn = (totalEquity / acc.aum - 1) * 100; logger.debug('총 평가액: ' + IQUtil.getNumberWithCommas(totalEquity.toFixed(0)) + ' | 누적수익률: ' + totalReturn.toFixed(2) + '%'); }
JavaScript
복사

오류 처리 규칙

상황
동작
현금 부족 시 buy() 호출
매수 주문 미실행 (잔고 변화 없음)
보유 수량 초과 시 sell() 호출
매도 주문 미실행
보유 종목 없을 때 getEggs()
빈 배열 [] 반환

관련 API

IQAccount 객체 — 계좌 컨테이너. 기본 계좌 조회, 계좌 추가, 전체 평가액 합산
IQStock 객체 — 종목 필터링 및 개별 종목 조회
Stock 객체 — 개별 종목의 가격, 재무, 기술적 지표 데이터 조회