翻译《Polymarket交易所需的数学知识(完整路线图)- 第二部分)》
在Polymarket交易所需的核心数学原理
我将为您拆解在Polymarket交易所需的核心数学知识。我还会分享帮助我入门的具体路线图和资源。
让我们直接进入正题。
第一部分获得了超过220万次浏览。读者的反馈明确了一点:如果你想像顶级套利机器人那样真正赚钱,就必须从系统层面理解Polymarket等预测市场。光靠理论不够,执行才是关键。
收藏本文 —
我是Roan,一名后端开发者,专注于系统设计、高频交易风格的执行层以及量化交易系统。我的工作重点是预测市场在负载下的实际行为。如有建议、深度合作或商业合作意向,欢迎私信联系。
继续阅读前请注意: 如果你还没读过第一部分,请在此停下,先读完第一部分。第一部分涵盖了边际多面体(marginal polytopes)、Bregman投影和Frank-Wolfe优化。本文直接建立在这些基础之上。
当你理解Frank-Wolfe通过迭代优化求解Bregman投影时,你会想"我可以实现这个"。没错。但大多数人从未意识到的是:当你还在第1次迭代中苦苦寻找有效的起始顶点时,生产级系统已经用算法3(本文将解释)完成了初始化,使用自适应收缩(adaptive contraction)防止梯度爆炸,在达到最大利润的 90% 时精准停止,并执行了交易。当你手动开始第一次迭代时,这些系统已经跨多个市场完成了套利捕获,根据订单簿深度确定了仓位规模,并转向下一个机会了。
差距不仅在于数学知识。 而在于实现精度。
读完本文,你将确切知道如何构建那个提取了超过4000万美元的系统。
- 第一部分给了你关于整数规划、边际多面体、Bregman投影的理论
- 第二部分给你关于如何真正从零开始启动算法、如何防止导致业余尝试失败的崩溃、如何在执行前计算精确的利润保证,以及为什么Polymarket等平台故意保留这些机会的实现细节
数学是公开的。那4000万美元就摆在那里。提取它的交易者与其他人之间的唯一区别,是首先解决了四个关键的实现问题。这正是将方程式转化为数百万美元的精确策略。
注意:这不是一篇可以略读的文章。如果你是认真的想构建能扩展到七位数的系统,请从头到尾读完。如果你是为了快速获利或"vibe coding"而来,本文不适合你。
第一部分:初始化问题(设置市场状态)
你不能随便用随机数启动Frank-Wolfe然后指望它能工作。该算法需要一个有效的起始点——一组来自边际多面体 的、已知可行的顶点。这就是初始化问题,它比听起来要难得多。
为什么初始化很重要
回顾第一部分,Frank-Wolfe算法维护一个活跃集 ,记录到目前为止发现的顶点。在每次迭代中,它在 的凸包上求解凸优化,然后通过求解整数规划找到新的下降顶点。
但第1次迭代有个问题: 是什么?
你需要至少一个有效的收益向量来启动。理想情况下,你需要多个跨越结果空间不同区域的顶点。最关键的是,你需要一个内点 ——一个一致的价格向量,其中每个未结算的证券价格严格介于0和1之间。
为什么?因为我们使用的Barrier Frank-Wolfe变体(本文第二部分将介绍)会向这个内点收缩多面体以控制梯度增长。如果你的内点有任何坐标恰好为0或1,收缩就会失败,算法崩溃。
算法3:InitFW 详解

