이 상황에 대한 해결책은 아직 얻지 못하였다. 상황은 이러하다.
openAPI에서는 실시간 정보수집이 가능하다. 예를들어 원하는 종목의 현재가가 변할 때 마다 그 종목의 현재가가 자동 수신된다. 보유종목 또는 관심종목의 현재가를 실시간으로 관찰하거나, 지수를 실시간으로 관찰 할 수 있는 필수기능 중의 하나이다.
코스닥 지수를 실시간으로 관찰 하다가, 특정값이 되면 어떤 종목을 현재가보다 -3호가 아래에서 자동매수 되도록 구현하고자 한다.
지수정보가 실시간 도착하면 이를 처리하는 콜백함수에서 원하는 종목의 현재가를 얻어와야 한다. (미리 해당좀목의 현재가를 보관해 두는 방법이 있긴 한데, 종목이 많아지면 실시간처리 용량이 많아져서 시스템이 느려진다) 이때 종목의 현재가를 요청하는 TR을 보내면 이에 대한 수신이벤트가 오질 않는다. 많은 시간을 들여 원인을 살펴본 결과 이벤트 처리 콜백함수 내부에서는 또다른 이벤트 수신을 받을 수 없다는 것이다. 첫번째 이벤트 처리 콜백함수를 완전히 종료하고 빠져 나오면 그제서야 두번째 TR수신이벤트가 온다.
키움증권 담담자 한테 물어보면 OpenAPI는 비동기방식으로 처리하기 때문에 그런 상황이 불가능 하다고 하는데 그렇다면 원인은 내쪽에 있다는 것이다. 그런데 아무리 코드를 수정해도 그리된다. 남감하네~
하는 수 없이 코드를 이리 수정하였다.
지수정보가 실시간으로 도착하면, 이를 처리하는 콜백함수에서는 어떤 종목의 현재값으로 요청하는 TR을 보내고 함수를 마무리 한다. 종목현재값정보TR 수신이벤트가 뜨면 이를 처리하는 콜백함수에서 그 종목의 현재가보다 -3호가 아래에서 매수처리 한다. 이렇게 2단계로 분리하여 처리하였다.
코드가 좀 지져분해져도 굴러는 간다.
'대동단결 Python' 카테고리의 다른 글
티스토리 OpenAPI 사용하기 (0) | 2020.12.13 |
---|---|
돈키움의 종목정보 실시간 처리 (0) | 2020.09.24 |
돈키움에서 TR 과 이벤트처리 (0) | 2020.09.12 |
스크립트언어 파이썬에서 변수 유효범위 및 접근범위 (0) | 2020.07.12 |
파이썬으로 웹서비스 하기 (0) | 2020.06.28 |
댓글