2. 해외선물/2-3. 해외선물 설명

(키움증권 해외선물 OpenAPI-W) 1분봉 데이터로 3분봉, 60분봉 만들기 (1) 개념 이해하기

봄이오네 2023. 10. 30. 08:08
반응형
목 차
1. 들어가며
2. 3분봉 데이터 개념의 이해
3. 마치며

 

1. 들어가며

지난 글에서는 해외선물 자동매매를 위한 시스템 구성에 대해 알아보았다. 파이썬 언어가 생소해 내용이 낯설게 느껴질 수도 있지만, 인내심을 가지고 공부시간을 차차 늘려가면, 어느새엔가 해외선물을 본인의 뜻대로 실행하고 있는 자신을 발견하게 될 것이다.

 

이번 글에서는 1분봉 데이터 모음으로 3분봉, 60분봉 만드는 방법을 알아보자.

혹자는 "해외선물 자동매매 시스템을 통해 1분봉, 3분봉, 60분봉을 각각 받을 수 있을텐데, 왜 1분봉으로 3분봉이나 60분봉을 만드는지?"로 생각할 수 있다. 필자도 그 말에 전적으로 동감한다. 다만, 키움증권에서는 과도한 데이터의 조회를 제한하기 위해 CommRqData를 통해 "조회수 제한"을 실시하고 있다. 1분봉도, 3분봉도, 60분봉도 조회를 하다보면.... 빠른 시간 내 "조회수 제한"으로 프로그램이 종료되는 불상사를 맞을 수 있다는 것이다.

 

시가, 고가, 저가, 종가, 거래량만 있으면 체결강도를 제외한 어떠한 지표도 만들 수 있다고 생각한다. 또한, 3분봉, 60분봉이 만들어지는 원리만 알고 있다면, 1분봉으로도 얼마든지 3분봉, 60분봉을 만들 수 있다. 아래에서 천천히 확인해보자.

 

아래에서 설명하려면 2가지를 미리 알고 있어야 한다.

 

위의 2가지 설명(1분봉 데이터 받기, 현재시간 구하기)에 대해 이해가 되었다는 가정하에 아래에서 설명을 이어나가도록 한다.

 

이 글에서는 현재 시간의 3분봉을 구하는 것은 아니다. 예를 들어 현재시간이 14:37분이라고 하면, 3분봉은 14:36 ~ 14:38이며 3분봉이 완성 전이다. 이 글에서 설명한 내용은 14:33~14:35, 14:30~14:32분의 현재 시간 대비 1개 전의 3분봉을 구하는 글이다. 필자는 완성되지 않는 봉에 대해서는 별도로 설명하지 않을 것이다.

 

총 4회에 걸쳐 설명할 예정이다. 이번 글은 3분봉 만들어지는 개념설명, 다음 글은 기본코드 설명, 세번째 글은 for문과 리스트문 활용, 마지막 글에서는 3분봉, 5분봉, 60분 봉 등을 구하는 방법을 알아보자.

 


2. 3분봉 데이터 개념의 이해

1) 3분봉이 만들어지는 원리

봉이 만들어지는 원리는 동일하며, 여기서는 3분봉 위주로 설명하겠다. 현재시간이 14:37분이라고 가정하자.

  • 3분봉 시가 : 14:36분 첫 거래 가격
  • 3분봉 고가 : 14:36~14:38분 내 최고가
  • 3분봉 저가 : 14:36~14:38분 내 최저가
  • 3분봉 저가 : 14:38분 마지막 거래 가격

위와 같이 3분봉이 만들어지는 원리는 생각보다 간단하다. 여기서 주목할 것은 시가(14:36분)의 분(36분)이다. 3분봉의 시가는 3의배수에서 시작하는 것을 알 수 있다. 고가와 저가는 36분~38분이며, 종가는 시가(36분)에서 2분을 더한 14:38분의 마지막 가격(3의배수 + 2분)이 될 것이다.

 

3분봉을 구하려면, 해외선물의 "체결시간"에서 "분"단위를 가져와서 3분봉의 시가/고가/저가/종가를 각각 계산한다.

 

2) 파이썬의 몫과 나머지 연산자의 필요성

파이썬의 사칙연산(더하기, 빼기, 곱하기, 나누기)은 누구나 다 알고있는 내용이다. 여기에서는 나누기(/)에 대해 알아보자

나누기(/)는 정수형 혹은 실수형에서 연산이 가능하다. 나누기와 관련하여 2가지를 추가로 설명한다.

  • 몫 : "나누기"에서 몫을 구하는 연산자는 //(슬레시 슬레시)이다.
  • 나머지 : "나누기"에서 나머지를 구하는 연산자는 %(퍼센트)이다.

 

현재시간이 14:37분이라고 했을 때, 현재의 3분봉(14:36~14:38)은 완성되지 않은 형태이다. 1개 봉 전의 3분봉(14:33~14:35)은 이미 완성이 되었다. 14:37분 현재, 14:33~14:35분 봉의 시가/고가/저가/종가를 구할 것이다.

 

그런데, 나누기에서 몫과 나머지 연산자는 왜 필요할까? 사용자마다 조회하는 시점 가지각색이다. 현재시간 14:37분에 조회할 수도 있지만, 15:02분, 15:57분에도 각각 조회할 수 있다.

 

3분봉은 3가지의 경우의 수로 조회가 된다.

  • 14:37분에 조회하면, 14:37분의 37분을 3으로 나누면, 몫은 12이고, 나머지는 1이다.
  • 15:02분에 조회하면, 15:02분의 02분을 3으로 나누면, 몫은 0이고, 나머지는 2이다.
  • 15:57분에 조회하면, 15:57분의 57분을 3으로 나누면, 몫은 19이고, 나머지는 0이다.

자, 공통점을 찾았는가? 3분봉으로 설정하고 조회를 하면, 각각의 분(minute)에 따라 나머지에 따라 코드를 작성하면 된다. 5분봉은 어떨가? 3분봉의 경우가 수가 3가지 이므로, 5분봉은 나머지에 따라 경우의 수가 5가지가 된다. 코드가 상당히 길어질 것 같다. ㅠ

 

3) 정리하기

자, 코드설명에 들어가기에 앞서, 한번 정도 생각해보자. 1분봉 데이터 모음으로 3분봉을 만드려면, 현재시간에 따라 각각의 분(minute)을 3으로 나눈 나머지(remainder)에 따라 각각 적용되는 코드를 작성해주면 될 것 같다.

 


3. 마치며

이 글에 코드를 작성하려고 했는데, 글이 상당히 길어질것 같아 다음글부터 파이썬 코드를 설명할 예정이다.

 

앞에서도 설명하였듯이 다음 글에서는 1분봉 모음으로 3분봉을 구하는 "기본코드"를 설명할 예정이며, 그 다음은 for문과 리스트문을 활용하고, 마지막 글에서는 3분봉, 60분봉을 구하는 방법을 알아볼 것이다.

 

 

반응형