最近 GitHub 上出现了几个用 Jev 做量化回测的项目,结果基本都是负的。
BTC/USD 五道验证门回测,holdout AUC 0.471–0.503 ,等同随机猜测。NQ 订单簿模拟,339 次决策命中率 67.8%,扣手续费后净亏 -62.69 。
我翻完这些回测,觉得问题不在 Jev 本身,在于很多人把它放在了交易系统里错误的位置。
这篇文章拆三件事:Jev 底层到底在算什么、为什么校准概率对量化是双刃剑、以及一个大多数人接进系统后才意识到的问题——你的行情数据,时间戳对得上吗?
一、Jev 是什么:三种问法,没有"写作文"这一步
先看它的 API 。只有三种问法:
问法 |
怎么用 |
返回什么 |
量化场景 |
|---|
选择题 |
从预定义选项里选一个 |
选项、概率、置信度 |
新闻利好利空、标的排序 |
打分题 |
按评分标准打分 |
分数、概率、置信度 |
财报语气、风险等级 |
判断题 |
判断一句话是真是假 |
0 到 1 之间的概率 |
是/否过滤、条件触发 |
没有格式需要修复,没有文字需要解析,没有 token 需要逐个生成。
答案空间本身就是模型输出的一部分。 选项不是提示词里的一段文字,是模型计算图里的一个维度。
你让大模型判断一条新闻对某标的是利好还是利空,它的做法是:读提示词,逐字生成 {"sentiment": "positive"},再解析这段文字,取出 positive。
三选一的判断,它写了十几个字,每个字都要走一遍完整的生成过程。
Jev 把这一步砍掉了。
二、底层机制:一次算完,不再逐字生成
传统大模型慢在哪?很多人以为是计算量大。不准确。
真正的瓶颈在数据搬运。
大模型逐字生成答案的过程:先处理你的问题,建一个缓存。然后生成第 1 个字,把缓存搬来搬去,算一次,输出。再生成第 2 个字,把缓存搬来搬去,算一次,输出。循环几十次。
每次循环的瓶颈不在算得快不快,在数据搬来搬去太慢。
Jev 的机制是:一次算完,共享缓存,直接出结果。
根据 archerhume.com 的逆向分析和 APUS 的开源复现报告:
- 所有问题共享同一份缓存,数据只处理一次
- 每个问题只额外加载自己的指令和选项
- 多个问题同时计算,直接输出概率
- 输出通过一个数值读取头完成,再做概率归一化
还有一个细节值得注意:Jev 的选项之间不是独立打分的。 新增一个无关选项,会影响其他选项的概率。这说明它在处理阶段就对完整选项集做了整体计算,而不是逐个打分再归一化。
这个行为模式更像一个分类器——把数据映射到预定义的决策空间上,每个决策的概率是联合计算出来的。
它的速度优势不是"模型调优了所以快",是"计算路径本身短了一个数量级"。
三、校准训练:让"说 70%"真的等于"70% 正确"
速度的故事讲完了,现在讲一个更重要的。
TypeSafe 把 Jev 的训练方法叫 RLCD——面向校准决策的强化学习。
和传统训练方法的区别在哪?
对比维度 |
传统训练( RLHF ) |
校准训练( RLCD ) |
|---|
优化目标 |
人类觉得回答好不好 |
说 70% 时现实中约 70% 是对的 |
信号来源 |
人类偏好比较 |
校准误差 |
模型学到 |
怎么让人类满意 |
怎么让概率说实话 |
量化适用性 |
低——置信度是语言现象 |
高——置信度是统计声明 |
为什么这对量化是致命的区别?
因为大模型的置信度本质上不是一个有数学依据的数字。它来源于文字预测概率分布,而不是对"这个判断本身正确率"的估计。一个模型在完全不确定的情况下,照样可以输出 置信度: 0.95——它只是在预测"下一段文字看起来像不像一个高置信度的回答"。
校准训练试图把"置信度"从一个语言现象变成一个统计声明。
独立测试的数据支持这个方向:
测试来源 |
测试内容 |
置信度偏差 |
准确率 |
|---|
webofmike |
60 个工具调用风险案例 |
0.0712 (最新版)/ 0.0505 (预览版) |
91.7%( 55/60 ) |
archerhume.com |
MMLU 1,200 道题 |
0.0313 |
MMLU-Pro 84.6% |
置信度偏差衡量的是"模型说 70% 的时候,实际情况偏离 70% 有多远"。0.05 到 0.07 的偏差意味着校准误差大约在 5 到 7 个百分点。
但这里必须说清楚一个边界:校准训练的具体方法没有公开。 方向是对的,独立测试的校准指标表现良好,但底层实现方式目前不可验证。如果你要用 Jev 的概率做仓位管理,这件事得自己保持警惕。
四、亏钱的人做错了什么:回测数据不会说谎
Jev 发布之后,一批人立刻把它接进交易系统,然后亏钱了。
4.1 比特币回测:五道验证门,结论是随机
GitHub 项目 egrm07/jev_bitcoin_backtest,方法论设了五道验证门:
五道验证门:
1. 随机置换检验
2. 多重比较校正
3. 留出验证(样本外测试)
4. 夏普比率置信区间
5. 买入持有对比
数据:币安 BTCUSDT 5 分钟 K 线。开发窗口 2026/3/1–7/15 ,留出验证窗口 2026/7/15–9/19 (约 65 天)。
测试了 10 种数据表示方式——原始 K 线、收益率、技术指标、文字叙述、字符图表等。
指标 |
结果 |
|---|
留出验证区分度 |
0.471–0.503 ( 0.5 为随机基准) |
预测准确度指标 |
全部为负 |
最好策略收益 |
-15.73%(原始 K 线 + 线性策略) |
同期买入持有比特币 |
+25.55% |
模型 API 总成本 |
$2.5848 |
结论 |
无可交易的统计显著性优势 |
4.2 订单簿模拟:高命中率仍然亏钱
GitHub 项目 Waxmell114514/jev-trade,合成订单簿数据加真实 Kraken 数据回放。
指标 |
数值 |
|---|
决策次数 |
339 |
命中率 |
67.8% |
毛盈亏 |
+28.90 |
扣除手续费 |
-91.60 |
净亏损 |
-62.69 (-0.825% 风险资本) |
盈亏平衡所需手续费 |
低于 0.316 个基点 |
关键发现:盈亏平衡需要手续费低于 0.316 个基点。 这个数字超过了大多数真实交易环境能提供的费率。
高命中率不等于盈利。交易成本是致命的。
4.3 核心判断
Jev 输出的是一个概率,不是一个策略。
强制每次决策都必须出手,本质上是在用一个校准概率做随机交易。
Zerve.ai 在量化研究报告中写过一句话:
大模型不产生超额收益。它们不会提出能产生真正信号的新研究方向。
arXiv 上还有一篇 2026 年 8 月的论文,核心发现更直接:大模型特征经过统计校正后,预测贡献归零——原话是"校准后所有大模型权重归零"。一个近乎零成本的替代方案(标题计数)效果反而更好。论文因此提出"校准可行性检查点":在正式推理之前,先验证大模型特征是否真的有预测力。
Jev 不是交易 AI 。它是一个被确定性代码包裹的判断原语。
五、行情数据才是真正的瓶颈
那 Jev 应该放在哪?
我的判断:Jev 应该坐在信息处理层,而不是决策执行层。
层级 |
适合做的事 |
不适合做的事 |
|---|
信息处理层 |
新闻方向判断、财报语气打分、候选标的排序 |
— |
决策执行层 |
— |
每个 tick 输出方向判断直接下单 |
但这里有一个更隐蔽的问题。
Jev 接收的是一段文字,而量化系统里的核心数据是结构化的——价格、成交量、盘口、资金流。
Jev 本身不接行情接口。 它不知道集合竞价期间开盘价字段是缺失的,不知道美股延长时段的日线口径和盘中不一样,不知道港股午休期间数据会有一段空洞。
如果你的 Jev 判断流程在盘中运行,每次决策的输入数据来自不同时刻的行情快照,它的概率输出就会失去可归因性。它说 72% 是基于哪个时间点的数据得出的?那个数据里的"当前价格"是几点几分几秒的?
5.1 一个字段存在性决定代码对错
后来在做多市场研究时,我遇到了一个具体问题:美股盘前盘后的数据,和正常交易时段的数据,字段结构不一样。如果用本地时间判断"现在是不是盘中",遇到节假日调休或者半日市,就会判断错。
import requests
# 取美股交易时段
resp = requests.get(
"https://api.tickdb.ai/v1/market/trading-sessions",
params={"market": "US"},
headers={"X-API-Key": "your_key"}
)
# 返回:
# {
# "market": "US",
# "trading_sessions": [
# {"begin_time": 400, "end_time": 930, "trade_session": 1}, # 盘前
# {"begin_time": 930, "end_time": 1600}, # 正常交易(无 trade_session )
# {"begin_time": 1600, "end_time": 2000, "trade_session": 2} # 盘后
# ]
# }
美股正常交易时段( 09:30–16:00 )没有 trade_session 字段。 盘前( 04:00–09:30 )的 trade_session 是 1 ,盘后( 16:00–20:00 )的 trade_session 是 2 。
这意味着不能用字段的值来判断当前时段,必须用字段的存在性。
时段 |
trade_session 字段 |
正确判断方式 |
|---|
盘前 04:00–09:30 |
= 1 |
字段存在且值为 1 |
正常交易 09:30–16:00 |
不存在 |
字段不存在 |
盘后 16:00–20:00 |
= 2 |
字段存在且值为 2 |
如果代码写的是 if trade_session == 0 来判断盘中,就会在正常交易时段拿不到字段而报错。正确的写法是判断字段是否存在。
5.2 多市场时段不是一套规则
同一套逻辑放到港股和 A 股,字段结构又不一样。
市场 |
上午场 |
下午场 |
特殊规则 |
|---|
美股 |
09:30–16:00 (连续) |
— |
盘前 04:00–09:30 ,盘后 16:00–20:00 |
港股 |
09:30–12:00 |
13:00–16:00 |
午休 12:00–13:00 |
A 股 |
09:30–11:30 |
13:00–14:57 |
14:57–15:00 集合竞价收盘 |
三个市场,三种时段结构。 如果 AI 决策系统跨市场运行,数据层必须能区分"当前是哪个市场的哪个时段",而不是用一个本地时间统一判断。
5.3 Jev 的数据里,行情的时间戳来自哪里
回到那个核心问题。
Jev 判断的输入是文字,文字有生成时间,行情数据有采集时间。这两者之间的差异,在日频研究中可能不重要。但如果系统在盘中运行,每次决策的输入数据如果来自不同时刻的行情快照,Jev 的概率输出就会失去可归因性。
# 取 AAPL 日 K 线
resp = requests.get(
"https://api.tickdb.ai/v1/market/kline",
params={"symbol": "AAPL", "interval": "1d", "limit": 3},
headers={"X-API-Key": "your_key"}
)
# 返回:
# {
# "symbol": "AAPL",
# "type": "stock",
# "interval": "1d",
# "klines": [
# {"time": 1789531200000, "open": "332.53", "high": "335.48",
# "low": "330.70", "close": "332.41", "volume": "35981000"},
# ...
# ]
# }
每根 K 线的时间以 Unix 毫秒 time 字段承载。如果要把行情数据喂给 Jev ,这个时间字段就是数据里"当前价格"的时间证据。
这不是一个"用哪个数据源更好"的问题,是一个"你的 AI 决策能不能被审计"的问题。
Jev 给了你一个带概率的决策,但没有给你数据来源的时间证据。那个证据得你自己在数据层准备好。
六、那 193 倍的数字,和正确用法
TypeSafe 自测的 193.6 倍更快、444.6 倍更便宜,基准是 GPT-5.6 Terra——一个最慢、最贵的对比对象。
来源 |
对比基准 |
速度倍数 |
成本倍数 |
|---|
TypeSafe 自测 |
GPT-5.6 Terra |
193.6x |
444.6x |
PearPages 独立分析 |
同等智能基准 |
约 25x |
约 76x |
Near Here 独立测试 |
Mistral Small 4 |
约 5x |
约 8.6x |
官方的端到端延迟声明是 70 到 500 毫秒。webofmike 的独立实测 p50 延迟是 421.6 毫秒。
5 倍到 25 倍,取决于对比对象。这个区间比 193 倍更接近现实。
但速度不是重点。
重点是:Jev 给了你一个带校准概率的判断原语,但没有给你数据来源的时间证据。那个证据得你自己在数据层准备好。
如果把 Jev 放在信息处理层,用它做新闻分类、财报打分、候选排序,它可能是一个高效的判断工具。如果把 Jev 放在决策执行层,让它每个 tick 都输出一个方向判断然后直接下单,你会在手续费和噪音里亏掉本金。
如果你也在用 LLM 做量化,可以检查一件事:你的决策日志里,每条判断对应的行情数据时间戳是哪个时刻的。如果回溯不了,那这条决策的可审计性是有问题的。
来源
- TypeSafe 官方文档
- archerhume.com Jev 架构逆向分析
- APUS 开源复现报告
- webofmike 60 案例工具调用风险基准
- PearPages Jev 速度与成本独立分析
- Near Here 50 次真实内容审核决策独立测试
- GitHub – egrm07/jev_bitcoin_backtest
- GitHub – Waxmell114514/jev-trade
- GitHub – justinhe16/trade-jev
- Zerve.ai: LLMs in Quant Research (2026)
- arXiv 2608.20304: LLM Calibration-Induced Degeneracy in Financial Forecasting (2026)
- arXiv 2501.19047: Understanding Model Calibration (2025)
- TickDB API 实测数据( 2026-09-21 实际调用)