Strasmore Research
학습 Matt Connor작성자 Matt Connor · 업데이트됨 2026-10-03

FINRA 일별 공매도 거래량 데이터 내려받기

curl로 FINRA 일별 공매도 거래량 데이터를 받고 Reg SHO 파일 열을 확인한 뒤 awk로 종목별 공매도 비율을 계산합니다. 2026년 6월 12일 기준으로 재현 가능합니다.

FINRA 일별 공매도 거래량 데이터를 내려받으려면 FINRA 공개 콘텐츠 서버에서 거래일마다 일반 텍스트 파일 하나를 가져오면 된다. 로그인과 API 키는 필요하지 않다. 이 파일은 Regulation SHO Daily Short Sale Volume 파일이다. 기호별로 한 행씩 구성된 파이프 구분 파일이며, FINRA 보고 시설로 보고된 장외거래의 해당 일자 공매도 거래량과 총거래량, 그리고 공매도 면제 거래량을 담고 있다. 이 가이드는 과거 특정일인 2026년 6월 12일을 기준으로 한다. 새 Ubuntu 컨테이너에서 curl을 설치하고 파일을 내려받은 뒤 열을 확인한다. 그런 다음 awk를 사용해 한 종목의 공매도 거래량 비율을 계산한다. 모든 명령은 지금 실행해도 되고 1년 후에 실행해도 그대로 작동한다.

FINRA는 일일 공매도 거래량 파일을 어디에 게시하는가?

거래일별 통합 파일은 예측 가능한 주소에 있습니다.

https://cdn.finra.org/equity/regsho/daily/CNMSshvolYYYYMMDD.txt

YYYYMMDD을 거래일로 바꾸면 됩니다. CNMS는 통합 NMS 파일(National Market System, 거래소 상장 종목 전체)입니다. FINRA의 모든 거래 보고 시설(TRF)에 보고된 거래를 종목별로 합산한 자료입니다. FINRA는 거래일 당일 오후 6시(ET)까지 각 날짜의 파일을 게시합니다. 공개 공매도 데이터 중 가장 빠른 수준입니다.

대신 범위에는 한계가 있습니다. 이 파일에는 FINRA 시설에 보고된 거래만 포함됩니다. 실제로는 도매업체가 개인투자자 주문을 체결한 거래나 다크풀 거래처럼 거래소 밖에서 체결된 거래를 뜻합니다. 거래소 자체에서 체결된 거래는 포함되지 않습니다. 따라서 총거래량 열의 수치는 가격 차트에 표시된 해당일 거래량보다 항상 작습니다.

파일은 거래일에만 존재합니다. 주말이나 거래소 휴일을 날짜로 요청하면 서버는 빈 파일 대신 403 Forbidden을 반환합니다. 달력을 순회하는 스크립트는 해당 날짜를 건너뛰거나 이 오류를 처리해야 합니다.

1단계: curl이 설치된 새 Ubuntu 컨테이너

깨끗한 컨테이너에서 시작해 curl을 설치한다. Ubuntu 기본 이미지는 이미 awk(mawk)를 제공하므로 다른 것은 필요하지 않다.

docker run --rm -it ubuntu:24.04 bash

apt-get update && apt-get install -y curl

2단계: 특정 날짜의 FINRA 일일 공매도 거래량 파일 다운로드

날짜를 고정해야 한다. “today”를 기준으로 작성한 명령은 주말과 휴일에 작동하지 않으며, FINRA가 파일을 게시하기 전인 매일 아침에도 다시 실패한다. 2026년 6월 12일은 정상 거래가 진행된 금요일이었고, 해당 파일은 서버에 남아 있다.

curl -fsSLO https://cdn.finra.org/equity/regsho/daily/CNMSshvol20260612.txt

각 플래그의 기능은 다음과 같다. -f은 HTTP 오류가 발생했을 때 curl이 오류 페이지를 데이터로 저장하지 않고 실패하게 한다. -s는 진행률 표시를 끈다. -S은 실제 오류 메시지는 계속 출력한다. -L은 리디렉션을 따른다. -O는 원격 파일명으로 파일을 저장한다. 다운로드된 파일의 앞부분과 뒷부분을 모두 확인한다.

head -3 CNMSshvol20260612.txt

tail -1 CNMSshvol20260612.txt

