(Technical Analysis)
현재 인텔리퀀트 스튜디오에서 제공하는 기술적 분석 지표 함수는 아래와 같이 추세 지표, 모멘텀 지표, 변동성 지표, 시장강도 지표로 나누며, 자세한 사항은 도움말 API 레퍼런스의 Stock 객체(https://intelliquant.co.kr/help/ref/1) 부분을 참고해주세요.
※ 모든 기술적 지표는 수정주가를 기반으로 계산된 값입니다.
1) 추세 지표
•
MA (Moving Average, 이동평균) - getMA(period)
•
EMA (Exponential Moving Average, 지수이동평균) - getEMA(period)
•
WMA (Weighted Moving Average, 가중이동평균) - getWMA(period)
•
MACD (Moving Average Convergence & Divergence, 이동평균수렴확산) - getMACD(fast, slow, signal)
•
ADX (Average Directional Movement Index, 평균방향운동지수) - getADX(period)
2) 모멘텀 지표
•
Stochastics (스토캐스틱) - getStochastic(fastK, slowK, slowD)
•
Williams%R (윌리엄스%R) - getWilliamsR(period)
•
CCI (Commodity Channel Index, 상품채널지수) - getCCI(period)
3) 변동성 지표
•
Bolinger Band (볼린저밴드) - getBolingerBand(period, devUp, devDown)
•
True Range (트루레인지) - getTrueRange()
•
ATR (Average True Range, 애버리지 투루레인지) - getATR(period)
•
Parabolic (파라볼릭) - getParabolic(acc, max)
4) 시장강도 지표
•
OBV (On Balance Volume, 누적균형거래량) - getOBV()
•
RSI (Relative Strength Index, 상대강도지수) - getRSI(period)
아래 예제는 추세 지표들 중에 하나인 이동평균 수렴확산(MACD) 지표를 이용하여 해당 종목을 매수/매도하는 방법입니다.
전체적인 내용은 한 종목의 MACD 값과 Signal 값을 비교하여 MACD가 Signal을 하향 돌파(데드크로스)하면 매도, Signal을 상향 돌파(골든크로스)하면 매수하게 됩니다.
  var code = "A066570", name = "LG전자";    // 종목코드
  var stock, stock_basket, graph;
  var stock_weight = 0.9;                 // 주식비중
  var target_num = 1;                     // 투자 종목 수
  var initClose = 0;                      // 초기 종가
  var intQty = 0;
  function initialize() {
      IQAccount.getDefaultAccount().accountName = name + " MACD 반영 수익률";
      stock_basket = new Basket(IQAccount.getDefaultAccount(), target_num, IQEnvironment.aum * stock_weight);
      stock = IQStock.getStock(code);
      graph = IQGraph.createGraph(name + " 수익률");
      initClose = stock.getAdjClose();    // 누적 수익률 계산을 위해 초기 종가 저장
  }
  function _buildPortfolio(macd, signal, histogram) {
      var totalEquity = IQAccount.getDefaultAccount().getTotalEquity();   // 계좌 총 평가액
      var error = -99999999;  // 에러코드
      if (macd !== error) {
          // MACD 값이 Signal을 하향돌파(데드크로스)할 때 매도
          if (prevMacd > prevSignal && macd < signal) {
              stock_basket.leave(IQStock.getStock(code), intQty);  // 종목 매도
              logger.debug("[Sell] (signal -> macd) " + 'macd: ' + macd + ", signal: " + signal + ", histogram: " + histogram);
          // MACD 값이 Signal을 상향돌파(골든크로스)할 때 매수
          } else if (prevMacd < prevSignal && macd > signal) {
              logger.debug("[Buy] (macd -> signal) " + 'macd: ' + macd + ", signal: " + signal + ", histogram: " + histogram);
              if (stock_basket.getCurrentEggs().length === 0) {
                  stock_basket.reset();
                  intQty = parseInt((totalEquity / stock.getAdjClose()) * stock_weight);
                  stock_basket.enter(IQStock.getStock(code), intQty);   // 종목 매수
              }
          }
      }
  }
  var enterForInit = false;               // 초기 실행 플래그
  var fast = 12, slow = 26, signal = 9;   // 12일 단기 이동평균, 26일 장기 이동평균, 9일 시그널 이동평균
  var prevMacd = 0, prevSignal = 0;       // 이전 MACD, Signal 저장
  function onDayClose(now) {
      logger.debug(stock_basket.getCurrentEggs());
      graph.plot(((stock.getAdjClose() / initClose) - 1) * 100);	// 기본 수익률 그래프
      // MACD 값을 가져오는 함수입니다. 결과 값은 당일 MACD 값의 JSON 형태
      // {"macd":117.3,"signal":128.1,"hist":-10.8}, 문제가 있을 경우 -99999999
      var macdJson = stock.getMACD(fast, slow, signal);
      // MACD 및 Signal 값에 따라 매수/매도 수행
      _buildPortfolio(macdJson.macd, macdJson.signal, macdJson.hist);
      prevMacd = macdJson.macd;       // 현재 MACD 값 저장
      prevSignal = macdJson.signal;   // 현재 Signal 값 저장
      if (enterForInit == false) {    // 최초 진입일 경우 종목 매수
          stock_basket.reset();
          intQty = parseInt((IQEnvironment.aum / stock.getAdjClose()) * stock_weight);
          stock_basket.enter(IQStock.getStock(code), intQty);
          enterForInit = true;
      }
  }
JavaScript
복사



