[키움 조건검색식 주식자동매매(18)] 미체결/체결 잔고 업데이트 하기
본문 바로가기

주식 자동매매 강의/중급반(시황 및 차트 구현)

[키움 조건검색식 주식자동매매(18)] 미체결/체결 잔고 업데이트 하기

반응형

 이전 강의에서는 실시간 매수 주문을 전송하였다면, 주문 결과가 미체결 상태인지 또는 체결상태인지를 파악해야 합니다. 체결이 되어야 우리가 원하는 가격에 매도를 할 수 있기 때문이지요.

 

 그리고 미체결 상태면, 빨리 매수를 취소하고 다시 매수 주문을 넣어야겠지요. 이 정보를 받아오기 위한 코딩을 해보겠습니다. 참고로 기초반 강의에서 미체결/체결 잔고 업데이트에서 이미 다 설명드린 부분이니 핵심만 짚고 넘어가겠습니다.

 

1. 체결 정보 받아오는 슬롯 및 FID 번호 저장 스크립트 구성 

 아래와 같이 OnReceiveChejanData 함수를 이용해 체결 및 잔고 정보를 self.chejan_slot에 받습니다.

반응형

체결 정보 받아오는 슬롯 구성
체결 정보 받아오는 슬롯 구성

 아래 KOA Studio를 확인하시면 주문체결에 대한 정보를 받아오기 위한 FID 번호가 보이시죠?

KOA Studio 주문 체결
KOA Studio 주문 체결

 FID 정보를 kiwoomType이라는 이름의 스크립트에 딕셔너리로 다 모아 두었죠? 관련 코드는 기초반에 다 있습니다.

FID 정보
FID 정보

 관련 정보를 받아오는 슬롯도 만들었고 어떠한 정보를 가져올 지 선택할 수 있는 FID 정보도 다 구현되어 있으니 우리는 이제 필요한 정보만 받아오면 됩니다.

 

2. chejan_slot에서 미체결 정보

 다시 말씀드리지만 기초반에서 했던 내용의 반복 입니다. 우선 우리가 매수 주문이 들어가면 체결되지 않은 상태 즉 미체결 상태이죠? 이때 sGubun에 0이 키움 서버로부터 전송되고, 체결이 되면 1이 키움 서버로부터 전송됩니다.

chejan_slot에서 미체결 정보
chejan_slot에서 미체결 정보

 자그럼 sGubun이 0일 때 아래와 같은 정보들을 받아옵니다.

 - GetChejanData 함수와 kiwoomType에 있는 FID번호를 이용해 계좌번호/종목코드/종목명/주문상태/주문 수량.... 등의 다양한 정보를 받아옵니다. 궂이 이렇게 다 받을 필요는 없는데 강의차원에서 다 받아오는 것이고 주문상태랑 주문수량 주문 가격 정도만 있어도 큰 문제는 없습니다. 본인이 원하는 정보를 받아오시면 됩니다.

 

 그 외에도 아래와 같은 정보를 얻어 올 수 있는데 여기서 조심하셔야 될 것이 chegual_price 같은 경우 없으면 empty 즉 ""으로 데이터가 넘어오니 차 후에 에러를 방지하기 위해 empty면 0을 넣어 줍니다. 체경량도 동일하고요.

 그리고 별표가 있는데 이제 미체결 잔고에 있는 종목의 경우 not_account_stock_dict에 저장합니다. 즉, 미체결 잔고에 있는 모든 종목은 order_number로 구분하여 전부 저장한다는 뜻이죠. 그러면 order_number로 구분된 not_account_stock_dict에 있는 종목의 정보를 넣어야겠죠? 이미 우리는 위에서 다양한 미체결 정보를 받아 왔습니다. not_account_stock_dict에 넣기만 하면 됩니다.

chejan_slot에서 미체결 정보
chejan_slot에서 미체결 정보

 아래와 같이 not_account_stock_dict에 update함수를 이용하여 다양한 정보를 업데이트시킵니다.

not_account_stock_dict에 정보 업데이트
not_account_stock_dict에 정보 업데이트

 위의 코딩을 완료하셨다면, 이제 주문된 미체결 잔고의 모든 정보를 가져온 것과 같습니다. 하지만 미체결 잔고로는 딱히 할 것이 없습니다. 미체결 잔고의 주문 가격 대비 현재가가 밑에 있다면, 취소하고 다시 주문을 넣는 정도를 할 수 있습니다. 뭐 그건 다음 강의 때 말씀드리겠습니다.

 

3. chejan_slot에서 체결 정보

 sGubun에 1이 들어오게 되면 주문 넣은 정보가 체결되었다는 것입니다. 즉, 우리가 매수 주문 넣은 아이가 체결이 된 것이지요. GetChejanData와 잔고 FID 번호를 이용해 다양한 체결 정보를 받아옵니다.

chejan_slot에서 체결 정보
chejan_slot에서 체결 정보

그리고 위의 정보를 입력해야 할 방이 있어야겠지요?? 아래 그림을 보시면 jango_dict에 코드를 입력시킵니다. 그리고 현재가부터 매수호가까지 모든 정보를 저장합니다. 여기까지 하셨으면 체결된 잔고 정보를 모두 입력한 것과 같습니다.

jango_dict 업데이트
jango_dict 업데이트

 여기서 중요한 것이 매도 매수 구분입니다. 만약 매수였다면, 우리가 jango_dict 정보를 가지고 매도를 할 수 있겠지요? 즉, 매도 정보의 척도가 된다는 뜻입니다. 상당히 중요합니다!

 

 또 하나, 만약 매도가 완료되고 stock_quan이 0이 되면 우리 계좌좐고에서 삭제하거나 매매 가능 수량을 0으로 만들어 차 후 코딩 시 에러가 뜨지 않게 코딩합니다.

 

 여기까지 코딩하셨으면, 체결이 되었는지 또는 체결이 어떻게 되었는지 등의 모든 정보를 확인할 수 있습니다. 이정보를 가지고 매수/매도를 취소할 것인지, 매도 시에 얼마큼 매도할 것인지 등의 판단을 할 수 있습니다.

 

 오늘 강의는 여기까지입니다. 수고하셨습니다.

반응형

.link_tit