첫 번째 줄은 헤더다. Date|Symbol|ShortVolume|ShortExemptVolume|TotalVolume|Market. 마지막 줄은 트레일러로, 파일의 데이터 레코드 수를 나타내는 정수 하나만 포함한다. 따라서 모든 파서는 헤더와 트레일러를 모두 제거해야 한다. 이제 다음 달력 날짜인 6월 13일 토요일을 요청해 주말 규칙을 확인한다.

curl -fsSLO https://cdn.finra.org/equity/regsho/daily/CNMSshvol20260613.txt

Curl은 오류를 출력하고 종료 코드 22로 종료한다. 서버가 403을 반환했으며 -f이 이를 거부했기 때문이다. 2026년 6월 19일 준틴스 공휴일에도 같은 결과가 나타난다. 동일한 시계열을 저장한 사본을 보면 거래일별로 한 행만 존재하고 그 사이에는 아무 행도 없는 달력 구조가 바로 드러난다.

조회2026년 6월 각 일별 공매도 거래량 파일에 포함된 종목
21 rows (showing 20)
거래일요일세션 라벨보고된 종목 수종목 라벨
2026-06-01MondayJune 11511815.12 thousand
2026-06-02TuesdayJune 21490714.91 thousand
2026-06-03WednesdayJune 31483914.84 thousand
2026-06-04ThursdayJune 451365.14 thousand
2026-06-05FridayJune 51474014.74 thousand
2026-06-08MondayJune 81481514.81 thousand
2026-06-09TuesdayJune 91475114.75 thousand
2026-06-10WednesdayJune 1056945.69 thousand
2026-06-11ThursdayJune 111468714.69 thousand
2026-06-12FridayJune 121473414.73 thousand
2026-06-15MondayJune 151494814.95 thousand
2026-06-16TuesdayJune 1656315.63 thousand
2026-06-17WednesdayJune 171461114.61 thousand
2026-06-18ThursdayJune 181470014.70 thousand
2026-06-22MondayJune 221492214.92 thousand
2026-06-23TuesdayJune 2357675.77 thousand
2026-06-24WednesdayJune 241474314.74 thousand
2026-06-25ThursdayJune 251471614.72 thousand
2026-06-26FridayJune 261505215.05 thousand
2026-06-29MondayJune 2954895.49 thousand
모든 수치 뒤에 숨겨진 정확한 SQL
SELECT
    toString(date)                                              AS trade_date,
    formatDateTime(date, '%W')                                  AS weekday,
    concat(monthName(date), ' ', toString(toDayOfMonth(date)))  AS session_label,
    count(DISTINCT ticker)                                      AS symbols_reported,
    formatReadableQuantity(count(DISTINCT ticker))              AS symbols_label
FROM global_markets.stocks_short_volume
WHERE date >= '2026-06-01'
  AND date <  '2026-07-01'
GROUP BY date
ORDER BY date
직접 실행해 보기

2026년 6월에는 날짜가 표시된 파일이 21개 생성됐다. 첫 번째 파일인 June 1은 Monday이며, 15.12 thousand개 종목을 포함했다. 패널의 모든 행은 평일에 해당하며, 6월 19일 행은 없다.

FINRA 공매도 거래량 파일의 열은 무엇을 의미하는가?

각 데이터 행에는 파이프 기호로 구분된 여섯 개 필드가 있습니다.

  • Date은 YYYYMMDD 형식의 거래일입니다.
  • Symbol은 최대 14자까지 입력되는 ticker입니다.
  • ShortVolume은 해당일 FINRA에 보고된 거래 중 공매도로 매도된 주식 수입니다. short exempt 거래도 포함합니다.
  • ShortExemptVolume은 그중 short exempt로 표시된 거래의 수입니다. 이는 Reg SHO Rule 201 가격 테스트의 적용 면제 거래로 표시된 매도입니다. Reg SHO Rule 201은 주가가 직전 종가보다 10% 하락한 뒤 공매도를 제한하는 서킷브레이커입니다.
  • TotalVolume은 해당일 해당 종목에 대해 보고된 전체 주식 수입니다. 공매도와 일반 매도를 합한 수치입니다.
  • Market은 보고 시설입니다. N는 NYSE TRF, Q는 Carteret 소재 Nasdaq TRF, B은 Chicago 소재 Nasdaq TRF, D은 Alternative Display Facility(ADF)를 뜻합니다.

통합 파일의 Market 필드에는 해당 종목을 보고한 모든 시설이 쉼표로 구분되어 표시됩니다. 따라서 행은 B,Q,N과 같은 형태로 끝납니다. 파일이 구분자로 쉼표 대신 파이프 기호를 사용하는 이유도 여기에 있습니다.

