Python/텔레그램봇:채권모니터링
-
[Summary] 텔레그램봇: 채권모니터링 ReviewPython/텔레그램봇:채권모니터링 2020. 12. 31. 19:54
언어 python3.7 이용한 python 라이브러리 os, time, datetime, requests, pandas, xlrd [, bs4, telegram] 상세 내용 증권시장 거래시간의 특정 시점에, 한국거래소에서 채권거래 호가 정보를 수집 후, 한국은행 API로 비교 기준인 최신의 채권 수익률을 확인(xml/json)하여, 전처리(null 데이터를 제외하고, 잔존기간을 일자로 환산, 투자등급/잔존기간/수익률 기준으로 필터링)한 다음, 텔레그램 메신저를 통해 적당한 메시지 포맷으로 전송한다. 여기서 증권시장 거래시간의 특정 시점이란 10시, 12시, 2시 30분, 3시 31분(종가) 처럼 특정 시간을 말한다. 또한 휴장일 정보를 확인(download/view)하여, 익일이 휴장일인 경우 건너뛸 수..
-
[데이터수집] 내일은 휴장일? 한국거래소 확인 (2) 조회Python/텔레그램봇:채권모니터링 2020. 12. 26. 21:03
봇을 돌리려면 오늘 휴장인지 정보가 필요하다. 해당 정보는 한국거래소 - MarketData - 시장정보 - 시장동향 - 증시일정 - 휴장일에서 1) 엑셀파일로 다운로드 후 확인 2) 조회 방식으로 확인 2가지 방법으로 확인이 가능하다. 조회도 파일다운로드처럼 OTP 발급과정을 거쳐서 처리하면 된다. Nowtime값을 GenerateOTP에 전달 -> OTP 발급 -> OTP를 MKD99000001에 전달 -> 조회 데이터 리턴 조회에 필요한 Nowtime은 epoch time이므로 int(round(time.time() * 1000))을 정의해서 처리한다. 이번에는 다운로드 대신 조회 기능을 사용해볼 예정이다. 개발자 도구의 네트워크 부분을 열어보니 조회에는 Nowtime.jspx라는 단계가 하나 더 ..
-
[데이터수집] 내일은 휴장일? 한국거래소 확인 (1) downloadPython/텔레그램봇:채권모니터링 2020. 12. 23. 17:16
봇을 돌리려면 오늘 휴장인지 정보가 필요하다. 해당 정보는 한국거래소 - MarketData - 시장정보 - 시장동향 - 증시일정 - 휴장일에서 1) 엑셀파일로 다운로드 후 확인 2) 조회 방식으로 확인 2가지 방법으로 확인이 가능하다. 엑셀파일 다운로드의 경우 채권정보를 가져왔던 방식과 동일하게 OTP 발급 스크립트를 추가해 처리하면 된다. 먼저 엑셀파일로 확인해본다. 실패한 엑셀파일 1차 시도 이쪽을 참고했다: nbviewer.jupyter.org/urls/financedata.github.io/posts/pandas-market-days-krx.ipynb 위 블로그에서는 OTP 발급절차 없이 바로 url로 접속해서 데이터를 확보했다. 바로 접속한 url은 이렇다: marketdata.krx.co.k..
-
[스케쥴링] 특정 시간에 실행하기 - 휴장일 커버Python/텔레그램봇:채권모니터링 2020. 12. 21. 19:21
파이썬에서 datetime.datetime object끼리는 크기 비교가 된다는 점을 이용해, 특정 시간을 기준으로 대기/실행 작업을 수행한다. 대기할 경우, datetime.datetime 객체와 datetime.timedelta를 더해 다음 기준 시간을 계산한다. time.sleep(datetime.timedelta(days=1, seconds=10).total_seconds())로 적당한 휴지시간을 둘 수 있다. + 휴장일을 커버할 수 있도록 구성했다 [python] 모듈 정리하기 까지해서 한 번 보내는 사이클은 완료되었다. 이제 해당 작업을 장이 열리는 시간에 반복하면 된다. 목표 하루에 확인은 4번만 하기로 하고, 주간에만 실행되니까, 월요일부터 금요일까지 10시 20분, 12시 20분, 2시 ..
-
[python] 모듈 정리하기Python/텔레그램봇:채권모니터링 2020. 12. 18. 19:48
전체 코드가 길진 않지만, 작업 단위별로 파일을 따로 두는 게 확인하기 수월할 것 같아 코드를 분리하기로 했다. 폴더에서 스크립트 임포트를 임포트하면서 약간 헤맸어서 여기에 정리해두었다: hayjo.tistory.com/63 [import] 폴더 안의 스크립트 임포트하기 일반적으로 폴더에 코드를 정리해놓고 불러다 쓰려면 from folder import script를 하면 된다. 폴더가 여러 개 있거나, 여러 파일에서 코드를 임포트하려면 디렉토리 사이를 .으로 연결하면 된다. 폴더 hayjo.tistory.com 전체 작업은 이렇게 나뉜다. 데이터 받아오기1: requests로 한국거래소 사이트에서 OTP 발급받은 후 필요한 데이터 csv형태로 받아오기 데이터 받아오기2: requests로 한국은행 경제..
-
[TelegramBot] 봇 생성과 메시지전송Python/텔레그램봇:채권모니터링 2020. 12. 18. 19:08
python-telegram-bot 패키지의 telegram.Bot.sendMessage(chat_id, text)로 데이터를 전송한다. 생성 및 작동 확인 기존 텔레그램 계정에서 @botfather를 친구 추가하고 /newbot을 입력하면, 이름을 뭘로 할 거냐고 물어본다. Bot이나 _bot처럼 이름 끝을 bot으로 해서 대답하면 축하한다면서 봇 토큰을 준다. 봇 토큰은 나중에 @botfather에서 /mybots -> 해당 봇 선택 -> API Token에서 확인할 수 있다. 혹시라도 노출되었다면 Revoke current token으로 갱신하면 된다. 기존 계정에서 방금 만든 봇을 친구 추가하고, 시작을 누르면 /start 메시지가 전송된다. 아래 url로 들어가면 방금 메시지를 보낸 유저 정보가..
-
[python f'{formating}'] 봇 메시지 포맷팅Python/텔레그램봇:채권모니터링 2020. 12. 16. 16:00
pandas의 DataFrame에 저장된 데이터를 가져와서 f"{}" 방식으로 포맷팅한다. 봇으로 메시지를 보내려면 적당한 형식으로 포맷팅을 해야한다. 내 핸드폰에서는 한글 22자가 한 줄에 들어가는 맥시멈이어서, 아래와 같은 형식을 취하기로 했다. 파라다이스6 D-1042 A ₩10,043.0(3.302%) 10,043(3.302%) 9,900(3.831%) 이걸 위해서는 pandas dataframe 형태의 데이터를 string 형태로 바꿔주어야 한다. f"{변수}" 형태로 입력하면 변수를 손쉽게 문자열로 바꿀 수 있다. a = 98765.4321 print(f"{a}") # 98765.4321 특정 공간에 맞춰 정렬하는 것도 가능하다. print(f"{a:>20}") # 98765.4321 prin..
-
[Pandas] 데이터 정리 (2) 필터링(query) 및 정렬Python/텔레그램봇:채권모니터링 2020. 12. 15. 12:03
현재 데이터를 pandas dataframe에 넣고, NULL값 정리까지 끝난 상태. 이제 목적에 맞게 데이터를 필터링할 차례다. 목적: 투자등급 A-이상이면서 잔존기간이 3년 미만인, 매력적인 가격대의 채권 찾아내기. 매력적인 가격대는 1) 평균 금리에 비해 저렴하게 매도 매물이 있는 종목 2) 혹은 거래량이 있는 종목 중에 적당한 매수가격대가 없는 종목 으로 정했다. 일단 투자등급을 걸러야 하니 'BBB', 'BB', 'B'와 'BBB+', 'BB+', 'B+', 'BBB-', 'BB-', 'B-'를 버리고, 잔존기간이 1095일 이상인 종목을 버리고, 수익률이 평균 금리 미만인 종목을 버리고, 나의 채권 기대수익률은 2% 이상이기 때문에 매수수익률이 2% 미만으로 걸려있는 종목도 버린다. 다만 0...