오늘 다루는 건 “프로파일"이면서 결이 다르다

며칠 전 TPO(Time Price Opportunity)를 다뤘다. 반시간마다 알파벳을 찍어서 가격이 머문 “시간"을 세는 도구였다. 오늘 배정은 같은 “프로파일” 계열이지만 세는 대상이 다르다. 자동 고정 볼륨 프로파일(Auto Anchored Volume Profile)은 시간이 아니라 실제로 체결된 거래량을 가격대별로 쌓는다. 이름에 프로파일이 들어가는 도구는 시간을 세는지 거래량을 세는지부터 구분해야 한다고 지난 편에 적었는데, 오늘 그 구분의 반대쪽을 다룬다.

“오토"가 붙은 이유도 있다. 트레이딩뷰의 볼륨 프로파일 계열에는 시작점을 사람이 직접 찍는 고정 범위(Fixed Range), 거래일이 바뀔 때마다 다시 그리는 세션(Session) 버전이 있다. 오토 앵커드는 시작점 자체를 규칙이 스스로 고른다. 사람이 아무 것도 안 찍어도 유의미한 저점·고점이 나올 때마다 거기서부터 새 프로파일을 그리기 시작한다. 편한 대신 “언제부터 세느냐"를 규칙에 맡기게 되는데, 그 위임이 어디서 문제가 되는지가 이번 글의 본론이다.

미리 밝혀둔다. 이번에도 시세를 받지 않았고 승률도 재지 않았다. 이 글은 시세를 받아 성과를 검증한 글이 아니라 규칙 자체를 해부한 글이다. 아래 그림은 전부 실제 체결 데이터가 아니라 규칙의 동작을 보여주기 위해 손으로 만든 모식도다. 승률을 적지 않은 이유도 그래서다.

무엇을 재는가 — 시간이 아니라 물량

계산 자체는 어렵지 않다. 프로파일이 덮는 구간(오토 앵커드에서는 마지막으로 확정된 앵커부터 현재 봉까지) 안의 가격 범위를 여러 개의 가격 행으로 잘게 나눈다. 그 구간의 모든 봉을 돌면서, 각 봉이 지나간 가격 행에 그 봉의 거래량을 나눠 쌓는다. 봉 하나가 여러 행에 걸쳐 있으면 고가·저가 사이의 행에 거래량이 고르게 또는 봉 내부 가격 분포 가정에 따라 배분된다. 다 쌓고 나면 행마다 “이 가격에서 얼마나 많은 물량이 오갔는가"라는 숫자가 남는다.

TPO와 정확히 여기서 갈린다. TPO는 한 구간이 어떤 가격 행을 스치기만 해도 알파벳 하나를 찍었다. 물량이 얼마였는지는 안 봤다. 볼륨 프로파일은 반대로 “얼마나 오래 머물렀는가"는 전혀 안 보고 “얼마나 많이 오갔는가"만 본다. 30분 동안 딱 한 번 큰 체결이 터진 가격 행과, 30분 내내 잔거래만 오간 가격 행이 있다면 TPO는 둘 다 알파벳 하나로 동일하게 취급하지만 볼륨 프로파일은 전자를 훨씬 두껍게 그린다. 두 도구를 같은 이름의 “프로파일"이라고 뭉뚱그리면 안 되는 이유다.

POC·Value Area — 산출 절차는 TPO와 같은 틀을 쓴다

행마다 쌓인 거래량을 옆으로 눕히면 히스토그램이 나온다. 그중 가장 두꺼운 행이 POC(Point of Control)다. 그 구간에서 가장 많은 물량이 거래된 가격이라는 뜻이다.

Value Area 산출 절차
# POC 행에서 시작해 위아래로 확장한다
범위 = { POC 행 }
while 누적 거래량 / 전체 거래량 < 0.70:
    위쪽 다음 행과 아래쪽 다음 행의 거래량을 비교
    더 큰 쪽을 범위에 편입 (동률이면 양쪽 다)
경계: 위쪽 = VAH, 아래쪽 = VAL

절차 자체는 지난 편 TPO의 Value Area 산출과 뼈대가 같다. 차이는 채워 넣는 값이 “알파벳 개수"인지 “거래량"인지뿐이다. 70%라는 비율은 마켓 프로파일 원형에서부터 내려온 관행값이고, 트레이딩뷰 볼륨 프로파일 계열(고정 범위·세션·오토 앵커드 공통) 스크립트가 그대로 기본값으로 쓴다. 행 개수 기본값도 하나 있는데, 프로파일을 몇 개의 가격 칸으로 쪼갤지 정하는 값으로 기본은 24칸이다. 칸이 너무 적으면 POC가 뭉툭해지고 너무 많으면 노이즈에 가까운 봉우리가 여러 개 생긴다. 둘 다 시세와 무관한, 규칙이 정의로 갖는 숫자다.

