1. 국내주식/1-2. 키움 OpenAPI (사용)

(주식 자동 매매) 키움증권 OpenAPI - 미체결 주문을 SendOrder 함수로 취소하기 (2) 취소주문 테스트

봄이오네 2022. 10. 7. 09:12
반응형

1. 들어가며

지난 글에서는 삼성전자의 매도주문에 대해 취소하는 내용을 알아보았다.
이미 제출된 매도주문(원주문 번호)을 취소하기 위해서는,
OpenAPI에서 제공하는 SendOrder함수를 이용하여야 한다.
9개 변수를 넣어 주어야 함수가 실행된다.

이번 글에서는 매도주문을 취소하기 위해,
SendOrder함수의 9개 변수를 어떻게 넣어주어야 하는지
테스트한 결과를 설명하고자 한다.


2. 사전 준비

매도주문은 OpenAPI를 통해 접수하지 않고, 직접 매도 주문 버튼을 클릭했다.
필자가 알고 싶었던 것은 SendOrder함수의 9개 변수를
어떻게 넣어주어야 하는지, 그 구성내역을 알고 싶었기 때문이다.

아래 <그림1-2>처럼, 매도주문을 제출(f12)하면, 주문번호(94082)이 생성된다.

※ 주문번호는 시간에 따라 5자리 혹은 6자리가 된다.
일괄적으로 설명할 수는 없겠지만,
오전에는 5자리, 오후에는 6자리 형식이 되는 것 같다.
(거래량에 따라 다름)

※ 아래 <그림1-2>의 매도주문은 오전 11:23분에 캡쳐한 화면(5자리)이다.

< 그림1-1. 매도주문 사진이 만들어진 시간 >

 

< 그림1-2. 매도주문을 제출하면 주문번호(94082)가 생성된다 >


3. 매도주문 취소에 대한 테스트 현황

1) 테스트 실행한 배경

매도주문 취소를 위해
SendOrder 함수의 9개 변수를 어떻게 넣어야 될지 몰라,
무작위로 넣고, 취소주문을 실행해 보았다.

2) 1차 테스트 결과

SendOrder 9개 변수를 임의로 정하여 넣어보았다.
14개의 명령어를 실행하는데, 한번은 되지 않을까?
* rqname, scron, accno, ordertype, scode, qty, price, hogagb. orgorderno

※ 테스트 결과 : 매도취소 하지 아니함
사유 : 9번째 변수(orgorderno)가 공백이다.
→ 9번째 변수에는 무엇인가를 넣어주어야 하는 것이었다.

OpenAPI에는 원주문 번호를 넣어라고 하는데, 어떤 원주문을 말하는 것일까?
매도주문을 제출하면 부여되는 것이 "원주문번호"이다.
<그림1-2>에서 매도주문의 원주문 번호는 "94082"이다.
→ 이 매도주문의 원주문 번호가 SendOrder 함수의 9번째 인수에 들어가야 한다.

< 그림2-1. 매도취소를 위한 1차 테스트 결과는 실패(원주문 번호 미기재) >

 

3) 2차 테스트 결과

앞에서 이야기했듯이, 매도주문은 필자가 제출(f12)하였다.
제출시, 원주문 번호가 나오길래, 파이썬에 개별적으로 넣어주었다.

< 그림2-2 >는 파이썬에서 경우에 따라 원주문 번호를 넣어준 내용이다.
각 명령어(37줄~53줄)까지 마지막 줄의 원주문번호가 다른 것은,
패턴을 바꾸어가면서 계속 매도취소주문을 시도하였기 때문이다.

< 그림2-2 >를 보면, 39줄 한 케이스만 실행이 안된다. (원주문 번호 미기재)

< 그림2-2. 매도주문이 성공적으로 취소(실행)된 화면 >


아래는 매도 주문(원주문 113474)에 대해 <그림2-2> 37줄에 의해 취소된 내용이다.

< 그림2-3. OpenAPI의 SendOrder함수에 의해 취소된 주문 내역 현황 1차 >
< 그림2-4. OpenAPI의 SendOrder함수에 의해 취소된 주문 내역 현황 2차 >


4. 테스트 결과

매도주문의 취소와 관련하여서는
SendOrder 함수의 9개 변수에 대해 아래와 같은 결론을 얻었다.

이미 제출된 주문에 대해, 취소주문을 할 때, 9개 변수 설정 방법
① rqname(사용자 구분명) : 사용자가 임의로 작성 (아무거나 지으면 됨)
② scron(화면번호) : 사용자가 임의로 작성 (아무거나 지으면 됨)
③ accno(계좌번호) : 사용자 계좌 넣어주면 됨
ordertype(주문유형) : 매도주문 취소이면 4 입력
scode(종목코드) : 취소하고자 하는 종목코드
⑥ qty(수량) : < 그림2-2 >에서 삼성전자 2주를 팔려고 했으나,
0을 넣어도 취소됨
(취소시 정확한 수량을 넣을 필요 없음, 0을 넣는다)
⑦ price(가격) : < 그림2-2 >에서 삼성전자 2주를 57100원으로 팔려고 했으나,
0을 넣어도 취소됨
(취소시 정확한 가격을 넣을 필요 없음, 0을 넣는다)
⑧ hogagb(거래구분) : < 그림2-2 >에서 확인했듯이, 취소시에는 00이든 03이든 상관없다.
본인 취향에 맞혀 넣되, 필자는 취소시 00을 넣는다.
orgorderno(원주문번호) : 매도주문시 신청한 원주문번호는 넣어야 한다.

즉, 주문취소시 제대로 입력해 주어야 하는 것은 3가지이다.

  • 3개 : order(주문유형), scode(종목코드), orgdrderno(원주문 번호) 제대로 써주어야 한다.
  • 6개 : 임의로 적어주거나, 0으로 넣어주면 된다.

5. 마치며

키움증권 OpenAPI를 활용하여, 이미 제출한 매도주문 취소 방법을 알아보았다.
장 시간도 짧고, 시도해보아야 할 내용은 많아서,
약간 초조한 상태에서 테스트를 한 것 같다.
그래도 "취소 주문"이 주문체결내역에서 삭제되었을 때는 정말 기분이 좋았다.

다음에는 매도주문시 부여되는 원주문번호를
SendOrder 함수에서 활용할 수 있는 방법을 설명할 예정이다.

반응형