Search

IQGraph

목차

개요

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() 시 지정한 이름)

반환값

해당 graphIdGraph 객체. 존재하지 않으면 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() 등 반복 호출되는 함수 안에서 호출하면 매 거래일마다 중복 생성됩니다.
동일한 graphIdcreateGraph()를 두 번 이상 호출하면 의도치 않은 동작이 발생할 수 있습니다
getGraph()createGraph() 호출 이후에만 사용해야 합니다. 순서가 바뀌면 null이 반환됩니다.

관련 API

Graph 객체 — 개별 그래프의 속성(graphId) 및 데이터 출력(plot())
IQIndex 객체 — 시장 지수 데이터 조회 (벤치마크 활용)
Stock 객체 — 개별 종목의 기술적 지표 데이터 조회