아래는 이 절차를 그대로 적용한 모식도다. POC에서 시작해 거래량이 큰 쪽부터 채워 전체의 70%를 넘긴 지점에서 멈춘다.

볼륨 프로파일 구조 모식도 — POC·Value Area, 손으로 만든 값 (schematic)

“오토"가 하는 일 — 앵커를 스스로 고른다

고정 범위 버전은 사람이 시작 봉과 끝 봉을 직접 찍는다. 세션 버전은 거래일이 바뀌는 시점마다 다시 그린다. 오토 앵커드는 둘 다 안 한다. 대신 가격이 “유의미한” 고점이나 저점을 새로 만들 때마다 그 지점을 새 앵커로 삼아 거기서부터 현재 봉까지 프로파일을 새로 그린다. 다음 유의미한 고점·저점이 나오기 전까지는 그 앵커가 계속 유지되고, 프로파일은 봉이 늘어날 때마다 오른쪽으로 계속 확장된다.

여기서 “유의미하다"는 판정이 핵심이다. 아무 저점이나 앵커로 삼으면 프로파일이 한 봉마다 다시 그려져서 쓸모가 없어진다. 그래서 좌우로 일정 개수의 봉보다 더 낮은(또는 더 높은) 지점만 피벗으로 인정한다. 문제는 이 판정이 즉시 되지 않는다는 점이다. 어떤 봉이 피벗 저점인지 확인하려면 그 오른쪽으로 일정 개수의 봉이 더 쌓여서 그 저점을 안 깨는 걸 봐야 한다. 그러니까 저점이 찍힌 순간에는 그게 새 앵커가 될지 아직 모른다. 며칠 뒤 오른쪽 봉들이 확인돼야 비로소 “아, 그때가 새 앵커였구나"라고 규칙이 인정한다.

오토 앵커 재설정 모식도 — 새 피벗이 확정되면 앵커가 옮겨 간다 (schematic)

이 지표가 못 보는 것

첫째, 확정 지연이 곧 재작도(redraw)다. 후보 저점이 나온 시점과 그 저점이 진짜 피벗으로 확정되는 시점 사이에는 반드시 시차가 있다. 그 시차 동안 화면에 보이는 프로파일은 옛 앵커 기준으로 그려진 잠정치이고, 피벗이 확정되는 순간 최근 구간의 프로파일이 통째로 다시 그려진다. 방금 전까지 봤던 POC가 그 다음 봉에서 자리를 옮기는 일이 생긴다는 뜻이다. 실시간으로 이 값을 참고해 판단을 내리는 입장에서는, 지금 보이는 POC가 확정값인지 아직 재작도될 수 있는 잠정값인지부터 구분해야 한다.

피벗 확정 지연 모식도 — 오른쪽 다리만큼 기다려야 확정된다 (schematic)

둘째, 시간 정보를 완전히 버린다. 히스토그램으로 눕히는 순간 “언제 그 물량이 오갔는지"는 사라진다. 구간 초반에 몰아서 거래된 것과 구간 전체에 고르게 퍼져서 거래된 것이 겹쳐서 똑같은 모양의 프로파일로 나올 수 있다. TPO가 거래량을 못 보는 대신 시간의 흔적을 남긴다면, 볼륨 프로파일은 거래량을 정확히 보는 대신 시간의 흔적을 버린다. 두 도구가 서로의 약점을 정확히 나눠 가진 셈이라 어느 한쪽만으로는 그림이 완성되지 않는다.

셋째는 크립토 시장에서만 진짜 골치 아파지는 문제다. 주식은 거래소가 하나로 통합돼 있거나, 여러 거래소가 있어도 통합 시세(consolidated tape)로 물량을 합쳐서 본다. 코인은 그런 게 없다. 같은 코인이라도 거래소마다 각자의 호가창에서 각자의 체결이 쌓이고, 프로파일도 거래소별로 따로 그려진다. 어느 거래소의 체결 데이터를 프로파일에 넣느냐에 따라 POC와 Value Area의 위치가 통째로 달라질 수 있다. “이 가격에서 시장이 가장 많이 거래됐다"는 문장은 사실 “이 거래소에서"라는 단서가 항상 붙어야 하는 문장이다. 여러 거래소를 합산해서 보여주는 지수 시세를 쓰더라도, 그 지수가 어떤 거래소를 얼마만큼 반영하는지에 따라 프로파일의 모양이 또 달라진다.

