AI-Trader:终结AI炒股玄学的硬核实验平台
AI-Trader不是自动赚钱工具,而是一个生产级AI交易竞技场:通过历史重放架构防未来信息泄露、MCP工具链隔离决策与执行、分市场模块化Agent设计,让GPT/Claude/Qwen在真实市场规则下公平竞技。附三段核心代码解析与踩坑指南。

大家好,我是周小码——一个被Spring Boot自动装配折磨到凌晨三点、靠咖啡续命的Java老兵,也是个偷偷用LangChain写量化策略的AI技术票友。今天不聊JVM调优,也不扯Gateway熔断配置,来点新鲜的:AI-Trader——一个让GPT、Claude、Qwen在NASDAQ、上证50、甚至比特币市场里真刀真枪干架的AI交易竞技场。
说实话,刚看到项目名时我下意识摸了摸钱包(怕被割),又点了点README里那个实时排行榜链接(https://ai4trade.ai),结果真看到几个AI模型在实时买卖AAPL、茅台、BTC,还带完整推理链展示……那一刻我手里的美式突然不香了——这哪是开源项目?这是华尔街版的《鱿鱼游戏》啊!
先说结论:这不是玩具,也不是Demo,而是一个架构严谨、工程扎实、边界清晰的AI Agent生产级实验平台。它没吹“稳赚不赔”,也没卖“全自动暴富”,而是老老实实告诉你:“我们搭了个擂台,五个AI选手入场,规则透明,数据可复现,胜负看真金白银。”这种克制,反而让我这个见惯了PPT架构图的老兵肃然起敬。
那它到底解决了什么问题?一句话:终结‘AI炒股’的玄学时代,把LLM trading拉回科学验证轨道。过去太多项目要么是本地回测+人工调参的缝合怪,要么是API调用+硬编码策略的脚本集合。AI-Trader干了三件狠事:
第一,用历史重放(Historical Replay)架构彻底封死‘偷看未来’的漏洞。所有AI只能访问当前时间戳及之前的数据——新闻、价格、财报,全按真实发布时间过滤。README里那段anti-look-ahead设计不是摆设,而是用get_daily_price_tushare.py + merge_jsonl_hourly.py + 时间戳校验三重保险实现的。这就像给每个AI配了个‘时间沙盒’,再聪明也别想穿越。
第二,用MCP(Model Context Protocol)工具链把‘决策’和‘执行’物理隔离。你不会在prompt里写if price > 200: buy('AAPL'),而是让AI说‘我要买苹果股票’,然后由tool_trade.py根据市场自动调用buy()或buy_crypto(),并遵守T+1(A股)、T+0(美股/币圈)、100股起买等真实规则。这招太妙了——既保留LLM的高层语义理解能力,又用工具层兜底合规性,相当于给大模型套上了金融行业的安全带。
第三,分市场、分粒度、分角色的模块化Agent设计。US股票用BaseAgent,A股用BaseAgentAStock_Hour(连10:30/11:30/14:00/15:00四个交易时段都给你写死了),币圈用BaseAgentCrypto。每个Agent目录下都有独立的data loader、prompt模板、风控逻辑。这不是‘一套代码打天下’的懒人方案,而是像造车一样——底盘、发动机、中控屏,全按赛道定制。我翻了源码结构,光是data/A_stock/下就有Tushare和Alpha Vantage双源采集、日线/小时线双格式合并、SSE50权重CSV预置……细节多到让人头皮发麻,但正是这些‘麻烦’,才撑得起‘公平竞技’四个字。
来看代码——这才是硬核时刻。
安装不是仪式,而是契约
bash
## 1. 克隆
git clone https://github.com/HKUDS/AI-Trader.git
cd AI-Trader
## 2. 装依赖(注意不是全量,而是按需)
pip install -r requirements.txt
## 3. 配环境变量(关键!)
cp .env.example .env
## 编辑.env填入OPENAI_API_KEY、ALPHAADVANTAGE_API_KEY、JINA_API_KEY、TUSHARE_TOKEN
看到没?它不帮你申请API key,也不封装成黑盒。你要自己去Alpha Vantage注册拿key,去Tushare开token——它默认你是个懂行的开发者,而不是来点按钮的投资者。这种态度,我喜欢。
启动不是命令,而是流水线
bash
## US市场一键三连(数据→服务→交易)
bash scripts/main_step1.sh # 拉NASDAQ 100日线数据
bash scripts/main_step2.sh # 启MCP服务(price/search/trade/math四端口)
bash scripts/main_step3.sh # 启动Claude 3.7 Sonnet,让它自己决定买啥
## 或直接运行:
python main.py configs/default_config.json
main_step2.sh本质是启动四个HTTP服务:8000(math)、8001(search)、8002(trade)、8003(price)。每个端口对应一个tool_*.py模块,比如tool_get_price_local.py里有这样一段路由逻辑:
python
## tool_get_price_local.py 关键片段
def get_price(symbol: str, timestamp: str) -> dict:
"""symbol前缀决定数据源:SH/SZ → Tushare;BTC-USD → CCXT;^GSPC → Alpha Vantage"""
if symbol.startswith(('SH', 'SZ')):
return _fetch_from_tushare(symbol, timestamp)
elif symbol.startswith(('BTC-', 'ETH-', 'SOL-')):
return _fetch_from_ccxt(symbol, timestamp)
else:
return _fetch_from_alpha_vantage(symbol, timestamp)
这段代码没有抽象工厂,没有策略模式,只有精准的字符串前缀匹配——因为金融符号命名是有标准的,SH600519就是上交所,BTC-USD就是币安现货对。这种“不优雅但可靠”的设计,在高频交易场景里比任何设计模式都管用。
配置不是参数,而是赛制说明书
json
{
"agent_type": "BaseAgentAStock_Hour",
"date_range": {
"init_date": "2025-10-09 10:30:00",
"end_date": "2025-10-31 15:00:00"
},
"models": [{
"name": "claude-3.7-sonnet",
"basemodel": "anthropic/claude-3.7-sonnet",
"signature": "claude-3.7-sonnet-astock-hour",
"enabled": true
}],
"agent_config": {
"initial_cash": 100000.0
}
}
这里没有魔法常量,没有隐藏开关。init_date精确到分钟,agent_type直指具体类名,initial_cash明示单位是人民币。它把‘如何做实验’这件事,写成了程序员能一眼看懂的契约。
当然,坑也有。比如README里那句‘To maintain a well-managed repository, we no longer upload runtime data to the repo’——意思是别指望Git里看到交易记录,得去Hugging Face或https://ai4trade.ai查。还有,.env里要填4个API key,少一个就卡在start_mcp_services.py。另外,A股小时级交易只支持4个固定时点,想搞盘中T+0高频?得自己改base_agent_astock_hour.py里的get_trading_times()方法:
python
## base_agent_astock_hour.py 原始实现(不可扩展)
def get_trading_times(self):
return [
"10:30:00",
"11:30:00",
"14:00:00",
"15:00:00"
]
## 改为可配置版本(推荐PR)
def get_trading_times(self):
times = os.getenv("ASTOCK_TRADING_TIMES", "10:30:00,11:30:00,14:00:00,15:00:00")
return [t.strip() for t in times.split(",")]
值不值得深入?我的答案是:如果你做AI工程、Agent开发、或者量化基础设施,必须啃。它把LLM、Tool Calling、Replay System、Multi-Market适配这些概念,全塞进一个可运行、可调试、可贡献的Python项目里。比读10篇arXiv论文管用。
最后说句掏心窝的:这项目让我想起当年第一次看到Spring Boot的@SpringBootApplication——不是因为它多炫技,而是它用极简的入口,包裹住了背后一整套工业级的严谨。AI-Trader也是这样。它没喊‘颠覆金融’,却悄悄建起了AI交易的实验室标准;它没承诺‘年化100%’,却给了所有人一把尺子,去丈量AI在真实市场里的成色。
所以,别急着抄代码跑策略。先打开https://ai4trade.ai,看看Claude今天是不是又把茅台给卖飞了——那才是最真实的README。
(P.S. 我已经fork了,正在给BaseAgentCrypto加个SOLANA池子……欢迎PR交流,但别问我为啥选Solana,问就是‘因为它的RPC响应快过我老板的消息’。)