맨땅에 헤딩하는 사람

장전 시간외 거래에서 프로그램으로 빠르게 매수 주문 넣기 | python 본문

퀀트/구현

장전 시간외 거래에서 프로그램으로 빠르게 매수 주문 넣기 | python

purplechip 2020. 7. 12. 14:40

얼마 전 시간외 단일거래에서 상한가를 치거나, 장 시작 전 말도안되게 호재가 터진 기업의 주식들을 장전 시간외 거래로 매수 후 장이 시작했을 때 높은 가격에 팔면 좋을 것 같단 생각을 하게 되었다.

 

장전 시간외 거래의 경우 주문 체결 방식이 선착순 방식이다. 당연히 가격으로 체결 순위를 정할 수 없으니 시간으로 정할 수 밖에 없다. 손으로 하는 건 속도에 한계가 있으니 컴퓨터를 이용해 가장 빠른 시간에 주문을 넣어보자 생각했다. 예전에 작성했던 글을 참고하여 만들었다.

2020/05/09 - [파이썬/이론] - [Python] 수강신청, 티케팅, 서버 신호, 가장 정확한 시간에 신호보내기

 

[Python] 수강신청, 티케팅, 서버 신호, 가장 정확한 시간에 신호보내기

한정되어있는 재화를 판매할 때 사용하는 방법은 여러가지이다. 가격을 높여 수요를 억제하는 방법, 무작위에 의한 판매방법, 그리고 대부분의 판매자가 사용하는, 내가 생각하기에 가장 효율��

purplechip.tistory.com

 

서버 시간 동기화

먼저 datetime 모듈을 사용하기 때문에 내 PC의 시간을 한국거래서 서버의 시간과 동기화해주는 작업이 필요하다. 한국표준과학연구원 사이트에서 한국 표준 시 타임 서버의 도메인을 확인할 수 있다. (time.kriss.re.kr, time2.kriss.re.kr) 다만 증권 거래를 담당하는 한국 거래소 서버가 위 타임 서버의 시간을 사용하는 지에 대한 확증은 없다. 정황상 한국 거래소니까 한국 표준 시 타임 서버를 사용하겠지 하는 추정을 할 뿐이다. 서버 시간을 동기화 하는 과정은 간단하다.

[그림 1. 한국 표준 시 타임 서버 시간 동기화]

  1. 윈도우 → 날짜 및 시간 설정 → 다른 시간대에 대한 시계 추가 클릭
  2. 인터넷 시간 탭 선택 후 설정 변경 클릭
  3. 인터넷 시간 서버와 동기화 옵션 선택 후 서버란에 해당 서버의 도메인 추가 후 확인

이와 같은 방법으로 손쉽게 서버 시간과 동기화를 해준다.

 

프로그램 코드

소스 코드는 다음과 같다.

import Kiwoom
import datetime

# you can choose stock and qty
code = '032190'
qty = 2141


app = Kiwoom.QApplication(Kiwoom.sys.argv)
kiwoom = Kiwoom.Kiwoom()
kiwoom.comm_connect()

acc_no = kiwoom.GetLoginInfo("ACCLIST").split(';')[0]
order_type = 'SELL'
deal_type = 'BEFORE_MARKET'

base_1 = datetime.datetime.now().replace(minute=30,second=0,microsecond=000000)
base_2 = datetime.datetime.now().replace(minute=29,second=59,microsecond=850000)
while True:
    now = datetime.datetime.now()
    if now >= base_1:
        kiwoom.send_order(acc_no, order_type, code, qty, deal_type)
        break
    elif now >= base_2:
        kiwoom.send_order(acc_no, order_type, code, qty, deal_type)

코드는 간단하다. 반복문으로 시간을 확인하며 8시 29분 59.85초에 장전시간외 거래로 매수 주문 신호를 보내고 8시 30분이 되면 빠져나온다. 내 경우 키움증권 'openAPI+'를 사용하여 주문 접수 등의 기능을 수행하는 모듈을 구현하였는데 구현한 모듈이 지저분하기도 하고 여러모로 부족한 부분이 많기 때문에 추후 보완되고 완성도가 높아지면 해당 코드 역시 공개할 생각이다.

 

코드 완성 후 직접 매수를 해본 후 효과가 없다 판단했는데 그 이유는 다음과 같다.

 

  1. 같은 생각을 하는 사람이 여럿 있어서 선점하기가 어렵다.
  2. 당일 폭등 조짐이 있는 주식은 장전 시간외에서 매도 물량이 안나온다.

1번의 경우 나보다 더 잘하는 사람들이 최적화한 주문을 송신하기 때문에 경쟁력이 밀리고 2번의 이유 때문에 쉽게 물량을 모으지도 못한다. 여러모로 부족한 전략이라 생각이 들고 다른 전략을 찾아봐야겠다.

 

+사족

실수로 글을 지워버려서 같은 글을 다시 작성하였다.... 처음 쓴 거보다 잘 써진 걸 위안삼는다..ㅠㅠ

 

Comments