기술적지표 스토캐스틱 오실레이터란 — %K·%D 크로스 신호의 함정과 필터링
게시물 옵션
본문
매매 기술 노트 · 06 · 기술적지표
스토캐스틱 오실레이터란
만들어놓고 한 번도 켜지 않은 지표
스토캐스틱은 RSI와 나란히 가장 많이 쓰이는 과매수·과매도 지표다. 원리는 단순하다. "지금 가격이 최근 일정 기간 동안의 최고가와 최저가 사이에서 어디쯤에 있는가"를 숫자로 보여준다. 코인랩 봇에도 이 지표가 구현돼 있다. 계산 코드도, 크로스 판정 로직도 다 들어 있다. 그런데 스위치가 꺼져 있다. 이 글은 왜 만들어놓고 켜지 않았는지에 대한 기록이다.
- 지표 유형
- 모멘텀 오실레이터
- 측정 대상
- 범위 내 위치
- 과매수·과매도
- 80 이상 / 20 이하
- 봇 적용 상태
- 비활성
이 지표가 보는 것
RSI는 "최근 상승한 힘과 하락한 힘 중 어느 쪽이 더 셌는가"를 잰다. 스토캐스틱은 접근이 조금 다르다. 최근 일정 기간의 최고가와 최저가를 놓고, 지금 가격이 그 범위 안에서 위쪽에 붙어있는지 아래쪽에 붙어있는지를 본다. 최고가에 딱 붙어있으면 100에 가깝고, 최저가에 딱 붙어있으면 0에 가깝다.
지표는 빠르게 움직이는 선 하나(흔히 %K라고 부른다)와, 그 선을 완만하게 다듬은 신호선 하나(%D)로 그려진다. 두 선이 서로 엇갈리는 지점을 "크로스"라고 하고, 이 크로스가 흔히 매매 신호로 쓰인다. 이름이 조금 낯설게 들릴 수 있는데, 그냥 "빠른선"과 "느린선"이라고 생각해도 무방하다.
구조적으로 예상되는 문제
교과서적인 규칙은 단순하다. 빠른선이 느린선을 위로 뚫으면 매수, 아래로 뚫으면 매도. 그런데 이 규칙을 코인 시장에 그대로 옮기면 문제가 생긴다는 건 계산식만 봐도 예상할 수 있다.
스토캐스틱은 추세가 강할 때 과매수·과매도 구간에 오래 머무는 특성이 있다. 가격이 계속 신고점을 만들면 지표는 계속 100 근처에 붙어 있게 된다. 그 구간에서 빠른선과 느린선은 서로 얽혀서 오르내리고, 크로스가 반복적으로 발생한다. 이 크로스를 그대로 매도 신호로 받아들이면, 상승이 한참 더 남은 상태에서 물량을 던지게 된다.
그래서 어떻게 했나 — 코드는 남기고 스위치를 껐다
코인랩 봇 · 현재 설정
코인랩 봇의 지표 설정을 열어보면 이렇게 돼 있다.
스토캐스틱은 계산 함수도, 크로스 판정도 다 짜여 있다. 스위치만 내려가 있다. 그리고 켠 적이 없으니 이 지표에 대한 코인랩의 실측 데이터는 존재하지 않는다. 백테스트 기록도, 실거래 집계도 없다.
이 글에 숫자가 하나도 없는 이유가 그것이다. 다른 편들처럼 "몇 건 중 몇 건, 승률 몇 퍼센트"를 쓸 수 없다. 켜지 않은 지표의 성적표를 만들어낼 방법은 없기 때문이다.
왜 켜지 않았나
지표가 나빠서가 아니다. 조건을 하나 더 얹는 비용을 이미 다른 데서 배웠기 때문이다.
봇의 매수 조건은 이미 여러 개가 동시에 성립해야 주문이 나가는 구조다. 여기에 조건을 하나 더 추가하면 신호가 줄어든다. 문제는 그렇게 줄어든 신호가 더 좋은 신호라는 보장이 없다는 것이다. 01편 RSI의 실측에서 이걸 숫자로 확인했다. 조건을 겹친 쪽(저점 반등 + 거래량 결합, 28건 승률 25.0%)이 RSI 단독(95건 승률 32.6%)보다 오히려 나빴다.
같은 문제를 매매일지 ②다섯 개의 관문을 세웠더니 들어갈 자리가 없었다에서 다뤘다. 관문을 늘릴수록 안전해지는 게 아니라, 들어갈 수 있는 자리 자체가 사라진다. 04편 MACD에서는 반대 방향의 증거가 나왔다. 켜둔 지표인데도 24일 동안 실제 진입은 두 번뿐이었다. 조건을 겹친 결과다.
스토캐스틱을 켜려면 "이 지표를 추가해서 걸러낸 신호들이 실제로 나쁜 신호였는가"를 먼저 측정해야 한다. 그 측정을 아직 하지 않았다. 그래서 스위치는 내려간 채로 남아 있다.
만약 켠다면 어떻게 쓸 것인가
지금 계획은 크로스 신호를 단독으로 쓰지 않는 것이다. 먼저 이동평균선의 기울기로 지금이 상승 추세인지 하락 추세인지를 판정하고, 추세를 거스르는 방향의 크로스는 잡음으로 처리한다. 상승 추세에서는 과매수 구간의 하향 크로스를 무시하고, 하락 추세에서는 과매도 구간의 상향 크로스를 무시하는 식이다.
다만 이건 어디까지나 설계안이다. 실제로 이 필터가 효과가 있는지는 돌려보고 세어봐야 안다. 그리고 그때는 "신호가 몇 개 줄었는가"가 아니라 "걸러진 신호들의 평균 손익이 실제로 마이너스였는가"를 봐야 한다. 신호가 줄었다는 사실만으로는 개선을 증명하지 못한다는 걸 RSI 실측에서 배웠다.
남은 숙제
지표를 계산하는 기준 기간을 코인 종류와 상관없이 똑같이 잡을지, 종목별로 다르게 잡을지도 아직 결론이 없다. 코인마다 원래 흔들리는 정도가 워낙 달라서 하나의 기준이 어떤 종목엔 너무 예민하고 어떤 종목엔 너무 둔감할 수 있다. 이것도 켜본 뒤에야 답할 수 있는 질문이다.
요약
스토캐스틱은 가격이 최근 범위의 어디쯤 위치하는지를 보여주는 지표다. 크로스 신호 자체보다, 지금이 어떤 추세 국면인지를 먼저 판단하고 그 흐름에 맞는 크로스만 받아들이는 게 일반적으로 권장되는 사용법이다.
코인랩 봇에서는 이 지표가 구현은 돼 있지만 꺼져 있다. 조건을 하나 더 얹는 것이 항상 개선이 아니라는 걸 다른 지표에서 먼저 확인했고, 그 검증을 스토캐스틱에 대해서는 아직 하지 못했기 때문이다. 그래서 이 글에는 코인랩 실측 수치가 없다. 켠 적이 없으니 데이터도 없다. 측정한 뒤에 이 글을 갱신할 생각이다.
· "만약 켠다면" 이하는 설계안이며 검증된 결과가 아니다.
· 본문의 80/20 기준선은 일반적으로 통용되는 값이며, 봇의 설정값이 아니다.
· 지표 활성 여부는 운영 중에 바뀔 수 있다. 변경하면 이 글을 갱신한다.
- 01 · RSI(상대강도지수)란 무엇인가
- 02 · 볼린저밴드란
- 03 · 이동평균선(MA)의 역할과 종류
- 04 · MACD 지표 이해하기
- 05 · 거래량 지표가 왜 중요한가
- 06 · 스토캐스틱 오실레이터란 — 지금 글