목차
개요
Graph는 iQ 스튜디오 시뮬레이션 결과 화면에 사용자 정의 그래프를 추가할 때 사용하는 객체입니다.
Account 또는 Basket 객체를 사용하면 누적수익률 그래프가 자동으로 그려지지만, Graph 객체를 활용하면 여기에 추가 그래프 라인을 올릴 수 있습니다. 벤치마크 지수 수익률, 이동평균선, 모멘텀 지표(스토캐스틱 등) 시각화에 주로 사용합니다.
Graph 객체는 직접 생성하는 것이 아니라 IQGraph.createGraph(graphId)를 통해 생성하며, IQGraph.getGraph(graphId)로 재접근합니다.
var graph;
function initialize() {
graph = IQGraph.createGraph('KOSPI200 수익률'); // Graph 객체 생성
}
function onDayClose(now) {
graph.plot(42.5); // 당일 x축, 42.5를 y축 값으로 그래프 그리기
}
JavaScript
복사
1. 속성 (Properties)
graphId
그래프의 고유 식별자. IQGraph.createGraph(graphId) 호출 시 지정한 이름이며, 시뮬레이션 결과 화면의 범례(legend)에 표시됩니다.
var graph = IQGraph.createGraph('벤치마크');
logger.debug(graph.graphId); // '벤치마크'
JavaScript
복사
2. plot(value) — 그래프 그리기
당일 날짜를 x축, value를 y축으로 하는 데이터 포인트를 그래프에 추가합니다.
onDayClose(now) 안에서 매 거래일마다 호출하는 것이 일반적이며, 조건식을 사용해 월별·분기별 단위로도 호출할 수 있습니다.
파라미터
파라미터 | 타입 | 설명 |
value | number | y축에 표시할 값. 단위는 사용자가 정의합니다. (예: 수익률 %, 지수값, 지표값 등) |
반환값
없음.
Sample
var graph;
var initClose = 0;
function initialize() {
graph = IQGraph.createGraph('KOSPI200 누적수익률(%)');
}
function onDayClose(now) {
var kospi200 = IQIndex.getIndex('101'); // KOSPI200 지수
if (initClose === 0) {
initClose = kospi200.getClose(); // 첫날 종가 저장
}
var ret = (kospi200.getClose() / initClose - 1) * 100;
graph.plot(ret);
}
JavaScript
복사
3. 활용 패턴
패턴 1: 벤치마크 지수 수익률 비교
전략 수익률과 함께 KOSPI200 같은 벤치마크 수익률을 한 화면에 표시합니다.
var benchGraph;
var initKospi200 = 0;
function initialize() {
benchGraph = IQGraph.createGraph('KOSPI200');
}
function onDayClose(now) {
var kospi200 = IQIndex.getIndex('101');
if (initKospi200 === 0) {
initKospi200 = kospi200.getClose();
}
var ret = (kospi200.getClose() / initKospi200 - 1) * 100;
benchGraph.plot(ret);
}
JavaScript
복사
패턴 2: 기술적 지표 시각화
스토캐스틱 같은 모멘텀 지표를 그래프로 시각화합니다.
var stochGraph;
function initialize() {
stochGraph = IQGraph.createGraph('삼성전자 Stochastic SlowK');
}
function onDayClose(now) {
var sse = IQStock.getStock('A005930');
if (sse == null) return;
var stoch = sse.getStochastic(5, 3, 3);
if (stoch && stoch !== -99999999.0) {
stochGraph.plot(stoch.slowK);
}
}
JavaScript
복사
패턴 3: 멀티 그래프 — 여러 지수 동시 비교
여러 Graph 객체를 생성하여 복수의 지표를 한 번에 비교합니다.
var kospiGraph, kosdaqGraph;
var initKospi = 0, initKosdaq = 0;
function initialize() {
kospiGraph = IQGraph.createGraph('KOSPI 수익률(%)');
kosdaqGraph = IQGraph.createGraph('KOSDAQ 수익률(%)');
}
function onDayClose(now) {
var kospi = IQIndex.getIndex('001'); // KOSPI 종합
var kosdaq = IQIndex.getIndex('201'); // KOSDAQ 종합
if (initKospi === 0) initKospi = kospi.getClose();
if (initKosdaq === 0) initKosdaq = kosdaq.getClose();
kospiGraph.plot( (kospi.getClose() / initKospi - 1) * 100);
kosdaqGraph.plot((kosdaq.getClose() / initKosdaq - 1) * 100);
}
JavaScript
복사
패턴 4: 조건부 그래프 — 월별 또는 분기별
매일이 아닌 특정 주기마다 값을 기록합니다.
var monthlyGraph;
function initialize() {
monthlyGraph = IQGraph.createGraph('월별 계좌수익률(%)');
}
function onDayClose(now) {
// 매월 말일에만 기록 (IQDate 활용)
if (!IQDate.isMonthEnd(now)) return;
var acc = IQAccount.getDefaultAccount();
var ret = (acc.getTotalEquity() / acc.aum - 1) * 100;
monthlyGraph.plot(ret);
}
JavaScript
복사
주의사항
•
Graph 객체는 IQGraph.createGraph()로 최초 한 번만 생성합니다. 일반적으로 initialize() 함수 안에서 생성합니다.
•
동일한 graphId로 createGraph()를 두 번 이상 호출하면 의도치 않은 동작이 발생할 수 있습니다.
•
plot()을 호출하지 않은 날(거래일)은 그래프에 해당 포인트가 표시되지 않아 선이 끊길 수 있습니다.
관련 API
•
IQGraph 객체 — Graph 컨테이너. Graph 생성 및 조회
•
IQIndex 객체 — 시장 지수 데이터 조회 (벤치마크 활용)
•
Stock 객체 — 개별 종목의 기술적 지표 데이터 조회
