使用StockTV API对接韩国股票数据源实践指南
前言
在之前的文章中,我们介绍了如何使用StockTV API获取美国股票数据。本文将重点介绍如何对接韩国股票市场数据,这对于关注亚洲市场的开发者来说非常有价值。
韩国股票市场特点
韩国股市(KOSPI、KOSDAQ)是全球重要的新兴市场之一,具有以下特点:
- 交易时间:韩国标准时间 09:00-15:30
- 主要指数:KOSPI、KOSDAQ
- 知名公司:三星电子、现代汽车、SK海力士等
核心代码实现
1. 基础配置和韩国市场特定参数
import requests
import pandas as pd
from datetime import datetime, timedelta
import time
# API配置
BASE_URL = "https://api.stocktv.top"
API_KEY = "your_api_key_here" # 替换为实际API密钥
# 韩国市场特定参数
KOREA_COUNTRY_ID = 16 # 韩国对应的国家ID(需要确认具体ID)
2. 获取韩国交易所股票列表
def get_korean_stocks_list(exchange="KOSPI", page_size=100):
"""获取韩国股票列表
Args:
exchange: 交易所类型,KOSPI或KOSDAQ
page_size: 每页返回数量
"""
url = f"{BASE_URL}/stock/stocks"
params = {
'countryId': KOREA_COUNTRY_ID,
'pageSize': page_size,
'key': API_KEY
}
try:
response = requests.get(url, params=params, timeout=10)
response.raise_for_status()
data = response.json()
# 过滤特定交易所的股票
if exchange.upper() == "KOSPI":
filtered_stocks = [stock for stock in data.get('data', [])
if stock.get('exchange') == 'KOSPI']
elif exchange.upper() == "KOSDAQ":
filtered_stocks = [stock for stock in data.get('data', [])
if stock.get('exchange') == 'KOSDAQ']
else:
filtered_stocks = data.get('data', [])
return filtered_stocks
except requests.exceptions.RequestException as e:
print(f"获取韩国股票列表失败: {e}")
return []
3. 获取韩国股票实时行情
def get_korean_stock_realtime(symbols):
"""批量获取韩国股票实时行情
Args:
symbols: 股票代码列表,如 ['005930', '000660']
"""
if not symbols:
return {}
stocks_data = {}
for symbol in symbols:
url = f"{BASE_URL}/stock/quote"
params = {
'symbol': f"{symbol}.KS", # 韩国股票代码格式
'key': API_KEY
}
try:
response = requests.get(url, params=params, timeout=5)
if response.status_code == 200:
stock_info = response.json()
stocks_data[symbol] = stock_info
else:
print(f"获取{symbol}数据失败,状态码: {response.status_code}")
# 避免请求过于频繁
time.sleep(0.1)
except Exception as e:
print(f"获取{symbol}数据异常: {e}")
return stocks_data
4. 获取韩国股票历史数据
def get_korean_stock_history(symbol, start_date, end_date, period="1d"):
"""获取韩国股票历史数据
Args:
symbol: 股票代码
start_date: 开始日期,格式YYYY-MM-DD
end_date: 结束日期,格式YYYY-MM-DD
period: 数据周期,1d(日线), 1h(小时线)等
"""
url = f"{BASE_URL}/stock/history"
params = {
'symbol': f"{symbol}.KS",
'start': start_date,
'end': end_date,
'period': period,
'key': API_KEY
}
try:
response = requests.get(url, params=params, timeout=10)
response.raise_for_status()
data = response.json()
return data.get('data', [])
except Exception as e:
print(f"获取{symbol}历史数据失败: {e}")
return []
5. 韩国股票数据处理器
class KoreanStockProcessor:
"""韩国股票数据处理器"""
def __init__(self):
self.exchange_info = {
'KOSPI': '韩国综合股价指数',
'KOSDAQ': '韩国科斯达克'
}
def process_realtime_data(self, raw_data):
"""处理实时数据"""
processed = {}
for symbol, data in raw_data.items():
if data and 'quote' in data:
quote = data['quote']
processed[symbol] = {
'名称': quote.get('name', ''),
'当前价': quote.get('price', 0),
'涨跌幅': quote.get('changePercent', 0),
'涨跌额': quote.get('change', 0),
'开盘价': quote.get('open', 0),
'最高价': quote.get('high', 0),
'最低价': quote.get('low', 0),
'成交量': quote.get('volume', 0),
'更新时间': quote.get('timestamp', '')
}
return processed
def process_history_data(self, raw_data):
"""处理历史数据"""
if not raw_data:
return pd.DataFrame()
df = pd.DataFrame(raw_data)
if not df.empty:
# 转换时间格式
if 'timestamp' in df.columns:
df['date'] = pd.to_datetime(df['timestamp'])
df.set_index('date', inplace=True)
# 确保数值列正确类型
numeric_columns = ['open', 'high', 'low', 'close', 'volume']
for col in numeric_columns:
if col in df.columns:
df[col] = pd.to_numeric(df[col], errors='coerce')
return df
完整使用示例
def main():
# 初始化处理器
processor = KoreanStockProcessor()
# 1. 获取KOSPI股票列表
print("获取KOSPI股票列表...")
kospi_stocks = get_korean_stocks_list(exchange="KOSPI", page_size=50)
print(f"找到{len(kospi_stocks)}支KOSPI股票")
# 提取前10支股票的代码
symbols = [stock['symbol'] for stock in kospi_stocks[:10]]
print(f"关注股票: {symbols}")
# 2. 获取实时行情
print("\n获取实时行情...")
realtime_data = get_korean_stock_realtime(symbols)
processed_data = processor.process_realtime_data(realtime_data)
# 显示结果
for symbol, data in processed_data.items():
print(f"{symbol}: {data['名称']} - 价格: {data['当前价']} 涨跌幅: {data['涨跌幅']}%")
# 3. 获取历史数据(示例:三星电子)
print("\n获取三星电子历史数据...")
samsung_history = get_korean_stock_history(
symbol="005930", # 三星电子
start_date="2024-01-01",
end_date="2024-03-01",
period="1d"
)
history_df = processor.process_history_data(samsung_history)
if not history_df.empty:
print(f"获取到{len(history_df)}条历史数据")
print(history_df[['open', 'high', 'low', 'close', 'volume']].head())
if __name__ == "__main__":
main()
韩国市场注意事项
- 交易时间:需要考虑韩国时区(UTC+9)
- 股票代码:韩国股票通常为6位数字代码
- 货币单位:韩元(KRW),注意汇率转换
- 市场规则:了解韩国市场的特殊交易规则和假期安排
扩展功能建议
# 韩国市场监控器
class KoreaMarketMonitor:
def __init__(self):
self.watch_list = ['005930', '000660', '035420'] # 三星、SK海力士、NAVER
def monitor_realtime(self, interval=60):
"""实时监控韩国股票"""
while True:
try:
data = get_korean_stock_realtime(self.watch_list)
processor = KoreanStockProcessor()
processed = processor.process_realtime_data(data)
# 这里可以添加报警逻辑、数据存储等
self._save_to_database(processed)
self._check_alerts(processed)
time.sleep(interval)
except Exception as e:
print(f"监控异常: {e}")
time.sleep(interval)
总结
通过StockTV API对接韩国股票数据源,开发者可以构建针对韩国市场的金融应用。本文提供的代码示例涵盖了从获取股票列表到处理实时和历史数据的完整流程,可以作为韩国市场数据对接的起点。 在实际应用中,建议:
- 添加完善错误处理和重试机制
- 实现数据缓存减少API调用
- 考虑韩国市场的特殊性和时区差异
- 遵守相关数据使用条款和限制
完整的示例代码可以在StockTV GitHub仓库中找到更多实现细节和更新。