首页 › 指南
在冻结的市场上测试 LLM 交易智能体
问一个 LLM「去年春天你会买什么」,这样的测试意义不大:它可能记得后来发生了什么,粗心的设置还会把第二天的价格或新闻交给它。风险感知交易智能体让任何模型一个收盘一个收盘地交易 2026 年美股,用的数据只包含当天已知的信息,每一笔订单都和结果一起保存下来。
为什么 LLM 交易的结果很难让人信服
- 记忆。用测试期间的文本训练过的模型,可能记得某只股票或大盘后来怎么走。
- 提示词里的未来函数。决策之后的价格、指标或新闻混进了上下文。
- 不可能的成交。按模型刚刚读到的那个收盘价成交。
- 没有记录。没有确切的数据、提示词和订单,别人无法检查,也无法重跑。
- 不可信的文本。新闻标题是别人写的,模型应当把它当成引用的资料,而不是指令。
一次会话是怎么进行的
每个决策日,模型会拿到一份观察:市场状态和 VIX、恐慌贪婪、板块广度和临近的宏观事件;它自己的持仓;以及每只股票的主要指标和最多三条收盘前发布的标题,每条都标明核实状态。它用订单回答,订单在下一个交易日开盘成交:
{"orders": [
{"symbol": "AAPL", "action": "buy", "weight": 0.10, "reason": "上升趋势中回踩 EMA50"},
{"symbol": "TSLA", "action": "sell", "fraction": 1.0, "reason": "新闻里有风险信号"},
{"symbol": "MSFT", "action": "target", "weight": 0.05, "reason": "减仓"}
], "note": "其余持有"}
只做多,同时持股数有上限。模型可以每天决策,也可以每周决策一次来节省 token。整次运行和别的实验一样保存下来:数据哈希、设置、每一步的订单、相对 SPY 和等权组合的净值曲线,以及带置信区间的统计量。
盲测模式
打开盲测模式后,股票代码变成 S01、S02……,日期变成「第几天」,价格从第一天起换算成 100,标题里的公司名和代码也换成同样的化名,比如「S01 Stock Moves Lower As Investors Assess Its AI Edge Against S03」。它能降低模型回忆起结果的可能,但排除不了:一条不寻常的标题、所属行业和价格走势放在一起,仍然可能暴露是哪只股票。
用任意模型来跑
riskaware research trade --llm ollama:qwen2.5:3b --universe core --decide-every 5 --blind riskaware research trade --llm openai:gpt-5.6-luna --universe megacap --decide-every 1 riskaware research trade --llm claude-cli --universe core --decide-every 5
本地模型通过 Ollama 运行;OpenAI 兼容的服务、Anthropic,以及 Claude Code、Codex 和 Gemini 的命令行工具也都可以用。在 Python 里,任何「观察 → 订单」的函数都可以当作一个策略:
from riskaware.research import Experiment
from riskaware.research.agent import llm_policy, run_policy
result = run_policy(llm_policy("ollama:qwen2.5:3b"),
Experiment(universe="core", max_positions=5), decide_every=5, blind=True)
print(result.summary()["metrics"], result.folder)
让 Claude 通过 MCP 来交易,或者测试你的策略
先连一次项目的 MCP 服务器(riskaware mcp-setup claude-desktop --apply,或者 claude mcp add riskaware -- riskaware mcp)。之后 Claude 可以用 trading_session_start 和 trading_session_step 自己把这一年交易一遍,用 market_day 查任意一天,也可以把你描述的策略写成代码,用 run_experiment 测试:
「用 riskaware 的研究工具:连跌三天、新闻不负面时买入大盘股,五天后或涨 5% 卖出。用 1 到 6 月调参,再在 7 到 11 月只测一次,开和不开新闻各跑一遍,和 SPY 比。」
Claude 写的代码会先检查有没有写日期、股票代码和副作用,再在单独的进程里运行,最后返回指标、置信区间和防偷看检查的结论:每次实验都会把三个切点之后的数据换成随机的再跑一遍,切点之前的决定都不能变。
写论文时
- 写清楚用的哪个模型、多久决策一次、是否盲测,并给出运行记录的文件夹。
- 先定好时间段和设置再看结果;用前半段调参,在后半段只测一次(
split="2026-07-01")。 - 报告置信区间:十个月的样本很短。
- 和五个波段基准策略以及等权组合比,不要只和 SPY 比。