박스권

박스권이란?

박스권은 가격이 일정기간동안 박스 안에서 오르내림을 반복하는 것을 말한다.

import matplotlib.pyplot as plt
import mplfinance as mpf
import numpy as np

# df = ...
# df_100 = ...

plt.style.use('fivethirtyeight')
fig, ax = plt.subplots(figsize = (12,6))

mpf.plot(df_100,type='candle', volume=False, style='charles', ax=ax)

ax.set_xlabel('Date')
ax.set_ylabel('Price ($)')
# ax.legend()

ax.set_title('BTC/USDT')

다만, 박스권만을 가지고 추세판단과 전략을 짜기는 불가능하다. 박스권을 정하는것이 추세선과 마찬가지로 너무 주관적이기 때문이다. 뒤에 추세선과 더불어 다양한 지표와 함께 박스권을 변형하여 활용할 경우 좋은 전략을 짤 수 있다.

또한 박스권 내부의 가격변동흐름을 활용해 수익을 내는것은 매우 힘들다. 주로 박스권을 활용한 전략은 박스권을 돌파하는 경우를 트리거로 사용한다.

박스권 돌파

박스권 돌파가 일어난 경우 그 방향으로 가격 흐름이 이어질 가능성이 높다.

  1. 박스권의 지속 기간이 길수록 돌파의 중요성이 크다.
  2. 박스권이 좁을수록 돌파는 중요한 신호이다.
  3. 박스권에서 잠시 이탈하더라도 다시 박스권으로 재진입하는 경우도 많이 있기 떄문에(저항 또는 지지세력으로 인해) 박스권 돌파 신호는 적절한 필터 파라메터를 사용하여야 한다.

진정한 돌파인지 아닌지는 박스권 이탈 일수, 최저 돌파율, 추력일, 지속기간 등으로 객관화 할 수 있다(이후 자세히 다룰 예정).

위 차트는 박스권 하단 돌파로 하락한다.

지지와 저항

일단 박스권이 형성되고 나면 상단선에서는 저항 그리고 하단선에서는 지지하는 경향이 있다. 또한, 박스권 돌파가 일어난 후 그 가격 추세가 유지되면 이전에는 저항 또는 지지선이었던 박스권의 상단 또는 하단선이 다시 새로운 박스권의 지지 또는 저항선이 된다.

이전의 주요 고점과 저점

일반적으로 이전의 주요 고점 부근에서 저항선이 형성되고 주요 저점 부근에서 지지선이 형성된다.

주요 저점과 고점을 활용하여 간단한 전략을 짤 수 있다. 이전대비 일정 거래량 이상이 터진 저점 또는 고점을 기준으로 일정 봉 이상 돌파가 일어나거나 일정 퍼센트를 초과하여 박스권 돌파 신호로 캐치하는것이다.

상대 고점과 상대 저점의 밀집

이전에는 단일 고점, 저점에서 형성된 지지와 저항에 관해 설명했다면 이번에는 상대적 고점과 저점이 집중적으로 모인 가격 구간에서의 지지와 저항에 관해 다룬다.

일반적으로 상대 고점과 상대 저점은 비교적 좁은 가격 구간에 집중적으로 몰리는 경향이 있다.

엔벨로프 밴드

엔벨로프 밴드는 이동평균선을 중심으로 아래, 위를 일정퍼센트(이동평균 비율)로 가감하여 나타낸 밴드이다. 예를들어 이동평균선이 100이고 이동평균 비율이 5%라고 하면 밴다 상단은 105, 하단은 95가 된다. 위 코인 3분봉 차트의 20봉 이동평균과 0.5%의 비율을 사용하여 차트를 그려보자.

import matplotlib.pyplot as plt
import mplfinance as mpf
import numpy as np

# df = ...
df_300 = df.copy()
df_300['MA20'] =  df_300['close'].rolling(window=20).mean()

df_300 = df_300.iloc[:-600]

plt.style.use('fivethirtyeight')
fig, ax = plt.subplots(figsize = (12,6))

mpf.plot(df_300,type='candle', volume=False, style='charles', ax=ax)
xpoints = np.arange(len(df_300))


ax.plot(xpoints, df_300['MA20'] * 1.005, color = 'b', linewidth = 1)
ax.plot(xpoints, df_300['MA20'] * 0.995, color = 'b', linewidth = 1)

ax.set_xlabel('Date')
ax.set_ylabel('Price ($)')
# ax.legend()

ax.set_title('BTC/USDT')

해당 밴드를 통하여 대략적인 지지선과 저항선을 파악하는데 유용하다.

볼린저 밴드

엔벨로프 밴드가 이동평균 비율을 가감하여 밴드를 구성하였다면 볼린저 밴드는 표준편차를 가감하여 밴드를 산출한다.

import matplotlib.pyplot as plt
import mplfinance as mpf
import numpy as np

# df = ...
df_300 = df.copy()
df_300['MA20'] =  df_300['close'].rolling(window=20).mean()
df_300['STD'] = df_300['close'].rolling(window=20).std()

df_300 = df_300.iloc[:-600]

plt.style.use('fivethirtyeight')
fig, ax = plt.subplots(figsize = (12,6))

mpf.plot(df_300,type='candle', volume=False, style='charles', ax=ax)
xpoints = np.arange(len(df_300))


ax.plot(xpoints, df_300['MA20'] + df_300['STD'], color = 'b', linewidth = 1)
ax.plot(xpoints, df_300['MA20'] - df_300['STD'], color = 'b', linewidth = 1)

ax.set_xlabel('Date')
ax.set_ylabel('Price ($)')
# ax.legend()

ax.set_title('BTC/USDT')

20일간의 표준편차를 활용해 밴드폭을 산출하기 때문에 엔벨로프 밴드보다 최근 변동성을 좀더 잘 반영한다. 일반적으로는 밴드 하단을 과매도구간, 밴드 상단을 과매수구간이라고 교육적으로는 말할 수 있다. 여기서 교육적이라 함은, 널리 알려진 정론이나 실제 단일 해당 단일 팩터의 전략으로는 수익을 창출하긴 힘듦을 의미한다.

profile
취미로 퀀트 투자를 도전하는 직장인

0개의 댓글