본문 바로가기

주식투자/투자도움받기

파이썬 주식 자동매매 프로그램(로봇) 구축 : 3-2. 현재가 호가창 조회


여러분의 주식계좌는 성공적으로 수익이 나고 계신가요? 혹시 직장인이여서 주식을 계속 볼 수 없지는 않으신지요? 내가 굳이 계속 신경쓰지 않아도 자동으로 매매를 해서 돈을 벌어오는 아바타, 로봇이 있다면 얼마나 좋을까요?

주식 자동매매프로그램이 바로 그것이고, 저는 안정적인 매매방법을 찾고 구현하기 위해서 개발자가 아님에도 불구하고 로봇을 구축하는 작업을 하고 있습니다. 파이썬으로 만드는 자동매매 로봇 메인 내용을 시작해보겠습니다.

지난번까지는 기본적인 사항에 대해 준비해야할 것들에 대해서 챕터를 2개로 나누어서 진행을 해보았습니다. 이번에는 실제로 주식투자를 하기 위해 정보를 받아오는 로직에 대한 설명을 진행해보고자 합니다.

앞으로 진행해보려고 하는 메인 내용은 아래와 같습니다. 아래의 정보만을 가지고 충분히 원하는 매매로직을 구현할 수 있을 것이라고 생각을 합니다.

  • 현재가, 호가창 조회하기
  • 주가정보 구하기
  • 이동평균주가 구하기
  • 거래대금 구하기

사실 위에 나오는 정보들은 HTS, MTS만 들어가더라도 쉽게 조회를 할 수가 있는데, 이렇게 쉽게 볼 수 있는 정보를 내가 시스템적으로 받아와야한다는 것이 간단하지는 않았습니다. 하지만 기본적으로 온라인상에 다양한 오픈된 소스코드를 조합하면 내가 원하는 정보를 빠르고 쉽게 만들수가 있습니다.

일단 주식투자를 하면서 제일 먼저 접하게되는 것이 바로 현재가창(호가창)이라고 부르는 화면입니다. 매수와 매도 체결을 위한 주가와 잔량이 남아있고, 여기에 매도잔량, 매수잔량, 매수총량, 매도총량 등의 정보들을 확인할 수 있습니다. 주문을 할 때 제일 먼저 접하게되는 화면입니다.

파이썬 주식 자동매매 프로그램(로봇) 구축 : 3-2. 현재가 호가창 조회

파이썬 주식 자동매매 프로그램(로봇) 구축 : 3-2. 현재가 호가창 조회

일단 호가창을 조회하기 위한 기본적인 함수에 대해서 알아보겠습니다. 저는 크레온 API를 사용하고 있으며, 키움증권API와는 차이가 있을수 있습니다.

아래는 삼성전자의 호가창에 나오는 정보를 조회하는 코드입니다. 1~100번까지 어떤정보가 들어있는지 알수는 없지만 현재 호가창에 떠있는 정보와 비교해본다면 원하는 정보를 찾을 수 있을 것 입니다.

import win32com.client

cpStock = win32com.client.Dispatch('DsCbo1.StockMst')

cpStock.SetInputValue(0, 'A005930')    #삼성전자 호가창 정보조회
cpStock.BlockRequest()

i = 0
while i <= 70:    #70개 정보 출력
	print(cpStock.GetHeaderValue(i))   #호가창 정보 출력 
    i+=1

70개의 호가창 정보가 무엇을 의미하는지는 별도로 정리된 곳이 있으니 아래의 링크를 참고하시면 좋을 것 같습니다.

cybosplus.github.io/cpdib_rtf_1_/stockmst.htm

 

StockMst

거래소,코스닥,프리보드 단주

cybosplus.github.io

자동매매프로그램을 사용하기 위해서 위의 많은 정보들 중에 사용하는 정보는 아래와 같습니다.

주식 자동매매 프로그램(로봇)에 주요 사용 호가창 정보

cpStock.GetHeaderValue(0)	#종목코드
cpStock.GetHeaderValue(1)	#종목명
cpStock.GetHeaderValue(10)	#전일종가
cpStock.GetHeaderValue(11)	#현재가
cpStock.GetHeaderValue(35)	#상장주식수
cpStock.GetHeaderValue(46)	#전일거래량
cpStock.GetHeaderValue(71)	#매도잔량합계
cpStock.GetHeaderValue(73)	#매수잔량합계

종목코드는 자동매매프로그램에서 빠질수 없는 정보이며, 여기저기 연결을 해서 사용해야하는 중요정보입니다.

종목명은 사실 프로그램안에서 크게 필요는 없지만, 코드만 보고서 어떤 주식종목인지 알수가 없기 때문에 출력을 위한 용도로 사용을 하고 있습니다.

전일종가와 전일거래량은 대략적인 어제의 거래대금이 얼마나 형성되었는지 알수가 있기 때문에 정보를 받아와서 곱해서 사용을 하고 있습니다.

상장주식수 역시나 현재가와 곱하여, 내가 매수하고자 하는 주식종목의 시가총액의 규모가 어느정도나 되는지 확인하기 위해서 사용하고 있습니다.

마지막으로 매도잔량합계와 매수잔량합계는 해당 종목의 매수타이밍을 잡기위해서 참고정보로 사용하고 있는 변수입니다. 

위 두개의 코드를 합쳐서 사용을 해본다면 아래와 같은 코드로 사용할 수 있을 것입니다. 자신이 관심있어하는 종목의 호가창(현재가창)을 띄워놓고 비교해서 값이 맞는지 확인해보시기 바랍니다.

삼성전자 호가창 정보를 조회하는 코드

import win32com.client

cpStock = win32com.client.Dispatch('DsCbo1.StockMst')

cpStock.SetInputValue(0, 'A005930')    #삼성전자 호가창 정보조회
cpStock.BlockRequest()

stock_code = cpStock.GetHeaderValue(0)	#종목코드
stock_name = cpStock.GetHeaderValue(1)	#종목명
last_price = cpStock.GetHeaderValue(10)	#전일종가
today_price = cpStock.GetHeaderValue(11)	#현재가
stock_num = cpStock.GetHeaderValue(35)	#상장주식수
last_vol = cpStock.GetHeaderValue(46)	#전일거래량
sell_stock_sum = cpStock.GetHeaderValue(71)	#매도잔량합계
buy_stock_sum = cpStock.GetHeaderValue(73)	#매수잔량합계

print(stock_name, '(',stock_code,')', ', 상장주식수 : ',stock_num)
print('어제 종가 : ', last_price, ', 오늘 현재가 : ',today_price)
print('매도잔량합계 : ',sell_stock_num,', 매수잔량합계 : ',buy_stock_sum)
print('전일거래대금(억원) : ',round(last_price*last_vol/100000000,1))
반응형


Visitor : 2,094,992
POWERED/DESIGN/COPYRIGHTⓒ BY JJISSO