한 가지 최근 변경 사항도 반영해야 합니다. 2026년 2월 23일부터 세 거래량 필드에는 소수점 이하 여섯 자리까지 주식 수가 표시됩니다. 따라서 소수점 뒤에 여섯 자리가 있는 값도 정상입니다. 그 이전 날짜의 파일에는 정수만 들어 있습니다. 정수형으로 변환하는 parser는 이후 파일의 값을 별도 경고 없이 잘라낼 수 있습니다.

awk로 공매도 거래량 비율을 계산하는 방법

공매도 거래량 비율은 공매도 거래량을 전체 거래량으로 나눈 값이며, 백분율로 표시합니다. 단일 종목의 비율은 다음 한 줄의 awk 명령으로 계산할 수 있습니다.

awk -F'|' '$2 == "AAPL" { printf "%s %s short=%s total=%s ratio=%.1f\n", $1, $2, $3, $5, 100 * $3 / $5 }' CNMSshvol20260612.txt

-F'|'은 파이프를 필드 구분자로 설정하고, $2 == "AAPL"은 AAPL 행만 남깁니다. 헤더와 마지막 행은 일치하지 않습니다. 이어지는 printf는 3번 필드를 5번 필드로 나눕니다. 다른 종목을 계산하려면 종목 코드만 바꾸면 됩니다. 아래 패널은 저장된 FINRA 시계열에서 주요 종목 6개의 동일한 날짜 데이터를 불러와 주식 수를 백만 주 단위로 반올림한 것입니다. 방금 실행한 명령의 결과와 비교할 수 있습니다.

조회2026년 6월 12일 6개 대표 종목의 공매도 거래량 비율
ticker공매도 거래량(백만 주)총 거래량(백만 주)공매도 비율(%)
AAPL6.6613.1650.6
AMZN5.8821.7627
KO2.063.6556.3
MSFT3.7314.2426.2
NVDA15.1945.3433.5
SPY7.4815.4848.3
모든 수치 뒤에 숨겨진 정확한 SQL
SELECT
    ticker,
    round(toFloat64(max(short_volume)) / 1e6, 2)                                  AS short_volume_millions,
    round(toFloat64(max(total_volume)) / 1e6, 2)                                  AS total_volume_millions,
    round(100 * toFloat64(max(short_volume)) / toFloat64(max(total_volume)), 1)   AS short_pct
FROM global_markets.stocks_short_volume
WHERE ticker IN ('AAPL', 'AMZN', 'KO', 'MSFT', 'NVDA', 'SPY')
  AND date = '2026-06-12'
GROUP BY ticker
HAVING max(total_volume) > 0
ORDER BY ticker
직접 실행해 보기

2026년 6월 12일 AAPL의 파일에는 6.66백만 주의 공매도 거래량과 13.16백만 주의 전체 보고 거래량이 기록되어 있습니다. 공매도 거래량 비율은 50.6%입니다. 나머지 5개 종목도 비슷한 수준입니다. 이 파일에서는 일반적인 결과입니다. 비율이 절반에 가까워 보여도 경고 신호가 아닌 이유는 뒤의 섹션에서 설명합니다.

하루 데이터는 특정 시점의 스냅샷일 뿐이며, 비율은 거래일마다 변합니다. 날짜별로 파일을 하나씩 내려받으면 한 달간의 시계열을 직접 구축할 수 있습니다.

CNMS 파일과 시설별 파일의 차이는 무엇인가?

CNMS는 합계 파일이다. FINRA는 동일한 일정에 따라 보고 시설별 파일도 하나씩 공개한다. 파일 형식과 날짜 표시는 같지만 접두사는 다르다. Nasdaq TRF Carteret(시장 Q) 파일은 FNSQshvol, Nasdaq TRF Chicago(B) 파일은 FNQCshvol, NYSE TRF(N) 파일은 FNYXshvol, ADF(D) 파일은 FNRAshvol이다. 다섯 번째 파일인 FORFshvol은 OTC Reporting Facility를 다룬다. 이 시설은 비상장 OTC 주식을 처리하며 CNMS에는 포함되지 않는다. 지정된 날짜의 Carteret 파일을 가져와 같은 종목을 조회한다.

curl -fsSLO https://cdn.finra.org/equity/regsho/daily/FNSQshvol20260612.txt

awk -F'|' '$2 == "AAPL"' FNSQshvol20260612.txt

