[미국주식] 구글 스프레드시트에서 야후 파이낸스 주가 불러오기

미국 주식을 하다보면 엑셀보다는 구글 스프레드시트를 자연스레 활용하게 된다. 물론 기기간 동기화가 가능하다는 장점도 있겠지만, GOOGLEFINANCE 함수의 활용도가 매우 높다는 장점도 있다. 실시간으로 주가를 불러오기 때문에, 각자의 양식으로 여러 계좌의 포트폴리오를 정리하거나, 때로는 주식을 분석할 때에도 용이하다.

한가지 아쉬운 건, 생각보다 에러가 생각보다 잦다는 점이다.
함수를 여러개 넣고 쓰다보면 수분~ 수시간씩 먹통이 되기도 하고, 드물기는 하지만 YALA와 같이 검색이 안되는 종목도 있다.

구글 파이낸스 함수 활용시 종종 발생하는 #N/A 에러

분명, NYSE에 상장된 종목이 맞는데, 검색창에검색을 해봐도 주식 정보가 뜨질 않는다.

티커 검색시 주가 정보가 확인이 되는 구글(GOOG, 좌) vs 단순히 검색결과만 확인이 되는 Yala Group(YALA, 우)

해결책

이럴땐, 야후 파이낸스의 정보를 구글 시트로 불러오는 방법이 있다.

물론 importhtml을 사용해서 야후 파이낸스의 정보를 불러오는 방법도 있겠지만,
쓸데없이 코드가 길어져, 가시성도 떨어지고, 유지보수가 귀찮은 단점이 있다.

앱 스크립트. 무려 코딩을 활용하면 된다.
사실 말이 코딩이지, 이용자는 그저 아래의 그림을 따라 복사 붙여넣기만 하면 된다.

위 그림과 같이 Apps Script 화면에 진입해서,

이 이미지는 대체 속성이 비어있습니다. 그 파일 이름은 image-3.png입니다

Code.gs라고 쓰여진 빈 창에, 아래의 코드를 붙여 넣기 한다.
이후, (새파일 배포 등등) 다른건 신경쓰지말고 저장 버튼을 누르고 창을 닫으면 끝이다.

function yahooF(ticker) {
 const url = `https://finance.yahoo.com/quote/${ticker}?p=${ticker}`;
 const res = UrlFetchApp.fetch(url, {muteHttpExceptions: true});
 const contentText = res.getContentText();
 const price = contentText.match(/<fin-streamer(?:.*?)active="">(\d+[,]?[\d\.]+?)<\/fin-streamer>/);  console.log(price[1]);  return price[1];
}

위의 내용을 앱 스크립트에 넣어주면 된다. 참고로, 맨처음 function뒤의 yahooF 부분이 앞으로 활용할 함수명이다.
편의에 따라 YAHOOFINANCE, YF등등 원하는대로 수정해도 정상 동작한다.

= IFERROR(GOOGLEFINANCE(ticker), yahooF(ticker))

구글 파이낸스에서 에러 발생시. 야후 파이낸스를 조회. 이렇게 무적의 함수 조합이 탄생했다.

위의 코드는 해당 링크를 참조했다. (링크)

Leave a Comment