CBOE 옵션 체인 다운로드 자동화 파일 공유

CBOE 옵션 체인 다운로드 자동화 파일 공유

avatar
911GT3RS
2026.01.28조회수 295회
image.png

CBOE 사이트에 들어가면 위 사진과 같은 하루 지연 옵션 데이터들을 다운로드 할 수 있는 곳이 있습니다.


근데 매번 들어가서 행사가 범위와 만기를 All로 놓고 View Chain을 눌러서 사이트 끝까지 스크롤을 내린뒤 CSV파일 다운로드를 누르는게 너무 귀찮아서, API를 통해 데이터를 받아와서 csv파일로 저장하는 코드를 짜는 것도 귀찮아서, 그냥 exe파일 딸깍이로 만들어버렸습니다. (물론 코드는 제가 짠게 아니라 Cursor AI를 통해 Claude Opus 4.5가...)


[구글 드라이브 다운로드 링크]


실행방법은 그냥 첨부된 zip파일 압축을 푸시면 DailyOptionsDownloader.exe파일이 나오는데, exe파일 더블클릭 한번만 하시면 됩니다. 그럼 검은색 CMD창이 떴다가 잠시 후 알아서 다운로드를 시작합니다.

image.png

exe 파일이 저장된 경로에 options_historical_data라는 폴더가 생기고 그 안에 어제자 종가 기준의 옵션 데이터가 csv파일로 저장이 됩니다.

image.png

아래처럼 날짜가 자동으로 파일명 뒤에 붙습니다.

image.png

기본으로 설정해둔 티커는 다음과 같습니다.

  • 주가지수 : SPX, VIX, NDX, RUT, DJX, OEX, XSP

  • ETF : SPY, QQQ, IWM, DIA, XLF, GLD, TLT, EEM

  • 주식 : AAPL, TSLA, NVDA, MSFT, AMZN, META, GOOGL

※ 찾아보니, 주식과 ETF는 거의 전종목 다 지원하는 것 같습니다. 아래 코드에 티커부분에 추가만 해주시면 될 것 같습니다. 대신, 공유드린 딸깍이 exe파일은 위 티커만 들어가 있어서 코드를 수정한 뒤 다시 exe 파일로 만들어야 합니다.


CBOE에서 유료 요금제를 사용하면 과거 데이터까지 한번에 받을 수가 있지만, 무료 API로는 어제가 종가기준 지연데이터 하루치만 받을 수 있습니다. 굳이 그렇게 까지 하실 용의가 없으신 분들은 저처럼 하루에 한번씩 exe파일 딸깍이로 데이터를 쌓아나가시면서 일별로 변화를 추적하면 좋지 않을까 싶어서 공유드립니다.


쓰실 분이 얼마나 계실는지는 몰라도 수요없는 공급 가즈아ㅏㅏㅏ


[Python 코드]

"""
Daily Options Data Downloader
==============================
지원되는 모든 티커의 옵션 데이터를 매일 다운로드하여 날짜별로 저장합니다.

지원 종목:
- Index: SPX, VIX, NDX, RUT, DJX, OEX, XSP
- ETF: SPY, QQQ, IWM, DIA, XLF, GLD, TLT, EEM
- Stock: AAPL, TSLA, NVDA, MSFT, AMZN, META, GOOGL

사용법:
  1. 수동 실행: python daily_options_downloader.py
  2. Windows 작업 스케줄러 등록 (아래 안내 참조)
"""

import os
import sys
import requests
import pandas as pd
from datetime import datetime
import json
import time


# =============================================================================
# 설정
# =============================================================================

def get_base_dir():
    """exe 또는 스크립트 위치 반환"""
    if getattr(sys, 'frozen', False):
        return os.path.dirname(sys.executable)
    else:
        return os.path.dirname(os.path.abspath(__file__))

# 저장 디렉토리
BASE_DIR = get_base_dir()
SAVE_DIR = os.path.join(BASE_DIR, 'options_historical_data')

# 다운로드할 티커 목록
TICKERS = {
    # 지수 옵션 (API에서 _ 접두사 필요)
    'Index': ['SPX', 'VIX', 'NDX', 'RUT', 'DJX', 'OEX', 'XSP'],
    # ETF 옵션
    'ETF': ['SPY', 'QQQ', 'IWM', 'DIA', 'XLF', 'GLD', 'TLT', 'EEM'],
    # 개별 주식 옵션
    'Stock': ['AAPL', 'TSLA', 'NVDA', 'MSFT', 'AMZN', 'META', 'GOOGL'],
}

# 지수 티커 (API에서 _ 접두사 필요)
INDEX_TICKERS = ['SPX', 'VIX', 'NDX', 'RUT', 'DJX', 'OEX', 'XSP']


# =============================================================================
# 함수
# =============================================================================

def get_api_symbol(ticker):
    """티커를 API 형식으로 변환"""
    ticker = ticker.upper().strip()
    if ticker in INDEX_TICKERS:
        return f'_{ticker}'
    return ticker


def parse_option_symbol(symbol):
    """옵션 심볼 파싱"""
    try:
        strike_str = symbol[-8:]
        strike = float(strike_str) / 1000
        opt_type = 'Call' if symbol[-9] == 'C' else 'Put'
        date_str = symbol[-15:-9]
        expiry = f"20{date_str[:2]}-{date_str[2:4]}-{date_str[4:6]}"
        return expiry, opt_type, strike
    except:
        return None, None, None


def fetch_options_data(ticker):
    """옵션 데이터 조회"""
    api_symbol = get_api_symbol(ticker)
    url = f'https://cdn.cboe.com/api/global/delayed_quotes/options/{api_symbol}.json'
    
    try:
        response = requests.get(url, timeout=60)
        ...

회원가입만 해도
이 글을 무료로 읽을 수 있어요.

이미 계정이 있으신가요?로그인하기
댓글 9
avatar
911GT3RS
구독자 1,883명구독중 104명
Hybrid Theory