본문 바로가기
Python, API

[Python] 분봉데이터로 당일의 누적OHLCV 계산하기

by 오늘밤날다 2023. 6. 22.

 

여러 개의 날짜에 해당하는 분봉 데이터가 포함된 자료에서 해당 일자의 특정 시각대에 당일의 시가, 고가, 저가, 종가, 거래량을 계산하는 코드다.

 

 

이를테면 증시가 마감되지 않은 상황에서 IBS (Internal Bar Strength)를 계산하기 위해서는 개장 초부터 특정 시각대까지의 시가, 고가, 저가, 종가 값이 있어야 하는데 이런 경우에 활용할 수 있다.

 

 

import pandas as pd

df = pd.read_csv('test_sample.csv')


# datetime 컬럼 type변경 후 groupby를 위해 date 컬럼 생성
df['datetime'] = pd.to_datetime(df['datetime'])
df['date'] = df['datetime'].dt.date


# 각 시간대별 당일의 시가/고가/저가/거래량 계산 (r_close는 close와 동일하므로 생략)
df['r_open'] = df['open'].groupby(df['date']).transform('first')
df['r_high'] = df['high'].groupby(df['date']).cummax()
df['r_low'] = df['low'].groupby(df['date']).cummin()
df['r_volume'] = df['volume'].groupby(df['date']).cumsum()


# 각 시간대별 당일의 IBS 계산
df['ibs'] = (df['close'] - df['r_low']) / (df['r_high'] - df['r_low'])

 

 

결과물

 

 

 

 

 

 

 

아래와 같이 응용하면 당일의 완성된 일봉 자료를 만들어서 붙여 넣을 수도 있다. 물론 Look-ahead bias 때문에 백테스트 등에서는 사용할 일이 많지는 않겠지만...

 

import pandas as pd

df = pd.read_csv('test_sample.csv')

# datetime 컬럼 type변경 후 date 컬럼 생성
df['datetime'] = pd.to_datetime(df['datetime'])
df['date'] = df['datetime'].dt.date


# 당일의 마감된 가격 기준으로 시가/고가/저가/거래량 계산
df['r_open'] = df['open'].groupby(df['date']).transform('first')
df['r_high'] = df['high'].groupby(df['date']).transform('max')
df['r_low'] = df['low'].groupby(df['date']).transform('min')
df['r_close'] = df['close'].groupby(df['date']).transform('last')
df['r_volume'] = df['volume'].groupby(df['date']).transform('sum')

 

결과물

 

 

 

 

test_sample.csv
0.01MB