질문의 각도가 다르다
대부분의 지표는 가격의 크기를 잰다. RSI는 오른 폭과 내린 폭의 비율을, 볼린저는 평균에서 떨어진 거리를, 이동평균은 평균 자체를 본다. 전부 얼마나를 묻는다.
아룬은 다르다. 이건 언제를 묻는다. 정확히는 “최근 n봉 중에서 최고가를 찍은 게 몇 봉 전인가"를 센다. 가격이 얼마나 올랐는지는 전혀 보지 않는다. 이 각도가 이 지표를 특별하게 만든다.
이름은 산스크리트어로 새벽빛을 뜻하는 단어에서 왔다고 한다. 추세가 시작되는 순간을 잡겠다는 뜻이겠다.
기본 기간 n = 25 (원저자 권장), 실무에선 14~25 를 많이 쓴다
Aroon Up = (n − 최고가 이후 경과 봉수) / n × 100
Aroon Down = (n − 최저가 이후 경과 봉수) / n × 100
Aroon Oscillator = Up − Down 범위 −100 ~ +100
읽는 법
Up = 100 바로 이 봉이 n봉 신고가 → 방금 고점을 갱신했다
Up = 0 n봉 전이 최고가 → 그 뒤로 한 번도 못 넘었다
오실레이터 > 0 고점 갱신이 저점 갱신보다 최근 → 상승 우세
오실레이터 < 0 그 반대 → 하락 우세
주의: 가격이 얼마나 올랐는지는 계산에 안 들어간다. 오직 시점만 본다값이 움직이는 방식부터
공식을 봤으니 값이 실제로 어떻게 움직이는지 따라가 보자. 아룬은 다른 지표와 움직이는 방식이 눈에 띄게 다르다.
신고가를 찍은 직후부터 아무 일도 없을 때
0봉 경과 Up = 100 방금 최고가
1봉 경과 Up = 96
5봉 경과 Up = 80
12봉 경과 Up = 52
20봉 경과 Up = 20
25봉 경과 Up = 0 창 밖으로 밀려남
특징 — 가격이 전혀 안 움직여도 값은 계속 내려간다
다른 지표들은 가격이 정지하면 값도 정지하는데 아룬은 아니다
시간이 흐른다는 사실 자체가 정보로 취급된다
그리고 새 신고가가 나오는 순간 100 으로 튄다 — 계단식 복귀“가격이 안 움직여도 값이 변한다"는 성질이 이 지표의 정체성이다. RSI는 가격이 멈추면 서서히 50으로 수렴하고 볼린저는 밴드가 좁아지지만, 아룬은 시간이 지났다는 사실만으로 값을 바꾼다.
이게 유용한 상황이 있다. 예컨대 “고점을 찍은 지 오래됐다"는 정보는 가격만 봐서는 알기 어렵다. 지금 가격이 고점 대비 -3%라는 건 알 수 있어도, 그 고점이 한 시간 전인지 하루 전인지는 별도로 세야 한다. 아룬은 그 세는 일을 대신해준다.
시간만 보면 무엇이 좋은가
가격 크기를 무시하는 게 왜 장점이 될 수 있을까. 한 가지 성질 때문이다. 크기 기반 지표는 이상치에 흔들리는데, 시간 기반 지표는 안 흔들린다.
시나리오: 조용하던 종목에 1봉짜리 +30% 스파이크
RSI 평균 상승폭이 폭발 → 순식간에 과매수 구간, 며칠간 왜곡 지속
볼린저 표준편차 급증 → 밴드가 벌어져 이후 신호가 다 무뎌짐
이동평균 평균이 들려 올라감 → n봉 동안 영향
아룬 "최고가가 방금이다" → Up = 100. 그게 전부.
+30% 든 +3% 든 값이 같다
장점: 이상치에 강건하다 (robust)
단점: 강한 움직임과 약한 움직임을 구분 못 한다 — 바로 이 지표의 최대 약점장점과 단점이 같은 뿌리에서 나온다는 게 흥미롭다. 크기를 안 보니까 이상치에 안 흔들리고, 크기를 안 보니까 강도를 모른다. 그래서 아룬은 단독으로 쓰기보다 크기 기반 지표와 짝지을 때 의미가 생긴다. 서로 못 보는 것이 정확히 반대이기 때문이다.
이름의 유래와 원저자
지표의 배경을 아는 게 쓰임을 정하는 데 도움이 될 때가 있다. 아룬은 1995년 인도의 기술적 분석가 투샤르 찬데가 만들었다. 산스크리트어로 새벽빛을 뜻하는 단어에서 이름을 따왔다고 한다.
원저자의 의도
"추세가 시작되는 순간을 잡는다" — 새벽빛이라는 이름이 그 뜻
기본 기간 25 · 일봉 기준으로 설계
실제로 잘하는 일
추세의 시작보다 '추세가 없는 상태' 의 감지
Up 과 Down 이 둘 다 낮은 구간 = 정체
의도와 쓰임이 어긋나는 건 흔한 일이다
RSI 도 원래 모멘텀 측정용인데 지금은 과매수/과매도 판정에 더 쓰인다
볼린저 밴드도 변동성 도구였는데 역추세 매매에 쓰이는 경우가 많다
그래서 "만든 사람이 이렇게 쓰라고 했다" 는 근거가 약하다
쓰임은 내 데이터가 정한다 — 이 코너에서 반복하는 얘기같은 지표를 만든 찬데는 CMO(찬데 모멘텀 오실레이터)라는 지표도 만들었는데, 그건 아룬과 정반대로 크기를 재는 물건이다. 한 사람이 시간 축과 크기 축을 각각 만든 셈이다. 두 지표를 같이 쓰라는 뜻이었는지도 모르겠다.
박스권 감지라는 진짜 특기
아룬이 다른 지표보다 확실히 잘하는 게 하나 있다. 옆으로 기는 장을 알아채는 것이다.
추세장 (상승)
Up ▔▔▔▔▔▔▔▔ 90~100 근처에 붙어 있음 (계속 신고가)
Down ▁▁▁▁▁▁▁▁ 0 근처
오실레이터 +80 ~ +100 유지
박스권
Up ╱╲╱╲╱╲╱╲ 중간대에서 진동
Down ╲╱╲╱╲╱╲╱ 역시 중간대
오실레이터 0 근처에서 왔다 갔다 — 둘 다 낮으면 '아무 일도 안 일어나는 중'
유용한 조합 판정
Up < 50 AND Down < 50 → 최근 절반 구간에 고점도 저점도 갱신 없음
= 명확한 정체 구간
이 판정은 오실레이터(차이) 만 봐서는 안 나온다 — Up·Down 을 각각 봐야 한다마지막 줄이 실무 포인트다. 오실레이터는 Up과 Down의 차이라서 정보가 한 겹 줄어든다. Up 20 / Down 20도 0이고 Up 60 / Down 60도 0인데, 앞은 완전 정체이고 뒤는 양쪽 다 활발한 상태다. 봇에 넣을 거라면 오실레이터 하나만 받지 말고 세 값을 다 들고 있어야 한다.
박스권 판정이 왜 중요한가
정체 구간을 알아채는 게 왜 쓸모 있는지 좀 더 설명할 필요가 있겠다. “아무 일도 안 일어나는 중"이라는 정보가 매매에 무슨 도움이 되나 싶을 수 있으니까.
박스권에서 각 전략이 겪는 문제
돌파 전략 돌파 신호가 대부분 가짜 — 뚫자마자 되돌아온다
교차 전략 두 평균선이 얽혀 휩쏘가 연달아 터진다
눌림목 전략 '빠진 것' 이 없어서 진입 후보 자체가 안 생긴다
즉 대부분의 전략이 박스권에서 손해를 본다
그런데 대응은 전략마다 다르다
돌파·교차 → 아예 쉬는 게 낫다 (비용만 나감)
눌림목 → 자동으로 안 사게 된다 (조건 미달)
내 봇의 경우 박스권 감지의 실익은 '쉬기' 보다 '진단' 에 가깝다
매수가 없는 날, 그게 게이트가 조여서인지 장이 조용해서인지 구분된다
전자면 파라미터 문제, 후자면 정상 — 대응이 완전히 다르다마지막 항목이 실제로 유용할 것 같은 지점이다. “이틀째 매수가 없다"는 상황을 여러 번 겪었는데, 그때마다 원인 판단이 어려웠다. 게이트를 너무 조여서인지, 아니면 시장이 그냥 조용한 건지.
전자라면 조건을 풀어야 하고, 후자라면 아무것도 안 하는 게 맞다. 그런데 구분할 방법이 없으니 일단 조건을 풀게 된다. 그렇게 임계를 계속 깎다가 나중에 후회하는 패턴이 반복됐다.
박스권 판정 축이 있으면 이 상황이 정리된다. 시장이 정체 상태라는 게 확인되면 조건을 안 건드리고 기다리면 된다. 진단이 되면 불필요한 처방을 안 하게 된다.
코드
def aroon(high, low, n=25):
# 최근 n+1 봉 안에서 최고/최저가 몇 봉 전인지
up = high.rolling(n+1).apply(lambda x: x.argmax(), raw=True) / n * 100
down = low.rolling(n+1).apply(lambda x: x.argmin(), raw=True) / n * 100
return up, down, up - down
# 함정 1: 창 길이가 n 이 아니라 n+1 이다
# '현재 봉 포함 n봉 전까지' 를 보려면 n+1 개가 필요하다. 여기서 1 틀리면
# Up 이 100 에 절대 안 닿거나 항상 닿는 이상한 지표가 된다
# 함정 2: 동점. 같은 고가가 두 번 나오면 argmax 는 앞의 것을 고른다
# 최근 것을 기준으로 하려면 뒤에서부터 찾아야 한다 (플랫폼마다 관행이 다름)
# 함정 3: 고가/저가를 쓴다 — 종가 기준이 아니다. 꼬리가 값에 그대로 반영된다함정 3은 은근히 크다. 고가·저가 기준이라 긴 꼬리 한 번에 Up이 100으로 튄다. 종가 기준으로 바꾸면 지표 성격이 꽤 달라지는데, 어느 쪽이 맞다기보다 무엇을 신고가로 칠 것인가의 정의 문제다. 봇에서는 이 정의를 명시해두지 않으면 나중에 백테스트와 실전이 갈린다.
눌림목 전략에서 시간이 왜 중요한가
내 전략은 과매도 눌림목 반등이다. 빠진 것을 사되 돌기 시작한 것을 산다. 여기서 “돌기 시작했다"를 어떻게 정의하느냐가 계속 숙제였는데, 시간이라는 축이 이 문제와 직접 연결된다.
두 종목 모두 24시간 저점 대비 +1.5% 위치, RSI 42
현행 게이트로는 둘 다 통과한다
종목 A — 저점을 10분 전에 찍었다
아직 떨어지는 중일 수 있다. 반등이 아니라 잠깐 튄 것
종목 B — 저점을 6시간 전에 찍고 그 뒤로 안 깼다
바닥을 다진 시간이 있다. 반등의 신뢰도가 다르다
현행 게이트는 이 둘을 구분하지 못한다
저점근접·낙폭·RSI 전부 크기 기반이라 '언제' 를 안 본다
Aroon Down 은 정확히 이 차이를 잡는다
A: Down 이 아직 높다 (저점 갱신이 최근)
B: Down 이 낮아졌다 (저점 갱신 후 시간 경과)이 예시가 내가 아룬을 진지하게 보는 이유다. 지금 게이트 열 개가 전부 크기를 재고 있다. RSI는 에너지 배분의 크기, 낙폭은 하락의 크기, 저점근접은 거리의 크기, 거량은 거래량의 크기. 시간을 재는 축이 하나도 없다.
지표를 여러 개 쓴다고 정보가 그만큼 늘지는 않는다는 얘기를 여러 번 했는데, 그 반대도 성립한다. 지금까지 없던 종류의 축을 하나 넣으면 정보가 실제로 늘어날 가능성이 있다. 그게 아룬을 검증 후보 상위에 올려둔 이유다.
ADX와 뭐가 다른가
추세의 존재를 판정하는 지표로 훨씬 유명한 게 ADX다. 둘을 비교하면 아룬의 자리가 분명해진다.
ADX (평균방향성지수)
재료: +DI / −DI — 가격이 위아래로 움직인 '크기' 를 누적
출력: 0~100. 추세의 강도만 나타내고 방향은 안 나타냄
성질: 와일더 평활이 두 번 들어가 매우 느리다
아룬
재료: 극값이 나온 '시점'
출력: Up/Down 각각 0~100, 오실레이터는 −100~+100 (방향 포함)
성질: 평활이 없다. 극값이 갱신되는 순간 즉시 튄다
핵심 차이
ADX 는 크기를 누적 평활 → 늦지만 안정적
아룬 은 시점을 그대로 → 빠르지만 계단식으로 튄다
아룬의 값은 연속적이지 않다. n=25 면 값이 4 단위로만 움직인다 (100/25)
이 계단 성질 때문에 임계값 비교가 생각보다 거칠다 — 미세 조정이 안 먹힌다마지막 줄이 실무에서 중요하다. 아룬은 n으로 나눈 값이라 이산적이다. n=25면 0, 4, 8, 12… 이렇게만 나온다. 임계를 50으로 잡든 52로 잡든 결과가 같을 수 있다는 뜻이다.
이건 파라미터 스윕을 할 때 알아둬야 하는 성질이다. 후보값을 촘촘하게 늘어놓아 봐야 실제로는 몇 개의 구간으로 뭉친다. RSI처럼 연속적인 지표와 같은 방식으로 스윕하면 계산만 낭비한다. 지표마다 값의 알갱이 크기가 다르다는 걸 알고 설계해야 한다.
오실레이터만 보면 잃는 정보
앞에서 잠깐 짚었지만 중요해서 따로 다룬다. Aroon Oscillator는 Up에서 Down을 뺀 값인데, 이 뺄셈에서 정보가 한 겹 사라진다.
오실레이터 = 0 인 세 가지 경우
Up = 100, Down = 100
방금 신고가와 신저가를 동시에 찍었다 = 변동성 폭발 구간
Up = 50, Down = 50
양쪽 다 절반쯤 전에 찍었다 = 애매한 국면
Up = 4, Down = 4
양쪽 다 창 끝에 있다 = 완전한 정체, 아무 일도 안 일어남
세 상황의 대응이 전부 달라야 하는데 오실레이터는 다 0 이다
봇에 넣을 땐 (Up, Down, Oscillator) 세 값을 다 들고 다닌다
추가 판정 예시
Up < 50 AND Down < 50 → 정체 구간 (진입 보류 후보)
Up > 80 AND Down > 80 → 양방향 급변 (위험 구간)이 문제는 아룬에만 있는 게 아니다. 두 값을 빼서 하나로 만드는 모든 지표가 같은 손실을 겪는다. MACD도 그렇고, 앞서 다룬 BBTrend도 하단 차이에서 상단 차이를 빼는 구조라 마찬가지다.
압축은 편리하지만 되돌릴 수 없다. 그래서 지표를 봇에 넣을 때는 최종 출력값 하나만 받지 말고, 중간 산출물까지 상태로 들고 있는 게 대개 낫다. 나중에 “왜 이 판정이 나왔지"를 추적할 때 중간값이 있어야 원인을 찾을 수 있다.
내 봇에서 이 원칙을 배운 계기가 있다. 진입 조건을 여러 개 판정하는데 결과만 통과/탈락으로 기록했더니, 나중에 왜 떨어졌는지 알 수가 없었다. 그래서 게이트별 세부값을 함께 남기도록 바꿨다. 지금은 탈락한 종목도 어느 게이트에서 어떤 값으로 떨어졌는지가 로그에 찍힌다.
기간을 얼마로 둘 것인가
원저자 권장은 25다. 이 숫자가 어디서 왔는지 따져볼 필요가 있다.
n 작음 (10~14)
최근 구간만 본다 → 반응이 빠르다 · 값의 알갱이가 굵다 (100/14 ≈ 7.1)
잦은 극값 갱신으로 100 과 0 을 자주 오간다
n 큼 (25~50)
값이 부드럽다 · 알갱이가 곱다 (100/50 = 2)
오래전 극값에 계속 묶여 최근 변화를 늦게 반영
15분봉 기준 환산
n=14 → 3.5시간 창
n=25 → 6.25시간 창
n=96 → 정확히 24시간 창
마지막 줄이 흥미롭다 — n=96 이면 내 봇의 저점근접 게이트와 같은 창이 된다
즉 '24시간 저점 대비 거리(크기)' 와 '24시간 저점 갱신 이후 경과(시간)' 를
같은 창에서 비교할 수 있다. 대조 실험을 짜기에 딱 좋은 조건이다n=96 아이디어는 이 글을 쓰면서 나온 것이다. 기간을 원저자 권장값이 아니라 내 시스템의 다른 부품과 창 길이를 맞춰서 정하면, 두 지표를 공정하게 비교할 수 있다. 같은 데이터 창을 크기로 재느냐 시간으로 재느냐만 다른 상태가 되니까.
내 봇과 붙여보면
아룬과 내 전략의 궁합을 따져보면 정직하게 애매하다.
내 전략: 과매도 눌림목 반등 — 빠진 것을 사되 돌기 시작한 것을 산다
✗ 아룬 오실레이터가 크게 음수 = 저점을 계속 갱신 중
눌림목처럼 보이지만 실제로는 '떨어지는 칼' 일 확률이 높다
현행 게이트가 이미 저점근접·낙폭 상한으로 이 구간을 다룬다 — 중복 우려
✓ Aroon Down 이 최근 급락 후 회복 = 저점 갱신이 멈춘 시점
'돌기 시작했다' 의 시간 기반 정의가 될 수 있다
현행 반등 확인은 저점 대비 반등률(%) — 크기 기반이다
→ 두 정의가 같은 것을 다르게 재고 있다. 어느 쪽이 나은지는 측정할 문제
✓ 박스권 판정 (Up·Down 둘 다 낮음) 을 레짐 보조 축으로
현행 레짐 판정은 BTC 4시간봉 방향 하나만 본다 — 방향은 보지만 정체는 못 본다두 번째 항목이 제일 해볼 만하다. 지금 내 봇은 반등을 “저점 대비 몇 % 올라왔나"로 판정한다. 아룬식으로 하면 “저점 갱신이 멈춘 지 몇 봉 됐나"가 된다. 같은 현상의 다른 측정이다.
이 비교가 의미 있는 이유는 앞에서 말한 강건성 때문이다. 크기 기반 반등 확인은 한 봉짜리 큰 양봉에 쉽게 걸린다. 시간 기반이라면 그런 봉 하나로는 조건이 안 채워진다. 휩쏘를 줄이는 방향일 가능성이 있고, 반대로 진입이 늦어져 이익 앞부분을 버릴 가능성도 있다. 어느 쪽인지는 재봐야 안다.
가설: "저점 갱신 정지(시간 기반)가 반등률(크기 기반)보다 나은 진입 확인이다"
① 기간 n ∈ {14, 20, 25}
② 조건 A: 현행 반등률 게이트 (대조군)
③ 조건 B: Aroon Down 이 특정 값 아래로 내려간 뒤 k봉 경과
④ 조건 C: A AND B (둘 다)
목적함수는 셋을 함께 본다 — 평균수익 · 승률 · 손절권 진입률
하나만 좋아지고 다른 게 나빠지면 채택하지 않는다
이 표에 결과 숫자가 없는 건, 아직 안 돌려봤기 때문이다.
C(둘 다)가 이길 것 같지만, 조건을 겹칠수록 진입 빈도가 급감한다는
전례가 있어서 낙관하지 않는다 — 표본이 마르면 검증 자체가 불가능해진다마지막 우려는 경험에서 나온 것이다. 예전에 거래량 조건을 하나 더 얹으려다 후보가 46건에서 6건으로 줄어든 적이 있다. 단독으로는 성적이 좋았던 조건인데, 다른 게이트들이 이미 비슷한 걸 걸러내고 있어서 겹쳐 놓으니 통행량만 죽었다. 조건을 더하는 일은 항상 이 위험을 안고 간다.
구현할 때 실제로 걸리는 것들
앞에서 함정 셋을 짚었는데, 봇에 넣는다면 그것 말고도 신경 쓸 게 있다.
① 계산 비용
rolling().apply() 는 느리다. 종목 수십 개 × 매 스캔이면 부담이 된다
대안: 최근 극값의 인덱스만 상태로 들고 있다가 갱신하는 방식
새 봉이 올 때 최고가 갱신 여부만 확인하면 O(1) 로 유지 가능
② 상태 복원
봇이 재시작하면 '최고가가 몇 봉 전인지' 를 다시 계산해야 한다
워밍업 봉을 n+1 개 이상 확보하지 않으면 값이 틀린다
③ 고가/저가 기준의 일관성
봉의 고가를 쓸지 종가를 쓸지 정하고 문서에 남긴다
백테스트와 실전이 다른 기준을 쓰면 결과가 안 맞는다
④ 값의 이산성을 스윕 설계에 반영
n=25 면 4 단위로만 움직인다 — 임계 후보를 촘촘히 늘어놓아도 무의미
실질 후보는 0, 4, 8, … 이므로 그 격자에 맞춰 설계한다①번은 실제로 겪을 만한 문제다. 내 봇은 매 스캔마다 수십 종목의 지표를 계산하는데, 여기에 느린 연산이 하나 붙으면 스캔 주기가 늘어난다. 스캔이 느려지면 진입 타이밍이 밀리고, 그건 지표의 품질과 무관하게 성과를 깎는다.
이런 종류의 고려가 트레이딩 봇 개발에서 은근히 큰 비중을 차지한다. 지표 하나를 추가할 때 그 지표의 판별력뿐 아니라 계산 비용, 상태 관리, 복원 절차까지 다 따져야 한다. 지표는 수식이지만 봇에 들어가면 상태를 가진 부품이 되기 때문이다.
이 지표가 잘 안 쓰이는 이유
아룬은 1995년에 나왔는데 RSI나 MACD만큼 퍼지지 않았다. 이유를 생각해보면 몇 가지 짚인다.
① 그림이 안 예쁘다
계단식으로 튀어서 부드러운 곡선이 안 나온다
지표의 확산에는 시각적 설득력이 꽤 크게 작용한다
② 해석이 직관적이지 않다
"RSI 70 이면 과매수" 같은 한 줄 요약이 안 만들어진다
Up 과 Down 을 각각 봐야 하고, 오실레이터만으론 정보가 준다
③ 단독으로는 매매 규칙이 안 나온다
크기를 모르니 손절폭도 목표가도 이 지표로는 못 정한다
그런데 ③ 은 사실 이 지표의 성격이지 결함이 아니다
아룬은 진입 신호가 아니라 '상태 판정' 도구다 —
지금이 추세장인지 박스권인지를 가르는 스위치로 쓸 때 제 몫을 한다지표가 유명해지는 것과 유용한 것 사이에 큰 상관이 없다는 건, 이 코너를 하면서 계속 확인하는 사실이다. 유명한 지표는 대개 설명이 짧고 그림이 예쁘다. 그 두 조건은 유용함과 별 관계가 없다.
거꾸로 말하면, 덜 알려진 지표를 볼 때는 “왜 안 퍼졌나"를 먼저 물어보는 게 좋다. 성능이 나빠서 안 퍼진 것과, 설명하기 어려워서 안 퍼진 것은 완전히 다른 얘기니까.
이 지표로 무엇을 못 하는가
새 지표를 검토할 때 할 수 있는 일보다 못 하는 일을 먼저 적어두면 나중에 실망이 적다.
"얼마에 사야 하나"
가격 정보가 없다. 진입가는 다른 데서 가져와야 한다
"손절은 어디에 둬야 하나"
폭을 모르니 손절선도 못 정한다 — ATR 같은 크기 지표가 필요
"이 움직임이 큰가 작은가"
+30% 스파이크와 +3% 상승을 구분 못 한다
"거래가 실린 움직임인가"
거래량을 안 본다. 텅 빈 호가에서 찍힌 저점도 저점으로 센다
답할 수 있는 질문
"지금 추세 국면인가 정체 국면인가"
"마지막 극값이 얼마나 최근인가"
두 개뿐이다. 그런데 이 두 개를 다른 지표들이 못 한다목록을 만들어보면 이 지표의 좁은 쓸모가 분명해진다. 할 수 있는 게 두 가지뿐인데, 그 두 가지를 기존 게이트가 못 한다. 그래서 후보로 남겨두는 것이다.
반대로 이 목록이 길었다면 — 예컨대 “진입가도 정해주고 손절도 정해주는” 만능 지표가 있다고 주장한다면 — 그건 의심해야 할 신호다. 하나의 계산식이 여러 질문에 동시에 답한다고 하면 대개 그중 몇 개는 억지다.
조합해서 쓴다면
아룬을 단독으로 쓰지 않는다는 전제에서, 어떤 지표와 짝지으면 좋을지 정리해둔다. 기준은 하나 — 못 보는 것이 반대인 지표를 고르는 것이다.
크기를 재는 지표와의 조합이 우선이다. 아룬이 “최근에 저점을 갱신했다"고 알려주면, RSI나 낙폭 지표가 “얼마나 깊게 빠졌나"를 채워준다. 시점과 크기가 둘 다 있어야 판단이 된다.
거래량과의 조합도 말이 된다. 아룬은 가격의 극값만 보므로 그 극값이 거래를 동반했는지 모른다. 거래가 거의 없는 상태에서 찍힌 저점은 의미가 약한데, 아룬은 그걸 구분하지 못한다.
반대로 스토캐스틱이나 CCI와 묶는 건 별로다. 셋 다 결국 최근 구간에서의 상대 위치를 보는 것이라 정보가 크게 겹친다. 지표를 셋 켜놓고 다 같은 방향을 가리킨다고 확신이 커지는 건 착각일 수 있다. 같은 재료를 세 번 본 것뿐이니까.
시간을 재는 다른 방법들
아룬만 시간을 재는 건 아니다. 봇에서 시간을 다루는 방식은 여러 가지고, 각각 성격이 다르다.
아룬 극값 이후 경과 봉 수 — 시장의 시간
타임 스톱 포지션 보유 시간 — 내 포지션의 시간
내 봇 이력: 6시간 횡보 시 강제 청산을 넣었다가 나중에 제거
쿨다운 청산 후 재진입까지의 대기 — 행동의 시간
현행: 재장전 쿨다운 30분
스테이 수확 조건 충족 후 대기 — 확정의 시간
현행: 30분 (60분 대비 실측 우위)
격리 손절 종목 재매수 차단 — 표본 독립성의 시간
현행: 그날 자정까지
시간대 차단 절대 시각 기준 — 시장 리듬의 시간
실측으로 도입했다가 매수 가뭄으로 해제
여섯 개 다 '시간' 인데 재는 대상이 전부 다르다이 목록을 만들면서 새삼 느낀 게 있다. 시간 관련 규칙이 이렇게 많은데 진입 판정에 쓰는 시간 축만 없다. 청산, 대기, 차단은 전부 시간으로 관리하면서 “이 종목을 살까"라는 판단에는 시간이 안 들어간다.
왜 그랬는지 생각해보면, 진입 조건은 지표에서 가져왔고 지표는 대부분 크기를 재기 때문이다. 청산이나 쿨다운은 내가 직접 설계한 규칙이라 자연스럽게 시간을 썼다. 남의 도구를 쓰는 영역과 내가 만든 영역에서 사고 방식이 갈렸던 셈이다.
스테이 시간을 정할 때의 실측이 좋은 예다. 60분과 30분을 재현해봤더니 30분 8회 +209,203원, 60분 6회 +159,530원이었다. 긴 대기는 회당 크기를 못 키우고 사이클 수만 깎았다. 이 결론은 이익 구간 체류시간 중앙값이 0분이라는 관찰과도 일치했다.
같은 방식으로 진입 쪽 시간 축도 재볼 수 있을 것이다. “저점 갱신 후 몇 봉 지났을 때 사는 게 가장 나은가” — 이건 명확한 실험 설계가 가능한 질문이다.
마무리
아룬은 유명한 지표가 아니다. RSI나 MACD처럼 어디서나 보이지도 않는다. 그런데 이 코너에서 다룰 가치가 있다고 생각한 건, 질문의 각도가 다르기 때문이다.
지표를 여러 개 쓴다고 정보가 그만큼 늘지는 않는다. RSI와 스토캐스틱과 CCI를 동시에 켜봐야 셋 다 “얼마나 올랐나"를 조금씩 다르게 볼 뿐이다. 정말로 정보를 늘리려면 다른 종류의 질문을 하는 지표를 섞어야 한다. 크기를 재는 것 하나, 시간을 재는 것 하나, 거래량을 보는 것 하나, 호가를 보는 것 하나.
그런 의미에서 아룬은 좋은 지표라기보다 좋은 축이다. 내 게이트 목록에 시간 기반 축이 아직 하나도 없다는 걸, 이 글을 쓰면서 알았다.
덧붙임 — 지표 목록을 점검하는 법
이 글의 결론을 일반화하면 이렇게 된다. 게이트나 조건 목록을 점검할 때 개수를 세지 말고 축의 종류를 세라는 것.
가격 크기 축
RSI · 낙폭 상한 · 저점근접 · 반등 확인 · 중기추세 · ROC
→ 여섯 개가 전부 이 축이다
거래량 축
거량 배수 · (유니버스의 거래대금 하한)
시장 미시구조 축
스프레드 상한 · 호가단위 비율
시장 전체 축
BTC 4시간봉 레짐 차단
시간 축
없음
개수로는 열 개인데 축으로는 네 종류다
새 조건을 검토할 때 물을 것: 기존에 없는 축인가?이 분류를 해보고 나서 검토 우선순위가 바뀌었다. 가격 크기를 재는 지표를 하나 더 얹는 것보다, 없는 축을 채우는 쪽이 정보를 늘릴 확률이 높다.
물론 축이 다르다고 반드시 유용한 건 아니다. 시간 축이 없는 게 우연이 아니라 그 축이 이 전략에 안 맞아서일 수도 있다. 그건 재봐야 안다. 다만 검토 대상 목록의 순서를 정할 때는 이 관점이 도움이 된다.
지표 스터디를 여러 편 쓰면서 얻은 것 중에, 개별 지표 지식보다 이런 분류 감각이 더 오래갈 것 같다. 새 지표를 만나면 이제 자동으로 묻게 된다. 이건 무슨 축인가, 내가 이미 가진 축인가, 아니면 새로운 각도인가.