[자동 매매 시스템 구축하기] 차트 데이터 조회하기 (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분봉도 시간 간격을 두어 조회해야 할 것이다.
▼ 구체적인 데이터 확인하기
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]
'AUTO TRADE > 자동 매매 프로그램' 카테고리의 다른 글
[자동 매매 시스템 구축하기] 차트 데이터 조회 여부 (2) - MySQL 연동 (2) | 2022.07.08 |
---|---|
[자동 매매 시스템 구축하기] 차트 데이터 조회 여부 (1) : MySQL 설치 (0) | 2022.07.08 |
[자동 매매 시스템 구축하기] 차트 데이터 조회하기 (3) (0) | 2022.07.05 |
[자동 매매 시스템 구축하기] 차트 데이터 조회하기 (2) (2) | 2022.07.05 |
[자동 매매 시스템 구축하기] 차트 데이터 조회하기 (1) (0) | 2022.07.04 |
소중한 공감 감사합니다