资讯动态

VeighNa PaperAccount 本地仿真交易模块实战指南:基于实盘行情的纯本地化模拟撮合

发布时间:2026/9/19 8:44:31 来源:尧图企业网站定制
VeighNa PaperAccount 本地仿真交易模块实战指南基于实盘行情的纯本地化模拟撮合【免费下载链接】vnpy基于Python的开源量化交易平台开发框架项目地址: https://gitcode.com/vnpy/vnpy导读PaperAccount本地仿真交易是 VeighNavnpy平台中用于本地仿真交易的功能模块用户可以在图形界面UI中基于实盘行情完成本地化的模拟交易所有委托与撤单请求都会被模块接管、在本地撮合成交而不会真正发往实盘服务器。本文将以官方文档 docs/community/app/paper_account.md 为核心骨架结合平台核心数据结构与官方示例脚本系统讲解该模块的加载启动、功能配置、数据监控与底层业务逻辑帮助读者在本地快速搭建一套实盘行情 本地撮合的仿真交易环境并安全地与 CtaStrategy、SpreadTrading 等策略模块联动做量化策略的仿真测试。功能简介PaperAccount 是 VeighNa 官方社区应用模块之一独立于主仓库维护vnpy_paperaccount项目。按官方 README 的描述它是本地仿真模块纯本地化实现的仿真模拟交易功能基于交易接口获取的实时行情进行委托撮合提供委托成交推送以及持仓记录见 README.md。与传统依赖券商/交易所服务端的仿真账户如 CTP 的 SimNow相比PaperAccount 的核心价值在于纯本地实现整个撮合、持仓计算、盈亏跟踪都在本机完成不依赖任何第三方仿真服务端实盘行情驱动行情来自真实交易接口的 Tick 推送成交价格贴近真实盘口仿真结果更可信无缝接入主程序作为标准 App 注册进MainEngine与 VeighNa Trader 主界面、其他策略模块天然协同。社区文档 docs/community/info/introduction.md 也明确指出PaperAccount 模块是为了解决各类需要依赖服务端功能的仿真交易账户的问题直接在交易客户端内部提供一套本地化的模拟交易环境同时基于实盘行情的盘口数据进行委托撮合。加载启动与 VeighNa 平台其他应用模块一致PaperAccount 支持两种加载方式。VeighNa Station 加载启动登录 VeighNa Station 后点击【交易】按钮在配置对话框中的【应用模块】栏勾选【PaperAccount】即可。勾选后后续启动 VeighNa Trader 时该模块会自动随主程序一起加载。脚本加载使用脚本方式启动时参照官方示例脚本 examples/veighna_trader/run.py 的结构在顶部导入模块并在创建main_engine对象后调用add_app注册# 写在顶部 from vnpy_paperaccount import PaperAccountApp # 写在创建main_engine对象后 main_engine.add_app(PaperAccountApp)在官方示例中PaperAccountApp的注册代码以注释形式预留见 examples/veighna_trader/run.py 与 examples/veighna_trader/run.py取消注释即可启用。示例中同时注册了CtpGateway作为默认交易接口、CtaStrategyApp与CtaBacktesterApp等策略应用这与PaperAccount 配合策略模块做本地仿真的典型用法完全对应。启动模块在启动模块之前请先连接要进行模拟交易的接口连接方法详见基本使用篇的连接接口部分。看到 VeighNa Trader 主界面【日志】栏输出合约信息查询成功之后再启动模块。请注意 IB 接口的特殊性IB 接口因为登录时无法自动获取所有的合约信息只有在用户手动订阅行情时才能获取因此需要在主界面上先行手动订阅合约行情再启动模块。这一点与 CHANGELOG 中实现对于 IB 接口合约的特殊路由处理见 CHANGELOG.md的修复记录相互印证——模块对 IB 这类无法自动拉取合约信息的接口做了专门的路由适配。交易接口连接后本地模拟交易模块自动启动。此时所有合约的交易委托和撤单请求均被本地模拟交易模块接管不会再发往实盘服务器。也就是说模块会在MainEngine中将自己注册为所有委托/撤单请求的默认路由目标实现全局接管。功能配置在菜单栏中点击【功能】→【模拟交易】或者点击左侧按钮栏的对应图标即可进入本地模拟交易模块的 UI 界面。用户可以通过 UI 界面对以下功能进行配置市价委托和停止委托的成交滑点用于影响市价单和停止单成交时成交价格相对于盘口价格的滑点跳数。该参数作用于模块的撮合逻辑对市价单和停止单模块会以盘口最优价为基础加上/减去指定的跳数作为最终成交价滑点跳数越大模拟的成交成本越接近真实市场中的冲击成本仿真越严苛默认情况下滑点配置对限价单不生效限价单严格按到价逻辑成交见下文业务逻辑。模拟交易持仓盈亏的计算频率多少秒执行一次持仓盈亏计算更新。模块会定时基于持仓成本价 × 最新成交价计算并推送持仓盈亏默认频率 1 秒见下文业务逻辑如果持仓较多时发现程序卡顿建议尝试调低该频率即增大秒数间隔减少计算与 UI 刷新的开销。下单后立即使用当前盘口撮合默认情况下用户发出的委托需要等到下一个 TICK 盘口推送才会撮合模拟实盘情景即委托先进入等待队列待新行情到达后再判定是否成交对于 TICK 推送频率较低的不活跃合约可以勾选该选项委托后会立即基于当前的最新 TICK 盘口撮合避免长时间不成交带来的困扰。清空所有持仓一键清空本地所有持仓数据用于快速重置仿真环境例如切换测试策略或合约时。与策略模块联动本地模拟交易模块同样可以和其他策略应用模块如 CtaStrategy 模块、SpreadTrading 模块等一起使用从而实现本地化的量化策略仿真交易测试。此时策略发出的委托同样被 PaperAccount 本地接管撮合整个策略 → 委托 → 撮合 → 持仓链路都在本地闭环完成无需真实下单非常适合策略上线前的仿真验证。数据监控查询合约确认接管状态用户可以通过【查询合约】来查询确认合约的交易接口状态点击菜单栏的【帮助】→【合约查询】在弹出的对话框中直接点击右上角的【查询】按钮发现所有合约的【交易接口】列均显示为PAPER说明这些合约的委托/撤单已经全部被本地模拟交易模块接管。订阅行情前置条件在对某一合约进行下单和撤单操作前用户必须先订阅该合约的行情。因为本地撮合依赖盘口 Tick 数据见下文业务逻辑中的 ask_price_1 判定没有订阅行情就无法产生撮合所需的盘口数据。委托、成交、持仓监控【委托】、【成交】、【持仓】三个监控组件中显示的信息其接口列均为 PAPER本地模拟数据。这三个组件分别对应平台核心数据结构委托对应 OrderData记录委托方向、类型、价格、数量、成交数量与状态等并提供is_active()判断委托是否仍处于活动状态、create_cancel_request()生成撤单请求成交对应 TradeData记录单笔成交的价格、数量、方向与时间持仓对应 PositionData记录持仓方向、数量、冻结数量frozen、持仓成本价price、浮动盈亏pnl以及昨仓数量yd_volume。资金监控的注意事项请注意本地模拟交易模块没有提供资金计算功能所以【资金】组件显示的是实盘账号的资金并不会因为在本地模拟交易模块产生的委托而改变。换句话说PaperAccount 只管委托撮合 持仓记录不做虚拟资金结算账户资金仍以实盘连接账号为准。业务逻辑本地模拟交易模块的业务逻辑如下理解这些规则有助于准确预判仿真结果。支持的委托类型模块支持以下委托类型不支持的类型会被拒单限价单LIMIT市价单MARKET停止单STOP。到价成交模式委托撮合规则采用到价成交模式以买入委托为例限价单当盘口卖 1 价ask_price_1小于等于委托价格则成交即对手盘卖价跌到限价以内停止单当盘口卖 1 价ask_price_1大于等于委托价格则成交即价格向上触发停止买入价。卖出方向的判定逻辑与之镜像基于盘口买 1 价bid_price_1。由此可见撮合完全依赖最新 Tick 中的盘口五档行情盘口价格字段来自 TickData 数据结构这也是必须先订阅行情这一前置条件的原因所在。一次性全部成交委托成交时不考虑盘口挂单量一次性全部成交。即只要到价条件满足无论盘口深度有多少委托都会以整单数量全部成交不存在部分成交或分笔撮合。事件推送顺序委托成交后先推送委托状态更新OrderData再推送成交信息TradeData和实盘交易中的顺序一致。即标准流程为委托进入 → 成交触发 → 先更新委托状态为全部成交 → 再推送对应成交记录保证下游监控组件与策略回调的时序与真实交易对齐。持仓记录与成本维护委托成交后模块会自动记录相应的持仓信息PositionData持仓模式适配根据合约本身的持仓模式多空仓 vs 净仓位信息维护对应的持仓信息。即支持国内期货常见的多空双向持仓模式也支持股票等单边净持仓模式开仓加权平均开仓成交时采用加权平均计算更新持仓成本价将新成交按数量加权并入原有持仓成本平仓成本不变平仓成交时持仓成本价不变平仓只减少持仓数量不影响剩余持仓的成本价冻结与拒单多空仓模式下挂出平仓委托后会冻结相应的持仓数量可用数量不足时会拒单。这一行为对应PositionData中的frozen字段平仓委托挂出即冻结对应数量可平数量 持仓量 - 冻结量不足则拒绝盈亏定时计算持仓的盈亏会基于持仓成本价和最新成交价定时计算默认频率 1 秒即PositionData.pnl字段的更新机制计算频率可在 UI 中配置见上文功能配置。数据的持久化保存成交数据和委托数据不保存关闭 VeighNa Trader 后即消失属于会话级数据持仓数据立即落盘持仓数据会在有变化时立即写入硬盘文件重启 VeighNa Trader 登录交易接口后即可看到要收到相应的合约信息保证仿真持仓在程序重启后不丢失。常见问题与注意事项IB 接口必须先手动订阅行情由于 IB 登录时无法自动获取全部合约信息使用 IB 接口做本地仿真前请先在主界面手动订阅合约行情否则模块无法获取合约与盘口数据对应 CHANGELOG 中针对 IB 接口合约的特殊路由处理见 CHANGELOG.md。不活跃合约可开启立即撮合TICK 推送频率过低的合约默认要等下一个 TICK 才能撮合勾选下单后立即使用当前盘口撮合可立即基于最新盘口成交。本地仿真不产生资金变动【资金】组件始终显示实盘账号资金仿真委托不会影响账户余额需要资金层面的仿真请另行规划。滑点只作用于市价单与停止单限价单严格按到价成交逻辑撮合不受滑点配置影响。与策略模块共用模块可与其他策略应用模块CtaStrategy、SpreadTrading 等共同加载使用实现本地化的量化策略仿真交易测试注册方式见 examples/veighna_trader/run.py。总结PaperAccount 本地仿真交易模块以实盘行情 本地撮合的方式在主程序内部构建了一套完整的仿真交易闭环支持限价、市价、停止三类委托的到价成交撮合维护多空仓/净仓位两种模式下的持仓成本与盈亏并提供滑点、撮合时机、盈亏计算频率等可配置项配合持仓数据立即落盘的持久化机制成为量化策略上线前本地仿真验证的有力工具。其核心设计——委托接管、事件顺序与实盘一致、持仓成本加权平均——均与平台底层 OrderData、TradeData、PositionData 等数据结构一一对应读者可结合源码进一步深入理解其实现细节。【免费下载链接】vnpy基于Python的开源量化交易平台开发框架项目地址: https://gitcode.com/vnpy/vnpy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价