(파이썬 자동매매) 볼린저 밴드(Bollinger Bands)

반응형

볼린저 밴드(Bollinger Bands)

  • 볼린저 밴드는 1980년대 초반에 존 볼린저가 개발한 주가 기술적 분석 도구이다.
  • 볼린저 밴드는 주가가 이동평균선 중심으로 표준편차 범위 안에서 움직인다고 가정한다.
  • 현재 주가가 상대적으로 높은지 낮은지를 판단할 때 사용하는 보조지표이다.

볼린저 밴드 구성

볼린저 밴드는 다음과 같이 구성된다.

  • 중심선(Moving Average): n기간 동안의 이동평균
  • 상한선(Upper Band): 중심선 + (n기간 동안의 표준편차 * k)
  • 하한선(Lower Band): 중심선 - (n기간 동안의 표준편차 * k)

일반적으로 n과 k의 값은 20과 2를 사용한다.

볼린저 밴드 변동성 돌파 전략

  • 밴드폭이 축소되어 밀집구간을 거친 후, 상단 밴드를 돌파할 경우 매수한다.
  • 하단 밴드를 하향 이탈할 경우 매도한다.

파이썬 볼린저 밴드 차트 그리기

matplotlib의 fill_between 함수를 사용하면 볼린저 밴드 차트를 쉽게 그릴 수 있다.
코드 작성 방법은 pandas 공식문서를 참고했다.

price = pd.Series(
     np.random.randn(150).cumsum(),
     index=pd.date_range("2000-1-1", periods=150, freq="B"),
)

ma = price.rolling(20).mean()
mstd = price.rolling(20).std()
plt.figure();
plt.plot(price.index, price, "k");
plt.plot(ma.index, ma, "b");
plt.fill_between(mstd.index, ma - 2 * mstd, ma + 2 * mstd, color="b", alpha=0.2);

업비트 비트코인 볼린저 밴드 차트 그리기

비트코인 차트 데이터 가져오기

import pyupbit

df = pyupbit.get_ohlcv("KRW-BTC")
df.tail()

비트코인 20일 이평선 계산하기

df["ma"] = df["close"].rolling(20).mean()

비트코인 표준편차로 상/하한선 계산하기

# 20일간의 표준편차 
df["std"] = df["close"].rolling(20).std()

# 상한선
df["upperb"] = df["ma"] + (df["std"] * 2)

# 하한선
df["lowerb"] = df["ma"] - (df["std"] * 2)

비트코인 볼린저 밴드 차트 그리기

import matplotlib.pyplot as plt
plt.style.use('seaborn')

df[["upperb", "close", "ma", "lowerb"]].plot(figsize=(20, 10))
plt.fill_between(df.index, df.lowerb, df.upperb, color="b", alpha=0.1);

볼린저 밴드 함수 만들기

def plot_bollinger_bands(df, n=20, k=2):
  df["ma"] = df["close"].rolling(n).mean()
  df["std"] = df["close"].rolling(n).std()
  df["upperb"] = df["ma"] + (df["std"] * k)
  df["lowerb"] = df["ma"] - (df["std"] * k)
  df = df[n-1:].copy()
    
  plt.figure(figsize=(9, 5))
  plt.plot(df.index, df['close'], label='Close')
  plt.plot(df.index, df['upperb'], linestyle='dashed', label='Upper band')
  plt.plot(df.index, df['ma'], linestyle='dashed', label=f'Moving Average {n}')
  plt.plot(df.index, df['lowerb'], linestyle='dashed', label='Lower band')
  plt.legend(loc='best');

이제 이 함수를 사용하여 다른 코인(ETH, STEEM, SBD)의 볼린저 밴드를 그려보자.

References

Links

반응형