FNQCshvol20260612.txt과 FNYXshvol20260612.txt에 동일한 두 줄을 실행하면 세 ShortVolume 필드의 합계가 소수점 마지막 자리까지 CNMS 수치와 일치한다. 해당 날짜의 ADF 파일에는 헤더와 0으로 표시된 트레일러만 있다. 이는 흔히 발생하는 형식이다. 다음은 AAPL의 시설별 내역이다.

조회2026년 6월 12일 AAPL의 거래소 외 공매도 거래량 보고처
거래소공매도 거래량(백만 주)통합 거래량 비중(%)
Consolidated (CNMS)6.659100
Nasdaq TRF Carteret (Q)6.41296.3
NYSE TRF (N)0.1942.9
Nasdaq TRF Chicago (B)0.0530.8
ADF (D)00
모든 수치 뒤에 숨겨진 정확한 SQL
SELECT
    tupleElement(v, 1)                                  AS venue,
    round(tupleElement(v, 2) / 1e6, 3)                  AS short_volume_millions,
    round(100 * tupleElement(v, 2) / consolidated, 1)   AS share_of_consolidated_pct
FROM
(
    SELECT
        consolidated,
        arrayJoin([
            ('Consolidated (CNMS)',     consolidated),
            ('Nasdaq TRF Carteret (Q)', carteret),
            ('Nasdaq TRF Chicago (B)',  chicago),
            ('NYSE TRF (N)',            nyse),
            ('ADF (D)',                 adf)
        ]) AS v
    FROM
    (
        SELECT
            toFloat64(ifNull(max(short_volume), 0))                 AS consolidated,
            toFloat64(ifNull(max(nasdaq_carteret_short_volume), 0)) AS carteret,
            toFloat64(ifNull(max(nasdaq_chicago_short_volume), 0))  AS chicago,
            toFloat64(ifNull(max(nyse_short_volume), 0))            AS nyse,
            toFloat64(ifNull(max(adf_short_volume), 0))             AS adf
        FROM global_markets.stocks_short_volume
        WHERE ticker = 'AAPL'
          AND date = '2026-06-12'
    )
)
ORDER BY tupleElement(v, 2) DESC
직접 실행해 보기

해당일 AAPL의 장외 공매도 거래량 중 Nasdaq TRF Carteret (Q)이 96.3%에서 처리됐다. Nasdaq TRF Carteret은 시장 전체의 장외 거래 보고 대부분을 처리한다. 이 내역에서도 그 점을 확인할 수 있다. 특정 체결이 어느 거래 시설을 통해 이뤄졌는지 확인하려면 시설별 파일이 중요하다. 그 외의 목적에는 통합 파일을 사용하면 된다.

FINRA short volume은 왜 short interest가 아닌가?

Short volume은 흐름 데이터다. 거래소 외 거래에서 한 거래일 동안 공매도된 주식 수를 뜻한다. Short interest는 잔액 데이터다. 결제일 현재 공매도 포지션으로 남아 있는 주식 수를 뜻한다. FINRA는 이를 한 달에 두 번 집계하고 약 2주 후 공표한다.

두 지표의 수치는 서로 일치하지 않는다. Short volume 비율이 높다고 해서 공매도 포지션이 크다는 의미도 아니다. Market maker가 보유하지 않은 재고로 고객의 매수 주문을 체결하면 주식을 공매도하고, 해당 거래는 공매도 거래로 기록된다. 한 시간 후 포지션을 청산하면 파일에는 공매도 거래만 남고 매수 거래의 흔적은 남지 않는다.

일반적인 거래일에는 유동성이 높은 종목의 비율이 one half 안팎에 형성된다. 위의 six-name 패널도 이를 보여준다. 이러한 market-making 메커니즘이 표준적인 설명이다. Short interest와 short volume 비교에서는 이 개념을 자세히 설명하고, short interest란 무엇인가에서는 포지션 측면을 다룬다. 이 글에서는 파일을 확보하는 방법에 집중한다. 포지션 시계열 자체를 확인하려면 먼저 FINRA short interest 데이터를 살펴본 뒤, 공표 지연을 설명하는 short interest가 발표되는 시점과 short interest가 2주 전 데이터인 이유를 확인하면 된다.

FINRA 공매도 거래량 파일의 주요 특성

