본문 바로가기
사이드 프로젝트/주식자동 매매 프로그램

Python 주식 자동매매3 - 특정종목 Slack 노티 테스트

by 카프리썬_ 2021. 2. 5.
728x90
728x90

아래의 내용은 유튜브 '조코딩'님의 '파이썬으로 주식거래 자동화만들기'를 참고한 내용입니다.

 

앞서서 종목조회하기로 API를 테스트를 해봤으니 좀더 재미있게 느껴지는 걸 만들어 볼 수 있었다.

내가 원하는 종목코드를 알기만 하면, 그 종목의 상세정보를 슬랙으로 알림을 받을 수 있는 것이다. 

 

사실 슬랙봇만들기는 예전에 AWS API를 사용해서 모니터링알람을 만들때 해봤었다.

그런데 그때는 슬랙의 ㅅ도 모른상태로 접했어서 이걸 연결하는데도 하루가 걸렸던것 같다.. .

하지만 또 까먹을 수 있으니까 좀 정리해두려고 한다. 

 

1) 슬랙 설치 및 채널생성 

이미 슬랙을 메신저로 사용하고 있다면, 금방할수 있을지도.

새로운 워크스페이스를 파서 새로운 채널을 생성 권장(테스트목적이니까)

 

2) 슬랙봇 생성

슬랙API 사용 홈페이지 : api.slack.com/

 

새 HQ에 오신 것을 환영합니다.

Slack은 여러분의 팀과 소통할 새로운 방법입니다. 이메일보다 빠르고, 더 조직적이며, 훨씬 안전합니다.

slack.com

2-1) 슬랙봇은 하나의 custom app으로 새로 생성한다.

그리고 create new app으로 새로운 app(bot)을 생성한다.

나는 stock-bot이라는 이름으로 새로운 app을 생성하고, 지금 나의 워크스페이스(testworkspace)를 배포할 곳으로 지정

이미 나의 워크스페이스에는 몇가지 앱들이 있는데, 처음에 app과 bot이 같은 개념인지 몰라서 이름이 저렇다..ㅠㅠ

2-2) 봇 토큰 확인 및 권한부여 

일단 봇토큰은 잘 기억해둔다. 지금 생성한 봇을 식별할 key로 쓰이기 때문이다. 

해당 봇이 할 수 있는 action?을 지정해둔다.

우리 봇의 목적은 채널에 메세지를 말하는 봇이니까 write 권한을 부여한다. 

2-3) 해당 봇을 workspace에 설치한다. 

맨위에 install 버튼을 누르고, 원하는 채널에서 만든 앱(bot)을 초대한다. 

3) Slacker 라이브러리 설치 및 테스트

파이썬에서는 슬랙과 연동할 수 있는 라이브러리가 git에 공개되어 있다. (정말 똑똑한사람 천지..)

아래 깃허브에 나와있는 설명대로 그대로 하면 연결가능

이때, 아까 기억해둔 슬랫봇 토큰을 넣어야한다. 

Slacker활용법 : github.com/os/slacker

 

os/slacker

Full-featured Python interface for the Slack API. Contribute to os/slacker development by creating an account on GitHub.

github.com

slacker로 내 봇이 message 말하게 테스트완료

4) 삼성전자의 상세정보를 슬랙으로 던져보자! 

아래의 크레온API 테스트코드 중 주식 현재가 가져오기 코드를 참고하면 된다.

 

import win32com.client
from slacker import Slacker
 
# 연결 여부 체크
objCpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
bConnect = objCpCybos.IsConnect
if (bConnect == 0):
    print("PLUS가 정상적으로 연결되지 않음. ")
    exit()
 
# 현재가 객체 구하기
objStockMst = win32com.client.Dispatch("DsCbo1.StockMst")
objStockMst.SetInputValue(0, 'A005930')   #종목 코드 - 삼성전자
objStockMst.BlockRequest()
 
# 현재가 통신 및 통신 에러 처리 
rqStatus = objStockMst.GetDibStatus()
rqRet = objStockMst.GetDibMsg1()
print("통신상태", rqStatus, rqRet)
if rqStatus != 0:
    exit()
 
# 현재가 정보 조회
'''
code = objStockMst.GetHeaderValue(0)  #종목코드
name= objStockMst.GetHeaderValue(1)  # 종목명
time= objStockMst.GetHeaderValue(4)  # 시간
cprice= objStockMst.GetHeaderValue(11) # 종가
diff= objStockMst.GetHeaderValue(12)  # 대비
open= objStockMst.GetHeaderValue(13)  # 시가
high= objStockMst.GetHeaderValue(14)  # 고가
low= objStockMst.GetHeaderValue(15)   # 저가
bid = objStockMst.GetHeaderValue(17)   #매수호가
vol= objStockMst.GetHeaderValue(18)   #거래량
vol_value= objStockMst.GetHeaderValue(19)  #거래대금
# 예상 체결관련 정보

exPrice = objStockMst.GetHeaderValue(55) #예상체결가
exDiff = objStockMst.GetHeaderValue(56) #예상체결가 전일대비
exVol = objStockMst.GetHeaderValue(57) #예상체결수량
'''

offer = objStockMst.GetHeaderValue(16)  #매도호가
exFlag = objStockMst.GetHeaderValue(58) #예상체결가 구분 플래그

print("매도호가", offer)

if (exFlag == ord('0')):
    print("장 구분값: 동시호가와 장중 이외의 시간")
elif (exFlag == ord('1')) :
    print("장 구분값: 동시호가 시간")
elif (exFlag == ord('2')):
    print("장 구분값: 장중 또는 장종료")


slack = Slacker('xoxb-봇토큰입력')
# Send a message to #general channel
slack.chat.post_message('#stock_noti', '삼성전자 현재가(매도호가):'+str(offer))

가져올 수 있는 상세정보는 엄청많아서 그중에서 원하는걸 수정하면 된다.

나는 매도호가를 가져와서 슬랙으로 던졌다.

 

실제 어제와 오늘 삼정전자 매도호가를 가져와서 슬랙 메세지로 아래처럼 확인해볼 수 있다.

728x90
반응형