목차
개요
IQGraph는 iQ 스튜디오 전략 코드에서 전역으로 접근 가능한 싱글톤 객체입니다.
Graph 객체가 그래프 한 개를 나타낸다면, IQGraph는 그 그래프들의 컨테이너(Container) 역할을 합니다. createGraph(graphId)로 새로운 그래프를 생성하고, getGraph(graphId)로 생성된 그래프에 재접근할 수 있습니다.
// initialize()에서 생성, onDayClose()에서 재사용하는 전형적인 패턴
function initialize() {
IQGraph.createGraph('KOSPI200'); // 생성
}
function onDayClose(now) {
var graph = IQGraph.getGraph('KOSPI200'); // 재접근
graph.plot(42.5);
}
JavaScript
복사
메서드 목록
메서드 | 반환 타입 | 설명 |
createGraph(graphId) | Graph | 새로운 Graph 객체를 생성하여 등록 |
getGraph(graphId) | Graph 또는 null | graphId에 해당하는 Graph 객체 반환 |
createGraph(graphId)
새로운 Graph 객체를 생성하고 IQGraph에 등록합니다.
graphId는 시뮬레이션 결과 화면의 범례(legend)에 표시되는 이름이기도 합니다. 생성된 Graph 객체를 변수에 저장해두면 매번 getGraph()로 조회할 필요 없이 바로 사용할 수 있습니다.
파라미터
파라미터 | 타입 | 설명 |
graphId | string | 그래프의 고유 ID이자 화면에 표시될 이름 |
반환값
생성된 Graph 객체.
Sample
function initialize() {
IQGraph.createGraph('KOSPI200 수익률(%)');
IQGraph.createGraph('KOSDAQ 수익률(%)');
}
JavaScript
복사
getGraph(graphId)
graphId에 해당하는 Graph 객체를 반환합니다.
createGraph() 호출 시 반환된 객체를 변수에 이미 저장한 경우라면 이 함수를 다시 호출할 필요가 없습니다. 변수에 저장하지 않았거나 다른 함수 스코프에서 접근해야 할 때 사용합니다.
파라미터
파라미터 | 타입 | 설명 |
graphId | string | 조회할 그래프의 ID (createGraph() 시 지정한 이름) |
반환값
해당 graphId의 Graph 객체. 존재하지 않으면 null.
주의: 반환값이 null일 수 있으므로, createGraph()보다 먼저 getGraph()를 호출하지 않도록 하세요.
Sample
function initialize() {
IQGraph.createGraph('kospi200');
}
function onDayClose(now) {
var graph = IQGraph.getGraph('kospi200'); // 생성된 Graph 객체 재접근
if (graph == null) return;
graph.plot(100.0);
}
JavaScript
복사
활용 패턴
패턴 1: 변수에 저장하여 재사용 (권장)
createGraph()의 반환값을 전역 변수에 저장해두면 getGraph() 호출 없이 바로 사용할 수 있어 코드가 간결해집니다.
var benchGraph;
var initClose = 0;
function initialize() {
// 반환된 Graph 객체를 변수에 저장
benchGraph = IQGraph.createGraph('KOSPI200 누적수익률(%)');
}
function onDayClose(now) {
var kospi200 = IQIndex.getIndex('101');
if (initClose === 0) initClose = kospi200.getClose();
benchGraph.plot((kospi200.getClose() / initClose - 1) * 100);
}
JavaScript
복사
패턴 2: getGraph()로 별도 함수에서 접근
그래프 그리기 로직을 별도 함수로 분리할 때 사용합니다.
function initialize() {
IQGraph.createGraph('RSI(14)');
}
function plotRSI(stock) {
var graph = IQGraph.getGraph('RSI(14)');
if (graph == null) return;
var rsi = stock.getRSI(14);
if (rsi !== -99999999.0) {
graph.plot(rsi);
}
}
function onDayClose(now) {
var sse = IQStock.getStock('A005930');
if (sse != null) plotRSI(sse);
}
JavaScript
복사
패턴 3: 멀티 그래프 생성 — 자산군별 수익률 비교
var graphs = {};
var initCloses = {};
var indices = [
{ id: '101', name: 'KOSPI200' },
{ id: '201', name: 'KOSDAQ' },
{ id: '004', name: 'KOSPI 소형주' }
];
function initialize() {
for (var i = 0; i < indices.length; i++) {
var item = indices[i];
graphs[item.id] = IQGraph.createGraph(item.name + ' 수익률(%)');
initCloses[item.id] = 0;
}
}
function onDayClose(now) {
for (var i = 0; i < indices.length; i++) {
var item = indices[i];
var index = IQIndex.getIndex(item.id);
if (initCloses[item.id] === 0) initCloses[item.id] = index.getClose();
var ret = (index.getClose() / initCloses[item.id] - 1) * 100;
graphs[item.id].plot(ret);
}
}
JavaScript
복사
주의사항
•
createGraph()는 반드시 initialize() 함수 안에서 최초 한 번만 호출합니다. onDayClose() 등 반복 호출되는 함수 안에서 호출하면 매 거래일마다 중복 생성됩니다.
•
동일한 graphId로 createGraph()를 두 번 이상 호출하면 의도치 않은 동작이 발생할 수 있습니다
•
getGraph()는 createGraph() 호출 이후에만 사용해야 합니다. 순서가 바뀌면 null이 반환됩니다.
관련 API
•
Graph 객체 — 개별 그래프의 속성(graphId) 및 데이터 출력(plot())
•
IQIndex 객체 — 시장 지수 데이터 조회 (벤치마크 활용)
•
Stock 객체 — 개별 종목의 기술적 지표 데이터 조회
