Fetch, store, and manage OHLCV candle data from cryptocurrency exchanges (Binance, Upbit) with MySQL storage
Project description
Candle Data Manager
암호화폐 및 주식 시장의 OHLCV 캔들 데이터를 수집, 저장, 관리하는 패키지. OHLCV candle data fetch, store, manage for cryptocurrency and stock markets.
Installation
pip install candle-data-manager
Requirements
- Python >= 3.10
- MySQL Server
.env
인증이 필요한 거래소의 API 키를 설정한다. API key is required for exchanges that need authentication.
# Binance
BINANCE_API_KEY=your_binance_api_key
BINANCE_API_SECRET=your_binance_api_secret
# Upbit
UPBIT_API_KEY=your_upbit_api_key
UPBIT_API_SECRET=your_upbit_api_secret
# KRX OpenAPI (선택사항 / optional)
KRX_API_KEY=your_krx_api_key
KRX는 두 가지 provider를 지원한다: KRX supports two providers:
- KRXProvider (primary): KRX OpenAPI (openapi.krx.co.kr) 사용.
KRX_API_KEY필요. Uses KRX OpenAPI. RequiresKRX_API_KEY. - KRXFallbackProvider (fallback): FinanceDataReader 사용. API 키 불필요. Uses FinanceDataReader. No API key required.
KRX_API_KEY가 설정되지 않으면 자동으로 FinanceDataReader로 전환된다.
If KRX_API_KEY is not set, automatically falls back to FinanceDataReader.
KRX OpenAPI 설정 / KRX OpenAPI Setup
KRX OpenAPI는 활성화를 위해 2단계 절차가 필요하다. KRX OpenAPI requires two separate steps to activate:
-
API 키 발급: openapi.krx.co.kr에 회원가입 후 마이페이지에서 API 키를 신청한다. Sign up at openapi.krx.co.kr, go to My Page, request an API key.
-
서비스별 개별 승인: API 키를 받은 후, 사용할 데이터 서비스를 각각 별도로 신청해야 한다. "서비스 이용" 메뉴에서 원하는 서비스를 선택하고 하단의 "API 이용신청" 버튼을 클릭한다. After receiving the key, you must individually apply for each data service. Go to "Service Usage" menu, select the service, and click "API Usage Request" at the bottom.
필요한 서비스: Required services:
- 유가증권 일별매매정보 / Securities Daily Trading Info (
sto/stk_bydd_trd) - KOSPI - 코스닥 일별매매정보 / KOSDAQ Daily Trading Info (
sto/ksq_bydd_trd) - KOSDAQ
각 서비스는 관리자 승인이 필요하다 (보통 1일 이내). 키와 서비스 모두 승인될 때까지 API 호출 시 401 Unauthorized가 반환된다. Each service requires admin approval (usually within 1 day). API calls will return 401 Unauthorized until both the key and the service are approved.
NASDAQ, NYSE는 FinanceDataReader를 통해 제공된다. API 키 불필요. NASDAQ, NYSE are provided via FinanceDataReader. No API key required.
Quick Start
from candle_data_manager import CandleDataAPI
api = CandleDataAPI()
# BTC/USDT 1d 캔들 수집 및 저장
# BTC/USDT 1d candle: fetch and store
result = api.active_update(
archetype="CRYPTO",
exchange="BINANCE",
tradetype="SPOT",
base="BTC",
quote="USDT",
timeframe="1d"
)
# DB에서 로드
# load from DB
markets = api.load(
archetype="CRYPTO",
exchange="BINANCE",
tradetype="SPOT",
base="BTC",
quote="USDT",
timeframe="1d"
)
print(markets[0].candles) # pandas DataFrame (OHLCV)
api.close()
API Reference
CandleDataAPI(database_url=None)
# 기본값 / default: mysql+pymysql://root@localhost/candle_data_manager
api = CandleDataAPI()
# 커스텀 / custom
api = CandleDataAPI(database_url="mysql+pymysql://user:pass@host/dbname")
초기화 시 DB와 테이블이 자동 생성된다. DB and tables are auto-created on init.
active_update(archetype, exchange, tradetype, base, quote, timeframe)
거래소 마켓 리스트에서 새 심볼을 등록하고 전체 과거 데이터를 수집한다. Register new symbols from exchange market list and fetch all historical data.
# 모든 Binance Spot 마켓, 모든 타임프레임
# all Binance Spot markets, all timeframes
result = api.active_update(
archetype="CRYPTO",
exchange="BINANCE",
tradetype="SPOT"
)
# 필터: 특정 base/quote/timeframe
# filtered: specific base/quote/timeframe
result = api.active_update(
archetype="CRYPTO",
exchange="BINANCE",
tradetype="SPOT",
base=["BTC", "ETH"],
quote="USDT",
timeframe=["1h", "1d"]
)
# KRX 주식
# KRX stocks
result = api.active_update(
archetype="STOCK",
exchange="KRX",
tradetype="SPOT",
base="005930",
timeframe="1d"
)
Parameters:
archetype(str): "CRYPTO" 또는 "STOCK" / "CRYPTO" or "STOCK"exchange(str): "BINANCE", "UPBIT", "KRX", "NASDAQ", "NYSE"tradetype(str): "SPOT" 또는 "FUTURES" / "SPOT" or "FUTURES"base(str | list[str], optional): base 자산으로 필터 / filter by base assetquote(str | list[str], optional): quote 자산으로 필터 / filter by quote assettimeframe(str | list[str], optional): 타임프레임으로 필터. None = 지원하는 전체 / filter by timeframe. None = all supported
Returns: UpdateResult(success_symbols, failed_symbols, total_rows)
passive_update(archetype, exchange, tradetype, base, quote, timeframe, buffer_size)
등록된 심볼의 증분 업데이트. 마지막 저장 시점부터 현재까지 수집한다. Incremental update for registered symbols. Fetches from last stored timestamp (inclusive) to now.
# 등록된 모든 Binance 심볼 업데이트
# update all registered Binance symbols
result = api.passive_update(
exchange="BINANCE"
)
# 특정 조건으로 업데이트
# update specific conditions
result = api.passive_update(
archetype="CRYPTO",
exchange="UPBIT",
tradetype="SPOT"
)
모든 파라미터는 선택사항. None = 필터 없음 (조건에 맞는 모든 등록 심볼 업데이트). All parameters are optional. None = no filter (updates all registered symbols matching conditions).
Returns: UpdateResult(success_symbols, failed_symbols, total_rows)
load(archetype, exchange, tradetype, base, quote, timeframe, start_at, end_at, limit)
DB에서 캔들 데이터를 Market 객체로 로드한다. Load candle data from DB as Market objects.
markets = api.load(
archetype="CRYPTO",
exchange="BINANCE",
tradetype="SPOT",
base="BTC",
quote="USDT",
timeframe="1h",
start_at=1609459200, # unix timestamp (sec)
end_at=1609545600
)
for market in markets:
print(market.symbol.to_string()) # "CRYPTO-BINANCE-SPOT-BTC-USDT-1h"
print(market.candles) # pandas DataFrame
# timestamp open high low close volume
# 0 1609459200 29000.50 29100.00 28900.00 29050.00 1234.56
모든 파라미터는 선택사항. list[Market]을 반환한다.
All parameters are optional. Returns list[Market].
get_symbol(symbol_str)
symbol = api.get_symbol("CRYPTO-BINANCE-SPOT-BTC-USDT-1h")
# Symbol 객체 또는 None 반환
# Returns Symbol object or None
close()
api.close()
Supported Providers
지원하는 Provider 목록. List of supported providers.
| Provider | archetype | exchange | tradetype | timeframes |
|---|---|---|---|---|
| Binance Spot | CRYPTO | BINANCE | SPOT | 1m, 3m, 5m, 15m, 30m, 1h, 2h, 4h, 6h, 8h, 12h, 1d, 3d, 1w, 1M |
| Binance Futures | CRYPTO | BINANCE | FUTURES | 1m, 3m, 5m, 15m, 30m, 1h, 2h, 4h, 6h, 8h, 12h, 1d, 3d, 1w, 1M |
| Upbit | CRYPTO | UPBIT | SPOT | 1m, 3m, 5m, 10m, 30m, 1h, 4h, 1d, 1w, 1M |
| KRX | STOCK | KRX | SPOT | 1d |
| NASDAQ | STOCK | NASDAQ | SPOT | 1d |
| NYSE | STOCK | NYSE | SPOT | 1d |
Symbol Format
심볼 문자열 형식. Symbol string format.
ARCHETYPE-EXCHANGE-TRADETYPE-BASE-QUOTE-TIMEFRAME
CRYPTO-BINANCE-SPOT-BTC-USDT-1h
CRYPTO-UPBIT-SPOT-BTC-KRW-1d
STOCK-KRX-SPOT-005930-KRW-1d
STOCK-NASDAQ-SPOT-AAPL-USD-1d
License
MIT License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file candle_data_manager-0.2.0.tar.gz.
File metadata
- Download URL: candle_data_manager-0.2.0.tar.gz
- Upload date:
- Size: 48.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
da88dd558ca6dbe5b443cef679938d1180a6cefb0dc124d0255a27e661ac0e5e
|
|
| MD5 |
d11240cc9cc4107f8706c7919600655e
|
|
| BLAKE2b-256 |
4f84e09d447a35e7d9d36ccae5bbe9f0e0c9faa422b9d8d6537f5df6cfdd7174
|
File details
Details for the file candle_data_manager-0.2.0-py3-none-any.whl.
File metadata
- Download URL: candle_data_manager-0.2.0-py3-none-any.whl
- Upload date:
- Size: 103.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2b7f30461f620690f0fecc608d42b76e40431e0d4d01c9c1966939decf38c590
|
|
| MD5 |
61ed7ee58adf490f1bf2a0e40e638836
|
|
| BLAKE2b-256 |
1395f22c18671c85c1fc940d65cff00f0fe1aea39a8e9dbd7fe1c25cf83a209a
|