목차
개요
IQStock은 iQ 스튜디오 전략 코드에서 전역으로 접근 가능한 싱글톤 객체입니다.
Stock 객체가 종목 하나를 나타낸다면, IQStock은 그 종목들의 컨테이너(Container) 역할을 합니다. 전략 코드에서 종목 유니버스를 구성하거나 특정 종목 하나를 가져올 때 반드시 사용합니다.
메서드 목록
메서드 | 반환 타입 | 설명 |
filter(filterfn) | Stock[] | 조건 함수를 만족하는 종목 배열 반환 |
getStock(code) | Stock 또는 null | 특정 종목 코드의 Stock 객체 반환 |
getAllStock() | Stock[] | 모든 Stock 객체의 배열 반환 |
filter(filterfn)
원하는 종목을 필터링한 종목의 배열을 얻을 수 있습니다.
파라미터
파라미터 | 타입 | 설명 |
filterfn | function(stock: Stock) → boolean | Stock 객체를 파라미터로 받아 boolean값을 리턴하는 함수. true를 리턴한 종목은 결과 배열에 포함되고, false를 리턴한 종목은 제외됩니다. |
반환값
Stock 객체의 배열 (Stock[])
Sample
var universe0 = IQStock.filter(function(stock) {
return (stock.getMarketCapital() > 10000); // 시가총액이 100억 이상인 종목으로 필터링
});
logger.debug('universe0 size:' + universe0.length); // 필터링된 종목수를 출력함
JavaScript
복사
getStock(code)
code에 해당하는 종목 하나를 가져옵니다.
파라미터
파라미터 | 타입 | 설명 |
code | string | [한국] A로 시작하며 단축코드 6자리. 예) 삼성전자: A005930 [미국] 종목 Symbol. 예) 애플: AAPL |
반환값
code에 해당하는 Stock 객체. 해당하는 코드가 없으면 null.
주의: 반환값이 null일 수 있으므로 반드시 null 체크 후 사용하세요.
Sample
var sse = IQStock.getStock('A005930');
if (sse == null)
logger.debug("종목이 없습니다.");
else
logger.debug('sse 종가:' + sse.getClose());
JavaScript
복사
getAllStock()
모든 Stock 객체의 배열을 리턴합니다.
파라미터
없음.
반환값
모든 Stock 객체의 배열 (Stock[])
주의: 한국·미국 전체 종목이 포함되므로 배열 크기가 매우 클 수 있습니다. 대부분의 경우 filter()로 유니버스를 먼저 구성하는 것이 효율적입니다.
Sample
var stocks = IQStock.getAllStock();
logger.debug("all stocks size: " + stocks.length);
JavaScript
복사
활용 패턴
패턴 1: 유니버스 구성 → 스코어 계산 → 랭킹
iQ 스튜디오 퀀트 전략의 가장 일반적인 패턴입니다.
// Step 1: 유니버스 구성
var universe = IQStock.filter(function(stock) {
return stock.market === 1 // KOSPI
&& !stock.isETF // ETF 제외
&& stock.isListed() // 상장 중
&& stock.manage === 0 // 관리종목 아님
&& stock.getMarketCapital() > 50000; // 시가총액 500억 이상
});
// Step 2: 각 종목에 팩터 스코어 부여
for (var i = 0; i < universe.length; i++) {
var stock = universe[i];
var per = stock.getPER();
if (per > 0) {
stock.setScore('per', per);
}
}
// Step 3: 랭킹 기반으로 상위 종목 출력
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 <= 20) {
logger.debug('[저PER 상위] ' + stock.name + ' PER: ' + stock.getScore('per'));
}
}
}
JavaScript
복사
패턴 2: 특정 종목 단건 조회
var benchmark = IQStock.getStock('A005930'); // 삼성전자
if (benchmark != null) {
var ret20 = (benchmark.getAdjClose() - benchmark.getAdjClose(20)) / benchmark.getAdjClose(20);
logger.debug('삼성전자 20일 수익률: ' + (ret20 * 100).toFixed(2) + '%');
}
JavaScript
복사
패턴 3: 섹터별 필터링
// KOSDAQ 반도체 종목 (sector 코드 Q159)
var semiUniverse = IQStock.filter(function(stock) {
return stock.market === 0 && stock.sector === 'Q159';
});
logger.debug('KOSDAQ 반도체 종목 수: ' + semiUniverse.length);
JavaScript
복사
관련 API
•
Stock 객체 — 개별 종목의 가격, 재무, 기술적 지표 등 상세 데이터 조회
•
RankOrder.ascending / RankOrder.descending — Stock.getRank() 함수의 정렬 방향 상수
