#주식/투자

기술적지표 파헤치기 #9: BOP

SUNGWOO BAE
PRO

2023-02-02 · 7 MIN READ

Balance Of Power의 수식, 엑셀과 트레이딩뷰로 구현해보기

*2021-12-07 글


BOP란 Balance Of Power의 약자로, 고가와 저가, 시가와 종가를 이용해 추세를 기준하는 지표입니다.

BOP의 수식은 다음과 같습니다.

BOP = (close - open) / (high - low)


수식을 살펴보면, 시가와 종가를 비교하면서 고가와 저가로 가중치를 두는 모습을 확인할 수 있습니다.

예시를 몇가지 들어보겠습니다.




(close - open) / (high - low)
= (50.99 - 49.48) / (51.21 - 49.18)
= 1.51 / 2.03
= 0.744



(close - open) / (high - low)
= (3536.40 - 3640.45) / (3658.00 - 3522.00)
= -104.05 / 136
= -0.765




(close - open) / (high - low)
= (642.85 - 644.55) / (660.85 - 636.65)
= -1.7 / 1.03
= -1.65



위와 같이 기본적으로 상승 시 양수, 하락 시 음수로 표기되며,

시가에서 종가로의 움직임 대비 고저가의 차이가 클 수록 수치가 낮게 나오는 수식임을 알 수 있습니다.


BOP는 편차가 큰 지표이기에, 이동평균하여 사용하는 경우도 존재합니다.


Backtest


카카오를 대상으로, 2000년 5월부터 2021년 12월까지 BOP를 사용한 "Long Only" 백테스팅 결과입니다.

모든 백테스트는 리스크 관리를 따로 하지 않았으며, 조건에 따라 자산의 100%를 전부 운용했을 때의 결과입니다.


1.

매수 조건: BOP의 14일 평균이 21일 평균을 상향 돌파하였을 때

매도 조건: BOP의 14일 평균이 21일 평균을 하향 돌파하였을 때


Sharpe Ratio = 0.088

Sortino Ratio = 0.16


먼저 단순히 평균치만을 사용해 거래를 하였을 때의 결과입니다.

전체적으로 성과가 매우 좋지 못한 모습을 보입니다.


2.

매수 조건: BOP가 3일 연속으로 상승하였을 때

매도 조건: BOP가 2일 연속으로 하락하였을 때



Sharpe Ratio = 0.046

Sortino Ratio = 0.071


BOP 자체를 사용하는 방법입니다. 하락세에 더 신속히 대응하고자 매도 조건식을 매수 조건식보다 하루 적게 짜보았습니다.

결과는 1번 백테스팅과 유사한 흐름을 보입니다. 변동폭이 큰 지표라 성과가 좋지 않은 듯 합니다.


3.

매수 조건: BOP가 최고치를 갱신하였을 때 (비교기간: 7일)

매도 조건: BOP가 2일 연속으로 하락하였을 때



Sharpe Ratio = 0.106

Sortino Ratio = 0.2


최고치 갱신이라는 점에서 모멘텀 전략과 흡사하다 판단하여 비교해본 결과,

동일한 조건으로 비교하였을 때 모멘텀 전략의 경우: Sharpe Ratio 0.061,Sortino Ratio 1.448으로 BOP보다 성과가 뒤쳐지는 모습을 보였습니다.


BOP가 더 나은 모습을 보였으나,

BOP는 고저가의 차로 나눈 값을 사용하기에, 실제 시세의 방향과 지표가 비례하지 않을 가능성이 존재하여

비교 기준을 상대적으로 두었을 때(ex. BOP의 평균치 or BOP의 과거치) 그 유효성은 낮은 것으로 판단됩니다.


4.

매수 조건: BOP의 21일 평균이 0 이상일 때

매도 조건: BOP의 21일 평균이 0 이하일 때


Sharpe Ratio = 0.093

Sortino Ratio = 0.24


비교 기준을 절대적으로 두었을 때의 결과입니다.

3번 결과보다 전략의 위험이 소폭 완화되었으며, 거래 빈도가 줄어든 모습을 확인할 수 있습니다.


그래도 BOP의 전체적인 수식에 대한 유효성은 확실치 않으나,

사용 시 상대적인 기준보다 절대적인 기준이 더 합리적인 것으로 판단됩니다.


Excel


1. BOP


(close - open) / (high - low)

=(종가-시가) / (고가-저가)


이동평균선만큼이나 간단합니다.

=(E2-B2)/(C2-D2)



2. Average


평균치를 원하시는 분들은 AVERAGE 함수를 사용해주시면 됩니다.

=AVERAGE(G2:G22)




TradingView


아래 식은 BOP의 평균치를(14일과 21일) plot한 지표입니다.

순수 BOP를 확인하고 싶으신 분은 설정에서 BOP Length를 1로 바꿔주시면 됩니다.


//@version=4
study("BOP")

N1=input(title="BOP Length1",defval=14,type=input.integer)
N2=input(title="BOP Length2",defval=21,type=input.integer)

BOP = (high - low) /(close - open)

B1 = sma(BOP,N1)
B2 = sma(BOP,N2)

plot(B1, color=color.maroon)
plot(B2, color= color.navy)
plot(0,color=color.black)