tushare
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
数据源改造实盘验证脚本
|
||||
请在【有网络】的环境运行(例如在 PyCharm 的 aiagents-stock 解释器中执行),
|
||||
它会逐项调用各模块的数据获取接口,并打印 PASS/FAIL 与实际使用的数据源日志。
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
PROJECT = os.environ.get("AIAGENTS_STOCK_HOME", "/Users/songzhuoyuan/Desktop/code/python/aiagents-stock")
|
||||
if not os.path.isdir(PROJECT):
|
||||
PROJECT = input("请输入项目绝对路径: ").strip()
|
||||
sys.path.insert(0, PROJECT)
|
||||
os.chdir(PROJECT)
|
||||
|
||||
print("=" * 60)
|
||||
print("数据源改造验证 - 股票代码统一使用 600637")
|
||||
print("=" * 60)
|
||||
|
||||
from data_source_manager import data_source_manager
|
||||
print("Tushare Token 已配置:", bool(data_source_manager.tushare_token))
|
||||
print("Tushare 可用:", data_source_manager.tushare_available)
|
||||
print()
|
||||
|
||||
passed = 0
|
||||
failed = 0
|
||||
|
||||
def test(name, fn):
|
||||
global passed, failed
|
||||
try:
|
||||
result = fn()
|
||||
if result:
|
||||
passed += 1
|
||||
print(f"PASS | {name}")
|
||||
else:
|
||||
failed += 1
|
||||
print(f"FAIL | {name}(返回空/失败)")
|
||||
except Exception as e:
|
||||
failed += 1
|
||||
print(f"FAIL | {name}: {type(e).__name__}: {str(e)[:120]}")
|
||||
|
||||
# 1. 数据源管理器(核心)
|
||||
test("历史数据(1年,前复权)", lambda: data_source_manager.get_stock_hist_data("600637", start_date="20250801", end_date="20260810", adjust="qfq") is not None)
|
||||
test("基本信息", lambda: data_source_manager.get_stock_basic_info("600637").get("name") != "未知")
|
||||
test("实时行情", lambda: bool(data_source_manager.get_realtime_quotes("600637")))
|
||||
test("财务数据(利润表)", lambda: data_source_manager.get_financial_data("600637", "income") is not None)
|
||||
|
||||
# 2. 资金流向
|
||||
def fund_flow_test():
|
||||
from fund_flow_akshare import FundFlowAkshareDataFetcher
|
||||
return FundFlowAkshareDataFetcher().get_fund_flow_data("600637").get("data_success")
|
||||
test("资金流向", fund_flow_test)
|
||||
|
||||
# 3. 季报
|
||||
def quarterly_test():
|
||||
from quarterly_report_data import QuarterlyReportDataFetcher
|
||||
return QuarterlyReportDataFetcher().get_quarterly_reports("600637").get("data_success")
|
||||
test("季报(三表+指标)", quarterly_test)
|
||||
|
||||
# 4. 新闻
|
||||
def news_test():
|
||||
from qstock_news_data import QStockNewsDataFetcher
|
||||
return QStockNewsDataFetcher().get_stock_news("600637").get("data_success")
|
||||
test("个股新闻", news_test)
|
||||
|
||||
# 5. 市场情绪
|
||||
def sentiment_tests():
|
||||
from market_sentiment_data import MarketSentimentDataFetcher
|
||||
f = MarketSentimentDataFetcher()
|
||||
return (f._get_turnover_rate("600637") is not None and
|
||||
f._get_market_index_sentiment() is not None)
|
||||
test("情绪-换手率/大盘指数", sentiment_tests)
|
||||
|
||||
def limit_test():
|
||||
from market_sentiment_data import MarketSentimentDataFetcher
|
||||
return MarketSentimentDataFetcher()._get_limit_up_down_stats() is not None
|
||||
test("情绪-涨跌停统计", limit_test)
|
||||
|
||||
def margin_test():
|
||||
from market_sentiment_data import MarketSentimentDataFetcher
|
||||
return MarketSentimentDataFetcher()._get_margin_trading_data("600637") is not None
|
||||
test("情绪-融资融券", margin_test)
|
||||
|
||||
# 6. 综合股票数据(主分析链路)
|
||||
def stock_data_test():
|
||||
from stock_data import StockDataFetcher
|
||||
f = StockDataFetcher()
|
||||
info = f.get_stock_info("600637")
|
||||
data = f.get_stock_data("600637", "1y")
|
||||
fin = f.get_financial_data("600637")
|
||||
return (isinstance(data, dict) and "error" not in data) and len(fin) > 0
|
||||
test("主分析链路(信息/行情/财务)", stock_data_test)
|
||||
|
||||
# 7. 港股(可选,若积分不足会自动回退akshare)
|
||||
def hk_test():
|
||||
from stock_data import StockDataFetcher
|
||||
f = StockDataFetcher()
|
||||
data = f.get_stock_data("00700", "1mo")
|
||||
return isinstance(data, dict) and "error" not in data
|
||||
test("港股日线(00700)", hk_test)
|
||||
|
||||
print()
|
||||
print("=" * 60)
|
||||
print(f"验证完成:通过 {passed} 项,失败 {failed} 项")
|
||||
if failed:
|
||||
print("注意:失败项通常表示对应 tushare 接口积分不足或网络问题,程序会自动回退 akshare,不影响使用。")
|
||||
print("=" * 60)
|
||||
Reference in New Issue
Block a user