PMWallets
EN

拿真钱冒险之前,先回测 Polymarket 跟单

交易者的战绩说的是他赚了多少。回测说的是你跟着他能赚多少 —— 更晚、价格更差、付他可能不用付的手续费,还要跳过被你规则拒掉的交易。这两个数字很少相同。

从每一笔成交开始

回测需要交易者每一笔成交的准确时间和价格,覆盖他所有的钱包。交易历史导出给的正是这个,读自链上。先挑值得测的交易者:去掉最赚一场后仍为正、在很多已结算市场上胜率下限高、并且是吃单风格 —— 挂单者的成交用吃单复制不出来。

加上你真实的延迟

你的跟单发生在:交易者的成交传到你这里、你的机器人做出决定、你的订单到达 Polymarket 之后。用实测数字:PMWallets 延迟页公布从出块到推送的 p50 和 p95,你自己机器人的下单往返可以在 dry-run 里计时。按 p95 测,不要按中位数 —— 最要紧的那些成交,往往正是价格跑得快的那些。

按市场给入场定价,而不是按交易者

一秒之后,交易者拿到的价格你已经拿不到了。按你那个时刻市场能给的价格给每笔跟单定价:Polymarket 按市场的成交历史能给出那一刻前后的成交,加密涨跌市场的逐笔盘口可以从我们的合作伙伴 OutcomeTick 获取。再套上实盘机器人会用的规则:相对交易者价格的最大滑点、价格带、最低盘口深度、不碰快结算的市场。

python
# for each fill of the trader (from the export), oldest first
for f in trader_fills:
    if f.side != "BUY":            continue                  # the bot copies buys; exits follow the trader's sells
    t_you = f.ts + delay                                     # your reaction: feed latency + decision + order
    ask   = best_ask(f.tokenId, at=t_you)                    # from market data, not from the trader's fill
    if ask is None or ask > f.price + max_slippage:   skip("slipped")
    if not (min_price <= ask <= max_price):           skip("price band")
    shares = floor(order_usdc / ask)
    cost   = shares * ask + taker_fee(shares, ask)
    book(position[f.tokenId], shares, cost)
# then value every position at the market's payout (or exit at the bid when the trader sold)
# and compare your PnL with the trader's on the same markets

计入手续费和退出

每笔跟单、以及每次吃单退出,都加上吃单手续费。交易者卖出时,按你当时能打到的买价退出;或者持有到结算,按赔付估值。在同样的市场上把你的结果和交易者的比较:差额就是跟单的成本,如果它吃掉了全部优势,这个交易者对你就不值得跟。

然后做前向测试

回测仍可能过于乐观。对通过的交易者,用开源跟单机器人跑 dry-run:它接收每一笔实时成交、套用你的限额,记录它本会怎么做、为什么,但不交易。拿几周的 dry-run 决定和市场后来的走势对照,才是诚实的检验。

常见问题

能回测跟单某个 Polymarket 交易者吗?

能。拿到他的完整成交历史,加上你真实的反应延迟,按那个更晚时刻的市场数据给你的入场定价,计入滑点限制和吃单手续费,再在同样的市场上把你的结果和他的比较。

为什么跟一个赚钱的交易者反而亏钱?

因为你更晚、价格更差,要付交易者可能不用付的手续费(尤其当他是挂单方时),还会错过或跳过他最好的一些入场。很薄的优势在这些成本下就没了。

回测用的 Polymarket 交易者完整历史从哪里来?

PMWallets 交易历史导出给出一个交易者所有钱包的每一笔成交,读自链上日志,每个钱包每天一个 CSV 文件。

相关页面