파이썬을 이용한 주식 자동매매 시스템 - 주문
SendOrder 함수를 통해 주문을 전송하고, OnReceiveChejanData라는 이벤트핸들러에서 GetChejanData라는 메서드를 호출해 체결된 데이터를 얻어오면 된다.
- 주식 주문 Tr
LONG SendOrder( BSTR sRQName,
BSTR sScreenNo,
BSTR sAccNo,
LONG nOrderType,
BSTR sCode,
LONG nQty,
LONG nPrice,
BSTR sHogaGb,
BSTR sOrgOrderNo)
def send_order(self, rqname, screen_no, acc_no, order_type, code, quantity, price, hoga, order_no):
self.dynamicCall("SendOrder(QString, QString, QString, int, QString, int, int, QString, QString)",
[rqname, screen_no, acc_no, order_type, code, quantity, price, hoga, order_no])
체결 이벤트 핸들러
OnReceiveChejanData에서는, 아래와 같은 입력값이 주어진다.
sGubun – 체결구분 – 0: 주문체결통보, 1: 국내주식 잔고통보, 4: 파생상품 잔고통보
nItemCnt - 아이템갯수
sFidList – 데이터리스트 - 데이터 구분은 ‘;’ 이다.
def _set_signal_slots(self):
self.OnReceiveChejanData.connect(self._receive_chejan_data)
def _receive_chejan_data(self, gubun, item_cnt, fid_list):
print(gubun)
print(self.get_chejan_data(9203))
- 체결된 데이터 확인
BSTR GetChjanData(long nFid)
nFid – 체결잔고 아이템
def get_chejan_data(self, fid):
ret = self.dynamicCall("GetChejanData(int)", fid)
return ret
코드 실행
주문이 정상적으로 전송되는지 확인하기 위해서는 main에서 아래와 같이 실행을 해보면 된다.
정상적으로 전송되었다면 0을 return한다.
if __name__ == "__main__":
# 연결 (모의투자용 계좌)
app = QApplication(sys.argv)
kiwoom = KiwoomTrade()
kiwoom.comm_connect()
account_number = kiwoom.get_login_info("ACCNO")
account_number = account_number.split(';')[0]
kiwoom.send_order("RQ_1", "0101", account_number, 1, "000660", 10, 0, "03", "")
nFid
20 | 체결시간 | (HHMMSS) |
10 | 현재가, | |
11 | 전일 | 대비 |
12 | 등락율 | |
27 | | |
28 | | |
15 | 거래량, | 체결량 |
13 | 누적거래량, | 누적체결량 |
14 | 누적거래대금 | |
16 | 시가 | |
17 | 고가 | |
18 | 저가 | |
25 | 전일대비 | 기호 |
26 | 전일거래량 | 대비(계약, 주) |
29 | 거래대금 | 증감 |
30 | 전일거래량 | 대비(비율) |
31 | 거래회전율 | |
32 | 거래비용 | |
228 | 체결강도 | |
311 | 시가총액(억) | |
290 | 장구분 | |
691 | K,O | |
ref: https://wikidocs.net/5931