资讯详情

prediction-market-backtesting 执行建模全解:手续费、滑点、队列位置与延迟的 4 大真实性细节

📅 2026/10/14 18:39:37 | 华诺云谱 👁 阅读
prediction-market-backtesting 执行建模全解:手续费、滑点、队列位置与延迟的 4 大真实性细节
【免费下载链接】prediction-market-backtestingAn extension for Nautilus Trader项目地址https://gitcode.com/gh_mirrors/pr/prediction-market-backtesting点击查看免费下载在预测市场回测中手续费、滑点、队列位置与延迟是决定策略纸面盈利能否落地的 4 大执行建模细节。prediction-market-backtesting是一个基于 NautilusTrader 构建的回测扩展支持在 Polymarket 等预测市场上用真实 L2 订单簿数据回放交易。这篇文章带你快速看懂它的执行模型回测时如何计费、如何吃掉流动性、如何排队等待成交、以及如何模拟网络延迟帮助你评估策略结果的可信度。回测为什么需要执行建模很多新手跑回测时只关心信号准不准却忽略了另一件事订单真的能按你看到的成交价成交吗预测市场的订单簿通常很薄某档可能只有几十美元深度市价单一扫下去价格就滑了。如果你不加执行建模回测会默认想要多少、按现价全成交结果天然偏乐观。这个项目的核心理念是基于真实数据的最大回放真实性maximum replay realism执行细节建模方式手续费按市场费率表逐笔计算 taker 费 maker 返佣滑点市价单沿真实 L2 订单簿逐档吃单队列位置用真实成交 tick 扣减同价位挂单队列延迟下单/改单/撤单分别配置毫秒级延迟官方设计文档见 docs/execution-modeling.md四个细节的源码实现分别落在扩展层prediction_market_extensions/中。下面逐一拆解。细节一手续费与 maker 返佣费用不是固定值taker 费按概率 p 动态变化Polymarket 的 taker 手续费公式为fee 数量 x 费率 x p x (1 - p)其中p是成交价0~1 之间的概率价。这个公式有个直观含义价格越接近 0.5单笔费用越高越接近 0 或 1 越低。也就是说在五五开的市场里做 taker成本结构明显不同。费率来源也有讲究项目使用 GammafeeSchedule.rate元数据中的当前 taker 费曲线而不是 CLOB 接口里的maker_base_fee/taker_base_fee那两个只是签名上限不是实际结算费。如果市场本身零费率回测就老老实实记零费不擅自脑补一个默认值。maker 费为 0但还有返佣入账maker 手续费按 0 处理被动挂单成交LIMIT成交会被记一笔负手续费即 maker rebate做市返佣fee_equivalent 数量 x 费率 x p x (1 - p) maker_rebate fee_equivalent x 返佣比例返佣比例按市场类别自动推断加密市场 20%其他收分类别 25%无法归类到文档记载类别的市场则不计返佣。这套逻辑实现在 PolymarketFeeModel 中infer_maker_rebate_rate会根据市场标签crypto、sports、politics 等或费率档位推断返佣比例。 两个诚实的边界Polymarket $1 起付的返佣门槛没有建模Liquidity Rewards流动性奖励因依赖全站挂单评分状态在框架能无未来函数地重建之前也不计入 PnL。细节二滑点市价单会吃掉整个订单簿L2 订单簿回放路径主战场项目的主路径是L2 market-by-price 订单簿回放策略只消费订单簿状态Nautilus 维护一本L2_MBP订单簿。此时滑点不是加一个固定滑价而是物理吃单市价单可成交订单沿回放出来的订单簿逐档成交顶档深度不够时成交会消耗多个价位滑点自然涌现成交会消耗可见流动性直到下一次订单簿更新刷新该档。对应引擎配置书回放路径统一使用L2_BOOK_ENGINE_PROFILE ReplayEngineProfile( book_typeBookType.L2_MBP, fill_model_modepassive_book, liquidity_consumptionTrue, )非订单簿路径合成订单簿滑点模型对只有成交 tick、没有 L2 数据的数据源项目保留了 PredictionMarketTakerFillModel。它的做法很有启发按方向构造一本向不利方向偏移的合成订单簿偏移量可叠加两种方式slippage_ticks按最小报价单位偏移 N 个 tickentry_slippage_pct/exit_slippage_pct按现价百分比偏移进出场滑点可分别设置——因为现实中平掉一个仓位往往比开仓更难簿更薄、更着急。所有滑点参数集中在 ExecutionModelConfig 中slippage_ticks默认 1、entry_slippage_pct、exit_slippage_pct、prob_fill_on_limit等改回测脚本里的一个 dataclass 即可全局生效。⚠️ 注意PMXT / Telonex 订单簿回放 runner不使用这个合成滑点模型——它们有真订单簿直接吃真实深度更真实。细节三队列位置挂单不是碰到就成交被动策略挂LIMIT单等成交最容易踩的坑是假设价格碰到我就成交。这个项目启用了queue_positionTrueNautilus 的机制订单被接受时快照同价位、同方向的可见订单簿数量作为你前面排队的量之后该价位的每笔成交 tick 会扣减这个队列只有队列被完全消耗、仍有剩余成交量的部分才轮到你的模拟订单成交。由此得到几个实践结论挂在买一价的买单需要卖方主动成交的 tick 来推动成交否则一直排队挂在卖一价的卖单需要买方主动成交队列位置是逐订单、逐价位估算的不建模隐藏流动性、前面插队撤单、按比例分配或 L3 级别的真 FIFO 优先权。这是公开 L2 数据能做到的最佳近似真实成交量只能证明这个价格成交过不能证明当时排在你前面有多少持久挂单。文档 docs/execution-modeling.md 的Passive Orders And Queue Position一节对此有完整说明。细节四延迟零延迟假设对 CLOB 策略过于乐观挂单策略的生死往往取决于谁先撤单。项目为公开 runner 统一配置了显式延迟ExecutionModelConfig( queue_positionTrue, latency_modelStaticLatencyConfig( base_latency_ms75.0, insert_latency_ms10.0, update_latency_ms5.0, cancel_latency_ms5.0, ), )四类延迟各司其职参数含义base_latency_ms每笔指令的基础往返延迟insert_latency_ms下单插入订单额外延迟update_latency_ms改单额外延迟cancel_latency_ms撤单额外延迟配置实现见 StaticLatencyConfig毫秒值会被校验并换算成纳秒注入 Nautilus 的LatencyModel。以 100 市场联合回放为例可直接参考 polymarket_pmxt_book_100_replay_runner.py 中的完整配置写法。除非你有意在测试执行下限场景否则建议保持延迟开启——75ms 基础延迟在 CLOB 抢单场景里足以改变一次成交。把 4 大细节串起来看一次订单簿回放中四件事是这样协同的延迟决定你的订单什么时候真正被交易所看见队列位置决定挂单排队后何时被真实成交 tick 消化滑点/吃单决定市价单扫过几档、最终均价多少手续费与返佣最后决定这笔成交的净成本或净收益。也请记住文档中的提醒负 PnL 和AccountBalanceNegative不一定是 bug它们可能是费用、延迟、流动性与仓位规模的正确结果。速查4 大细节与对应位置细节关键参数 / 模型代码位置手续费taker 费公式 maker 返佣负手续费fee_model.py滑点L2 真实吃单 / 合成簿slippage_ticks、entry_slippage_pctfill_model.py队列位置queue_positionTrueTradeTick扣减队列execution-modeling.md延迟StaticLatencyConfig四项毫秒延迟_execution_config.py想快速跑起来从 backtests/ 目录里任一订单簿回放 runner如 polymarket_book_ema_crossover.py入手把ExecutionModelConfig当作你的真实性旋钮先默认全开验证策略再逐项关闭做对照就能量化每个执行细节对你收益的影响。赞分享【免费下载链接】prediction-market-backtestingAn extension for Nautilus Trader项目地址https://gitcode.com/gh_mirrors/pr/prediction-market-backtesting点击查看免费下载相关推荐yudaocode/yudao-cloud延迟节点定时执行yudaocode/yudao cloud延迟节点定时执行 概述 在企业级工作流管理系统中定时执行机制是业务流程自动化的核心功能之一。yudao cloud后端微服务低代码Django评论系统实现Django For Beginners进阶功能开发教程Django评论系统实现Django For Beginners进阶功能开发教程 Django For Beginners是学习Django Web开发的经典终极指南Dio请求队列与延迟执行策略优化网络性能终极指南Dio请求队列与延迟执行策略优化网络性能 Dio是一个功能强大的Dart和Flutter HTTP客户端支持全局设置、拦截器、FormData、请求网络后端WebSocket创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