코드로 우주평화

파이썬으로 해외 증권거래소 개장일/휴장일 확인하는 방법 본문

나는 이렇게 학습한다/Library

파이썬으로 해외 증권거래소 개장일/휴장일 확인하는 방법

daco2020 2022. 8. 30. 20:49
반응형

덴마크 증권거래소는 몇 시에 열릴까?

국내 증권거래소의 정보는 손쉽게 구할 수 있다. 특히 개장일/휴장일의 경우 우리가 보는 달력만으로도 알 수 있다.

 

 

하지만 해외 증권거래소는 파악이 어렵다. 각 국가별로 공휴일이 다를 수 있고 시간도 상이하다. 특히 지역 시간대로 인해 정확한 시간을 파악하는 것이 더 어렵다.

 

 

덴마크 증권거래소를 예로 들어보겠다. 덴마크 장시작 시간이 몇 시인지 알고 있는가?

 

 

정답은 한국 시간으로 16시에 열린다.(이는 서머타임 시간이며 겨울에는 17시에 열린다.) 이미 본인에게 익숙한 시장이라면 어느 정도 파악해두고 있겠지만 그럼에도 각 국가별로 정확한 개장일과 개장시간을 파악하고 있는 것은 여간 성가신일이 아니다.

 

 

이러한 문제를 Python 라이브러리 exchange_calendars를 사용하면 쉽게 해결할 수 있다. 이 글에서는 exchange_calendars을 이용해 8월 뉴욕 증권거래소의 개장일과 장시작, 장마감 시간까지 구해보겠다.

 

 

 

 

 

사용법

1. 설치

pip install exchange_calendars

 

 

2. import

import exchange_calendars as market

라이브러리 이름이 길어 'market'이라는 임의의 단어로 사용하겠다.

 

 

3. 증권거래소 calendar 가져오기

new_york = market.get_calendar("XNYS")

'XNYS'는 뉴욕 증권거래소를 의미한다. 이를 가져와 'new_york'이라는 변수에 담았다.

 

 

4. 지정한 범위 내, 개장일 가져오기

open_days = new_york.sessions_in_range(start="2022-08-01", end="2022-08-31")

exchange_calendars 라이브러리가 제공하는 'sessions_in_range()' 메서드를 사용하여 8월 중 개장일 'open_days'라는 변수에 담았다.

 

 

 

print(open_days)

>>> DatetimeIndex(['2022-08-01', '2022-08-02', '2022-08-03', '2022-08-04',
               '2022-08-05', '2022-08-08', '2022-08-09', '2022-08-10',
               '2022-08-11', '2022-08-12', '2022-08-15', '2022-08-16',
               '2022-08-17', '2022-08-18', '2022-08-19', '2022-08-22',
               '2022-08-23', '2022-08-24', '2022-08-25', '2022-08-26',
               '2022-08-29', '2022-08-30', '2022-08-31'],
              dtype='datetime64[ns]', freq='C')

'open_days' 변수를 출력해보면 위에 처럼 8월 동안의 개장일을 배열 형태로 보여준다.

 

 

5. 날짜별 장시작, 장마감 시간을 구한다.

for day in open_days:
    open = new_york.session_open(day)
    close = new_york.session_close(day)
    print(open, close)

'session_open()', 'session_close()' 메서드를 이용해 날짜별 장시작, 장마감 시간을 구할 수 있다. 이를 'open', 'close'라는 변수에 담고 print로 출력하면 아래와 같은 결과물을 얻을 수 있다.

 

 

 

2022-08-01 13:30:00+00:00 2022-08-01 20:00:00+00:00
2022-08-02 13:30:00+00:00 2022-08-02 20:00:00+00:00
2022-08-03 13:30:00+00:00 2022-08-03 20:00:00+00:00
2022-08-04 13:30:00+00:00 2022-08-04 20:00:00+00:00
2022-08-05 13:30:00+00:00 2022-08-05 20:00:00+00:00
2022-08-08 13:30:00+00:00 2022-08-08 20:00:00+00:00
2022-08-09 13:30:00+00:00 2022-08-09 20:00:00+00:00
2022-08-10 13:30:00+00:00 2022-08-10 20:00:00+00:00
2022-08-11 13:30:00+00:00 2022-08-11 20:00:00+00:00
2022-08-12 13:30:00+00:00 2022-08-12 20:00:00+00:00
2022-08-15 13:30:00+00:00 2022-08-15 20:00:00+00:00
2022-08-16 13:30:00+00:00 2022-08-16 20:00:00+00:00
2022-08-17 13:30:00+00:00 2022-08-17 20:00:00+00:00
2022-08-18 13:30:00+00:00 2022-08-18 20:00:00+00:00
2022-08-19 13:30:00+00:00 2022-08-19 20:00:00+00:00
2022-08-22 13:30:00+00:00 2022-08-22 20:00:00+00:00
2022-08-23 13:30:00+00:00 2022-08-23 20:00:00+00:00
2022-08-24 13:30:00+00:00 2022-08-24 20:00:00+00:00
2022-08-25 13:30:00+00:00 2022-08-25 20:00:00+00:00
2022-08-26 13:30:00+00:00 2022-08-26 20:00:00+00:00
2022-08-29 13:30:00+00:00 2022-08-29 20:00:00+00:00
2022-08-30 13:30:00+00:00 2022-08-30 20:00:00+00:00
2022-08-31 13:30:00+00:00 2022-08-31 20:00:00+00:00