처음 사용하는 투자자는 몇 가지 특성에 주의해야 한다. 거래소는 테스트용 종목 코드를 운영 시스템에서 처리한다. Nasdaq의 ZVZZT 계열이 대표적이다. 이 종목의 행은 실제처럼 보이는 거래량과 함께 파일에 포함될 수 있다. 따라서 차트에 표시하기 전에 상장 증권과 일치하지 않는 종목은 모두 제외해야 한다.

드물게 FINRA는 수정된 수치가 반영된 특정 거래일 파일을 다시 게시한다. 카탈로그 페이지에는 해당 파일이 “Updated”로 표시된다. 이에 따라 거래일 저녁에 가져온 수치가 일주일 후 같은 파일을 다시 가져왔을 때의 수치와 달라질 수 있다. 인용하기 전에 파일을 다시 받아야 한다.

파일의 마지막 줄은 구분 기호 없이 개수만 포함한다. 모든 줄에 여섯 개 필드가 있다고 가정하는 단순한 파서는 이 줄에서 오류가 발생한다.

거래량은 2026년 2월 23일부터 소수 단위로 표시되며, 그 이전에는 정수 단위로 표시된다. 정규 거래시간의 거래만 집계된다. 또한 FINRA 시설에 오프거래소 거래로 보고된 거래만 포함된다. 따라서 총거래량 열은 통합 거래 테이프의 거래량과 일치하지 않는다.

이는 파일의 결함이 아니라 파일 자체의 특성이다. 이러한 특성을 파악한 파서는 정확한 수치를 산출한다.

FAQ

FINRA의 일일 공매도 거래량 데이터는 어디에서 무료로 다운로드할 수 있습니까?

FINRA의 공개 콘텐츠 서버인 cdn.finra.org/equity/regsho/daily/에서 다운로드할 수 있습니다. 통합 NMS 파일은 거래일마다 CNMSshvolYYYYMMDD.txt라는 이름으로 제공됩니다. 계정은 필요하지 않으며, curl 명령 한 줄로 파일을 가져올 수 있습니다. FINRA 웹사이트에서도 한 번에 최대 7일간의 데이터를 CSV로 내보낼 수 있는 대화형 조회 기능을 제공합니다.

주말이나 공휴일에는 왜 FINRA 공매도 거래량 파일이 없습니까?

파일은 거래일에 대해서만 생성됩니다. 주말이나 거래소 휴일을 날짜로 요청하면 빈 파일이 아니라 HTTP 403 오류가 반환됩니다. 따라서 달력을 순회하는 스크립트는 비거래일을 건너뛰거나 해당 오류를 허용해야 합니다.

FINRA의 일일 공매도 거래량은 공매도 잔고와 같습니까?

아닙니다. 공매도 거래량은 장외거래에서 하루 동안 공매도된 주식 수를 집계합니다. 여기에는 시장조성자가 수분 안에 상환한 공매도도 포함됩니다. 공매도 잔고는 결제일 기준으로 여전히 공매도 상태인 주식 수를 뜻하며, 한 달에 두 번 집계됩니다. 유동성이 높은 종목에서 공매도 거래량 비율이 50%에 가까운 것은 일반적인 현상이며, 현재 미청산 공매도 포지션의 규모를 의미하지는 않습니다.

FINRA 공매도 거래량 파일에 소수점이 포함되는 이유는 무엇입니까?

2026년 2월 23일부터 FINRA는 NMS 종목의 주식 수량을 세 가지 거래량 필드 모두에서 소수점 여섯째 자리까지 보고합니다. 그 이전의 파일에는 정수 단위의 주식 수만 포함됩니다. 따라서 새로운 파일을 정수형으로 변환하는 파서는 소수점 이하 수량을 잘라내게 됩니다.

FINRA 공매도 거래량 파일의 Market 열은 무엇을 의미합니까?

거래 보고를 접수한 FINRA 시설을 나타냅니다. N은 NYSE TRF, Q는 카터렛의 Nasdaq TRF, B는 시카고의 Nasdaq TRF, D는 ADF를 뜻합니다. 통합 CNMS 파일에는 해당 종목을 보고한 모든 시설이 쉼표로 구분되어 표시됩니다.


위의 모든 패널에는 산출에 사용된 SQL이 함께 제공됩니다. 패널을 하나씩 펼치면 수치가 어떻게 계산됐는지 확인할 수 있습니다. 파일을 전혀 다운로드하지 않고도 특정 종목의 공매도 거래량 이력을 조회하려면 Strasmore terminal에서 자연어로 요청하면 됩니다.

#finra#short volume#reg sho#curl#awk#market data