개요
Stock 객체는 주식 종목 하나를 나타내는 iQ 스튜디오의 핵심 객체입니다.
한국 거래소(KOSPI/KOSDAQ)의 일반 주식, ETF, 리츠, 인프라 펀드와 미국 주식(NASDAQ, NYSE 등)을 모두 동일한 인터페이스로 다룹니다.
// 삼성전자 종목 객체 가져오기 (IQStock 모듈 사용)
var stock = IQStock.getStock('A005930');
logger.debug('code: ' + stock.code + ', name: ' + stock.name);
JavaScript
복사
목차
index 파라미터 공통 설명
가격·거래 데이터 함수 대부분은 index 파라미터를 받습니다.
index 값 | 의미 |
0 (기본값, 생략 가능) | 당일 데이터 |
1 | 1 거래일 전 (어제) |
2 | 2 거래일 전 |
N | N 거래일 전 |
중요: 기본으로 로드되는 과거 데이터 범위를 초과하면 loadPrevData(year, month, day) 함수로 미리 데이터를 불러와야 합니다.
재무 데이터 index 파라미터 공통 설명
재무(Fundamental) 함수의 index는 거래일이 아닌 분기 기준입니다.
index 값 | 의미 |
0 (기본값, 생략 가능) | 최신 공시 분기 |
1 | 1분기 전 |
N | N분기 전 |
1. 속성 (Properties)
속성은 함수 호출 없이 직접 접근하는 읽기 전용 값입니다.
code
구분 | 설명 |
한국 | A로 시작하는 6자리 종목 코드 (예: A005930) |
미국 | 알파벳 대문자 약어 Symbol (예: AAPL) |
logger.debug(stock.code); // 'A005930'
JavaScript
복사
name
종목 이름 (한국어 또는 영문).
logger.debug(stock.name); // '삼성전자'
JavaScript
복사
isETF
값 | 의미 |
true | ETF 종목 |
false | 일반 종목 |
category
종목의 세부 유형 코드.
한국
값 | 유형 |
0 | 보통주 / 우선주 |
1 | ETF |
6 | 리츠 |
12 | 인프라 펀드 |
미국
값 | 유형 |
0 | Domestic Common Stock |
1 | ETF |
2 | Domestic Common Stock Primary Class |
3 | Domestic Common Stock Secondary Class |
4 | Domestic Preferred Stock |
5 | Domestic Stock Warrant |
6 | ADR Common Stock |
7 | ADR Common Stock Primary Class |
8 | ADR Common Stock Secondary Class |
9 | ADR Preferred Stock |
10 | ADR Stock Warrant |
11 | Canadian Common Stock |
12 | Canadian Common Stock Primary Class |
13 | Canadian Preferred Stock |
14 | Canadian Stock Warrant |
15 | CEF |
16 | ETD |
17 | ETN |
market
종목이 상장된 거래시장.
한국
값 | 시장 |
1 | KOSPI (거래소) |
0 | KOSDAQ |
미국
값 | 거래소 |
0 | NASDAQ |
1 | NYSE |
2 | NYSEARCA |
3 | NYSEMKT (아멕스) |
4 | BATS |
manage
관리 상태 코드 (비트 연산 허용, 한국만 해당; 미국은 항상 0)
비트값 | 상태 |
1 | 관리 |
2 | 투자유의 |
4 | 거래정지 |
8 | 정리매매 |
// 예: manage === 5 → 관리(1) + 거래정지(4) 동시 해당
if (stock.manage & 4) {
// 거래정지 종목 제외
}
JavaScript
복사
미국 종목은 모든 값이 0입니다.
basePrice
한국 기준가. 미국 종목은 항상 0.
capLevel
시가총액 구분 코드 (비트 연산 허용)
한국
비트값 | 구분 |
1 | 대형 |
2 | 중형 |
4 | 소형 |
8 | Kospi200 |
예: capLevel === 9 → 대형(1) + Kospi200(8)
미국 (비트 연산 미적용)
값 | 구분 |
1 | Nano |
2 | Micro |
3 | Small |
4 | Mid |
5 | Large |
6 | Mega |
sector
업종 분류 코드.
한국 — KOSPI 업종코드
코드 | 코드명 | 코드 | 코드명 |
S005 | 음식료 | S018 | 건설 |
S006 | 섬유의복 | S019 | 운수창고 |
S007 | 종이목재 | S020 | 통신 |
S008 | 화학 | S021 | 기타금융 |
S009 | 의약품 | S022 | 은행 |
S010 | 비금속광물 | S023 | 종합금융 |
S011 | 철강금속 | S024 | 증권 |
S012 | 기계 | S025 | 보험 |
S013 | 전기전자 | S026 | 서비스업 |
S014 | 의료정밀 | S027 | 기타제조업 |
S015 | 운수장비 | ||
S016 | 유통업 | ||
S017 | 전기가스 |
한국 — KOSDAQ 업종코드
코드 | 코드명 | 코드 | 코드명 |
Q012 | 기타서비스 | Q067 | 비금속 |
Q025 | 전기, 가스, 수도 | Q068 | 금속 |
Q026 | 건설 | Q070 | 기계, 장비 |
Q027 | 유통 | Q072 | 일반전기전자 |
Q028 | 숙박, 음식 | Q074 | 의료, 정밀기기 |
Q029 | 운송 | Q075 | 운송장비, 부품 |
Q031 | 금융 | Q077 | 기타제조 |
Q037 | 오락, 문화 | Q151 | 통신서비스 |
Q056 | 음식료, 담배 | Q152 | 방송서비스 |
Q058 | 섬유, 의류 | Q153 | 인터넷 |
Q062 | 종이, 목재 | Q154 | 디지털컨텐츠 |
Q063 | 출판, 매체복제 | Q155 | 소프트웨어 |
Q065 | 화학 | Q156 | 컴퓨터서비스 |
Q066 | 제약 | Q157 | 통신장비 |
Q158 | 정보기기 | ||
Q159 | 반도체 | ||
Q160 | IT부품 |
미국 — ICB (Industrial Classification Benchmark) Sector
Sector Name |
Energy |
Technology |
Financial Services |
Healthcare |
Industrials |
Consumer Cyclical |
Real Estate |
Basic Materials |
Consumer Defensive |
Communication Services |
Utilities |
2. 날짜 및 상장 정보
getDate(index)
N 거래일 전의 날짜를 반환합니다.
파라미터
파라미터 | 타입 | 설명 |
index | number | 거래일 기준 과거 일수. 기본값 0 (당일). index 파라미터 공통 설명 참조 |
반환값
string — 해당 거래일의 날짜 문자열
logger.debug('yesterday date: ' + stock.getDate(1)); // 전일 날짜
JavaScript
복사
isListed(index)
N 거래일 전 기준 해당 종목의 상장 여부를 반환합니다.
파라미터
파라미터 | 타입 | 설명 |
index | number | 거래일 기준 과거 일수. 기본값 0 (당일). index 파라미터 공통 설명 참조 |
반환값
boolean — true: 상장 중, false: 상장 아님
if (stock.isListed()) {
logger.debug(stock.code + ': ' + stock.name + ' 종목은 상장 중입니다.');
}
JavaScript
복사
3. 가격 데이터
모든 함수의 파라미터: index (거래일 기준 과거 일수, 기본값 0)
수정주가 (권리락·배당 등을 반영한 가격)
함수 | 설명 |
getAdjClose(index) | 수정 종가 |
getAdjOpen(index) | 수정 시가 |
getAdjHigh(index) | 수정 고가 |
getAdjLow(index) | 수정 저가 |
logger.debug('today adj close: ' + stock.getAdjClose());
logger.debug('yesterday adj close: ' + stock.getAdjClose(1));
JavaScript
복사
원시주가 (수정 미적용)
함수 | 설명 |
getClose(index) | 종가 |
getOpen(index) | 시가 |
getHigh(index) | 고가 |
getLow(index) | 저가 |
logger.debug('today close: ' + stock.getClose());
logger.debug('yesterday close: ' + stock.getClose(1));
JavaScript
복사
4. 거래량 및 거래대금
함수 | 설명 | 단위 |
getMarketCapital(index) | 시가총액 | 백만원 / 백만달러 |
getNoOfShare(index) | 상장 주식수 | 주 |
getNoOfShareExpect(index) | 상장예정 주식수 | 주 |
getTradingVolume(index) | 거래량 | 주 |
getTradingValue(index) | 거래대금 | 백만원 / 백만달러 |
5. 투자자별 매매 데이터
모두 순매수 기준 (+ = 순매수, - = 순매도)
미국 종목에는 해당 없음
함수 | 설명 | 단위 |
getTradingVolumeFrgn(index) | 외국인(등록+비등록) 순매수 거래량 | 주 |
getTradingValueFrgn(index) | 외국인(등록+비등록) 순매수 거래대금 | 백만원 |
getTradingVolumeInst(index) | 기관합계 순매수 거래량 | 주 |
getTradingValueInst(index) | 기관합계 순매수 거래대금 | 백만원 |
getTradingVolumeIndv(index) | 개인 순매수 거래량 | 주 |
getTradingValueIndv(index) | 개인 순매수 거래대금 | 백만원 |
// 외국인 순매수 강도 판단 예시
if (stock.getTradingVolumeFrgn() > 0) {
logger.debug(stock.name + ': 외국인 순매수');
}
JavaScript
복사
6. 재무 데이터 (Fundamental)
index는 분기 기준: 0 = 최신 분기, 1 = 1분기 전
단위: 천원 / 천달러 (별도 표기 없는 경우)
재무상태표 (Balance Sheet)
함수 | 설명 |
getFundamentalTotalAsset(index) | 자산총계 |
getFundamentalCurrentAsset(index) | 유동자산 |
getFundamentalInventoryAsset(index) | 재고자산 |
getFundamentalTradeReceivable(index) | 매출채권 및 기타채권 |
getFundamentalQuickAsset(index) | 당좌자산 |
getFundamentalCashAsset(index) | 현금 및 현금성 자산 |
getFundamentalNonLiquidAsset(index) | 비유동자산 |
getFundamentalLTReceivable(index) | 장기매출채권 및 기타채권 |
getFundamentalTotalLiability(index) | 부채총계 |
getFundamentalCurrentLiability(index) | 유동부채 |
getFundamentalNetLiability(index) | 순부채 |
getFundamentalNonCurrentLiability(index) | 비유동부채 |
getFundamentalLTBorrow(index) | 장기차입금 |
getFundamentalLTTradePayable(index) | 장기매입채무 및 기타채무 |
getFundamentalTotalEquity(index) | 자본총계 |
getFundamentalCapitalStock(index) | 자본금 |
getFundamentalCapitalSurplus(index) | 자본잉여금 |
getFundamentalRetainedEarn(index) | 이익잉여금 |
getFundamentalEquity_ownersOfParent(index) | 지배기업주주지분 자본총계 |
logger.debug('자산총계: ' + stock.getFundamentalTotalAsset());
logger.debug('유동자산: ' + stock.getFundamentalCurrentAsset());
JavaScript
복사
손익계산서 (Income Statement)
함수 | 설명 |
getFundamentalRevenue(index) | 매출액 |
getFundamentalSalesCost(index) | 매출원가 |
getFundamentalGrossProfit(index) | 매출총이익 (매출원가 없는 종목은 0 반환) |
getFundamentalSellingExpense(index) | 판매비와 관리비 |
getFundamentalOperatingIncome(index) | 영업이익 |
getFundamentalInterestIncome(index) | 이자수익 |
getFundamentalInterestExpense(index) | 이자비용 |
getFundamentalNetInterestExpense(index) | 순이자비용 |
getFundamentalDepreciationCost(index) | 감가상각비 (판관비 기준) |
getFundamentalIncomeTax(index) | 법인세비용 |
getFundamentalEBT(index) | 법인세전 당기순이익 (EBT) |
getFundamentalNetProfit(index) | 당기순이익 |
getFundamentalProfit_ownersOfParent(index) | 지배기업주주지분 당기순이익 |
getFundamentalRnDExpense(index) | 연구개발비 |
현금흐름표 (Cash Flow Statement)
함수 | 설명 |
getFundamentalOperatingCashFlow(index) | 영업활동으로 인한 현금흐름 |
getFundamentalInvestingCashFlow(index) | 투자활동으로 인한 현금흐름 |
getFundamentalFinancingCashFlow(index) | 재무활동으로 인한 현금흐름 |
getFundamentalCAPEX(index) | 자본적지출 (CAPEX) |
파생 재무지표
함수 | 설명 | 비고 |
getFundamentalEBITDA(index) | EBITDA | |
getFundamentalEBIT(index) | EBIT | |
getFundamentalEV(index) | EV (기업가치) | |
getFundamentalDividend(index) | 최근 4분기 합계 배당액 (TTM) | 단위: 천원/천달러 |
// 간단한 부채비율 계산 예시
var debtRatio = stock.getFundamentalTotalLiability() / stock.getFundamentalTotalEquity();
logger.debug('부채비율: ' + debtRatio.toFixed(2));
JavaScript
복사
7. 기술적 지표 (Technical Indicators)
모든 기술적 지표는 당일 기준으로 계산됩니다.
오류 발생 시 -99999999.0 반환.
단순 지표
함수 | 설명 | 파라미터 |
getMA(period) | 이동평균 (MA) | period: 기간 (일) |
getEMA(period) | 지수이동평균 (EMA) | period: 기간 (일) |
getWMA(period) | 가중이동평균 (WMA) | period: 기간 (일) |
getATR(period) | Average True Range (ATR) | period: 기간 (일) |
getADX(period) | Average Directional Index (ADX) | period: 기간 (일) |
getCCI(period) | Commodity Channel Index (CCI) | period: 기간 (일) |
getRSI(period) | Relative Strength Index (RSI) | period: 기간 (일) |
getWilliamsR(period) | Williams %R | period: 기간 (일) |
getTrueRange() | True Range | 없음 |
getOBV() | On Balance Volume (OBV) | 없음 |
logger.debug('MA(20): ' + stock.getMA(20));
logger.debug('RSI(14): ' + stock.getRSI(14));
logger.debug('ATR(14): ' + stock.getATR(14));
JavaScript
복사
복합 지표 (JSON 반환)
getBollingerBand(period, devUp, devDown)
볼린저 밴드 값을 JSON 형태로 반환합니다.
파라미터
파라미터 | 타입 | 설명 |
period | number | 기간 (일) |
devUp | number | 상위 밴드 표준편차 배수 |
devDown | number | 하위 밴드 표준편차 배수 |
반환값 object — { upper: number, middle: number, lower: number } / 오류 시 -99999999.0
var bb = stock.getBollingerBand(20, 2, 2);
logger.debug('Bollinger: ' + JSON.stringify(bb));
// 예: {"upper": 27719.57, "middle": 27468.5, "lower": 27217.47}
// 상단 밴드 접근
var upperBand = bb.upper;
JavaScript
복사
getMACD(fast, slow, signal)
MACD 값을 JSON 형태로 반환합니다.
파라미터
파라미터 | 타입 | 설명 |
fast | number | 단기 이동평균일 |
slow | number | 장기 이동평균일 |
signal | number | 시그널 이동평균일 |
반환값 object — { macd: number, signal: number, hist: number } / 오류 시 -99999999.0
var macd = stock.getMACD(12, 26, 9);
logger.debug('MACD: ' + JSON.stringify(macd));
// 예: {"macd": 117.3, "signal": 128.1, "hist": -10.8}
// MACD 히스토그램 접근
var histogram = macd.hist;
JavaScript
복사
getStochastic(fastK, slowK, slowD)
스토캐스틱 값을 JSON 형태로 반환합니다.
파라미터
파라미터 | 타입 | 설명 |
fastK | number | fastK 이동평균일 |
slowK | number | slowK 이동평균일 |
slowD | number | slowD 이동평균일 |
반환값 object — { slowK: number, slowD: number } / 오류 시 -99999999.0
var stoch = stock.getStochastic(5, 3, 3);
logger.debug('Stochastic: ' + JSON.stringify(stoch));
// 예: {"slowK": 71.75, "slowD": 56.58}
JavaScript
복사
getParabolic(acc, max)
Parabolic SAR 값을 반환합니다.
파라미터
파라미터 | 타입 | 설명 |
acc | number | 가속변수 |
max | number | 가속변수의 최대값 |
반환값 number — 당일 Parabolic SAR 값 / 오류 시 -99999999.0
logger.debug('Parabolic SAR: ' + stock.getParabolic(0.02, 0.2));
JavaScript
복사
8. 밸류에이션 지표
당분기 재무제표 기준으로 연율화한 결과.
오류 발생 시 -1 반환.
함수 | 설명 | 단위 |
getPER() | Price Earnings Ratio | 배 |
getPBR() | Price Book-value Ratio | 배 |
getROA() | Return on Assets | % |
getROE() | Return on Equity | % |
getEPS() | Earnings Per Share (당분기 재무제표 기준) | 원/달러 |
logger.debug('PER: ' + stock.getPER());
logger.debug('PBR: ' + stock.getPBR());
logger.debug('ROE: ' + stock.getROE());
logger.debug('EPS: ' + stock.getEPS());
JavaScript
복사
9. 배당 관련
함수 | 설명 | 단위 |
getDividendYieldRatio() | 배당수익률 (당분기 재무제표 기준) | % |
getDividendPayoutRatio() | 배당성향 (배당액/당기순이익, 당분기 기준) | % |
logger.debug('배당수익률: ' + stock.getDividendYieldRatio() + '%');
logger.debug('배당성향: ' + stock.getDividendPayoutRatio() + '%');
JavaScript
복사
10. 유틸리티 함수
loadPrevData(year, month, day)
시뮬레이션 시작일 이전의 과거 데이터를 명시적으로 미리 로드합니다.
기본적으로 시뮬레이션 시작일~종료일 범위의 데이터만 로드되므로, 그 이전 데이터가 필요한 기술적 지표 계산 시 이 함수를 호출해야 합니다.
파라미터
파라미터 | 타입 | 설명 |
year | number | 연 단위 (예: 1 = 1년 전) |
month | number | 월 단위 (예: 0 = 0개월) |
day | number | 일 단위 (예: 60 = 60일 전) |
// 60일 전 데이터 로드 (예: 60일 MA 계산을 위해)
stock.loadPrevData(0, 0, 60);
// 1년 전 데이터 로드
stock.loadPrevData(1, 0, 0);
JavaScript
복사
setScore(key, value)
종목에 사용자가 정의한 값을 저장합니다.
여러 종목을 비교하거나 랭킹 계산 시 활용합니다.
파라미터
파라미터 | 타입 | 설명 |
key | string | 저장할 값의 식별 키 |
value | number \| object | 저장할 값 |
var sse = IQStock.getStock('A005930');
sse.setScore('per', sse.getPER());
var hynix = IQStock.getStock('A000660');
hynix.setScore('per', hynix.getPER());
JavaScript
복사
getScore(key)
setScore로 저장한 값을 가져옵니다.
파라미터
파라미터 | 타입 | 설명 |
key | string | 저장 시 사용한 식별 키 |
반환값
number | object — key에 해당하는 저장된 값
var perScore = IQStock.getStock('A005930').getScore('per');
logger.debug('삼성전자 PER score: ' + perScore);
JavaScript
복사
getRank(universe, key[, order])
모집단(universe) 내에서 특정 지표를 기준으로 해당 종목의 랭킹 순위를 반환합니다.
파라미터
파라미터 | 타입 | 설명 |
universe | Stock[] | 랭킹 계산 대상 종목 배열 |
key | string | 랭킹 기준 지표명 (예: "per") |
order | RankOrder (선택) | RankOrder.descending (내림차순, 기본값) 또는 RankOrder.ascending (오름차순) |
반환값
number — 해당 종목의 랭킹 순위 (정수)
// 유니버스 내에서 PER 오름차순 랭킹 (낮을수록 1위)
var stock = universe[i];
stock.setScore('per', stock.getPER());
logger.debug('PER 랭킹: ' + stock.getRank(universe, 'per', RankOrder.ascending));
JavaScript
복사
종합 예시: PER 기반 저PER 종목 필터링
// universe: Stock 객체 배열
for (var i = 0; i < universe.length; i++) {
var stock = universe[i];
// 상장 중이 아닌 종목 제외
if (!stock.isListed()) continue;
// 관리·거래정지 종목 제외 (한국)
if (stock.manage & 6) continue;
// 유효한 PER만 저장
var per = stock.getPER();
if (per > 0) {
stock.setScore('per', per);
}
}
// 낮은 PER 상위 10개 출력
for (var i = 0; i < universe.length; i++) {
var stock = universe[i];
if (stock.getScore('per')) {
var rank = stock.getRank(universe, 'per', RankOrder.ascending);
if (rank <= 10) {
logger.debug(stock.name + ' PER: ' + stock.getScore('per') + ' | 랭킹: ' + rank);
}
}
}
JavaScript
복사
오류 처리 규칙
상황 | 반환값 |
기술적 지표 계산 오류 | -99999999.0 |
밸류에이션 지표 계산 오류 | -1 |
미국 종목에서 한국 전용 속성 | 0 |