거래소별 체결 기준 프로파일 비교 모식도 — 같은 구간, 다른 POC (schematic)

넷째, 24시간 시장이라 프로파일이 쉬지 않는다. 주식은 장이 매일 닫히니 세션 버전이든 뭐든 최소한 하루에 한 번은 강제로 리셋된다. 코인 시장은 장이 닫힌 적이 없다. 오토 앵커드는 새 피벗이 나와야만 앵커가 바뀌는데, 방향 없이 좁은 범위를 오래 맴도는 구간에서는 좌우 확인 조건을 만족하는 뚜렷한 피벗 자체가 한참 안 나올 수 있다. 그러면 앵커가 몇 주 전 지점에 그대로 묶인 채 프로파일만 계속 옆으로 늘어난다. 오래된 앵커에서 시작한 프로파일은 그사이 시장 성격이 바뀌었어도 그걸 반영 못 하고, “최근 흐름"이라고 믿고 보는 프로파일이 사실은 몇 주치 물량이 뭉친 값일 수 있다. 세션 버전이었다면 자동으로 리셋됐을 상황이 오토 앵커드에서는 그대로 방치된다.

그램이라는 무대

이번 회차 배정은 그램(GRAM)이다. 다만 솔직히 적어야 할 게 있다. 이 코인의 최근 사건·상장 여부·발행 구조에 대해 내가 확신을 갖고 말할 수 있는 사실이 마땅치 않다. 지난 편들에서는 밈코인이면 뉴스에 취약하고 거래소 토큰이면 소각 정책이 섞인다는 식으로 성격을 짚었는데, 그램에 대해서는 그 정도의 확신도 없다. 확실하지 않은 걸 그럴듯하게 적느니 빼는 편이 낫다고 판단했다.

대신 위에서 짚은 거래소 파편화 문제는 특정 코인의 사정과 무관하게 코인 시장 전체에 적용되는 구조적 함정이라, 그램에도 똑같이 걸린다. 어떤 코인이든 거래소가 여러 곳에 나뉘어 있는 이상 “그 코인의 프로파일"이라는 단수형 표현 자체가 성립하지 않는다. “어느 거래소의 프로파일"이라고 물어야 정확한 질문이 된다.

내 봇에 넣을 것인가

지금은 안 넣는다. 이유는 두 가지로 좁혀진다.

하나는 재작도 문제다. 게이트는 그 순간의 값을 보고 즉시 판단을 내려야 하는데, 오토 앵커드의 최근 구간 POC는 다음 봉에서 피벗이 확정되면 자리를 옮길 수 있는 잠정값이다. 확정된 옛 구간의 POC만 쓴다면 재작도 문제는 피할 수 있지만, 그러면 정작 “최근” 정보가 아니게 되어 진입 판단에 쓸 실익이 줄어든다.

다른 하나는 거래소 선택이다. 어느 거래소의 체결 데이터로 프로파일을 그릴지 정하는 순간, 그 선택이 결과에 그대로 반영된다. 지금 봇이 참조하는 시세 소스 하나로 계산한 POC가 다른 거래소 기준 POC와 얼마나 벌어지는지 확인이 안 된 상태라, 지금 넣으면 어느 장부를 기준으로 한 값인지도 모른 채 쓰는 셈이 된다.

버리는 건 아니다. TPO 때와 결론이 비슷한데, POC·Value Area를 지지·저항의 참고선으로 화면에 얹어두는 정도는 나쁘지 않다고 본다. 재작도되는 구간과 확정된 구간을 색으로 구분해서 보여주기만 해도, 지금 보는 값이 잠정인지 확정인지 헷갈릴 일은 없다. 다만 진입·청산 게이트로 쓰는 건 재작도와 거래소 선택 두 문제가 같이 풀려야 다시 생각해볼 일이다.

이 글은 특정 자산의 매매를 권유하지 않는다. 기록은 개인 개발 로그다.

약어 풀이

  • TPO (Time Price Opportunity) — 반시간 단위 알파벳으로 가격이 머문 시간을 세는 마켓 프로파일 기법.
  • POC (Point of Control) — 프로파일에서 거래량이 가장 많이 쌓인 가격 행.
  • VAH (Value Area High) — Value Area의 위쪽 경계.
  • VAL (Value Area Low) — Value Area의 아래쪽 경계.
  • GRAM (Gram) — 이번 회차에 배정된 코인 심볼.