트레이딩

[키움API] KOA StudioSA 톺아보기 - 주문과 잔고처리 (1)

성민석 2023. 7. 21. 11:05

안녕하세요 성민석입니다.

오늘은 키움증권 API와 관련된 기본 설명과 동작을 설명드릴 예정입니다. 기본적으로 KOA StudioSA에서 제공해주는 내용을 바탕으로 글을 작성해나갈 예정입니다. 여기서 제 개인적인 의견이나 첨언이 들어갈 경우 파란색으로 표시하겠습니다.

 

지난 포스팅에는 키움API와 관련된 실시간 데이터를 수신하는 내용에 대해서 알려드렸습니다.

2023.07.20 - [트레이딩] - [키움API] 조회와 실시간 데이터 처리 (2) - 실시간

 

[키움API] 조회와 실시간 데이터 처리 (2) - 실시간

안녕하세요 성민석입니다. 오늘은 키움증권 API와 관련된 기본 설명과 동작을 설명드릴 예정입니다. 기본적으로 KOA StudioSA에서 제공해주는 내용을 바탕으로 글을 작성해나갈 예정입니다. 여기서

minsuk-sung.tistory.com

이번 포스팅에서는 키움증권API를 이용하여 주문을 넣는 내용에 대해서 알려드리겠습니다. 이후 이어지는 내용으로는 잔고처리하는 내용도 다루겠습니다. 제 경우엔 미리 말씀드리자면, 시장가 주문이나 최우선호가주문만 사용하고 있습니다. 물론 Order Manage System (OMS)를 개발하실 분들은 지정가 주문까지 아셔야겠지만, 이 글에서는 제가 사용하고 있는 주문 형태 위주로 알려드리겠습니다.

 


개요

OpenAPI를 이용하면 국내주식코스피200 지수선물/옵션(해외선물은 따로 API가 있습니다.)을 거래할 수 있습니다. 상품별로 전용 주문함수가 있으며 SendOrderCredit()함수를 이용해서 대주를 제외한 신용주문을 지원합니다. (미수는 아래 나오겠지만, HTS와 달리 따로 없습니다.)

※ 정정주문은 원주문에 대한 가격정정만 가능하며 거래구분을 변경하는 정정주문은 지원하지 않습니다.

 

계좌비밀번호 설정

OpenAPI는 로그인 후 한번 계좌비밀번호를 입력/등록 해야 합니다. 계좌비밀번호 설정은 계좌비밀번호 입력창에서만 가능합니다. 이 입력창을 출력하는 방법은 2가지로 제공됩니다.

 

1. 메뉴이용 - 로그인후 윈도우의 작업표시줄상에 깜박이는 트레이아이콘의 마우스우측 메뉴(모니터 오른쪽 하단)에서 "계좌비밀번호 저장" 선택 (AUTO체크를 꼭 해두셔야합니다. 비밀번호를 입력하고 "전체계좌에 등록"을 꼭 눌러야합니다.)

 

 

2. 함수이용 - 로그인후 OpenAPI.KOA_Functions(_T("ShowAccountWindow"), _T("")) 호출

※ 계좌비밀번호 입력시 주의할 점 : OpenAPI는 계좌비밀번호를 검증하지 않고 입력된 값을 그대로 암호화하여 서버로 전송합니다. 계좌비밀번호 오류가 일어나지 않도록 오타 등 입력에 주의하시기 바랍니다.

 

주문처리단계

주문 처리 순서는 아래와 같습니다.

1. SendOrder(주문발생) → 2. OnReceiveTRData(주문응답) → 3. OnReceiveMsg(주문메세지수신) → 4. OnReceiveChejan(주문접수/체결)

 

1. SendOrder

사용자가 호출. 리턴값 0인 경우 정상

 

이렇게 PyQt의 dynamicCall 함수를 이용하여 주문을 넣으면 됩니다.

서버에 주문을 전송하는 함수 입니다.
9
개 인자값을 가진 주식주문 함수이며 리턴값이 0이면 성공이며 나머지는 에러입니다.
1
초에 5회만 주문가능하며 그 이상 주문요청하면 에러 -308을 리턴합니다.
※ 시장가주문시 주문가격은 0으로 입력합니다. 주문가능수량은 해당 종목의 상한가 기준으로 계산됩니다.
※ 취소주문일때 주문가격은 0으로 입력합니다.

[
거래구분]
00 : 
지정가
03 : 
시장가
05 : 
조건부지정가
06 : 
최유리지정가
07 : 
최우선지정가
10 : 
지정가IOC
13 : 
시장가IOC
16 : 
최유리IOC
20 : 
지정가FOK
23 : 
시장가FOK
26 : 
최유리FOK
61 : 
장전시간외종가
62 : 
시간외단일가매매
81 : 
장후시간외종가
※ 모의투자에서는 지정가 주문과 시장가 주문만 가능합니다.
주문가격을 입력하지않는 주문을 정리하면 다음과 같습니다. 여기서 괄호값은 각 주문별 거래구분값입니다.
- 
시장가(03), 최유리지정가(06), 최우선지정가(07),
- 
시장가IOC(13), 최유리IOC(16)
- 
시장가FOK(23), 최유리FOK(26)
- 
장전시간외종가(61), 장후시간외종가(81)

