PYTHON/AUTO TRADE SYSTEM

[자동 매매 시스템 구축하기] 주문 정보 관리하기 (8) - 주문 관련 기능 구현 시 주의할 점

  • -

이번 게시글에서는 키움증권 Open API를 활용한 주문 데이터 관리 기능을 구현하기 위해 꼭 알고 있어야 하는 필요한 요소에 대해 살펴보고자 한다.

 

 

첫째, 원주문번호 데이터를 관리해야 한다.

앞서 주문 데이터를 관리하기 위한 기능을 구현하는 과정에서 살펴봤듯이, 신규 주문과 정정 주문 등 주문의 유형 별로 발생하는 데이터의 형태가 다르고 해당 데이터를 처리해야 하는 방법도 상이하다. 따라서 어떤 주문이 되었든 간에 주문이 접수되었다면 해당 주문의 원주문번호를 반드시 기록해야 하고, 해당 원주문번호는 다른 곳에서 쉽게 찾아서 사용할 수 있도록 종목코드 및 주문 수량 등과 같은 데이터와 함께 하나의 몸처럼 움직이도록 관리해줘야 한다.

 

 

둘째, 주문은 1초에 5회까지만 가능하다.

이 내용은 특히 장이 시작되면서 보유하고 있는 모든 종목을 대상으로 특정 가격에 매도 주문을 넣어놓는 지정가 매도 기능을 사용할 때 특히 주의해야 한다. 본인의 경우에도 장이 시작되기 조금 전에 모든 종목에 대해 사전에 계산된 매도 예정 가격에 주문을 넣어놓도록 하고 있으며, 해당 가격을 계산하는 데에 기준이 되는 데이터들이 변경되면 새롭게 계산하고 해당 가격에 정정 주문을 넣도록 하고 있다.

따라서, for문을 통해 종목별로 주문을 넣는 경우에는 반드시 한 종목당 0.2초보다 긴 시간 텀을 두어야 한다. 물론 이 내용은 보유 종목이 5종목 이상일 경우에만 고려해야 하는 것이긴 하다. 왜냐하면 1초에 5회까지만 가능한데, 주문의 개수가 5개라면 오류는 발생하지 않기 때문이다. 

이 내용은 주문에만 해당하는 내용이 아니라, 키움증권 Open API를 이용한 모든 함수의 동작 과정에 관여하는 개념이므로 너무 많은 데이터를 요청해야 하는 경우라면 데이터를 요청하는 구간 사이사이에 적절한 시간 간격을 입력해줘야 한다.

 

 

셋째, 시장가 주문과 지정가 주문 간 정정 주문은 불가하다.

이 내용은 언뜻 보면 어렵게 느껴질 수도 있겠지만, 그렇게 어려운 내용은 아니다. 일단 시장가 주문으로 접수했던 주문을 지정가로 바꿀 일은 없을 것이다. 왜냐하면 시장가 주문으로 접수했던 주문은 곧바로 체결되기 때문에, 미체결되어 정정 주문을 넣어야 하는 상황이 일어날 일이 없기 때문이다. 문제는 반대의 경우이다. 지정가 주문을 접수했으나 상황이 변경되어 시장가로 매수 또는 매도해야하는 상황은 충분히 발생할 수 있다.

이 경우 지정가 주문으로 접수되었던 주문의 원주문번호를 얻어와서 해당 원주문번호로 정정 주문을 접수하면서 시장가로 접수하고자 하는 주문은 접수되지 않는다는 것이다. 따라서 지정가 주문으로 접수되었던 주문은 정정 주문 시에도 지정가 주문으로만 정정이 가능하다. 그렇다면 이런 경우는 어떻게 해결할 수 있을까?

  • 지정가 주문을 취소한 후 시장가 주문을 다시 접수한다.
  • 주문 가격을 하한가 또는 상한가로 지정하여 지정가 매도 정정 주문을 접수한다.

첫 번째 방법의 경우에는 특정 주문을 취소한 후 해당 물량 그대로 시장가 주문으로 접수하면 될 일이고, 두 번째 방법의 경우에는 해당 종목에 대해 당일 당일의 상하한가 데이터를 얻어와서 정정 주문을 접수하면 될 일이다. 기존에 매수하려 했던 경우라면 상한가로 지정가 정정 주문을 접수하면 되고, 매도를 하려 했던 경우라면 하한가로 지정가 정정 주문을 접수하면 된다. (하한가 및 상한가 데이터는 opt10001을 통해 데이터를 얻어올 수 있다.)

 

 


728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.