PYTHON/AUTO TRADE SYSTEM

[자동 매매 시스템 구축하기] 차트 데이터 조회하기 (4)

  • -

지난 게시글에서 삼성전자(005930)의 3분봉 차트 데이터를 데이터프레임(DataFrame)을 기반으로 데이터를 정리하는 방법까지 작성했다. 사실 이번 게시글을 코드를 구축하기 보다는 코드 실행 시 발생할 수 있는 오류 상황에 대처하는 방법에 대해 소개하고자 하는 목적이 크다. 차트 데이터를 조회하는 과정에 있어서 가장 주의해야 하는 부분이 있는데, 바로 "과도한 시세 조회 요청" 오류가 빈번하게 발생한다는 것이다. 

 

 

과도한 시세 조회 요청?

키움증권 사에 따르면 "서버의 안정적 운영을 위해 개인별로 데이터 요청의 횟수를 제한하고 있다."고 하는데, 이에 대한 명확한 가이드라인은 제공해주지 않고 있다.(제재 기준을 명확하게 알려준다면 서버가 감당할 수 있는 최대 수치로 사용할까봐 그러는 건가?) 이와 관련하여 직접 어떤 요건이 갖춰졌을 때 과도한 조회 요청 오류가 발생하는지에 대한 여러 게시글들이 있는데, 본인은 이 게시글(링크)을 참고했다. 참고했다기 보다는, 이 게시글을 통해 최대로 조회할 수 있는 수치를 보다 명확하게 확인할 수 있게 되었다.

"과도한 시세 조회 요청" 오류는 사실 주식 시장에 상장되어 있는 모든 종목의 데이터를 조회할 때 가장 빈번하게 발생하며, 다음으로는 차트 데이터 요청 시에 가장 빈번하게 일어난다. 그 이유는 한 번의 시세 조회 요청이 특정 시간 별로 제한되어 있기 때문이다. 앞서 언급했던 게시글에 따르면 5건 이하의 데이터 요청은 상관없으며 100건 이하의 경우에는 한 번의 TR 요청마다 0.2초의 텀을, 1,000건 이하는 1.8초, 1,000건 초과는 시간당 1,000건의 조회 제약으로 3.6초의 텀을 두고 조회해야 한다고 설명하고 있다. 그렇다면 여기서 TR 요청의 기준이 되는 것은 무엇인지 하는 의문이 들 수 있는데, 이전 게시글에서 제작했던   def __commrqdata()  를 한 번 사용하는 것이 한 번의 TR 요청이 되는 것이다.

 

 

차트 데이터 조회 시의 예시를 살펴보자.

해당 게시글의 최하단에 위치한 더보기 란을 보면 분봉별 주가 데이터와 함께 각 데이터별로 최하단에 데이터의 개수가 표시되어 있다. 해당 데이터를 요약해보자면 아래의 표와 같다.

구분 1분봉 3분봉 5분봉 10분봉 15분봉 30분봉 45분봉 60분봉
데이터 개수 95,825개 32,358개 19,571개 9,789개 6,773개 3,512개 2,258개 1,756개

 

또한 통상적으로 분봉 데이터를 조회했을 때 한 번의 데이터 요청 시에 900건의 데이터가 반환된다는 점을 고려하면 한 종목에 대한 분봉 데이터를 조회할 때 각 분봉 별로 필요한 TR 요청의 횟수(소수점 데이터는 한 번의 요청이 필요하기 때문에 올림을 기준으로 함)는 아래와 같을 것이다.

구분 1분봉 3분봉 5분봉 10분봉 15분봉 30분봉 45분봉 60분봉
요청 횟수 107번 36번 22번 11번 8번 4번 3번 2번

 

그렇다면 우리는 연구가 진행된 사례를 기반으로, 분봉 데이터를 조회할 경우 1분봉 데이터의 경우에는 데이터가 100건 이상 1,000건 이하에 해당하기 때문에 시간 간격을 1.8초로 두어야 하며, 3분봉과 5분봉, 10분봉, 15분봉은 5건 이상 100건 이하에 해당하기 때문에 0.2초의 시간 간격을, 그리고 30분봉과 45분봉, 60분봉의 경우에는 요청 횟수가 5건 이하이기 때문에 시간 간격을 설정하지 않고 조회할 수 있다. 

하지만 만약 두 종목을 조회한다면 30분봉과 45분봉도 시간 간격을 두어 조회해야 함은 분명하고, 세 종목을 조회한다면 60분봉도 시간 간격을 두어 조회해야 할 것이다.

 

 


728x90

 

 

▼ 구체적인 데이터 확인하기

더보기

1분봉

                 time     now    open    high     low
0      20220707153000  +58200  +58200  +58200  +58200
1      20220707151900  +58300  +58300  +58300  +58200
2      20220707151800  +58300  +58300  +58300  +58200
3      20220707151700  +58200  +58200  +58300  +58200
4      20220707151600  +58200  +58200  +58300  +58200
...               ...     ...     ...     ...     ...
95820  20210701090400  -80300  -80300  -80300  -80200
95821  20210701090300  -80200  -80400  -80400  -80200
95822  20210701090200  -80400  -80300  -80400  -80300
95823  20210701090100  -80300  -80500  -80500  -80300
95824  20210701090000  -80500  -80500  -80600  -80400
[95825 rows x 5 columns]

 

