1. 들어가며
지난 글에서는 키움증권 OpenAPI의 SendOrder 함수를 이용하여
미체결 주문을 취소했다.
이번 글에서는 이미 제출한 주문에 대한 취소주문에 적용되는 번호가
"주문번호"인지 "원주문번호"인지 구분을 할 것이다.
구분이 필요한 이유는,
필자도 지금껏 취소할 때 들어가는 주문번호는 "원주문번호"라고
착각했기 때문인다.
→ 실제 취소할 때,
필요한 번호는 매도주문 당시 부여받은 "주문번호"이다.
위 착각을 일으키는 결정적인 이유는,
안타깝게도 Koa Studio와 개발가이드에
혼동 소지가 있는 내용을 기재하였기 때문이다.
2. 검토 배경
지난번에도 설명했지만, SendOrder함수의 9개 변수 중 3개는 제대로 넣어주어야 한다.
* 3개 : 주문유형(1매수, 2매도, 4매도취소 등), 종목코드, 원주문 번호
위의 SendOrder함수를 프로그램에 적용하려고
opt10075(미체결요청)을 활용하여 원주문 번호를 가져와서
주문을 취소를 하려고 했는데,
아.뿔.사...... 취소가 안된다.
Koa Studio와 OpenAPI 개발가이드에서 설명한 "원주문 번호"를
SendOrder함수에 넣었는데, 왜 취소가 안되는 걸까?
https://springcoming.tistory.com/43?category=1048804
3. Koa Studio와 OpenAPI 개발가이드의 내용 확인
1) Koa Studio에서 변수 확인
아래 <그림1>은 Koa Studio에서 SendOrder함수에 대한 설명이다.
9번째 인수에는 "원주문번호"를 넣어라고 한다.
2) 개발가이드에서 확인
아래 <그림2>에서도 키움증권 OpenAPI의 SendOrder함수에 대한 설명에서도,
원주문 번호를 넣어라고 한다.
4. 테스트 진행 사유
위의 <그림1> 및 <그림2>에 따라 원주문 번호를 넣으면 주문이 취소될까?
필자는 분명 지난 시간 매도주문 취소를 할 때, 코드번호를 넣어주고
취소를 성공한 사례를 설명하였다.
생각해보니, 그 때도 "매도 제출시 부여받은 주문번호"를 SendOrder의 9번째 변수에 넣었다.
매도취소를 할 때는 분명히 "매도 주문시 부여받은 코드번호"를 넣어주었는데,
Koa Studio와 OpenAPI 개발가이드에서는 "원주문 번호"를 넣어라고 하니,
어떤 장단에 맞혀야 하는건가?
뭐, 이렇게 막힐 때는 직접 실험해 보는 수 밖에 없다.
5. 테스트 결과
테스트는 매도주문을 제출해 두고나서,
원주문번호 및 매도주문번호를 각각 입력 후 각각 실행해 보았다.
1) 원주문 번호 입력 → 취소되지 아니함
카카오(035720) 5개 매도 주문을 넣었고,
opt10075에서 제공하는 "원주문번호"를 넣고 매도 취소했으나, 취소 안됨
개발가이드에서 말한대로 opt10075에서 수신받은 원주문 번호 입력해도
매도 취소가 되지 아니한다.
그 이유는 opt10075에서 제공하는 "원주문번호"를 000000으로 주어지기 때문이다.
아래 <그림3-1>에서도 매도주문(①)을 하고, SendOrder 함수를 이용하여 취소 시도를 하였으나,
실시간계좌관리(②)에서는 취소되지 아니하였고,
주문체결내역(③)에서도 취소 메시지가 뜨지 않는다.
→ opt10075에서 받는 원주문 번호는 <개발가이드>에서 말하는 "원주문 번호"는 아닌 것이다!
2) 매도주문시 부여받은 주문번호 → 매도주문 취소됨
카카오(035720) 5개 매도 주문을 넣었고,
opt10075에서 제공하는 "주문번호"를 넣고 매도 취소 시도함 → 매도주문 취소 성공!
아래 <그림3-1>에서도 매도주문(①)을 하고, SendOrder 함수를 이용하여 취소 시도를 하였으나,
실시간계좌관리(②)에서는 취소되지 아니하였고,
주문체결내역(③)에서도 취소 메시지가 뜨지 않는다.
→ opt10075에서 받는 원주문 번호는 "매도시 부여받은 코드번호이다"
6. 파이참에서 확인
다음 글에서 설명할 opt10075(미체결 요청) 관련하여
미체결 내역이 있을 때,
주문번호(order_num)과 원주문번호(orgorder_num)을 print를 해보았다.
order_num : 141596
orgorder_num : 0000000
7. 마치며
원래 이 글은 opt10075(미체결요청) 설명을 하고, 글을 전개했어야 했다.
또한, SendOrder함수 관련해서는 글을 2번만 쓰려고 했다.
그런데, 실제 주문을 넣으려고 opt10075를 실행하여 받은 "원주문번호"로는
주문이 삭제되지 않으면서,
그때부터 매도취소시,
SendOrder의 "원주문번호" = opt10075 "원주문번호"와 같을까?
의문이 들기 시작한 것이다.
결론은
SendOrder의 "원주문번호"는
opt10075에서 매도주문 시 부여받은 주문번호를 말하는 것이다.
이로써, SendOrder함수에 대한 설명을 끝내려고 한다.
다음 글에서는 TR요청 중 주문번호를 받기 위한 opt10075를 알아볼 것이다.
'1. 국내주식 > 1-2. 키움 OpenAPI (사용)' 카테고리의 다른 글
(주식 자동 매매) 키움증권 OpenAPI - 주식호가요청(opt10004) (0) | 2022.11.18 |
---|---|
(주식 자동 매매) 키움증권 OpenAPI - 파이썬을 통해 1분봉 받기 (opt10080) (0) | 2022.10.11 |
(주식 자동 매매) 키움증권 OpenAPI - 미체결 주문내역 가져와서 주문취소하기 (2) (opt10075 + SendOrder) (0) | 2022.10.10 |
(주식 자동 매매) 키움증권 OpenAPI - 미체결 주문내역 가져오기 (1) (opt10075) (0) | 2022.10.09 |
(주식 자동 매매) 키움증권 OpenAPI - 미체결 주문을 SendOrder 함수로 취소하기 (2) 취소주문 테스트 (5) | 2022.10.07 |
(주식 자동 매매) 키움증권 OpenAPI - 미체결 주문을 SendOrder 함수로 취소하기 (1) 취소 방법 (0) | 2022.10.06 |
(주식 자동 매매) 키움증권 OpenAPI - 1분봉 데이터 실시간 받기(opt10080) (2) | 2022.10.05 |
(주식 자동 매매) 키움증권 OpenAPI - SendOrder함수를 이용하여 매수/매도하기 (0) | 2022.10.01 |