[
정규장 외 주문]
장전 동시호가 주문
  08:30 ~ 09:00. 
거래구분 00:지정가/03:시장가 (일반주문처럼)
  
 08:20 ~ 08:30 시간의 주문은 키움에서 대기하여 08:30 에 순서대로 거래소로 전송합니다.
장전시간외 종가
  08:30 ~ 08:40. 
거래구분 61:장전시간외종가.  가격 0입력
  ※ 전일 종가로 거래. 미체결시 자동취소되지 않음
장마감 동시호가 주문
  15:20 ~ 15:30. 
거래구분 00:지정가/03:시장가 (일반주문처럼)
장후 시간외 종가
  15:40 ~ 16:00. 
거래구분 81:장후시간외종가.  가격 0입력
  ※ 당일 종가로 거래
시간외 단일가
  16:00 ~ 18:00. 
거래구분 62:시간외단일가.  가격 입력
   10분 단위로 체결, 당일 종가대비 +-10% 가격으로 거래

 

2. OnReceiveTRData

주문발생시 첫번째 서버응답. 주문번호 취득 (주문번호가 없다면 주문거부 등 비정상주문)

(OMS개발하시는 분들은 반드시 이 주문번호를 따로 보관할 수 있는 코드가 필요합니다.)

 

3. OnReceiveMsg

주문거부 사유를 포함한 서버메세지 수신

 

4. OnReceiveChejan

주문 상태에따른 실시간수신 (주문접수, 주문체결, 잔고변경 각 단계별로 수신됨)

 

OnReceiveTRData()이벤트는 주로 조회요청후 데이터수신 이벤트지만 주문시에도 발생됩니다. 주문이 정상인 경우 이 이벤트내부에서 주문번호를 얻을 수 있습니다. 비정상주문인 경우 주문번호는 공백("")으로 전달됩니다. 각 주문함수의 리턴값이 0(성공)이여도 장 개시전 주문, 시장가 주문가격입력, 호가범위를 벗어난 주문등 다양한 원인으로 주문은 실패할수 있습니다.

 

※ 주의(역전현상) : 주문건수가 폭증하는 경우 OnReceiveChejan 이벤트가 OnReceiveTRData 이벤트보다 앞서 수신될 수 있습니다.

 

주문 유의사항

※ 주문은 1초당 5회로 제한 됩니다. (조회횟수와는 별개로 카운트 됩니다.) (사실상 TR조회와 다르기 때문에 API 제한 횟수를 고려할 때, 최소 주문간 간격이 0.2초만 되도 됩니다.)

 

주문가능수량 이상으로 주문하는 경우 미수주문으로 처리될 수 있습니다. 영웅문4 [0398] 화면등에서 계좌증거금 변경등록으로 100% 현금 주문만 가능하도록 설정할 수 있습니다. (이게 생각보다 중요합니다. 처음에 시스템 트레이딩할 때, 이걸 고려하지 않아서 많이 당황했던 적이 있습니다. 꼭 설정해두시길 바랍니다.)

 

 

※ 시장가주문시 최대주문가능수량은 상한가를 기준으로 계산됩니다.

(예시: 현재 예수금이 100만원인데 현재 가격이 11,000원이고, 당일 상한가 가격은 13,000원이면 최대주문가능수량은 13,000원으로 100만원을 나눈 76주가 됩니다. 11,000원으로 나눈 가격이 아니란 점을 꼭 알고 있으셔야 합니다.)

 

※ 시장가주문시 주문가격은 0으로 입력합니다.

(즉, 가격은 중요하지 않고, 수량만 넣어주면 됩니다. 단, 최대주문가능수량 이하로 주문을 넣어야합니다.)

 

※ OpenAPI에서는 거래구분 정정주문은 지원되지 않습니다.

예) 지정가 매도 -> 시장가 매도로 정정 (불가. 원주문 취소 후 신규주문으로 진행하시기 바랍니다.)

 

※ 주문내역은 영웅문HTS, MTS 등 매체간 공유됩니다. 타매체에서 발생시킨 주문체결도 OnReceiveChejan 이벤트로 실시간 수신됩니다. (HTS나 MTS에서 직접 손매매로 대응해도 API에서 그 결과를 처리할 수 있습니다. 이게 좋긴 한데, 예외처리 안되어 있으면 운용중인 프로그램에 오류가 발생할 수 있기 때문에 개발시 유의하셔야 합니다.)

 

※ 모의투자 서버에서는 주문 불가 종목이 존재합니다. 모의투자 규정을 확인해주시기 바랍니다. https://www.kiwoom.co.kr/nkw.templateFrameSet.do?m=m1101020000

 


 

키움증권 API와 관련된 자세한 내용을 확인하고 싶으신 분들은 PDF를 확인해보시면 좋을 것 같습니다.

 

마지막으로 같이 트레이딩하는 분들과 소통하고 싶습니다. 언제든지 트레이딩이나 인공지능과 관련된 내용을 함께 공유하고 토론하고 싶으시다면 아래의 오픈 카카오톡 링크로 연락주세요.
https://open.kakao.com/me/minsuksung

 

성민석 (Minsuk Sung)님의 오픈프로필

인공지능을 공부하는 연구자이자 시스템 트레이딩을 하는 트레이더입니다. 

open.kakao.com

 

728x90
반응형