InitFW的目标有三个:
- 找到初始活跃顶点集
- 构建有效的内点
- 扩展部分结果 ,以纳入所有可逻辑结算的证券
其工作原理如下。你从一个部分结果 (已结算为0或1的证券集合)开始,遍历每个未结算的证券 。
对于每个证券 ,你向整数规划求解器提出两个问题:
- 问题1: “给我一个收益向量 满足 ”
- 问题2: “给我一个收益向量 满足 ”
IP求解器要么找到这样的向量,要么证明其不存在。
情况1: 求解器找到了 和 的有效向量。这意味着证券 确实不确定——可能以任一方式解决。将两个向量都加入 。证券 保持未结算。
情况2: 求解器找到了 的向量,但找不到 的。这意味着每个有效结果都有 。证券 必须结算为1。将其作为 加入扩展部分结果 。
情况3: 求解器找到了 的向量,但找不到 的。每个有效结果都有 。证券 必须结算为0。将其作为 加入 。
遍历所有未结算证券后,你得到:
- 一个扩展的部分结果 ,其结算的证券数量多于初始数量
- 一个顶点集 ,对于每个尚未结算的证券,在该集合的不同向量中,其对应分量既会出现 0,也会出现 1。
内点 就是 中所有顶点的平均值:
因为每个未结算证券在 中都同时出现为0和1,平均值保证了对于所有未结算的 , 严格介于0和1之间。
真实案例:NCAA锦标赛初始化
考虑第一部分的Duke对Cornell市场。每支队伍有7个证券(0到6场胜利)。最初,没有比赛进行,所以 。
InitFW 遍历全部14个证券:
- 对于"Duke:0胜",求解器找到0和1的有效向量(Duke可能赢0场,也可能不赢)
- 对于"Duke:6胜",求解器找到0和1的有效向量(Duke可能赢得冠军,也可能不赢)
- Cornell的所有证券同理
但有一个约束:Duke和Cornell不能同时进入决赛(各5+胜),因为他们会在半决赛相遇。当InitFW请求一个Duke: 5胜 = 1 且 Cornell: 5胜 = 1 的向量时,IP求解器返回不可行。
这不会结算任何证券(两支队伍都可能赢5场,只是不能同时)。但它用尊重依赖关系的向量填充了 。算法在第一次迭代前就已经知道了结果空间的结构。
初始化后:
- 包含所有可能锦标赛结果的有效收益向量
- 是一个所有坐标都在0和1之间的价格向量(比如每支队伍0-6胜的概率各约为0.14)
- (尚无比赛结算)
一旦比赛开始产生结算结果,后续调用 InitFW 会逐步扩展 。例如,若杜克大学队在第一轮即遭淘汰,则下一次 InitFW 调用会检测到:所有有效向量中"杜克队获胜场次 ≥1"这一证券的取值均为 0,于是将该证券加入 。已结算证券的价格将永久锁定在 0 或 1。
为什么这一步至关重要?
如果没有适当的初始化,Frank-Wolfe可能会以三种方式失败:
失败1:空 — 如果你找不到任何有效顶点,就没有可优化的对象。算法无法启动。
失败2:边界内点 — 如果你的内点 有任何坐标在0或1,Barrier Frank-Wolfe中的收缩是未定义的。梯度爆炸。算法发散。
失败3:遗漏结算 — 如果你不将 扩展到包含逻辑上已结算的证券,你会浪费计算资源优化本应固定的价格。更糟的是,会错过套利消除机会,因为已结算证券按定义没有套利。
Kroer等人的实验表明,即使在完整规模(63场比赛, 种结果)的NCAA锦标赛中,InitFW也能在1秒内完成。IP求解器高效处理这些查询,因为它只是检查可行性,而非优化任何东西。
关键要点: 没有有效初始化,你无法运行Frank-Wolfe。算法3同时解决三个问题:构建有效的起始活跃集 ,构建所有未结算坐标严格介于0和1之间的内点 ,以及将部分结果 扩展到包含可逻辑结算的证券。IP求解器执行的是可行性检查而非优化,所以这一步即使对于巨大的结果空间也很快。InitFW使Frank-Wolfe能够开始运行,并使算法能随着结果确定而加速。错过这一步,你的投影要么永远无法启动,要么立即发散。
现在让我们谈谈为什么那个内点如此重要。
第二部分:自适应收缩与受控增长(为何FW不会崩溃)
标准Frank-Wolfe假设目标函数的梯度是Lipschitz连续的,且有有界常数 。这个假设使收敛证明成为可能:算法保证以 的速率缩小间隙 。
但对数市场计分规则(LMSR)会严重违背这一假设,且其违背程度极具破坏性。
梯度爆炸问题
回顾第一部分,对于LMSR,Bregman散度是KL散度:
要通过Frank-Wolfe最小化这个,我们需要关于 的梯度 。求导得:
这个梯度仅在 时有定义。当任何坐标 趋近0时,梯度分量 趋向负无穷。
这是个问题。边际多面体 的顶点中有些坐标恰好为0。结算为False的证券在相应收益向量中有 。当Frank-Wolfe迭代接近这些边界顶点时,梯度爆炸。
标准FW收敛分析要求有界的Lipschitz常数。这里, 是无界的。算法可能发散、振荡或卡住。
Kroer等人的解决方案:带自适应收缩的Barrier Frank-Wolfe。
受控增长条件
不是全局要求有界的Lipschitz常数,我们仅在 的收缩子集上局部要求。
定义收缩多面体:
其中 是收缩参数, 是来自InitFW的内点。
几何上, 是向点 收缩的多面体 。 的每个顶点 被拉向 :
由于 的所有坐标都严格介于0和1之间(由InitFW的构造保证),且 ,所以 的每个坐标都严格介于0和1之间。收缩多面体 远离边界。
现在梯度 在 上是有界的。具体地, 上的Lipschitz常数为:
越小(越接近真实多面体 ), 越大。但关键是,对于任何固定的 , 是有限的。
这给了我们一个权衡:
- 大 : 收敛快( 小),但我们在错误的多面体上优化(远离 )
- 小 : 收敛慢( 大),但我们在接近 的东西上优化
自适应收缩方案通过从大 开始并随时间减小来解决这个问题。
自适应Epsilon规则
Kroer论文中的算法2实现了这一点。在每次迭代 ,算法维护 并按以下规则更新:
如果 g(μ_t) / (-4g_u) < ε_{t-1}:
ε_t = min{g(μ_t) / (-4g_u), ε_{t-1} / 2}
否则:
ε_t = ε_{t-1}这是什么意思?
- 是第 次迭代的Frank-Wolfe间隙( 的次优程度)
- 是在内点 处评估的间隙
比率 衡量我们相对于内点离真实最优解有多近。如果这个比率很小(意味着我们正取得良好进展),我们将 减半。如果比率很大(表明我们离最优解仍较远),我们保持 不变。
关键洞察: 根据收敛情况自适应减小,而非按固定时间表。
随着迭代进行:
- 早期迭代: 很大(比如0.1)。我们在重度收缩的多面体 上优化。收敛快。
- 中期迭代: 缩小到0.05、0.025等。我们接近真实多面体 。收敛变慢。
- 后期迭代: 趋近0.001。我们在几乎真实的 上优化。收敛慢但精确。
Krishnan等人2015年的分析证明,当 时 ,所以算法收敛到 上的真实Bregman投影,而不仅仅是某个收缩近似。
为什么这有效:Hessian界
受控增长条件对LMSR成立,因为 的Hessian在 上表现良好。
Hessian是对角矩阵,对角线元素为:
在收缩多面体 上,每个坐标 (因为向 收缩)。因此:
Hessian的算子范数(上界为梯度的Lipschitz常数)为:
这给了我们 ,正如所声称的。
对于其他成本函数(如LMSR的和),同样的分析适用。只要成本函数的共轭 的Hessian在收缩多面体上最多以 增长,Barrier Frank-Wolfe就收敛。
带自适应收缩的收敛速率
Barrier FW的收敛速率为:
随着 缩小,收敛变慢。但自适应规则确保我们仅在足够接近最优解、精度比速度更重要时才缩小 。
实践中(来自Kroer实验):
- 前10次迭代:,快速向粗略解进展
- 迭代10-50: 缩小到0.01,精炼解
- 迭代50-150: 趋近0.001,收敛到高精度
总迭代次数:对于拥有数千种证券的全美大学体育协会(NCAA)锦标赛市场,为50到150次。总时间:当结果空间收缩至足够规模,使得整数规划求解可快速完成时,全程耗时约 30 分钟。
没有自适应收缩会发生什么?
如果你直接在 上运行标准Frank-Wolfe(无收缩),可能发生两种情况:
情景1: 算法遇到某个 满足 的顶点。梯度分量变为 。数值溢出。算法崩溃。
情景2: 算法略微保持在 内部(数值舍入保持 但很小)。梯度变得巨大。步长不稳定。收敛不稳定或不存在。
研究论文明确指出:“没有自适应收缩,FW在LMSR中不会收敛。”
Without adaptive contraction, FW does not converge for LMSR.
具有自适应收缩的障碍Frank-Wolfe算法并非优化手段,而是一种必要方法。
关键要点: 标准Frank-Wolfe在LMSR上失败,因为当 趋近零时梯度在价格边界处爆炸。Barrier Frank-Wolfe通过在收缩多面体 上优化来解决这个问题,其中所有坐标都远离零,给出有限的Lipschitz常数 。自适应epsilon规则从大 开始以实现快速早期收敛,并随时间缩小 以接近 上的真实投影。这在保持梯度受控增长的同时保证渐近收敛到正确解。没有这个机制,算法要么因数值溢出而崩溃,要么因不稳定梯度而发散。
现在你知道如何保持算法稳定了。但你实际上什么时候停止并执行交易呢?
第三部分:利润保证(何时停止并交易)
你正在运行Frank-Wolfe。第50次迭代。间隙 在减小。IP求解器仍在运行。
你什么时候停止?
- 停止太早 → 错过大部分利润
- 停止太晚 → 市场变动,机会消失
你需要一个能保证利润的停止条件。
命题4.1:公式

