From 65d21fa6211ea17707cdf40f55fc26f0ca0ab0aa Mon Sep 17 00:00:00 2001 From: liuzhuoya Date: Tue, 14 Apr 2026 10:53:26 +0800 Subject: [PATCH] feat: add akshare stock data provider and remove debug print statement --- tradingagents/dataflows/akshare_stock.py | 39 ++++++++++++++++++++++++ tradingagents/dataflows/interface.py | 3 +- 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 tradingagents/dataflows/akshare_stock.py diff --git a/tradingagents/dataflows/akshare_stock.py b/tradingagents/dataflows/akshare_stock.py new file mode 100644 index 00000000..a7c39a82 --- /dev/null +++ b/tradingagents/dataflows/akshare_stock.py @@ -0,0 +1,39 @@ +import akshare as ak +import pandas as pd +from datetime import datetime + +def get_stock_data_akshare(symbol: str, start_date: str, end_date: str) -> str: + """获取 A 股历史行情数据""" + # 处理 symbol:akshare 通常需要纯数字,如 600519 + # 假设传入的是 600519.SS 或 000001.SZ + clean_symbol = symbol.split('.')[0] + + start_d = start_date.replace("-", "") + end_d = end_date.replace("-", "") + + try: + # 使用 akshare 获取日频数据 + df = ak.stock_zh_a_hist(symbol=clean_symbol, period="daily", start_date=start_d, end_date=end_d, adjust="qfq") + + if df.empty: + return f"No data found for {symbol}" + + # 统一列名以匹配 yfinance 格式,方便后续 Agent 处理 + df = df.rename(columns={ + "日期": "Date", + "开盘": "Open", + "最高": "High", + "最低": "Low", + "收盘": "Close", + "成交量": "Volume" + }) + df.set_index("Date", inplace=True) + + header = f"# Stock data for {symbol} (via akshare) from {start_date} to {end_date}\n\n" + return header + df.to_csv() + except Exception as e: + return f"Error retrieving A-share data: {str(e)}" + +if __name__ == "__main__": + result = get_stock_data_akshare(symbol="600519.SS", start_date="2026-01-01", end_date="2026-04-13") + print(result) \ No newline at end of file diff --git a/tradingagents/dataflows/interface.py b/tradingagents/dataflows/interface.py index 82523cb8..4b9872a8 100644 --- a/tradingagents/dataflows/interface.py +++ b/tradingagents/dataflows/interface.py @@ -12,6 +12,7 @@ from .y_finance import ( ) from .yfinance_news import get_news_yfinance, get_global_news_yfinance from .akshare_news import get_news_akshare +from .akshare_stock import get_stock_data_akshare from .alpha_vantage import ( get_stock as get_alpha_vantage_stock, get_indicator as get_alpha_vantage_indicator, @@ -73,6 +74,7 @@ VENDOR_METHODS = { "get_stock_data": { "alpha_vantage": get_alpha_vantage_stock, "yfinance": get_YFin_data_online, + "akshare": get_stock_data_akshare, }, # technical_indicators "get_indicators": { @@ -138,7 +140,6 @@ def route_to_vendor(method: str, *args, **kwargs): """Route method calls to appropriate vendor implementation with fallback support.""" category = get_category_for_method(method) if len(args) > 0 and isinstance(args[0], str): - print(f"AAAAAA args: {args}") ticker = args[0].upper() # 如果带有上海(.SS)或深圳(.SZ)后缀,强制优先使用 akshare if ticker.endswith(".SS") or ticker.endswith(".SZ"):