이 계산기는 β를 어떻게 재나요
숫자가 어디서 오는지, 몇 년치를 쓰는지, 뭘 기준으로 재는지. 궁금해하실 만한 순서대로 적었어요. 왜 그렇게 정했는지도요.
데이터
가격은 배당이랑 액면분할을 반영한 일별 조정종가예요. 미국 주식이랑 ETF, 코스피·코스닥 종목, 코인(달러 페어)을 받아요. 종목마다 5년치를 받아 두고 계산에는 마지막 1년만 써요. 국내 종목 이름 검색은 거래소 상장법인 목록이랑 포털 자동완성을 같이 써서, "현대차"라고 쳐도 현대자동차가 나오게 해 뒀어요.
수량이랑 현금은 서버로 안 보내요. 이건 일부러 그렇게 짰어요. 서버는 티커만 받아서 종목별 β를 돌려주고, 비중 계산이랑 합산은 브라우저 안에서 해요. 누가 뭘 얼마나 갖고 있는지 서버가 알 필요가 없으니까요.
왜 1년, 일간이냐
지수의 가장 최근 마감일부터 거꾸로 252거래일, 그러니까 대략 1년치 일별 수익률로 회귀해요. 매일 하루씩 밀려요. 각 시장이 마감하고 15분 뒤에 새 날이 들어오고, 그 사이에는 같은 숫자예요. 아직 장중인 오늘 봉은 안 넣어요. 오후마다 β가 조금씩 흔들리는 걸 막으려고요.
몇 년으로 재느냐는 정답이 없어요. 블룸버그 단말 기본값은 2년 주간이고, 해외 포털은 5년 월간, 국내 증권사 사이트에 나오는 "52주 베타"는 1년 일간이에요. 길게 재면 안정적인 대신 옛날 얘기가 섞이고, 짧게 재면 지금을 반영하는 대신 흔들려요. 저는 "지금 내 포트폴리오가 시장에 얼마나 물려 있나"가 궁금해서 만든 거라 짧은 쪽을 골랐어요. 리스크 데스크가 보는 방식이기도 하고, 국내 개인이 흔히 보는 52주 베타랑 정의가 같기도 하고요. 그 대가로 최근 1년이 유별났던 종목은 β가 크게 흔들리는데, 그건 ±랑 R²로 보여 드리는 걸로 했어요. 애플 얘기가 딱 그 예예요.
기준 지수는 상장된 나라 것
미국에 상장된 주식이랑 ETF는 S&P 500(SPY, 배당 포함), 코스피·코스닥 종목은 코스피 지수, 코인은 S&P 500이에요.
하나로 통일하지 않은 건 시차 때문이에요. 서울 장은 뉴욕 장이 열리기 전에 닫혀요. 그러니까 같은 날짜의 삼성전자 수익률이랑 S&P 500 수익률은 동시에 일어난 게 아니라, 삼성전자 쪽이 전날 미국 장에 반응한 거예요. 그걸 그대로 회귀하면 삼성전자의 S&P 500 β가 실제 노출이랑 상관없이 0 근처로 나와요. 코인은 하루 종일 거래되고 일봉이 00:00 UTC, 그러니까 뉴욕 마감 4시간 뒤에 닫혀서 S&P 500이랑 같은 달력일로 맞아요. 주말 움직임은 월요일 수익률에 들어가고요.
금이나 은 ETF는 어디 상장됐든 S&P 500에 재는 규칙도 넣어 봤어요. 어차피 금인데 기준이 왜 달라야 하나 싶어서요. 그런데 KODEX 골드선물을 그렇게 재니까 R²가 0.14에서 0.00으로 아예 사라지고, 겹치는 거래일도 휴장일이 안 맞아서 252일에서 238일로 줄더라고요. 시차 때문에 동시 관계가 통째로 없어진 거예요. 같은 날 되돌렸어요. 지금은 국내 상장 금·은·채권 ETF도 다른 국내 종목처럼 코스피 기준이에요.
빈 날은 안 채워요
종목이랑 지수의 가격을 먼저 날짜로 맞추고, 그다음에 수익률을 내요. 어느 한쪽에 없는 날은 빼요. 그래서 종목에 하루가 비면 그 앞뒤 이틀치가 수익률 하나가 되고, 지수 쪽도 같은 구간으로 맞춰요.
빈 날에 앞 값을 복사해 넣으면 편하긴 한데, 그러면 0% 수익률을 지어내는 셈이라 β가 0 쪽으로 끌려 내려가요. 그래서 안 채우고, 대신 관측 수 n을 "251/252"처럼 그대로 보여 줘요. 1년 창에서 200일이 안 되면 β를 아예 안 내요. 상장한 지 얼마 안 된 종목이 여기 걸려요.
이게 이론적인 얘기만은 아니에요. 만들던 중에 8월 28일 하루 미국 종목 여럿의 종가가 비어서 온 적이 있고, 9월 2일에는 비트코인이 그랬어요. 그럴 때 결과표에 251/252가 뜨는 거예요.
현금, 환율, 합산
비중은 평가액, 그러니까 수량 곱하기 최근 종가 기준이에요. 원화 종목이랑 달러 종목이 섞이면 원/달러 환율로 한 통화에 맞추고, 기본은 원화 표시인데 달러로 바꿀 수 있어요. 현금은 β 0으로 분모에 들어가서 전체 β를 묽게 만들어요.
국내랑 미국 종목이 섞이면 이 합계는 "코스피 대비 β랑 S&P 500 대비 β를 비중으로 합친 값"이에요. 두 시장이 같이 움직인다고 치면 "시장이 1% 움직일 때 내 포트폴리오가 몇 % 움직이나"가 되고, 화면에도 그렇게 써 놨어요.
목표 β 맞추기
목표 β를 만족하는 비중 조합은 무한히 많아요. 그래서 규칙을 딱 두 개만 두고 골라 쓰게 했어요.
현금으로 조절이 기본이에요. 종목 간 구성은 그대로 두고 전 종목을 같은 비율로 줄이거나 늘려서 현금이랑 맞바꿔요. 0부터 "현금 전부 투입"까지 되고, 그걸 넘으면 거기까지의 안을 보여 주고 한계라고 말해요.
종목 간 조절은 현금을 고정하고 종목 사이에서만 비중을 옮겨요. 바꿀 수 있는 조합 중에서 변화량의 제곱합이 제일 작은 걸 고르고, 0 밑으로 내려가야 하는 종목이 있으면 그건 전량 매도로 자르고 나머지로 다시 풀어요. 주식 비중 곱하기 [제일 낮은 β, 제일 높은 β] 범위 밖이면 제안 없이 범위만 알려 줘요.
수량은 국내 주식 1주, 미국 주식 0.01주, 코인 0.0001개로 반올림하고, 반올림한 뒤 실제 β를 다시 계산해서 목표랑 얼마나 차이 나는지 보여 줘요. 거래 비용이랑 세금은 안 들어가요.
제가 확인해 본 것
S&P 500 ETF랑 코스피 지수를 자기 자신한테 재면 β가 정확히 1.000, R²가 1.000 나와요. 당연한 것 같지만 조정종가나 날짜 정렬이 어디 하나 깨지면 이 숫자부터 틀어져서, 배포하고 나서도 이걸 제일 먼저 봐요.
미국 대형주 20개를 전혀 다른 데이터 공급자 가격으로 같은 정의로 계산해서 비교도 해 봤어요. 제일 크게 벌어진 게 0.0049, 중앙값은 0.0012였어요. 두 데이터가 같은 날 같은 실수를 할 리는 없으니, 정렬이랑 회귀는 맞게 짜였다고 봐도 되겠다 싶었어요.
그 외에 손으로 푼 회귀 값, "고정 비중 포트폴리오의 회귀 β는 종목 β의 가중합이다"라는 항등식이랑 그게 빈 날 앞에서 깨진다는 것, 목표 β 규칙의 손계산 사례들을 테스트로 박아 뒀어요. 코드를 고칠 때마다 다시 돌아가요.
한계
1년 창은 국면을 타요. 같은 종목이 창을 바꾸면 다른 β를 내요. 국내·미국 혼합 포트폴리오의 한 줄 β는 두 시장이 같이 움직인다는 가정을 깔고 있어요. 금, 채권, 코인처럼 R²가 낮은 자산은 β가 위험의 일부만 보여 줘요. 데이터 공급자 쪽에서 날이 비거나 늦게 올 수 있고, 그럴 땐 관측 수랑 기준일로 드러나요.
만든 사람
퀀트 투자 전략을 공부하는 개인 투자자예요. 제 계좌에 국내 주식, 미국 주식, 코인이 섞여 있는데 "그래서 지금 시장에 얼마나 물려 있는 거지"를 한눈에 보여 주는 데가 없어서 만들었어요. 계산 정의랑 그렇게 정한 이유는 이 페이지에 다 적었고, 데이터가 비거나 정의에 한계가 있는 부분도 숨기지 않고 화면에 표시해요. 2026년 9월에 공개했어요. 계산이 틀렸거나 설명이 이상하다 싶으면 어디가 그런지 알려 주시면 고칠게요.