将市场状态从 移动到 (其中 )的保证利润为:
其中:
- = Bregman散度(若为最优解,其值即为最大套利空间)
- = Frank-Wolfe间隙( 当前的次优程度)
这就是一切。
是完美优化下你能获得的利润。 是因为 尚未达到完美状态而损失的利润。二者的差值即为使用近似解时仍能确保获得的最低利润。
为什么这很重要
在传统优化中,当在 较小时,你就会停止。你不关心 。
在套利中,需要同时关注两者:
情况1:
,
保证利润 =
不要交易。你的近似太差了。
情况2:
,
保证利润 =
立即交易。你捕获了87%的可用套利。
情况3:
,
保证利润 =
技术上为正,但执行成本超过利润。跳过。
三个停止条件
条件1:-提取
重排为:
解释: 保证利润至少是最大可能利润的 比例。
研究实现:
“当你保证捕获至少90%的可用套利时停止。”
为什么是90%而不是100%? 获取最后10%可能需要50次额外迭代。IP求解器可能超时。市场可能变动。现在就拿90%。
条件2:接近无套利
如果最大可用套利低于阈值 ,就别费心了。
研究值:
“如果利润低于每美元5美分,跳过它。”
为什么? 执行风险和gas费会吃掉它。
条件3:强制中断
新交易到达或时间限制触发 → 返回目前为止找到的最佳迭代。
在所有迭代中跟踪:
即使第5次迭代被中断,你也返回这5次中保证利润最大的迭代。
关键: 总是成立(通过凸对偶性证明)。
你永远不会返回保证利润为负的交易。
证明概要
保证利润是:
使用共轭性()并简化:
项 根据FW间隙的定义等于 。
因此:
证毕。
NCAA实验的真实数据
锦标赛早期(16场比赛已结算):
- 第10次迭代:,,保证利润 = 0.0003
- 第50次迭代:,,保证利润 = 0.0041
-提取检查: ✓
停止。保证利润:最大值的91%。
锦标赛后期(56场比赛已结算):
- 第20次迭代:,,保证利润 = 0.00019
-提取检查: ✓
停止。保证利润:最大值的95%。
锦标赛后期收敛更快,因为结果空间更小(128种可能性 vs 数十亿)。
何时不交易
如果出现以下情况,中止:
- → 无套利,无利润
- → 间隙超过散度,继续迭代
- 执行阈值 → 利润太小,不值得冒险
研究中0.05美元的最低阈值考虑了:
- 非原子执行(一条腿可能成交,其他可能不成交)
- Gas费(Polygon上每多腿交易约0.02美元)
- 滑点和订单簿变动
关键要点: 命题4.1将抽象优化转化为具体交易决策。利润保证 准确告诉你何时停止Frank-Wolfe。-提取停止条件()确保你在等待完美收敛前捕获90%的利润。跨迭代跟踪最佳迭代 意味着即使强制中断也能返回盈利交易。这就是顶级套利者如何通过4,049笔交易赚取2,009,631.76美元。 每笔交易在执行前都有保证的最低利润。没有赌博。没有侥幸。在停止容差内的数学确定性。
现在你知道了:如何初始化(第一部分)、如何防止崩溃(第二部分)、何时停止并交易(第三部分)。
但还有一个部分。做市商最初是如何设定这些价格的?
第四部分:做市商的视角(为什么价格是错的)
到目前为止,一切都集中在利用错误定价上。但错误定价从何而来?
理解做市商的优化问题揭示了为什么套利根本存在。
成本函数框架
Polymarket(像所有自动化做市商一样)使用成本函数 来设定价格。
来自第一部分,LMSR:
参数 控制流动性。
- 小 → 价格随每笔交易快速变动
- 大 → 价格变动缓慢
做市商的问题
做市商想要:
- 吸引交易者(提供流动性)
- 保持无套利(不亏钱给套利者)
- 限制最大损失(最坏情况赔付是有限的)
这些目标冲突。
如果你通过Bregman投影强制执行无套利价格(第一至第三部分),你就牺牲了流动性。
为什么?因为投影求解整数规划。根据市场规模,这需要30秒到30分钟。
如果每次更新都需要求解IP,价格就无法实时更新。
权衡:速度 vs 精度
快速定价(Polymarket实际做的):
当交易到达时:
- 更新状态:
- 计算新价格:
- 立即执行
时间:<100毫秒
但价格可能违反逻辑约束。如果Duke在第一轮输了,“Duke赢得冠军"应该立即变为0美元。相反,它随着交易者押注反对而逐渐衰减。
精确定价(第一至第三部分的FWMM):
当交易到达时:
- 运行InitFW扩展部分结果
- 运行Barrier FW投影到
- 将状态更新到投影价格
- 执行交易
时间:30秒到30分钟
价格保证无套利。但更新缓慢。到投影完成时,已有10笔更多交易到达。你总是落后。
Polymarket选择了速度而非精度。 他们使用独立的LMSR市场进行快速更新。这创造了三种类型的错误定价:
类型1:市场内不一致性
多条件市场的概率之和不等于1。
来自实证数据的例子:
- 662个NegRisk市场(42%的所有多条件市场)的和不等于1
- 中位数偏差:每美元0.08
类型2:跨市场不一致性
依赖市场定价时如同彼此独立。
例子:“Trump赢得宾州"和"共和党全国领先5+“应该是相关的。但每个市场根据自己的交易独立更新。
结果:价格违反逻辑依赖关系。组合套利存在。
类型3:结算滞后
当比赛结算时,价格不会立即锁定。它们随着交易者押注已解决的结果而向0或1漂移。
来自论文的例子:阿萨德在2024年继续担任叙利亚总统。
- 阿萨德逃离国家(结果已确定)
- 价格:YES = 0.30美元,NO = 0.30美元(和 = 0.60)
- 应该是:YES = 0美元,NO = 1美元
- 套利窗口持续数小时,直到有足够多的交易者押注使其下跌
基本不可能性
定理(Kroer等人隐含):
对于具有依赖关系的组合市场上的任何成本函数:
- 快速价格更新 → 套利存在
- 无套利价格 → 更新缓慢
你不能两者兼得。
具有独立子市场的LMSR快速但创造套利。具有整数规划的FWMM无套利但缓慢。
Polymarket可以做什么(但没做)
混合方法:
- 对正常交易使用快速LMSR
- 每10秒运行LCMM(Dudík等人2012年的线性约束MM)以部分消除套利
- 每5分钟或部分结果更新时运行完整FWMM投影
这将把套利从每年4000万美元减少到也许每年500万美元。
Polymarket为什么不这样做? 因为套利吸引成熟的交易者。
做市商想要交易量。套利者提供持续的交易量。如果你消除所有套利,许多专业交易者会离开。
Polymarket容忍一些套利作为流动性激励。
做市商的损失界限
即使有套利,做市商的损失也是有界的。
来自Abernethy等人2011年:
其中:
- 是结果 中的收益向量
- 是初始市场状态
对于LMSR,这简化为:
其中 是结果数量。
例子:NCAA锦标赛
- (典型流动性参数)
- 最大损失 = 美元
无论发生多少交易,存在多少套利,做市商在这个市场上最多损失6,555美元。
这就是使用LMSR的原因。 即使在对抗性场景下,损失也是有界的。
这对套利者意味着什么
做市商选择被利用。
他们可以运行FWMM并消除套利。他们不这样做,因为:
- 速度比精度更重要
- 套利者提供流动性
- 损失无论如何都是有界的
作为套利者: 机会不是bug。它们是特性。做市商知道价格是错的。他们接受有界损失以换取快速更新和高交易量。
你的工作是比竞争对手更快地发现和执行。
现在你有工具了:
- InitFW启动优化(第一部分)
- Barrier FW处理LMSR(第二部分)
- 利润保证知道何时交易(第三部分)
- 理解为什么错误定价存在(第四部分)
关键要点: 做市商面临不可能的权衡:快速更新创造套利,无套利定价缓慢。Polymarket选择了速度,使用独立的LMSR子市场,在<100毫秒内更新。这创造了市场内不一致性(和≠1)、跨市场不一致性(忽略依赖关系)和结算滞后(价格向真实值漂移)。提取的4000万美元套利不是失败——它是维持流动性和交易量的可接受成本。做市商的损失无论如何都被 所限制,所以容忍一些利用是理性的。对于套利者,这意味着机会是系统性的,不是偶然的。
你检测和执行越快,提取的就越多。
结论:完整框架
第一部分向你展示了数学: 整数规划、边际多面体、Bregman投影、Frank-Wolfe迭代。
第二部分向你展示了实现: 如何真正从零开始启动算法、为什么标准方法会失败、何时停止并保证利润,以及为什么这些机会根本存在。
理论与执行之间的鸿沟是四个问题:
- 初始化(第一部分):使用带IP求解器的InitFW构建有效的 ,构建内点 ,扩展部分结果
- 稳定性(第二部分):使用带自适应收缩的Barrier FW防止LMSR的梯度爆炸
- 执行(第三部分):使用利润保证 配合 -提取,在市场变动前捕获90%的套利
- 市场结构(第四部分):理解做市商选择速度而非精度,创造系统性错误定价
这不是理论。 顶级套利者使用正是这些方法赚取了2,009,631.76美元。

