我构建了一个Polymarket交易机器人:策略、参数优化与真实回测全记录
几周前,我萌生了一个想法:自己动手构建一个在Polymarket上自动交易的机器人。促使我投入数周时间进行完整开发的原因很简单——我发现这个平台上存在着大量可以被捕捉的市场低效机会。诚然,已经有一些机器人在利用这些机会,但还远远不够。未被发掘的潜在利润空间,仍然远远多于活跃的机器人数量。
今天,我的机器人已经完工并投入运行。它完全自动化,我只需启动它,然后静观其变。在每一个“比特币涨跌”回合开始时,机器人只在前2分钟(此时间可配置)内监控市场。如果在此期间,无论“涨”或“跌”其中一方的价格出现足够快速的下跌,它就会启动一套精巧的自动化策略。
机器人核心逻辑:捕捉瞬间波动,进行对冲获利
这个机器人的逻辑源于我过去手动执行的一套策略,我将其自动化以提升效率和反应速度。它专门操作“BTC 15分钟涨/跌”市场。
机器人是如何工作的?
它运行着一个实时监控器,能自动切换到当前最新的BTC 15分钟回合,通过WebSocket获取最优的买卖报价,并显示一个固定的终端用户界面,允许我通过文本命令进行完全控制。
-
手动模式:你可以直接进行交易。
-
buy up <金额>/buy down <金额>:花费指定美元金额买入。 -
buyshares up <份额>/buyshares down <份额>:以当前最佳卖价挂出限价单,精确购买指定数量的份额。
-
-
自动模式:这是核心,它运行一个重复的两步循环周期。
-
第一步(捕捉下跌):机器人仅在回合开始后的前 windowMin分钟内监控价格。如果任一方价格在约3秒内下跌至少movePct百分比(例如15%),它就触发“第一步”,买入刚刚暴跌的那一方。 -
第二步(对冲锁定):触发第一步后,机器人绝不会再买入同一边。它会等待“第二步”(即对冲单),并且只在满足以下条件时触发: 第一步入场价 + 对立面的当前卖价 <= sumTarget。
当这个条件满足时,它买入对立面。第二步完成后,整个循环结束,机器人会重置,以相同的参数监视下一个回合的暴跌机会。
如果在一个循环尚未完成时,新的回合开始了,机器人会放弃未完成的循环,并以相同的设置在新的回合重新开始监视。
-
关键参数设置
自动模式的启动命令为:auto on <份额> [sum=0.95] [move=0.15] [windowMin=2]
-
份额:每步交易使用的头寸大小。 -
sum:允许触发对冲步骤的阈值(例如0.95意味着“涨”价+“跌”价<0.95时才对冲)。 -
move:触发第一步的暴跌阈值(例如0.15代表15%)。 -
windowMin:从回合开始起,允许触发第一步的监控时长(分钟)。
简单来说,机器人的策略思想是:等待一次剧烈的价格下跌,买入刚刚下跌的那一方,然后等待市场稳定,在对立面价格合适时进行对冲买入,同时保证“涨”价和“跌”价之和小于1(即存在无风险套利空间或极低风险)。
从理论到验证:构建自己的回测框架
然而,这个逻辑需要验证。它长期有效吗?更重要的是,机器人有许多可调参数(份额、sum、movePct、windowMin等)。哪些参数组合是最优的,能最大化利润?
我的第一个想法是让机器人实盘运行一周观察结果。但问题是这样耗时太长,且一次只能测试一组参数,而我需要测试许多组合。
我的第二个想法是利用Polymarket订单簿API的历史数据进行回测。不幸的是,对于BTC 15分钟涨/跌市场,历史数据接口持续返回空数据集。没有历史价格点,回测就无法检测“约3秒内的暴跌”,无法触发第一步,导致无论参数如何设置,结果都是0次循环和0%的投资回报率。
经过进一步调查,我意识到其他用户在获取某些市场的历史数据时也遇到了同样的问题。我测试了其他能返回历史数据的市场,得出结论:对于这个特定市场,历史数据根本没有被保留。
由于这个限制,回测此策略的唯一可靠方法,是在机器人运行时自行录制实时最优卖价来创建历史数据集。
我是如何录制数据的?
录制器会将包含以下信息的快照写入磁盘:
-
时间戳 -
回合标识 -
剩余秒数 -
“涨”/“跌”的代币ID -
“涨”/“跌”的最佳卖价
随后,“录制回测”会重放这些快照,并确定性地应用相同的自动逻辑。这保证了能够访问检测暴跌和对冲条件所需的高频数据。
我总共在4天内收集了6GB的数据。本可以录制更多,但我认为这已足够测试不同的参数集。
参数测试:天堂与地狱的差距
我首先测试了以下参数集:
-
初始资金:1000美元 -
每笔交易20份额 -
sumTarget = 0.95 -
暴跌阈值 = 15% -
监控窗口 = 2分钟
为了保持保守估计,我还应用了0.5%的恒定手续费率和2%的买卖价差。回测显示,在几天内获得了86%的投资回报率,1000美元变成了1869美元。
接着,我测试了一个更具风险的参数集:
-
初始资金:1000美元 -
每笔交易20份额 -
sumTarget = 0.6 -
暴跌阈值 = 1% -
监控窗口 = 15分钟
结果:2天后亏损50%。
这清晰地表明,参数选择是决定盈亏的最关键因素。正确的设置可以带来丰厚利润,而错误的设置则可能导致重大损失。
正视回测的局限性:模型与现实的差距
尽管已经包含了手续费和价差,但我的回测仍有其局限性。理解这些局限性对于评估策略的真实风险至关重要。
-
数据样本有限:仅使用几天的数据,可能不足以代表完整的市场周期。 -
价格模拟过于理想:回测依赖于录制的最佳卖价快照。现实中,订单可能部分成交或以不同价格成交。且未模拟订单簿深度和可用流动性。 -
时间粒度不足:数据每秒采样一次,但秒内的微观价格变动无法捕获。一秒内可能发生很多事。 -
固定滑点假设:回测中滑点是恒定的,没有模拟可变的网络延迟(如200-1500毫秒)或网络波动。 -
瞬时成交假设:每一步交易都被视为“瞬时”执行,没有订单队列、没有挂单等待的过程。 -
简化手续费模型:手续费被统一应用,而现实中它可能因市场/代币、挂单方/吃单方、手续费等级等条件而异。 -
保守的亏损处理:为了保持悲观估计,我设定了一条规则:如果第二步在对冲市场关闭前未能执行,则第一步被视为全部损失。这 intentionally 是保守的,但并不总是符合现实: -
有时第一步可以提前平仓。 -
有时第一步到期价内,本身就能盈利。 -
有时损失是部分的,而非全部。 -
因此,回测可能高估了损失,但这提供了一个有用的“最坏情况”参考。
-
-
未考虑自身市场影响:回测假设你是一个纯粹的 price taker(价格接受者),没有市场影响。现实中,你的订单可能会: -
移动订单簿。 -
吸引或吓退其他交易者。 -
导致非线性的滑点。
-
-
未模拟运行环境问题:回测没有模拟API速率限制、API错误、订单被拒绝、程序暂停、超时、重连,或者机器人繁忙错过信号等情况。
结论是:回测对于识别良好的参数范围极具价值,但由于一些现实效应无法建模,它并非100%的盈利保证。
基础设施与未来优化方向
目前,我计划在树莓派上运行这个机器人,以避免消耗我主机的资源,并实现24/7不间断运行。
但这还有很大的优化空间:
-
性能:使用Rust而非JavaScript重写,将提供更好的性能和更快的处理速度。 -
网络:运行一个专用的Polygon RPC节点可以进一步降低延迟。 -
部署:将机器人部署在靠近Polymarket服务器的VPS上,也能显著减少延迟。
当然,可能还有其他我尚未发现的优化点。目前,我正在学习Rust,因为它正成为Web3开发的一项重要技能。
常见问题解答
问:这个机器人的核心策略是什么?
答:核心策略是一个“两步对冲循环”。首先,在回合开始后的短时间内,监控任一方向的剧烈价格下跌并立即买入(第一步)。然后,等待市场价格恢复稳定,当“涨跌”双方价格之和低于某个安全阈值时,买入对立面进行风险对冲(第二步),从而锁定利润或极小化风险。
问:参数中最重要的哪一个?
答:根据我的测试,暴跌阈值和对冲阈值是最关键的两个。暴跌阈值决定何时入场,过于敏感会导致频繁错误触发,过于迟钝会错过机会。对冲阈值决定何时进行对冲以锁定利润,设置不当会导致无法完成对冲或利润微薄。windowMin(监控窗口)的长度也直接影响可捕捉机会的数量。
问:回测显示高收益,实盘就一定能赚钱吗?
答:不一定。回测是基于历史数据(尽管是我自己录制的)的模拟,它无法完全复现实盘交易的所有复杂性,如订单部分成交、市场深度影响、自身大额订单对市场的冲击、网络延迟、API稳定性等。回测的主要作用是验证策略逻辑和优化参数范围,而非保证未来利润。
问:为什么选择BTC 15分钟市场?这个策略适用于其他市场吗?
答:选择这个市场是因为其流动性相对较好,且固定时间周期的特性便于自动化。策略的核心是捕捉短期情绪化波动后的均值回归与价差收敛,理论上适用于其他具有类似特性的二元预测市场。但需要针对不同市场的流动性、波动性重新进行参数测试和优化。
问:运行这样的机器人需要多少启动资金?
答:启动资金取决于你每笔交易的“份额”参数和愿意承受的风险。在我的测试中,从1000美元开始。重要的是,你使用的资金应该是你完全输得起的,并且任何单次交易的头寸都应只占总资金的一小部分,以进行风险管理。
问:你提到用Rust重写,JavaScript有什么问题吗?
答:JavaScript在开发速度和原型验证上很有优势。但对于高频、低延迟的交易应用,Rust能提供近乎零开销的运行时性能、更精细的内存控制以及更强的并发处理能力,这对于减少网络请求和处理大量实时数据至关重要,有助于在竞争激烈的量化交易中获取微秒级的优势。
总结与展望
构建这个Polymarket机器人的过程,是一次从策略构思、自动化实现到严谨回测的完整实践。它告诉我,在看似嘈杂的市场中,通过清晰的逻辑和严格的参数纪律,确实有可能系统性地捕捉一些低效机会。同时,回测与实盘之间的鸿沟也时刻提醒着我风险管理的至关重要性。
最大的收获并非一个“稳赚不赔”的圣杯策略,而是一套方法论:将直觉策略转化为可量化的规则 -> 构建工具进行自动化 -> 克服数据障碍进行回测 -> 通过大量测试寻找稳健参数区间 -> 深刻理解策略的局限性。
未来,除了在代码性能和基础设施上持续优化,更重要的是在更长的实盘运行中观察策略的生命周期,并根据市场环境的变化进行迭代。量化交易的世界里没有一劳永逸,唯有持续学习和适应。
本文详细记录了个人开发Polymarket交易机器人的技术实践与思考,所有内容均基于实际开发、测试过程。交易有风险,自动化交易亦可能放大风险,请谨慎评估并自负其责。