출력 결과를 보면 뉴욕 증권거래소는 13:30분에 열리고 20시에 닫히는 것을 확인할 수 있다.

 

 

 

 

 

??  오후 1시 30분에 시장이 열린다고?

 

 

실제 뉴욕 증권거래소는 09:30에 열리지만 결과물은 13:30분으로 출력된다. 이것이 앞서 언급한 timezone(시간대) 문제이다.

 

 

 

exchange_calendars 라이브러리는 기본적으로 UTC 시간을 기준으로 한다. 뉴욕 시간은 UTC - 04:00 이므로 09:30 + 04:00 인 13:30으로 출력된 것이다.

 

즉 결과물에는 이상이 없다. UTC 시간대가 틀린 게 아니니까. 하지만 우리가 이해하기 쉽도록 UTC시간대를 현지 시간인 뉴욕 시간대로 바꿔줄 필요가 있다.

 

 

6. timezone 적용하기

for day in open_days:
    open = new_york.session_open(day).tz_convert("America/New_York")
    close = new_york.session_close(day).tz_convert("America/New_York")
    print(f"개장일: {day.date()}, 장시작: {open.time()}, 장마감: {close.time()}")

 

뉴욕 시간대를 적용하기 위해 이전의 코드에서 .tz_convert() 메서드를 추가했다. 메서드 안에는 뉴욕 시간대를 의미하는 "America/New_York" 문자열을 넣어주었다. 

 

 

 

그리고 마지막 줄에는 f-string을 이용해 개장일, 장시작, 장마감 시간을 출력하도록 print를 작성했다.

 

 

 

 

이제, 결과를 보자!

개장일: 2022-08-01, 장시작: 09:30:00, 장마감: 16:00:00
개장일: 2022-08-02, 장시작: 09:30:00, 장마감: 16:00:00
개장일: 2022-08-03, 장시작: 09:30:00, 장마감: 16:00:00
개장일: 2022-08-04, 장시작: 09:30:00, 장마감: 16:00:00
개장일: 2022-08-05, 장시작: 09:30:00, 장마감: 16:00:00
개장일: 2022-08-08, 장시작: 09:30:00, 장마감: 16:00:00
개장일: 2022-08-09, 장시작: 09:30:00, 장마감: 16:00:00
개장일: 2022-08-10, 장시작: 09:30:00, 장마감: 16:00:00
개장일: 2022-08-11, 장시작: 09:30:00, 장마감: 16:00:00
개장일: 2022-08-12, 장시작: 09:30:00, 장마감: 16:00:00
개장일: 2022-08-15, 장시작: 09:30:00, 장마감: 16:00:00
개장일: 2022-08-16, 장시작: 09:30:00, 장마감: 16:00:00
개장일: 2022-08-17, 장시작: 09:30:00, 장마감: 16:00:00
개장일: 2022-08-18, 장시작: 09:30:00, 장마감: 16:00:00
개장일: 2022-08-19, 장시작: 09:30:00, 장마감: 16:00:00
개장일: 2022-08-22, 장시작: 09:30:00, 장마감: 16:00:00
개장일: 2022-08-23, 장시작: 09:30:00, 장마감: 16:00:00
개장일: 2022-08-24, 장시작: 09:30:00, 장마감: 16:00:00
개장일: 2022-08-25, 장시작: 09:30:00, 장마감: 16:00:00
개장일: 2022-08-26, 장시작: 09:30:00, 장마감: 16:00:00
개장일: 2022-08-29, 장시작: 09:30:00, 장마감: 16:00:00
개장일: 2022-08-30, 장시작: 09:30:00, 장마감: 16:00:00
개장일: 2022-08-31, 장시작: 09:30:00, 장마감: 16:00:00

우리가 원하는 데이터를 얻었다!  

 

 

 

마무리

이 글은 사용법을 쉽게 보여주기 위해 print로 결과를 보여주었다. 물론 이것만으로도 인터넷 검색보다는 더 유용히 사용할 수 있겠지만, exchange_calendars를 실제 시스템 트레이딩에도 적용할 수 있을 것이다. 개장시간에 맞춰 거래가 발생하도록 알고리즘을 구현하거나 혹은 과거 데이터를 분석하는 퀀트 등에도 사용할 수도 있다.

 

 

 

exchange_calendars가 제공하는 증권거래소는 미국, 유럽, 아시아를 넘어 50여 개가 넘는다. 그동안 인터넷을 검색하는데 지쳤다면 이번 기회에 사용해보는 것을 추천한다. exchange_calendars에 대해 더 자세히 알고 싶다면 아래 공식문서를 참고하기 바란다.

 

 

 

GitHub - gerrymanoim/exchange_calendars: Calendars for various securities exchanges.

Calendars for various securities exchanges. Contribute to gerrymanoim/exchange_calendars development by creating an account on GitHub.

github.com

 

 

반응형