미국 옵션 심볼 OSI 형식 해석 방법
OSI 체계에 따른 옵션 심볼의 루트와 만기일, 콜 및 풋 구분, 행사가격 해석 방법을 설명합니다. SPXW와 같은 특수 사례와 여덟 자리 행사가격이 칠 달러 오십 센트를 의미하는 원리를 포함하여 옵션 데이터를 정확히 읽는 법을 안내합니다.
옵션 심볼은 기초자산의 루트(root), 만기일, 콜/풋 구분, 행사가격(strike price)이라는 네 가지 정보를 담고 있는 단일 문자열입니다. 이 체계는 2010년 미국 옵션 업계가 도입한 OSI(Options Symbology Initiative)를 따르며, 모든 주문 티켓과 데이터 피드는 이를 기반으로 구축됩니다. 이 네 가지 필드만 익히면 상장된 모든 미국 옵션 심볼을 즉시 해석할 수 있습니다.
옵션 심볼의 네 가지 필드는 무엇인가?
표준 OSI 심볼은 고정된 순서로 총 21자로 구성됩니다.
- 루트(Root): 6자. 왼쪽 정렬하며, 기초자산의 루트가 6자보다 짧을 경우 오른쪽을 공백으로 채웁니다.
- 만기일(Expiration): 6자리. YYMMDD 형식입니다. 260116은 2026년 1월 16일을 의미합니다.
- 구분(Right): 1자. 콜옵션은 C, 풋옵션은 P로 표기합니다.
- 행사가격(Strike): 8자리. 소수점 없이 달러의 1,000분의 1 단위로 표시합니다.
대부분의 브로커와 웹사이트는 공백을 제거한 간략한 형태를 보여주며, 일부 피드는 문자열 앞에 O:과 같은 표시를 붙이기도 합니다. 하지만 이는 해석 방식에 영향을 주지 않습니다. 마지막 15자는 항상 날짜, 구분, 행사가격이므로 그 앞부분이 루트가 됩니다. 아래 패널은 이 규칙에 따라 실제 계약을 분할하고, 계약 기록에 포함된 만기일 옆에 해석된 필드를 나열합니다.
모든 수치 뒤에 숨겨진 정확한 SQL
SELECT
contract,
substring(contract, 1, length(contract) - 15) AS root,
substring(contract, length(contract) - 14, 6) AS expiry_field,
substring(contract, length(contract) - 8, 1) AS right_code,
substring(contract, length(contract) - 7, 8) AS strike_field,
toFloat64(substring(contract, length(contract) - 7, 8)) / 1000 AS strike_dollars,
listed_expiration
FROM
(
SELECT
replaceRegexpOne(ticker, '^O:', '') AS contract,
formatDateTime(any(expiration_date), '%b %e, %Y') AS listed_expiration
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND expiration_date = '2026-01-16'
AND toFloat64(strike_price) IN (500, 600, 650, 700)
AND date >= '2025-12-01'
AND date < '2026-01-01'
GROUP BY contract
)
ORDER BY strike_dollars ASC, right_code ASC첫 번째 행을 해석하면 루트는 SPY, 날짜 필드는 260116, 구분은 C, 행사가격 필드는 00500000가 되며, 이를 나누면 행사가격은 $500가 됩니다. 계약 자체의 만기 기록은 Jan 16, 2026로, 문자열 내의 6자리 숫자와 일치합니다. 이 패널에는 8개의 계약이 포함되어 있는데, 동일한 행사가격이 콜과 풋으로 각각 나열된 것입니다. 콜과 풋은 단 한 글자 차이로 구분되므로 주문 티켓 작성 시 이 부분을 두 번 확인해야 합니다. 브로커 화면에서 이 필드들이 익숙하다면, 옵션 체인 읽기에서 주변 열에 대한 설명을 확인할 수 있습니다.
명령줄에서 옵션 심볼 읽는 법
해석 과정에 별도의 라이브러리나 네트워크 연결은 필요 없습니다. 필드는 오른쪽에서부터 고정된 너비를 가지므로, bash에서는 부분 문자열 확장만으로 충분합니다. 터미널에 다음을 입력하십시오.
SYM=SPY260116C00650000
echo "root ${SYM:0:$(( ${#SYM} - 15 ))}"
echo "expiry ${SYM: -15:6}"
echo "right ${SYM: -9:1}"
echo "strike ${SYM: -8}"
각 음수 오프셋 앞의 공백은 필수입니다. 공백이 없으면 bash는 :-를 기본값 확장으로 읽어 잘못된 결과를 출력합니다.
심볼 목록의 경우, awk를 사용하여 1부터 시작하는 위치로 동일한 연산을 수행할 수 있습니다.
awk '{
n = length($0)
root = substr($0, 1, n - 15)
expiry = substr($0, n - 14, 6)
right = substr($0, n - 8, 1)
strike = substr($0, n - 7, 8)
printf "%-6s 20%s-%s-%s %-4s $%.3f\n",
root,
substr(expiry, 1, 2), substr(expiry, 3, 2), substr(expiry, 5, 2),
(right == "C" ? "call" : "put"),
strike / 1000
}' <<'EOF'
SPY260116C00650000
SPY260116P00650000
SPXW260116C05500000
XYZ1260116C00007500
EOF
python3 버전은 표준 라이브러리만 사용하여 공백이 포함된 21자 형식과 피드 접두사를 동일한 함수에서 처리합니다.
from datetime import datetime
def parse_osi(symbol):
s = symbol.strip()
if s.startswith("O:"):
s = s[2:]
s = s.replace(" ", "")
return {
"root": s[:-15],
"expiry": datetime.strptime(s[-15:-9], "%y%m%d").date(),
"right": "call" if s[-9] == "C" else "put",
"strike": int(s[-8:]) / 1000,
}
samples = [
"SPY 260116C00650000",
"O:SPY260116P00650000",
"SPXW 260116C05500000",
"XYZ1 260116C00007500",
]
for sym in samples:
f = parse_osi(sym)
print("{:<6} {} {:<4} ${:,.3f}".format(f["root"], f["expiry"], f["right"], f["strike"]))
두 코드 모두 awk와 python3 외에 아무것도 설치되지 않은 기본 Ubuntu 이미지에서 실행되며, 네트워크를 사용하지 않으므로 오늘이나 5년 후에도 동일한 결과를 출력합니다.
행사가격 00007500이 왜 $7.50을 의미하는가?
행사가격 필드는 소수점 없는 8자리 숫자이며, 단위는 달러의 1,000분의 1입니다. 1,000으로 나누면 달러 단위가 됩니다. 00007500은 7,500천분의 1달러, 즉 $7.50입니다. 07500000은 7,500,000천분의 1달러, 즉 $7,500입니다. 이 둘은 0의 개수 차이로 구분되며, 전체 형식에서 가장 흔히 발생하는 오독 사례입니다. 고정 너비는 모든 심볼의 길이를 일정하게 유지하며, 1,000분의 1 단위는 기업 활동 이후 행사가격이 센트 단위의 분수로 떨어질 경우를 대비한 것입니다.
하나의 필드는 저가 주식부터 4자리 지수 레벨까지 모든 상장 행사가격을 포괄해야 합니다. 아래 패널은 여러 기초자산의 최저 및 최고 행사가격을 읽어 심볼 내에 나타나는 8자리 숫자를 그대로 출력합니다.
모든 수치 뒤에 숨겨진 정확한 SQL
SELECT
underlying,
round(toFloat64(min(strike)), 2) AS lowest_strike,
argMin(strike_field, strike) AS lowest_strike_field,
round(toFloat64(max(strike)), 2) AS highest_strike,
argMax(strike_field, strike) AS highest_strike_field,
uniqExact(strike) AS strike_count
FROM
(
SELECT
underlying_symbol AS underlying,
strike_price AS strike,
substring(replaceRegexpOne(ticker, '^O:', ''),
length(replaceRegexpOne(ticker, '^O:', '')) - 7, 8) AS strike_field
FROM global_markets.options_greeks
WHERE underlying_symbol IN ('KO', 'NVDA', 'AAPL', 'SPY', 'SPX')
AND date >= today() - 7
)
GROUP BY underlying
ORDER BY highest_strike ASC조회된 세션에서 KO은 $32.5에서 $125까지의 행사가격을 나열하며, 심볼 내에는 각각 00032500과 00125000로 표기됩니다. 패널 끝에서 SPY는 $1480, 즉 01480000에 도달하며, 462개의 서로 다른 행사가격에 걸쳐 있습니다. 가격 수준이 무엇이든 동일한 8자리 숫자와 동일한 제수를 사용합니다.
조정된 옵션: 루트 끝의 숫자가 의미하는 것
표준 주식 옵션은 100주를 인도합니다. 기업 활동(주식 분할, 합병, 스핀오프, 특별 현금 배당 등)은 이를 변경할 수 있습니다. OCC(옵션청산결제소)는 미결제 계약을 조정하고 새로운 루트를 부여하는데, 기존 루트 뒤에 숫자를 추가합니다. ABC라는 루트는 첫 번째 조정 시 ABC1, 두 번째 조정 시 ABC2가 됩니다. 형식은 변하지 않으므로 파서는 계속 작동합니다. 계약의 인도 대상은 변경되지만, 심볼 자체는 이를 명시하지 않습니다.
끝에 붙은 숫자는 100주가 아닌 10주를 다루는 미니 계약을 표시하기도 하며, 이때는 7이 사용됩니다. 어느 경우든 이 숫자는 행사가격을 비교하기 전에 계약 조건을 확인해야 한다는 신호입니다. 주식 분할이 옵션에 미치는 영향에 관한 당사의 노트에서 행사가격과 인도 대상에 대한 비율 계산법을 다룹니다.
조정된 시리즈는 새로운 만기일이 추가되는 경우가 드뭅니다. ABC1과 같은 루트는 상장된 만기일이 지나면 점차 사라지며, 마지막 계약이 만료되면 체인에서 완전히 없어집니다. 계약 조건은 문자열이 아닌 해당 계약에 대한 OCC 조정 메모에 담겨 있습니다. 메모에는 수정된 인도 대상, 현금 구성 요소(있는 경우), 적용되는 승수가 명시됩니다. 이 메모를 읽기 전까지는 동일한 기초자산의 조정된 행사가격과 표준 행사가격은 같은 8자리 숫자를 공유하더라도 완전히 다른 것입니다.
SPX, SPXW, 그리고 W의 의미
지수 옵션은 고유한 루트를 가지며, S&P 500 복합 상품이 가장 대표적입니다. SPX와 SPXW는 동일한 지수를 참조하며 21자 레이아웃을 공유합니다. 이름과 달리 W는 더 이상 주간 상장을 의미하지 않습니다. SPX는 AM 결제 루트로, 만기일 금요일 지수 구성 종목의 시가(opening prints)를 기준으로 결제 가치가 산정되며, 거래는 그 전날 목요일에 종료됩니다. SPXW는 PM 결제 루트로, 월요일부터 금요일까지의 일일 옵션, 월말 계약 등 그 외 모든 만기를 포괄하며 각 만기일 종가까지 거래됩니다.
달력도 같은 기준으로 나뉩니다. 월별 주기당 하나의 AM 결제 세 번째 금요일 계약이 SPX 루트에 배치됩니다. 그 외 모든 미래 날짜는 SPXW에 속하며, 전체 체인에서 조회되는 대부분의 만기가 여기에 해당합니다. 문자열 자체는 이를 표시하지 않으며, 루트가 힌트일 뿐 계약 명세가 권위 있는 기준입니다. 두 개의 루트, 하나의 지수, 하나의 화면, 그리고 AM 대 PM 결제 옵션에서 상세히 다루는 결제 메커니즘이 존재합니다.
옵션 심볼이 알려주지 않는 것
네 가지 필드는 계약을 완벽하게 식별하지만, 그 내용은 거의 설명하지 않습니다. 특히 다음 사항은 포함되지 않습니다.
- 승수(Multiplier): 표준 미국 주식 옵션은 100주를 다루지만, 문자열의 어떤 필드에도 명시되지 않습니다. 조정된 시리즈, 미니 시리즈, 지수 상품은 각기 다른 승수를 가집니다.
- 결제 방식: AM/PM 결제 여부나 현금 결제/실물 인도 여부를 표시하는 정보는 없습니다. 지수 루트의 경우 관례가 힌트가 될 뿐, 계약 명세만이 유일한 기준입니다.
- 인도 대상: 조정 후에는 100주 인도 가정이 무효화되지만, 심볼은 숫자 외에는 이전과 동일하게 보입니다.
- 잔존 기간: 날짜 필드는 만기일을 제공할 뿐 카운트다운을 제공하지 않습니다. 이를 만기까지 남은 일수로 변환하는 것은 달력을 보고 직접 계산해야 합니다.
- 유동성: 동일한 구조를 가진 두 심볼이라도 거래량과 미결제약정 면에서 엄청난 차이가 날 수 있습니다.
FAQ
옵션 심볼은 몇 글자인가?
표준 OSI 형식으로 21자입니다. 루트 6자, 날짜 6자, 콜/풋 구분 1자, 행사가격 8자입니다. 6자 미만의 루트는 공백으로 채워지며, 대부분의 화면에서는 이 공백을 제거하므로 3글자 루트는 보통 18자 문자열로 표시됩니다.
옵션 심볼에서 루트 뒤의 숫자는 무엇을 의미하는가?
표준이 아닌 계약 조건을 나타냅니다. OCC가 추가한 숫자는 기업 활동 이후 조정된 시리즈를 식별하며, 7은 100주 대신 10주를 다루는 미니 계약을 의미합니다. 날짜와 행사가격 필드는 동일한 방식으로 해석됩니다.
왜 행사가격은 8자리인가?
이 필드는 달러의 1,000분의 1 단위를 고정 너비 정수로 저장하며, 소수점 없이 0.1센트부터 $99,999.999까지 표현할 수 있습니다. 8자리 숫자를 1,000으로 나누면 달러 단위가 됩니다(예: 00007500은 $7.50).
SPXW는 SPX와 같은가?
동일한 지수를 참조하고 동일한 심볼 레이아웃을 사용하지만 결제 방식이 다릅니다. SPX 계약은 금요일 오전 시가를 기준으로 결제되며 전날 거래가 종료되지만, SPXW 계약은 만기일 종가까지 거래되고 종가 기준으로 결제됩니다.
옵션 심볼로 주간 옵션인지 월간 옵션인지 알 수 있는가?
미국 주식의 경우 알 수 없습니다. 동일한 기초자산의 주간 옵션과 월간 옵션은 루트를 공유하며 6자리 날짜만 다릅니다. 세 번째 금요일 관례가 월간 옵션처럼 보이게 할 뿐이며, 지수 상품은 별도의 루트를 사용합니다.
이 페이지의 모든 패널은 해당 필드가 문자열에서 어떻게 추출되었는지 확인할 수 있도록 SQL 쿼리를 포함하고 있습니다. 현재 보고 있는 심볼을 분해하려면 Strasmore 터미널에서 평문 영어로 요청하십시오.