他们没有更好的信息。他们没有内幕消息。他们只是更好地实现了每个人都能在研究论文中读到的相同数学。
问题不再是"这可能吗?”
问题是:你会实现它吗?
下一步是什么?
这是第二部分。我们涵盖了初始化、稳定性、利润保证和做市商经济学。
但我们还没有谈论生产系统。
你实际上如何:
- 从Polymarket的WebSocket API摄取实时数据?
- 并行运行整数规划而不阻塞?
- 以<30毫秒延迟向CLOB提交订单?
- 同时监控17,000+个条件?
- 在资本约束下确定仓位规模?
- 处理部分成交(一条腿执行,其他不执行)?
我应该发布第三部分吗?
第三部分将涵盖:
- 系统架构(数据管道、执行引擎、监控)
- 代码示例(Python + Gurobi实现)
- 风险管理(仓位规模、凯利准则、回撤限制)
- 基础设施(AWS设置、数据库架构、WebSocket处理)
扩展到七位数的完整生产系统
如果你想要第三部分,请告诉我。现在是关于构建那台将为你印钞的机器。
资源
研究论文:
- Kroer等人2016年:“通过整数规划实现无套利组合做市”(arXiv:1606.02825v2)
- Saguillo等人2025年:“解开概率森林:预测市场中的套利”(arXiv:2508.03474v1)
工具:
- Gurobi Optimizer:gurobi.com
- Polymarket CLOB API:docs.polymarket.com
数学有效。 机会存在。 唯一的问题是执行。