TradingAgents/tradingagents/dataflows/stock_api.py

116 lines
3.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
股票数据API接口
提供简单易用的股票数据获取接口,内置完整的降级机制
"""
from typing import Dict, List, Optional, Any
from .stock_data_service import get_stock_data_service
def get_stock_info(stock_code: str) -> Optional[Dict[str, Any]]:
"""
获取单个股票的基础信息
Args:
stock_code: 股票代码(如 '000001'
Returns:
Dict: 股票信息包含code, name, market, category等字段
如果获取失败返回包含error字段的字典
Example:
>>> info = get_stock_info('000001')
>>> print(info['name']) # 输出: 平安银行
"""
service = get_stock_data_service()
return service.get_stock_basic_info(stock_code)
def get_all_stocks() -> List[Dict[str, Any]]:
"""
获取所有股票列表
Returns:
List[Dict]: 股票列表,每个元素包含股票基础信息
如果获取失败返回包含error字段的字典
Example:
>>> stocks = get_all_stocks()
>>> print(f"共有{len(stocks)}只股票")
"""
service = get_stock_data_service()
result = service.get_stock_basic_info()
if isinstance(result, list):
return result
elif isinstance(result, dict) and 'error' in result:
return [result] # 返回错误信息
else:
return []
def get_stock_data(stock_code: str, start_date: str, end_date: str) -> str:
"""
获取股票历史数据(带降级机制)
Args:
stock_code: 股票代码
start_date: 开始日期 'YYYY-MM-DD'
end_date: 结束日期 'YYYY-MM-DD'
Returns:
str: 格式化的股票数据报告
Example:
>>> data = get_stock_data('000001', '2024-01-01', '2024-01-31')
>>> print(data)
"""
service = get_stock_data_service()
return service.get_stock_data_with_fallback(stock_code, start_date, end_date)
def search_stocks_by_name(name: str) -> List[Dict[str, Any]]:
"""
根据股票名称搜索股票需要MongoDB支持
Args:
name: 股票名称关键词
Returns:
List[Dict]: 匹配的股票列表
Example:
>>> results = search_stocks_by_name('银行')
>>> for stock in results:
... print(f"{stock['code']}: {stock['name']}")
"""
# 这个功能需要MongoDB支持暂时通过原有方式实现
try:
from ..examples.stock_query_examples import EnhancedStockQueryService
service = EnhancedStockQueryService()
return service.query_stocks_by_name(name)
except Exception as e:
return [{'error': f'名称搜索功能不可用: {str(e)}'}]
def check_data_sources() -> Dict[str, Any]:
"""
检查数据源状态
Returns:
Dict: 各数据源的可用状态
Example:
>>> status = check_data_sources()
>>> print(f"MongoDB可用: {status['mongodb_available']}")
>>> print(f"通达信API可用: {status['tdx_api_available']}")
"""
service = get_stock_data_service()
return {
'mongodb_available': service.db_manager is not None and service.db_manager.mongodb_db is not None,
'tdx_api_available': service.tdx_provider is not None,
'enhanced_fetcher_available': True, # 这个通常都可用
'fallback_mode': service.db_manager is None or service.db_manager.mongodb_db is None,
'recommendation': (
"所有数据源正常" if service.db_manager and service.db_manager.mongodb_db
else "建议配置MongoDB以获得最佳性能当前使用通达信API降级模式"
)
}