1. %b¶
$$\%b= \frac{종가 - 하단 볼린저 밴드}{상단 볼린저 밴드 - 하단 볼린저 밴드}$$주가가 볼린저 밴드 어디에 있는지 나타내는 지표
%b 값은 종가가 상단밴드를 태그하면 1이되고, 중간밴드를 태그하면 0.5, 하단밴드를 태그하면 0이 됨
만약 종가가 상단밴드 위에 있으면 %b 값은 1보다 커지고, 종가가 하단밴드 아래에 있으면 0보다 작아짐
In [1]:
from pykrx import stock
import pandas as pd
from datetime import datetime # 오늘날짜 가져올때 사용
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors # 색상표
# 한글폰트 설정, 그래프 마이너스 표시 설정
import matplotlib
from matplotlib import font_manager, rc
import platform
if platform.system() == 'Windows':
# 윈도우인 경우
font_name = font_manager.FontProperties(fname="c:/Windows/Fonts/malgun.ttf").get_name()
rc('font', family=font_name)
else:
# Mac 인 경우
rc('font', family='AppleGothic')
matplotlib.rcParams['axes.unicode_minus'] = False
In [2]:
stock_list = pd.DataFrame({'종목코드':stock.get_market_ticker_list(market="ALL")})
stock_list['종목명'] = stock_list['종목코드'].map(lambda x: stock.get_market_ticker_name(x))
# 두산중공업의 2020년 이후 주가 데이터 가져오기
stock_nm = '두산중공업'
ticker = stock_list.loc[stock_list['종목명']==stock_nm, '종목코드']
today = datetime.today().strftime("%Y%m%d")
df = stock.get_market_ohlcv_by_date(fromdate="20200101", todate=today, ticker=ticker)
df
Out[2]:
In [3]:
df = df.assign(이동평균=df['종가'].rolling(window=20).mean(),
표준편차=df['종가'].rolling(window=20).std())
df = df.assign(상단밴드=df['이동평균'] + df['표준편차']*2,
하단밴드=df['이동평균'] - df['표준편차']*2)
df = df.assign(PB=(df['종가']-df['하단밴드']) / (df['상단밴드']-df['하단밴드']),
밴드폭=(df['상단밴드']-df['하단밴드'])/df['이동평균'])
df = df[19:]
In [5]:
tab_cols = mcolors.TABLEAU_COLORS
plt.figure(figsize=(10, 15))
plt.subplot(3,1,1)
plt.plot(df.index, df['종가'], color=tab_cols['tab:gray'], linewidth=1, label='종가')
plt.plot(df.index, df['상단밴드'], color=tab_cols['tab:red'], linestyle='dashed', linewidth=1, label='상단밴드')
plt.plot(df.index, df['이동평균'], color=tab_cols['tab:green'], linestyle='dashed', linewidth=1, label='20일 이동평균')
plt.plot(df.index, df['하단밴드'], color=tab_cols['tab:blue'], linestyle='dashed', linewidth=1, label='하단밴드')
plt.title(f'{stock_nm}({int(ticker.values)})의 볼린저 밴드(20일, 2 표준편차)')
plt.legend(loc='best')
plt.subplot(3,1,2)
plt.plot(df.index, df['PB'], color=tab_cols['tab:purple'], label='%B')
plt.grid(True)
plt.legend(loc='best')
plt.subplot(3,1,3)
plt.plot(df.index, df['밴드폭'], color=tab_cols['tab:brown'], label='밴드폭')
plt.grid(True)
plt.legend(loc='best');
- 최근 두산중공업은 주가의 급격한 상승을 보였는데, 밴드폭이 감소 추세로 전환되는 것처럼 보이고, %b 값도 내려가고 있음 기술적 측면에서 볼 때, 두산중공업 주가의 추세가 전환될 것으로 예상해볼 수 있음