[주식] 시간당 체결건수 분석

Jay
4 min readMay 16, 2020

--

전종목 실시간 체결 데이터를 받는다면

코스피/코스닥 전종목수집을 위해서는

코스피 코스닥 전종목 개수는 약 3000개 정도로 추정된다.

실시간 전종목 체결데이터를 수집하기 위해서, 이베스트 투자증권의 xingapi를 사용하는데, 대신/키움의 경우 실시간으로 받을 수 있는 종목이 각각 400개/100개로 제한이 있는 듯 하다.

이베스트의 경우는 종목 등록 개수에 제한이 있는 것 같지는 않다.

하지만 3000개의 종목을 모두 구독하는 경우, Multi Thread/ Multi Processing과 같은 병렬 처리를 하지 않는경우, 수신된 시간과, 실제 체결된 시간사이의 간격이 종목개수에 따라 증가하게 됨을 확인하였다.

이를 해소하기 위해서 먼저 API에서 실시간으로 처리해야하는 체결 건수에 대략적인 분석을 실시하였다.

1. 과거데이터의 수집

먼저 실시간 체결의 경우는 이베스트를 이용하기에 적합하지만, 과거 틱데이터의 경우 대신증권의 크레온 API가 최대 한달까지 제공해준다.

이 데이터를 이용하여 4월 13일부터 5월 14일까지의 데이터를 수집하여 분석하였다.

2. 분당 최대 체결건수

대신증권은 아쉽지만, 틱의 체결 시간이 분까지밖에 제공이 되지 않는다. 따라서 분당 최대 체결건수를 분석하기위해서, 동시간대 전종목의 체결 건수를 분석하였다

데이터 전처리를 한뒤에 cufflinks의 iplot으로 시각화를 해보니, 특정 패턴이 눈에보인다.

장초반에는 분당 체결건수가 최대 약 8만건에 이르며, 장중간에는 최소 1만2천건까지 감소했다가, 장후반에 4만건정도까지 다시 증가한다.

즉 전종목 실시간 체결을 구현하기 위해서는 분당 8만건의 처리속도를 내야만 병목현상이 발생하지 않고 안정적으로 수신할 수 있음을 의미한다.

2. 분당 한종목 최대 체결건수

그러나 단일 쓰레드/단일 코어 시스템으로는 분당 1만2천개의 처리속도도 부하가 클 수 있으므로, 멀티쓰레드/멀티코어를 구현하기 위해서는 단일 종목 최대 체결건수를 분석할 필요가 있다. 따라서 전종목중에서 그 분대의 최대 체결건수를 분석해보았다.

아래 보이는 바와 같이, 전체적인 체결건수의 분석때보다는 패턴의 일정함이 떨어지지만, 대체로 오전중에 최대 체결건수가 발생함을 보인다. 하지만 여기서 가장 중요한 것 은 한 종목에서 최대로 크게 발생할 수 있는 분당 체결건수인데, 2020년도 4월15~5월15일중 최대 분당 체결건수를 자랑한 것은 6782개로, 초당 최소한 113개의 체결건수가 발생했다는 것을 의미한다.

3. 정리

안정적으로 전체 종목의 체결데이터를 받고싶다면, 이번 데이터를 기준으로 본다면, 분당 최대 8만건을, 종목당 최대 7천건을 소화 할 수 있어야 한다.

이를 Xing API에서 구현을 하기위해서는 메인쓰레드에서 Real data를 block data형태로 받아온 뒤, 수신된 데이터를 각 Thread에 분산 해주면 될 것으로 생각이된다.

잠깐만…

굳이 수신된 데이터를 종목별로 나눌 필요가 있나?

어차피 수신된 데이터에는 종목코드가 있으므로,

수신된 데이터를 동등한 양으로 쓰레드에 분산시키고, 각 쓰레드는 일괄적으로 하나의 메모리 디비에 Insert를 진행하면 되는거 아닌가? 그럼 각 쓰레드에 걸리는 부하도 일정하게 될 것이고.

아… 왜 나는 사고의 틀에 갇혀있었을까!

--

--

Jay
Jay

Written by Jay

Brain Neural Network : Where neuroscience meets machine learning

No responses yet