안녕하세요 새벽단호박입니다. 간만에 검색기 만들기 프로젝트를 포스팅합니다.
오늘은 엑셀 VBA를 활용하여 OBV와 OBV Signal을 구하는 매크로를 만들어 보겠습니다.
이를위해 1. OBV와 OBV Signal의 수식 2. 엑셀로 계산하는 방법 3. 매크로로 만들기 이렇게 세개의 과정을 알아보고자 합니다.
독학으로 엑셀 VBA를 공부하여 OBV 같은 보조지표를 검색하고 있는 중이니... 부디 조금 난잡하더라도 양해부탁드림다!
그럼 시작!
1. OBV와 OBV Signal의 정의와 수식
On Balance Volume. 소위 '거래량 지표'의 대명사로 불리는 OBV는 '종가'의 변화에 따른 '거래량'의 변화를 파악하는 보조지표입니다.
또한 OBV Signal은 그러한 OBV의 '지수평균'을 의미합니다.
(일반평균과 지수평균의 차이는 여러차례 포스팅 한 적이 있습니다. 아래를 참고해주세요!)
PJ3. 엑셀로 지수평균 구하는 수식 (feat. RSI Signal)
0.들어가며 저번에 RSI를 힘겹게 구하고... 코드까지 만든 이후에 이제 RSI SIgnal을 구하는 단계까지 왔습니다. 그런데 Average 함수로 구한 RSI SIgnal이 현실과 너무 동떨어진겁니다;; RSI 를 처음 구했
dawnpkin.tistory.com
그렇다면 OBV와 OBV Singal의 수식은 구체적으로 어떻게 되는지 알아보겠습니다.
|
수식 |
설명 |
OBV = OBV(period1) |
C(0) > C(1) : OBV(0) = OBV(1) + V(0) |
종가 상승 = OBV(어제) + 거래량 |
C(0) = C(1) : OBV(0) = OBV(1) |
종가 보합 = OBV(어제) |
C(0) > C(1) : OBV(0) = OBV(1) - V(0) |
종가 하락 = OBV(어제) - 거래량 |
OBV Signal = OBV(period1),period2) |
EMA(OBV(period1),period2) |
OBV(기간1)의 기간2 지수평균 |
=[2/(1+period2)]*OBV(0) +[1-(2/(1+period2))]*OBV Signal(1) |
2/(1+기간2) 만큼의 가중치를 금일 값에 준 지수가중평균법 |
무척 어려운거 같죠? 하지만 엑셀을 활용한다면 금방 해결할 수 있습니다.
특히나 지수평균의 경우 이해가 안되진다면 위 포스팅을 한번 꼭 읽어주세요
2. 엑셀 함수로 OBV와 OBV Signal 구하기
그럼 엑셀로 접근해 보겠습니다.
위 수식을 보니, 저희에게 필요한 값이 무엇인지 알 수 있습니다.
OBV : 종가, 전일 종가, 거래량
OBV Signal : OBV
따라서 위 값을 불러올 필요가 있습니다. 이것도 차후 포스팅 해야하는데, 지금은 값을 구해놓은 파일을 활용하겠습니다.
OBV_Function_새벽단호박.xlsx
0.03MB
위 시트의 값으로는 코인명/검색시기/종가/전일종가/거래량/OBV/OBV SIgnal 이 들어갈 수 있도록 되어있습니다.
이때, F4 = 0 / G4 = 20 으로 되어있는데, 그 이유는 아래에서 설명드리겠습니다.
우선 함수 수식을 생각해봅시다.
OBV의 경우 크게 3가지 경우로 나뉘어진 보조지표입니다. 가격 상승, 보합, 하락. 그렇다면 if함수를 쓰면 되겠군요?
따라서 첫행의 경우
=IF(C5-D5>0,F4+E5,IF(C5-D5=0,F4,F4-E5))
와 같이 표기하면되는데, 이때 F4에 문자열이 들어있다면 안되겠죠. 따라서 0을 넣어놓았습니다. 궁금하시다면 붉게 표시해 두었으니 실험해보시길
OBV SIgnal의 경우 기간2 만큼의 지수평균입니다. 그 수식은
=2/(1+$G$4)*F25+(1-(2/(1+$G$4)))*G24
(단, G4 = period2 = 20)
넵, G4=20으로 지정해 놓은것은 저 값이 제가 지정해 놓은 period2값이기 때문입니다. 이 기간2에 따라 함수로 만든 OBV Signal의 값에 가중치가 일괄부여되기 때문에 꼭 $$를 붙여 값을 '고정'시켜야합니다.
여기서 주의 하실 점은, 지수평균을 구할때는 처음 값(위 시트에서는 G24)는 가중치가 부여되지 않은상태, 즉 '일반평균'이 들어간다는 점입니다.
따라서 노란색 표시 해둔 칸은 위 수식이 아닌 =Average()가 들어있으니 꼭 주의해주세요.
이제 함수는 구현됬으니 매크로로 만들어보죠.
주의하실 점이, '하나의 시트'만 관리하실거라면 함수가 편할겁니다. 왜냐면 행열 편집시 함수는 같이 움직이지만 매크로는 이에 맞춰 대부분 수정이 조금씩 따로 들어가거든요.
그러니 용도에 맞게 활용하시길
매크로의 경우, 수식을 다 짜놓았으니 이제 편하겠군요. 바로 시작해보겠습니다.
OBV_MACRO_새벽단호박.xltm
0.03MB
서식은 위와 동일합니다.
검은색 MACRO를 누르면 실행됩니다
서식을 수정하지 않는선에서 '값'만 바꾼다면 다른 코인의 시세 확인에도 적용가능합니다.
아니 호박씨. 그럼 대체 기간1은 어디로 사라졌나요?
그리고 호박놈아 왜 업비트에서 보는거랑 값이 달라?
라고 물으시는 분들. 정확한 지적이십니다. 왜냐면 업비트는 OBV의 계산 기간 = period1이 600이거든요. 하지만 저는 최근 200개의 값만 불러왔으니, 400일간의 거래량 변화가 반영되지 않은것입니다.
업비트 = OBV(600)
호박놈 = OBV(200)
이라고할까요?
이를 수정하기 위해서는 여러분도 200봉이 아닌 600봉치 값을 불러오셔서 계산하시면 정확할겁니다.
하지만 OBV라는것이 그 '추이'가 중요하지 '값'이 중요한건 아니거든요. 그러니 그냥 사용하셔도 큰 문제는 없을거라 생각이 됩니다.
자 그럼 마무리가 길었습니다.
질문 칭찬+욕은 댓글로! 구독도 눌러주시면 감사! 그럼 20,000!