본문 바로가기
일기장/문제해결

구글 스프레드시트 자동화 (코스피 지수 자동 업데이트)

by 투동자 황소장 2021. 3. 2.

구글 스프레드시트 자동화 (코스피 지수 자동 업데이트)

주식을 하는 사람이라면 Investing.com에 자주 들어갈 것이다. 각종 주가지수의 현재 가격뿐 아니라 과거 데이터까지 편하게 확인할 수 있기 때문이다.

 

투자를 처음 시작했을 때, 퀀트 투자 자료를 만들기 위해 코스피와 나스닥 과거 데이터를 일일이 복사해서 붙여 넣기를 하면서 거의 하루를 꼬박 보낸 적이 있다. 지금 생각하면 단순 무식 무모한 행동이었지만, 지수가 업데이트될 때마다 복사, 붙여 넣기 단순 노가다를 계속했었던 경험을 기억하면 부끄럽다. 

 

난 개발자가 아니기 때문에 프로그래밍 언어를 몰랐고, 내가 직면한 문제를 어떻게 해결해야 하는지도 몰랐다. 이 문제를 해결하기 위해서는 코딩이 필요하다는 것을 어렴풋이 알고 있었지만, 내가 원하는 기능을 정확히 말해주는 정보를 다룬 국내 포스팅은 찾기 어려웠다. 오늘은 그 해답에 대해 포스팅해보려 한다.

 

그래서 목적이 무엇이냐? 

스프레드시트 자동 업데이트로 구글링 검색하면 지금 주가를 단순히 가져오는 방법을 다룬 포스팅이 많다. 장황하게 써놓은 게시물이 많지만 그냥 스프레드시트 빈 셀에 =googlefinance("ticker number")를 입력하면 해당 종목의 주가를 가져올 수 있다. 

 

예를 들어서 내가 가지고 있는 KT의 티커는 030200이므로  =googlefinance("030200")를 입력하면 KT의 실시간 주가를 보여준다. 완벽한 실시간 주가는 아니고 20분 정도 지연된 주가이다. (이걸 실시간으로 볼 수 있는 방법에 대해서는 나중에 포스팅하겠다.)

 

 

내가 구현하고 싶은 기능은 이렇게 보여주는 숫자를 매일 차곡차곡 셀에 자동 기입되게 하는 것이다. 그러면 주가지수의 추이를 파악하기 위해 매일 사이트를 뒤져가면서 확인하는 대신 내 시트만으로 확인할 수 있지 않겠는가?

 

3시 30분이면 국장 마감이 되니까 대충 오후 7시 정도에 날짜와 함께 업데이트됐으면 좋겠다고 생각했다.  하지만 구글을 열심히 뒤져도 정확히 똑같은 방법을 설명해주는 페이지는 찾지 못했다. 그래도 비슷한 방법을 찾아냈고 이에 방법을 공유하려 한다.

 

해당 방법은 스마트요원의 실용 구글(smartagent.blog)이라는 블로그에서 힌트를 얻어서 작성하게 되었다. 스마트요원님 블로그에는 스프레드시트의 사용법에 대해서 많이 다루고 있으니 스프레드 시트를 사용하고자 하는 사람이라면 즐겨찾기 해놓으면 좋을 것 같다. 

 

코스피 지수 자동 업데이트 방법

스프레드시트의 앱스 크립트를 이용해서 코드를 넣고, 트리거 설정을 통해서 내가 정한 시간마다 자동으로 어떠한 값이 기록되게 하면 된다. 

 

1. 시트에 기본 폼을 입력

B열 6행부터 차례대로 하루에 한 번 B열의 2행 값이 입력되게 할 것이다. B열의 2행 함수 식은 위에서 설명했듯이 =googlefinance("kospi")이다. 

 

2. 앱 스크립트에 코드 삽입

function myFunction() {  
  var sheet = SpreadsheetApp.getActiveSheet();    

// Get kospi point
 var kospi = sheet.getRange(2, 2).getValues(); 
 var datarange = sheet.getDataRange();  
 var startRows = datarange.getNumRows();  
 var numRows = startRows +1;    

 // Date of today 
  var dayToday = new Date();  

  // write Date 
  sheet.getRange(numRows, 1).setValue(formatYMD(dayToday));             

 // write Kospi point
 sheet.getRange(numRows, 2).setValue(kospi);

}

function formatYMD(date) {   
  var formattedDate = Utilities.formatDate(date, "GMT", "yyyy-MM-dd");     
  return formattedDate;
}

스크립트 편집기를 실행해서 .gs 파일에 위의 코드를 그대로 복사해준다. 그리고 프로젝트 저장 후, 실행하기를 눌렀을 때 시트에 값이 기록되면 일단 성공이다. 

3. 트리거 생성 

매일 오후 6~7시 사이 앱스크립트 실행 트리거

왼쪽 시계 아이콘을 누르고 트리거를 실행한다. 위의 사진과 같이 세팅해놓으면 지금부터 매일 오후 6~7시 사이에 앱스 크립트를 자동으로 실행하겠다는 것이고, 내가 원하는 대로 차곡차곡 매일 코스피 지수가 스프레드시트에 쌓일 것이다. 

 

마치며

인간의 욕심은 끝이 없듯이, 일단 저렇게 자동화를 해놓고 보니 또 의구심과 원하는 것이 생겼다.

 

  1. 휴장일일 때에도 코스피 지수가 기록된다. 이걸 어떻게 해결할까? 

  2. 이건 하나의 시트에서의 기록인데 다른 시트에서 값을 가져오거나 다른 시트에 값을 기입되게 하는 건 어떻게 하는 걸까? 

 

해결 방법을 찾는다면 링크를 달아두겠다... 이렇게 무엇을 구현하려고 하면 항상 꼬리의 꼬리를 무는 질문들이 쏟아진다. 그래서 삶이 피곤하기는 하지만.. 호기심은 좀 더 좋은 방향으로 갈 수 있게 해주는 힘이라 믿고 좋게 생각한다. 끝

반응형

댓글