여러 개의 날짜에 해당하는 분봉 데이터가 포함된 자료에서 해당 일자의 특정 시각대에 당일의 시가, 고가, 저가, 종가, 거래량을 계산하는 코드다.
이를테면 증시가 마감되지 않은 상황에서 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')
'Python, API' 카테고리의 다른 글
[Python][Bybit V5 API] Private/Public Websocket 접속 (0) | 2024.05.27 |
---|---|
[Python] os.walk - 하위폴더 내의 모든 파일 리스트 검색하기 (0) | 2024.05.03 |
[Python] Sharp Ratio / Sortino Ratio / Carmar Ratio 계산 (0) | 2023.06.19 |
[Python] 체결데이터로 분봉(OHLCV) 만들기 (0) | 2023.06.04 |
[SQLITE3] column 이름으로 사용하면 안되는 단어 (0) | 2023.05.31 |