랭킹 산출 방법론
주식 — 데이터 출처와 수집
FomoBot의 국내 주식 데이터는 pykrx 라이브러리를 통해 한국거래소(KRX) 공개 데이터에서 수집합니다. 매일 장 마감 후 18:00(KST)에 전 종목의 수정주가(액면분할·무상증자·유상증자를 반영해 조정한 종가. 현금배당은 미반영 — 자세한 내용은 용어 해설 참고)와 시가총액을 수집합니다.
미국 나스닥 데이터는 yfinance를 통해 수집하며, 나스닥 공식 상장 종목 목록(nasdaqlisted)을 기준으로 매일 미국 장 마감 후 07:30(KST)에 수정주가를 수집합니다.
수집된 일별 가격은 데이터베이스에 저장되고, 이 데이터를 바탕으로 1일 / 7일 / 30일 / 90일 / 1년 / 5년 기간별 상승률 랭킹을 매일 다시 계산해 저장합니다. 화면에 보이는 랭킹은 실시간이 아니라 가장 최근 배치 계산 결과입니다.
주식 — 저유동성·노이즈 필터
동전주와 저유동성 종목이 랭킹을 오염시키는 것을 막기 위해 아래 기준을 통과한 종목만 랭킹에 포함합니다.
KOSPI
- 시가총액 1,000억 원 이상
- 최근 30일 평균 일일 거래대금 10억 원 이상
- 주가 1,000원 이상
NASDAQ
- 시가총액 5억 달러 이상 — 단, 시가총액 조회에 실패한 일부 종목은 시가총액 조건 없이 거래대금·주가 조건만으로 판단합니다
- 최근 30일 평균 일일 거래대금 500만 달러 이상
- 주가 5달러 이상
추가로 데이터 이상 종목을 걸러냅니다:
- 하루 변동률이 ±300%를 넘는 날이 있는 종목(액면분할·병합 등 데이터 왜곡 의심)은 제외
- 연율화 변동성이 1,000%를 넘는 종목은 제외
- 조회 기간 중 거래일 데이터가 20% 이상 비어 있는 종목(신규 상장, 장기 거래정지 등)은 제외
주식 — 지표 계산 방식
모든 계산은 수정주가 기준입니다.
- 기간 상승률(%) = (기간 마지막 종가 ÷ 기간 첫 종가 − 1) × 100
- 최대낙폭(MDD, %) = 기간 내 누적 고점 대비 가장 크게 하락한 폭. min((종가 − 누적고점) ÷ 누적고점) × 100
- 연율화 변동성(%) = 일간 수익률의 표준편차 × √252 × 100 (252는 연간 거래일 수)
- 초과수익률(%) = 종목 기간 상승률 − 같은 기간 시장 지수(KOSPI 지수 / 나스닥 종합지수) 상승률
주식 — 백테스트 계산 방식
백테스트는 "과거 특정 시점의 상승률 상위 종목을 그때 샀다면 지금 얼마인가"를 두 가지 매수 시나리오로 계산합니다.
- 한 번에 매수(buy-and-hold): 기간 시작 시점에 원금을 전액 매수해 그대로 보유합니다.
- 나눠서 매수(DCA, 분할매수): 기간을 여러 시점으로 나누어 원금을 분할 매수합니다. 분할 횟수는 기간 길이에 따라 달라집니다.
두 시나리오 모두 랭킹 계산과 동일한 수정주가를 사용하며, 기간 시작일도 랭킹 산출 시 쓰는 것과 같은 방식으로 정합니다. 그래서 한 번에 매수 시나리오의 수익률은 해당 종목의 랭킹 기간 상승률과 일치합니다. 화면에 표시되는 원금(100만 원)은 수익률·최대낙폭 계산 자체에는 영향을 주지 않는 표시용 고정값입니다.
- 수익률(%) = (최종 평가액 ÷ 투입 원금 − 1) × 100 — 한 번에 매수는 보유 주식의 가격 흐름을, 나눠서 매수는 매수 진행 상황을 반영한 평가액 흐름을 기준으로 합니다.
- 최대낙폭(MDD)은 각 시나리오의 자산 가치 곡선(가는 길)에서 실제로 계산합니다. 두 시나리오는 매수 시점이 다르므로 MDD도 서로 다르게 나올 수 있습니다.
기간 시작일 이후에 상장된 종목은 상장 전 분할 매수 시점을 집행할 수 없습니다. 이 경우 상장 이후 가능한 회차만 실제로 매수하고, 전체 회차 중 몇 회가 집행되었는지를 결과에 함께 표시합니다. 1일·7일처럼 짧은 기간은 분할매수 자체가 성립하지 않아 한 번에 매수 시나리오만 제공합니다.
중요한 한계: 기준 시점 이후 상장폐지된 종목은 구간 내 가격 데이터가 부족해 두 시나리오 모두 계산에서 빠집니다. 평균 수익률은 살아남은 종목만으로 계산되어 실제보다 좋게 나옵니다. 자세한 설명은 생존 편향 페이지를 참고하세요.
부동산 — 데이터 출처와 집계 단위
부동산 데이터는 국토교통부 실거래가 공개시스템의 아파트 매매 실거래 데이터를 공공데이터 API(PublicDataReader)로 수집합니다. 대상 지역은 서울·경기·인천입니다.
실거래 신고에는 지연이 있으므로, 매월 15일 오전 3시(KST)에 최근 3개월치 데이터를 다시 수집·재집계하는 방식으로 뒤늦게 들어온 신고를 보정합니다.
랭킹의 단위는 개별 아파트 단지입니다. 같은 단지의 표기 변형(띄어쓰기, 괄호 등)은 정규화해 하나로 묶습니다. 지역(구·동)이나 학군 구분은 검색 필터로만 쓰이고, 가격 집계는 항상 단지 단위로 합니다.
부동산 — 상승률 계산과 앵커 윈도우
아파트는 주식과 달리 매일 거래되지 않으므로, 특정 "하루의 가격"이 존재하지 않습니다. FomoBot은 다음 방식으로 계산합니다.
- 단지별 가격 지표: 해당 기간 거래들의 전용면적당 가격(만원/㎡)의 중위값
- 기간 상승률 = (종료 시점 중위 평단가 ÷ 시작 시점 중위 평단가 − 1) × 100
- 시작/종료 "시점"은 하루가 아니라 3개월 윈도우로 잡습니다
- 종료 윈도우: 종료 월 기준 과거 3개월 (미래 방향으로는 잡지 않음 — 신고 지연으로 아직 안 들어온 미래 데이터가 섞이는 것을 차단)
- 시작 윈도우: 기간이 6개월 이하면 과거 방향 3개월, 그보다 길면 시작 월 앞뒤 ±3개월
- 각 윈도우에 해당 단지의 거래가 3건 미만이면 통계적으로 신뢰할 수 없다고 판단해 그 단지는 해당 기간 랭킹에서 제외합니다
- 지원 기간: 3개월 / 6개월 / 1년 / 3년 / 5년 / 10년 / 20년
부동산 — 84㎡ 환산가
거래금액 표시와 금액 필터에 쓰이는 "84㎡ 환산가"는 중위 평단가(만원/㎡) × 84로 계산한 추정치입니다. 한국에서 가장 보편적인 전용 84㎡(국민평형)를 기준으로 단지 간 금액을 비교하기 위한 환산일 뿐, 해당 단지에 실제 84㎡ 세대가 존재한다는 뜻도, 그 세대의 실거래가라는 뜻도 아닙니다.