반응형
kiwoom.py의 순서대로 다음 코드를 보자.
def get_ocx_instance(self):
self.setControl("KHOPENAPI.KHOpenAPICtrl.1")
def event_slots(self):
self.OnEventConnect.connect(self.login_slot)
self.OnReceiveTrData.connect(self.trdata_slot)
def real_event_slots(self):
self.OnReceiveRealData.connect(self.realdata_slot)
self.OnReceiveChejanData.connect(self.chejan_slot)
get_ocx_instance(self)는 KHOpenAPI를 자동으로 실행시키는 역할을 한다.
아래의 set.Control대로 불러온다.
event_slots(self)는 이름그대로 event Slot이다.
self.OnEventConnect.connect(self.login_slot)를 통해 login slot과 연결되기도 하며,
self.OnReceiveTrData.connect(self.trdata_slot)를 통해 trdata_slot과 연결되기도 한다.
복잡하긴한데, Slot은 그냥 함수라고 생각하자. 상기 slot들은 후술한다!!
real_event_slots(self)는 위의 event_slot(self)를 real time 거래를 할 때의 버전으로 생각하면 된다.
기능은 동일하지만, 실시간 체결정보 등의 signal을 받아 동작하는 slot이다.
이어서 가보자!
def signal_login_commConnect(self):
self.dynamicCall("CommConnect()")
# self.login_event_loop = QEventLoop()
self.login_event_loop.exec_()
def login_slot(self, errCode):
print(errors(errCode))
self.login_event_loop.exit()#d이거 뭔지 확인
signal_login_commConnect(self)는 login event loop가 시작되는곳이다.
login signal을 받을때까지 event loop를 돌린다.
login_slot(self, errCode)는 login_slot, 즉 login 결과를 받는 곳이다.
결과는 errCode라는 곳에서 오는데...
생각해보니 errCode를 적지 않았다.
errCode.py는 별도로 불러오는 모듈처럼 구성돼있는데, 이 녀석의 생김새만 보는 것으로 마무리하자.
def errors(err_code):
err_dic={0: ('OP_ERR_NONE','정상처리'),
-10: ('OPP_ERR_FAIL','실패'),
-100: ('OPP_ERR_LOGIN','사용자정보교환실패'),
-101: ('OPP_ERR_CONNECT','서버접속실패'),
-102: ('OPP_ERR_VERSION','버전처리실패'),
-103: ('OPP_ERR_FIREWALL','개인방화벽실패'),
-104: ('OPP_ERR_MEMORY','메모리보호실패'),
-105: ('OPP_ERR_INPUT','함수입력값오류'),
-106: ('OPP_ERR_SOCKET_CLOSED','통신연결종료'),
-200: ('OPP_ERR_SISE_OVERFLOW','시세조회과부하'),
-201: ('OPP_ERR_RQ_STRUCT_FAIL','전문작성초기화실패'),
-202: ('OPP_ERR_RQ_STRING_FAIL','전문작성입력값오류'),
-203: ('OPP_ERR_NO_DATA','데이터없음'),
-204: ('OPP_ERR_OVER_MAX_DATA','조회가능한종목수초과'),
-205: ('OPP_ERR_DATA_RCV_FAIL','데이터수신실패'),
-206: ('OPP_ERR_OVER_MAX_FID','조회가능한FID수초과'),
-207: ('OPP_ERR_REAL_CANCEL','실시간해제오류'),
-300: ('OPP_ERR_ORD_WRONG_INPUT','입력값오류'),
-301: ('OPP_ERR_ORD_WRONG_ACCTNO','계좌비밀번호없음'),
-302: ('OPP_ERR_OTHER_ACC_USE','타인계좌사용오류'),
-303: ('OPP_ERR_MIS_2BILL_EXC','주문가격이20억원을초과'),
-304: ('OPP_ERR_MIS_5BILL_EXC','주문가격이50억원을초과'),
-305: ('OPP_ERR_MIS_1PER_EXC','주문수량이총발행주수의1%초과오류'),
-306: ('OPP_ERR_MIS_3PER_EXC','주문수량은총발행주수의3%초과오류'),
-307: ('OPP_ERR_SEND_FAIL','주문전송실패'),
-308: ('OPP_ERR_ORD_OVERFLOW','주문전송과부하'),
-309: ('OPP_ERR_MIS_300CNT_EXC','주문수량300계약초과'),
-310: ('OPP_ERR_MIS_500CNT_EXC','주문수량500계약초과'),
-340: ('OPP_ERR_ORD_WRONG_ACCTINFO','계좌정보없음'),
-500: ('OPP_ERR_SYMCODE_EMPTY','종목코드없음'),
}
result = err_dic[err_code]
return(result)
반응형
'정리된 글 > 코딩' 카테고리의 다른 글
(교육정리) Pandas와 Data 통계 - 1 (0) | 2023.07.25 |
---|---|
백준 알고리즘 문제 풀이 1764 : 듣보잡 (0) | 2023.07.05 |
[python][자동매매] 강의가 끝나고, 머릿속 정리 3. 계좌정보 불러오기 + Tr Data 불러오기 (0) | 2023.06.01 |
[python][자동매매] 강의가 끝나고, 머릿속 정리 1. init (1) | 2023.05.31 |
[Python][자동매매] Process finished with exit code -1073740791 (0xC0000409) 오류문 해결과정 (0) | 2023.05.29 |