안녕하세요. 주식투자 관련 지식을 공유하는 인천고래입니다.
BII지표에 대해 생소하신 분들이 계실 텐데 장중 세력 진입 여부를 판단할 수 있는 지표로서 유용하게 사용할 수 있으며 하락 추세 이탈 및 상승 추세 이탈 등에 사용 가능한 지표로 알아두시면 투자에 도움이 될 것입니다.
자세한 내용은 아래의 코드에 제공되오니 확인 바랍니다.
1. BII 보조지표 생성 코드
def calculate_intraday_intensity(df):
"""
Bostian's Intraday Intensity(II)와 Cumulative II를 구하는 함수
Parameters
----------
df : pd.DataFrame
High, Low, Close, Volume 열을 포함
Returns
-------
pd.DataFrame
df에 새로운 컬럼 [II, CII]가 추가된 DataFrame
"""
# 고가-저가 차이가 0이 되는 상황 방어
df['range'] = df['High'] - df['Low']
df['range'] = df['range'].replace(0, np.nan) # 분모=0 -> NaN 처리
# Intraday Intensity (II) 계산
df['II'] = ((2 * df['Close'] - df['High'] - df['Low']) / df['range']) * df['Volume']
# Cumulative II (CII) = II의 누적 합
df['CII'] = df['II'].cumsum()
# NaN 보정 (기본 예시)
df['II'] = df['II'].fillna(0)
df['CII'] = df['CII'].fillna(method='ffill').fillna(0)
return df
2. BII 지표를 차트에 적용하기
if __name__ == '__main__':
# ===== 1) FinanceDataReader로 삼성전자 주가 불러오기 =====
df = fdr.DataReader('229640', start='2024-06-01')
# df의 기본 컬럼(일봉): ['Open', 'High', 'Low', 'Close', 'Volume', ... ]
# 인덱스(Index)는 Date(YYYY-MM-DD)가 기본으로 들어옴
# ===== 2) 결측값 처리 (필요 시) =====
df.dropna(subset=['Close', 'Volume'], inplace=True)
# ===== 3) Intraday Intensity 지표 계산 =====
df = calculate_intraday_intensity(df)
# ===== 4) 차트 시각화 =====
# plt.subplots(nrows=3) : (가격 / 거래량 / 보조지표) 3개 구역
fig, axes = plt.subplots(nrows=3, figsize=(12, 8), sharex=True)
# 4-1) [첫 번째 Subplot] 종가 차트
axes[0].plot(df.index, df['Close'], color='blue', label='Close')
axes[0].set_ylabel('Price')
axes[0].legend(loc='upper left')
axes[0].grid(True)
# 4-2) [두 번째 Subplot] 거래량(Volume) 차트 (Bar 형태)
axes[1].bar(df.index, df['Volume'], color='gray', label='Volume')
axes[1].set_ylabel('Volume')
axes[1].legend(loc='upper left')
axes[1].grid(True)
# 4-3) [세 번째 Subplot] Intraday Intensity 지표 (II, CII)
axes[2].plot(df.index, df['II'], color='green', label='II')
axes[2].plot(df.index, df['CII'], color='red', label='CII')
axes[2].set_ylabel("Bostian's Intraday Intensity / CII")
axes[2].legend(loc='upper left')
axes[2].grid(True)
# 레이아웃 간격 조정
plt.tight_layout()
# 화면에 표시
plt.show()
3. 차트 적용 이미지
자신만의 매매법을 자동매매 프로그램으로 만들거나
기법이 확률이 떨어진다면 백테스팅을 사용해서 확률을 높여야 합니다.
아래의 링크를 통해서 요청하시면 요청하신 이상(가격대비 성능의 최대치)의 결과물을 받아 보실 수 있습니다.
다른 보조지표에 대해서는 아래의 링크 글을 통해 자세히 알아 볼 수 있습니다.
단기적인 스윙 및 세력 매집 분석에 용이한 기준봉에 대해서는 아래의 링크 글을 통해 자세히 알아 볼 수 있습니다.
댓글