본문 바로가기

퀀트투자 A to Z

구글 앱스 스크립트로 주식정보 알림받기(gmail, 텔레그램 봇)

반응형

블로그 글을 주기적으로 써야겠다고 마음 먹었지만 절대 쉽지 않은일인것같다. 주제후보는 너무나도 많지만, 솔직히 그중에서 단시간에 빨리 쓸수 있는 주제를 선정하였다. 내용은 구글스프레드시트에 있는 주식정보(주가변동, 주요지표 변화 등)를 gmail이나 텔레그램등을 통하여 알림을 받는 방법이다. 참고로 나의 경우 퀀트모델개발, 포트폴리오관리등 주식투자 관련하여 구글 스프레드시트를 100%활용하고 있으며 구글시트의 확장기능 Apps script를 통하여 서버없이 실시간처리가 가능하다는 점이 가장 큰 장점인것 같다.

 

Checker Plus for Gmail로 알림받기

나의 보유 종목의 주요지표 변화나 주가변동등을 알림을 통하여 받고있다. 현재는 구글 크롬의 Checker Plus for Gmail™  을 사용하여 구글스프레드시트상에 계산된 변동사항등을 실시간으로 알림을 받고있다. 방법은 간단하다.

apps script에서 함수를 생성하여 아래와 같이 설정 해주고 트리거를 생성해준다. (실제로는 예전데이터와 비교하여 주요지표의 변화가 있을시에만 작동하게 설정을 해두어서 실제 코드와는 상이하다)

function notifyScore(){
    const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheetName");
    const symb = sheet.getRange("A2").getValue();
    const score = sheet.getRange("B2").getValue();
    const msg = `${symb} 변화 ${score}`;
    GmailApp.sendEmail('abc@gmail.com', msg, msg);
}

그 다음에 아래와 같이 시간기반으로 트리거를 생성해주면 된다.

구글-apps-script-트리거설정방법
구글 apps script 트리거설정방법
퀀트-지표변화-Notification
Notification 예제

Telegram bot으로 알림받기

최근에 Telegram 으로 받는 방법을 일부 변경하여 적용하였다. 이유는 apps script는 각 기능별로 할당량 제한이 있으며 할당량이 넘으면 에러가 발생한다. 참고로 gmail로 이메을 보내는 기능의 경우 할당량이 1일100건 정도밖에 되지 않는다. 보유 주식의 주가 추이를 감시할 일이 생겼는데 gmail 이용시 할당량인 1일100건은 쉽게 넘어가 버린다.  주가 추이를 계속해서 확인하고싶지만 계속 보고있는것이 시간 낭비이며 다른 할일이 많으므로 telegram으로 알람을 받기로 결정하였다. 아래와 같은 코드를 작성하고 gmail알림과 마찬가지로 트리거를 작성해주면 된다.

 

function sendTelegramMessage(chatId, message) {
  var token = "1409493812:ZAH_lEF2sVh-pTWA3ZM6Hjy1ZPlhj-vZdHs";  // 여기에 본인의 Telegram Bot 토큰을 넣어주세요.
  var apiUrl = "https://api.telegram.org/bot" + token + "/sendMessage";

  var payload = {
    method: "post",
    payload: {
      chat_id: chatId,
      text: message,
    },
  };

  UrlFetchApp.fetch(apiUrl, payload);
}

function sendTelegramMessageTest() {
    var chatId = "000000000";  // 여기에 메시지를 보낼 Telegram 대화(Chat)의 ID를 넣어주세요.
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheetName");
    var telegramOnOff = sheet.getRange("F1").getValue(); // telegram 수신활성화여부
    if (telegramOnOff!=1){
	    return
    }
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("주식현재가");
    var sqqq = sheet.getRange("AX2").getValue();

    var message = `SQQQ: ${(sqqq * 100).toFixed(2)}%
    
    sendTelegramMessage(chatId, message);
}

 

참고로 맥북에서는 아래와 같이 오른쪽 상단에 알림이 온다.

퀀트-텔레그램-notification
맥북에서의 telegram 알림