3분봉

                 time     now    open    high     low
0      20220707153000  +58200  +58200  +58200  +58200
1      20220707151800  +58300  +58300  +58300  +58200
2      20220707151500  +58200  +58300  +58300  +58200
3      20220707151200  +58200  +58300  +58300  +58200
4      20220707150900  +58200  +58200  +58300  +58200
...               ...     ...     ...     ...     ...
32353  20210701091200  -80200  -80100  -80200  -80100
32354  20210701090900  -80200  -80100  -80200  -80000
32355  20210701090600  -80100  -80200  -80200  -80100
32356  20210701090300  -80200  -80400  -80400  -80100
32357  20210701090000  -80400  -80500  -80600  -80300
[32358 rows x 5 columns]

 

5분봉

                 time     now    open    high     low
0      20220707153000  +58200  +58200  +58200  +58200
1      20220707151500  +58300  +58300  +58300  +58200
2      20220707151000  +58200  +58300  +58300  +58200
3      20220707150500  +58200  +58300  +58300  +58200
4      20220707150000  +58200  +58400  +58400  +58200
...               ...     ...     ...     ...     ...
19566  20210701092000  -80200  -80000  -80300  -80000
19567  20210701091500  -80100  -80200  -80200  -80000
19568  20210701091000  -80200  -80100  -80200  -80000
19569  20210701090500  -80100  -80300  -80300  -80100
19570  20210701090000  -80300  -80500  -80600  -80200
[19571 rows x 5 columns]

 

10분봉

                time     now    open    high     low
0     20220707153000  +58200  +58200  +58200  +58200
1     20220707151000  +58300  +58300  +58300  +58200
2     20220707150000  +58200  +58400  +58400  +58200
3     20220707145000  +58300  +58400  +58400  +58300
4     20220707144000  +58400  +58500  +58500  +58300
...              ...     ...     ...     ...     ...
9784  20210701094000  -80100  -80200  -80300  -80100
9785  20210701093000  -80300  -80200  -80300  -80200
9786  20210701092000  -80300  -80000  -80300  -80000
9787  20210701091000  -80100  -80100  -80200  -80000
9788  20210701090000  -80100  -80500  -80600  -80100
[9789 rows x 5 columns]

 

15분봉

                time     now    open    high     low
0     20220707153000  +58200  +58200  +58200  +58200
1     20220707151500  +58300  +58300  +58300  +58200
2     20220707150000  +58200  +58400  +58400  +58200
3     20220707144500  +58300  +58300  +58400  +58300
4     20220707143000  +58400  +58600  +58600  +58300
...              ...     ...     ...     ...     ...
6768  20210701100000  -80200  -80200  -80200  -80100
6769  20210701094500  -80200  -80100  -80200  -80100
6770  20210701093000  -80200  -80200  -80300  -80100
6771  20210701091500  -80300  -80200  -80300  -80000
6772  20210701090000  -80200  -80500  -80600  -80000
[6773 rows x 5 columns]

 

30분봉

                time     now    open    high     low
0     20220707153000  +58200  +58200  +58200  +58200
1     20220707150000  +58300  +58400  +58400  +58200
2     20220707143000  +58300  +58600  +58600  +58300
3     20220707140000  +58500  +58400  +58700  +58400
4     20220707133000  +58500  +58400  +58500  +58200
...              ...     ...     ...     ...     ...
3507  20210701110000  -80300  -80100  -80300  -80100
3508  20210701103000  -80200  -80100  -80300  -80100
3509  20210701100000  -80200  -80200  -80200  -80100
3510  20210701093000  -80200  -80200  -80300  -80100
3511  20210701090000  -80300  -80500  -80600  -80000
[3512 rows x 5 columns]

 

45분봉

                time     now    open    high     low
0     20220707150000  +58200  +58400  +58400  +58200
1     20220707141500  +58300  +58600  +58700  +58300
2     20220707133000  +58700  +58400  +58700  +58200
3     20220707124500  +58400  +58200  +58500  +58000
4     20220707120000  +58200  +58100  +58200  +58000
...              ...     ...     ...     ...     ...
2253  20210701120000  -80300  -80200  -80300  -80200
2254  20210701111500  -80300  -80200  -80400  -80100
2255  20210701103000  -80200  -80100  -80300  -80100
2256  20210701094500  -80200  -80100  -80200  -80100
2257  20210701090000  -80200  -80500  -80600  -80000
[2258 rows x 5 columns]

 

60분봉

                time     now    open    high     low
0     20220707150000  +58200  +58400  +58400  +58200
1     20220707140000  +58300  +58400  +58700  +58300
2     20220707130000  +58500  +58200  +58500  +58000
3     20220707120000  +58200  +58100  +58200  +58000
4     20220707110000  +58100  +57700  +58200  +57600
...              ...     ...     ...     ...     ...
1751  20210701130000  -80200  -80300  -80300  -80100
1752  20210701120000  -80200  -80200  -80300  -80200
1753  20210701110000  -80300  -80100  -80400  -80100
1754  20210701100000  -80200  -80200  -80300  -80100
1755  20210701090000  -80200  -80500  -80600  -80000
[1756 rows x 5 columns]

 

 


728x90
반응형
Contents

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

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