41강에서 실시간 자동매매 구현을 위한 GUI와 스레드를 구성하였습니다. 오늘은 내가 선택한 종목의 실시간 데이터를 어떻게 받아오는지 개념 설명드립니다. 중요하니 잘 따라오시기 바랍니다.
[유튜브 강의, 링크]와 같이 보시면 많은 도움이 되실 겁니다.
1. KOA Studio 실시간목록 이해하기
아래 KOA Studio를 보시면 실시간 목록 중 우리가 받아올 수 있는 목록이 25개 나열되어 있습니다. 그중 우리는 3개 정도만 사용할 것인데 주식체결만 대표적으로 알아보겠습니다.
아래 그림을 보시면 주식체결 시 받아올 수 있는 목록이 나열되어 있습니다. 우선 주식 체결이란 1 틱이 변할 때마다 우리에게 아래 약 20개 이상의 데이터를 보냅니다.
예를 들어 삼성전자의 주식체결을 등록하면, 67000원에서 67100원이 되는 순간(1틱) 20개의 데이터가 우리 컴퓨터로 전송됩니다. 저희는 이 정보 중 현재가를 이용해 매수/매도해야 하는지 판단할 수 있습니다. 뿐만 아니라 거래량, 체결강도, 거래 회전률 등의 정보를 활용하면 더욱 좋은 프로그램이 되겠죠? 이번 강의에서는 간단하게 현재가만 보고 매수/매도를 할 생각입니다.
백문불여일견이라고 예제로 설명드리겠습니다.
2. 실시간 종목 등록 예제
삼성전자를 매수/매도하려고 합니다. 우선 삼성전자의 실시간 현재가를 받아야겠죠? 현재가를 받아오기 위한 함수는 아래와 같습니다. KOA Studio의 개발자 가이드에 들어가 조검 검색, 관련 함수를 찾아보시면 SetRealReg가 있습니다.
종목 입력 후 SetRealReg만 치시면 저희가 원하는 종목의 다양한 실시간 데이터를 받아올 수 있는 것입니다. 아래 예를 보겠습니다.
SetRealReg(화면번호, 종목코드, 실시간 FID 번호, 실시간 등록 타입) 중
- 화면번호 : 스크린 번호라고 앞서 설명드렸지만 1~9999까지 설정할 수 있으며, 1개의 스크린 번호에 50개의 데이터가 저장 가능합니다.
- 종목코드 : 삼성전자 코드 번호는 005930입니다.
- 실시간 FID 번호 : 위의 KOA Studio 주식 체결 그림에서 [20] = 체결시간 보이시죠? 20이 FID 번호입니다.
- 실시간 등록 타입 : 우리는 여러 종목을 등록해야 하기 때문에 1을 적으면 됩니다.
삼성전자 실시간 현재가 받아오기 위한 등록
- SetRealReg("3000", "005930", 10, 1) : 옆과 같이 코딩하시면 우리는 삼성전자의 1 틱이 변할 때 마다 원하는 정보를 얻을 수 있습니다.
3. 실시간 종목 받아오기 예제
실시간 종목 등록을 했으니 1틱이 변할 때마다 우리는 원하는 데이터를 가져와야겠죠? 그때 필요한 함수가 GetCommRealData() 함수입니다. 바로 예제 들어가겠습니다.
GetCommRealData(종목코드, 실시간 FID 번호)
- 종목코드 : 삼성전자 코드 번호는 005930입니다.
- 실시간 FID 번호 : 현재가는 10입니다.
삼성전자 실시간 현재가 받아오기 위한 등록
- GetCommRealData("005930", 10) : 옆과 같이 코딩하시면 우리는 삼성전자의 1 틱이 변할 때마다 현재가를 받아올 수 있습니다.
어려울 수 있지만 간단하지 않습니까? 우리가 알아야 될 함수는 딱 2개입니다. SetRealReg와 GetCommRealData.
물론 FID 번호들도 아셔야 합니다. 그 번호들이 우리가 받아와야 하는 값이니까요. FID 번호는 본인이 일일이 쳐 넣으셔도 되지만 아래와 같이 코드를 공유해 드리니 원하는 스크립트를 만드시고 아래 코드를 붙여 넣기 하세요.
앞으로 아래 그림과 같이 원하는 FID 번호를 가져올 생각입니다.
원하는 스크립트 이름은 본인이 편한 데로 하시는데 저 같은 경우에는 kiwoomTpye.py라고 명하였습니다. 그림으로 보여 드리죠.
코드 공개
class RealType(object):
SENDTYPE = {
'거래구분': {
'지정가': '00',
'시장가': '03',
'조건부지정가': '05',
'최유리지정가': '06',
'최우선지정가': '07',
'지정가IOC': '10',
'시장가IOC': '13',
'최유리IOC': '16',
'지정가FOK': '20',
'시장가FOK': '23',
'최유리FOK': '26',
'장전시간외종가': '61',
'시간외단일가매매': '62',
'장후시간외종가': '81'
}
}
REALTYPE = {
'주식체결': {
'체결시간': 20,
'현재가': 10, #체결가
'전일대비': 11,
'등락율': 12,
'(최우선)매도호가': 27,
'(최우선)매수호가': 28,
'거래량': 15,
'누적거래량': 13,
'누적거래대금': 14,
'시가': 16,
'고가': 17,
'저가': 18,
'전일대비기호': 25,
'전일거래량대비': 26,
'거래대금증감': 29,
'전일거래량대비': 30,
'거래회전율': 31,
'거래비용': 32,
'체결강도': 228,
'시가총액(억)': 311,
'장구분': 290,
'KO접근도': 691,
'상한가발생시간': 567,
'하한가발생시간': 568
},
'주식호가잔량': {
'순매수잔량': 128,
'순매도잔량': 138,
'매수호가총잔량': 125,
'매도호가총잔량': 121
},
'장시작시간': {
'장운영구분': 215,
'시간': 20, #(HHMMSS)
'장시작예상잔여시간':214
},
'주문체결': {
'계좌번호': 9201,
'주문번호': 9203,
'관리자사번': 9205,
'종목코드': 9001,
'주문업무분류': 912, #(jj:주식주문)
'주문상태': 913, #(접수, 확인, 체결) (10:원주문, 11:정정주문, 12:취소주문, 20:주문확인, 21:정정확인, 22:취소확인, 90,92:주문거부) #https://bbn.kiwoom.com/bbn.openAPIQnaBbsDetail.do
'종목명': 302,
'주문수량': 900,
'주문가격': 901,
'미체결수량': 902,
'체결누계금액': 903,
'원주문번호': 904,
'주문구분': 905, #(+매수, -매도, -매도정정, +매수정정, 매수취소, 매도취소)
'매매구분': 906, #(보통, 시장가등)
'매도수구분': 907, # 매도(매도정정, 매도취도 포함)인 경우 1, 매수(매수정정, 매수취소 포함)인 경우 2
'주문/체결시간': 908, #(HHMMSS)
'체결번호': 909,
'체결가': 910,
'체결량': 911,
'현재가': 10,
'(최우선)매도호가': 27,
'(최우선)매수호가': 28,
'단위체결가': 914,
'단위체결량': 915,
'당일매매수수료': 938,
'당일매매세금': 939,
'거부사유': 919,
'화면번호': 920,
'터미널번호': 921,
'신용구분(실시간 체결용)': 922,
'대출일(실시간 체결용)': 923,
},
'매도수구분': {
'1': '매도',
'2': '매수'
},
'잔고': {
'계좌번호': 9201,
'종목코드': 9001,
'종목명': 302,
'현재가': 10,
'보유수량': 930,
'매입단가': 931,
'총매입가': 932,
'주문가능수량': 933,
'당일순매수량': 945,
'매도매수구분': 946,
'당일총매도손익': 950,
'예수금': 951,
'(최우선)매도호가': 27,
'(최우선)매수호가': 28,
'기준가': 307,
'손익율': 8019
},
}
3. 요약
아래와 같이 크게 2개 범위에서 강의를 진행하였습니다.
(1) 실시간 등록 및 받아오기 함수 : SetRealReg와 GetCommRealData.
(2) FID 번호 모음 : 위의 코드 확인
다음 강의에서는 오늘 배웠던 주제로 저희가 등록한 코드에 대하여 실시간 데이터를 받아 오겠습니다. 감사합니다.
'주식 자동매매 강의 > 기초반(모든 코딩의 뿌리)' 카테고리의 다른 글
주식자동매매 44강. 실시간 자동매매 구현(5), 원하는 종목 실시간 현재가 키움 서버에 요청하기 (4) | 2022.06.10 |
---|---|
주식자동매매 43강. 실시간 자동매매 구현(5), DB에 저장된 종목 가져오기 (12) | 2022.06.09 |
주식자동매매 41강. 실시간 자동매매 구현(3), 자동 매매 시작 GUI(Push Button) 및 스레드 스크립트 생성 (9) | 2022.06.07 |
[특강] 주식자동매매 프로그램 GUI 우측 정렬, 천(1000) 단위 구분 콤마(comma) 설정하기 (10) | 2022.06.05 |
주식자동매매 40강. 실시간 자동매매 구현(2), 매수/매도 관련 내용 QTable Widget에 입력하기 (8) | 2022.06.02 |