IT/컴퓨터프로그램

[Python] FinanceDataReader 를 통한 주가 읽기 - 볼린저밴드

chn1002 2022. 5. 16. 09:05

[Python] FinanceDataReader 를 통한 주가 읽기 - 볼린저밴드(Bollinger Bands)

볼린저 밴드는 미국의 재무분석가인 존 볼린저가 개발하고 상표권을 취득한 주가 기술적 분석 도구이다. 볼린저 밴드 의 기본 원리는 주가의 변동이 표준 정규 분포 함수에 따른다고 가정하고 주가를 따라 위(Upper), 아래(Lower) 로 폭이 움직이는 밴드를 만들어 기준선으로 판단 한다. 볼린저 밴드는 이동평균선을 추세 중심선으로 사용하며, 상하한 변동 폭은 추세중심선의 표준편차로 계산하여 가격 변동성 분석과 추세분석을 동시에 수행할 수 있다.

 

볼린저 밴드 계산

  • 상한선: 20일 이동평균선 + (20일 동안의 주가 표준편차 값0 *2)
  • 하한선: 20일 이동평균선 - (20일 동안의 주가 표준편차 값0 *2)

 

FinanceDataReader 에서 이동 평균선, 볼린저 밴드

아래 코드에서는 20 일 이동 평균을 구성하고 해당 20일 이동 평균선을 표준편차 값으로 볼린저 밴드의 상한선과 하한선을 구한다.

  • stockM_df['UPPER'] = stockM_df['MA20'] + stockM_df['MA20STD']  * 2
  • stockM_df['LOWER'] = stockM_df['MA20'] - stockM_df['MA20STD']  * 2

볼린저 밴드사이에는 fill_between 을 이용하여 색을 더해 준다.

  • axes.fill_between(s_df.index, stockM_df['UPPER'], stockM_df['LOWER'], alpha=0.2)
def pltStocknBB(stockName, s_df):
    stockM_df = s_df[['Close']]
    stockM_df['MA20'] = stockM_df['Close'].rolling(window=20).mean()    #20MA
    stockM_df['MA20STD'] = stockM_df['Close'].rolling(window=20).std()    #20MA STD
    stockM_df['UPPER'] = stockM_df['MA20'] + stockM_df['MA20STD'] * 2 
    stockM_df['LOWER'] = stockM_df['MA20'] - stockM_df['MA20STD'] * 2 
    
    print(stockM_df)
    fig = plt.figure(figsize=(16,14))
    axes = plt.subplot2grid((4,4),(0,0), rowspan=3,colspan=4)
    
    nScalePlt(axes, stockM_df['Close'], stockName)
    nScalePlt(axes, stockM_df['MA20'], "MA20")
    nScalePlt(axes, stockM_df['UPPER'], "UPPER")
    nScalePlt(axes, stockM_df['LOWER'], "LOWER")
    
    axes.legend()

    axes.fill_between(s_df.index, stockM_df['UPPER'], stockM_df['LOWER'], alpha=0.2)

    plt.show()

 

삼성전자의 이동평균선 및 볼린저 밴드