大QMT代码助手
下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/yuhanbo758--bigqmt-helper.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @yuhanbo758/bigqmt-helper。- 适用对象:使用大QMT内置 Python 3.6 与 ContextInfo 编写、维护和审查策略的开发者,以及需要原生模型参数界面与源码交付的用户。 解决问题:帮助核对内置接口、策略架构、生命周期、行情日期、普通与信用账户口径、报单回调和客户端权限问题,减少把静态检查误当作实盘运行的判断错误。 主要能力:区分数据任务、委托中转生产者、直接报单策略、委托监控…
- 提供行情、历史补线、定时调度、回调幂等和融资额度安全规则
- 静态检查常见架构混用与 Python 版本问题
- 生成与模型同名的原生参数 XML、GBK Python 源码及白名单安装 ZIP
- 指导客户端能力探针、受限文件 I/O 最小修复与业务数据完整性验收。 输入:任务需求、已脱敏代码、目标券商客户端及运行方式、行情与账户合同、参数清单,以及不含秘密的错误信息。请用占位值替换资金账号、令牌、Cookie、私人路径、数据库内容和实际订单
- 不提交完整敏感配置。 输出:与任务相应的内置 Python 3.6 代码、静态审查意见、调试步骤,或 UTF-8 XML、GBK 源码及源码安装 ZIP。原生 XML 不嵌入 Python 源码,源码 ZIP 不是客户端导出的 rzrk 包。输出会说明工作模式、交易边界及验证层级。 环境与依赖:策略面向大QMT内置模型,使用 ContextInfo
- …(完整说明见下方「阅读全文」)
阅读全文 (展开查看完整说明)
概述
大QMT 代码助手
SkillPay X402 付费调用合同
本 Pay Skill 版本为 1.2.1,价格为人民币 0.50 元/次。以下支付核验是执行正文开发辅助能力的前置条件;服务端确认当前请求支付成功前,不交付完整代码、审计结论或调试结果。
- 确认当前Agent支持
weixinpay_pay;不支持时说明当前环境无法使用微信付费能力并停止。只有用户明确确认本次价格后才发起支付授权。 - 将当前需求整理为已脱敏的最小JSON,至少包含
query,可包含context。不发送账号、密钥、Cookie、令牌、私有数据库或真实订单内容。记录精确请求体,支付后必须原样复用。 - 首次请求发送
POST https://skillpay.sanrenjz.com/api/skill/invoke,请求头必须包含X-Skill-Version: 1.2.1。HTTP402 Payment Required时同时保存WeixinPay-Required和X-Out-Trade-No,任一缺失均停止。不得把未支付的响应或仅有HTTP 200当作有效付费授权。 - 向用户说明0.50元/次,将
WeixinPay-Required作为paymentCode调用weixinpay_pay;支付授权由用户完成。取消、拒绝、失败或过期时停止,不伪造支付结果。 - 支付后重试:支付成功后必须向同一POST地址发送与首次完全相同的JSON请求体,同时携带
WeixinPay-Required、X-Out-Trade-No和X-Skill-Version: 1.2.1请求头。服务端查单并返回HTTP 200,且code=SUCCESS、content.access_granted=true、content.skill_id=bigqmt-helper、版本与本包一致时,才按授权范围继续正文任务;版本或范围不匹配时停止并联系商户。 - 当前商户返回请求级授权凭证;代码、静态审查或调试建议由Agent依据正文及本地文档生成。授权不包含真实交易、账户连接、生产委托写入或自动开启实盘开关。
- 同一请求取得订单号后必须复用。超时、网络错误、服务端5xx、仍返回402或授权不一致时,使用原订单号查单或重试,禁止再次支付或创建重复订单。未知状态不等于失败或成功。
- 已支付但无法履约时保留订单号,走商户查单、补偿或退款流程。退款结果必须由服务端回执确认,不自动承诺退款成功;不将订单号或支付码写入共享文档和日志。
目标
生成或修改能在大QMT内置环境中运行、接口有文档依据、交易边界明确且可验证的 Python 3.6 代码。不要把研究脚本、委托中转策略、直接报单策略和统一报单监控器混成一种架构。
开始前先确定策略合同
先从用户需求和现有代码中确定以下事实;只有会改变账户、报单路径或数据口径的缺失项才需要追问。
- 运行环境:大QMT内置模型,而不是 MiniQMT。
- 工作模式:数据任务、委托中转生产者、直接报单策略、委托监控/执行器或隔离测试。
- 驱动方式:
handlebar、after_init一次性执行或ContextInfo.run_time定时回调。 - 行情合同:证券池、周期、字段、复权方式、目标交易日、是否只读本地缓存、覆盖率要求。
- 交易合同:资产类别、普通/信用账户、操作类型、报价类型、最小交易单位、资金与持仓上限。
- 状态合同:委托来源、成交账本、策略标识、挂单去重、重启恢复和成交回调幂等方式。
- 权限边界:是否允许写中转表、是否允许直接报单、是否仅做静态或隔离验证。
修改现有项目时,先检查实际入口、最终生效的函数绑定、消费者/监控器和数据库契约。文件名或注释不是运行证据,文件后部的重新定义可能覆盖前面的实现。
选择唯一的实盘架构
- 数据任务:只读行情或更新外部数据,不写委托、不调用报单 API。
- 委托中转生产者:只生成标准化委托并写中转存储;禁止调用
passorder、algo_passorder等直接报单接口。消费者才是唯一报单方。 - 直接报单策略:直接调用
passorder;不得再写同一业务的委托中转表。成交只能由柜台委托状态和成交回调证明。 - 委托监控/执行器:读取中转委托、校验、报单、保存委托路由,并由回调写成交账本。这是唯一通常同时出现中转存储和
passorder的模式。 - 隔离测试:禁止真实报单,数据库测试使用专用隔离数据库;静态检查、假
ContextInfo和模拟返回值不能证明实盘运行、柜台接受或成交。
涉及实盘生成、账户路由、委托中转、成交回调或测试边界时,继续读取 [实盘代码生成与审计](references/live-code-generation.md)。
原生参数配置 XML 与源码交付
当用户需要“包含配置的XML”“大QMT参数界面”或“带参数的模型安装包”时,先读 [原生模型参数XML](references/model-xml.md),直接使用 scripts/build_model_xml.py,不重新摸索布局格式或默认搭建外部设置窗口。
- 生成
python/formulaLayout/模型名.xml(UTF-8),可同时生成同名GBK Python源码和白名单ZIP;XML不嵌入Python源码,ZIP不是.rzrk。 - 已核实布局为
TCStageLayout/control/variable/item,文本控件实际类型是intput。bind对应客户端注入的全局变量,策略不得用顶层赋值覆盖。 - 旧策略实例可能缓存参数;新增字段后须核对实际加载的绑定集合,缺必需字段时停止并提示重建实例,不把默认值当成用户已配置。
- 参数清单、用户配置和输出放在用户项目;生成脚本不执行策略。模板内不固化真实账号、令牌、私人路径或一次性交易参数。
大QMT运行约束
- 首行保留
# -*- coding: gbk -*-。若工作区约定按 UTF-8 编辑,检查器应显式按 UTF-8 读取并临时移除编码声明,不得因此修改首行;部署副本需要 GBK 时再显式转码并做往返校验。 - 兼容 Python 3.6。f-string、函数注解和变量注解可用;禁止
dataclasses、赋值表达式:=、match/case、from __future__ import annotations、list[str]、X | None等新版本语法或运行时特性。 - 行情和生命周期使用
ContextInfo。生成代码不安装、不导入、不依赖xtquant;它不是本Skill的实现路径。检查器对其他运行环境的导入仅做范围防误用检查,不代表支持该环境。 - 禁止用
subprocess、os.system、APScheduler、常驻while True或外部终端维持策略调度。 - 大QMT可选第三方包放到实际使用路径延迟导入;网络、浏览器或数据分析依赖缺失时应安全失败,不能阻止不相关的策略初始化。
- 券商客户端可能限制普通文件 I/O 或部分第三方包装。为此类受限客户端生成策略时,默认不把普通文件读写、
read_csv或 JSON 文件作为必需配置、缓存和恢复路径;先核对实际入口与原生能力。既有策略只修改已确认受影响的执行路径,不因通知文字批量重写。 - 涉及客户端升级、权限限制或外部依赖兼容性时,读取 [客户端能力与隔离探针](references/client-capability-probe.md)。结论以实际客户端内加载的版本和日志为准;独立 Python、导入成功或某个底层接口通过,不能替代对应包装和业务步骤的实测。
- 已确认普通文件 I/O 受限且需要实施修复时,读取 [受限文件 I/O 的最小修复](references/restricted-file-io-repair.md),区分辅助日志、关键配置和业务数据完整性,保留既有参数优先级及正式状态。
- 不要依赖
ContextInfo自定义属性跨 K 线永久保存状态;持久运行状态优先使用模块全局变量或明确的持久化存储。 - 生成共享代码时只使用占位配置或运行界面注入值。不得写入真实账号、路径、Cookie、令牌、数据库内容、私有地址或用户策略参数。
生命周期与调度
init(ContextInfo)只做账户订阅、回调注册、配置校验和定时器注册。部分接口(如交易日查询)在init完成前不可用。after_init(ContextInfo)适合初始化后的一次性读取或测试入口,不是每个策略都必须实现。handlebar(ContextInfo)用于 K 线/Tick 驱动;完全由定时器驱动时可以显式空实现。ContextInfo.run_time(func_name, period, start_time)的回调必须是模块级函数并接收一个ContextInfo参数。函数名使用字符串,首次时间使用YYYY-MM-DD HH:MM:SS。run_time在回测中无效,且部分周期第一次回调前会先等待一个周期。定时任务内部仍需做交易日、交易时段和单日幂等检查。stop(ContextInfo)触发时交易连接可能已断开,只做状态保存和资源清理,不报单、不撤单。- 账户、委托、成交和持仓主推仅在实盘模式生效,并要求先在
init中对相关账号调用ContextInfo.set_account。
行情与历史数据
- 使用
ContextInfo.get_market_data_ex读取历史/实时 K 线,使用ContextInfo.get_full_tick读取最新 Tick,使用内置download_history_data补本地历史。 get_full_tick只能证明当前最新分笔,不能代替历史 Tick。- 审计历史覆盖时使用
fill_data=False;只读已落地历史时使用subscribe=False。实时订阅不是历史补线机制。 - 只下载缺失证券和缺失日期。
download_history_data返回None或未抛异常只表示调用发起,必须有限等待后回读,并校验目标日期、逐证券覆盖和连续性。 - 横截面信号使用同一个已验证的完成交易日;禁止把本机日期当行情日期,也禁止混用不同证券各自的最后日期。
- 明确
dividend_type。前复权历史与不复权 Tick 合并时必须先建立可审计的换算关系,不能直接拼接价格。 - 大股票池分批读取,记录请求数、非空返回数、目标日解析数、缺失代码和关键时点覆盖;关键数据不完整时安全停止委托生成。
订单与成交事实边界
passorder的签名、操作类型和报价类型必须先查本地文档,不凭记忆猜测。quickTrade=2在历史 bar 也可能触发,必须有实盘开关和时间门禁。- 策略计算完成、候选为空、委托函数返回、柜台委托状态、成交回调和成交账本是不同阶段,日志和结论必须分别表述。
passorder返回订单号或非负值只表示提交阶段结果;返回0也可能是异步已发送。只有委托查询/回调能证明柜台状态,只有成交回调能证明成交。- 同一策略、证券、方向在活动委托未终结前必须去重;资金和目标仓位计算要同时扣除未成交剩余量。
strategyName和userOrderId使用稳定、非空、长度受控的短标识。若业务备注更长,单独持久化路由,不要依赖成交回报一定带回完整备注。- 成交回调按唯一成交编号幂等;同一委托可有多笔部分成交,不能用委托编号代替每笔成交编号。
- 新建实盘代码默认关闭直接报单或正式中转写入,除非用户明确要求启用。修改已有代码时保留原开关状态,不能因测试通过自动开启。
信用账户
- 普通账户、信用担保品现金和融资额度分别建账,禁止重复使用同一可用资金。
- 信用融资买入额度优先取“可买标的券资金”和“融资可用额度”两个正数约束的较小值;不得把普通可用资金、担保品可买资金或融资本金字段再次计入融资段。
- 账户字段在不同客户端或券商版本中可能缺失。缺失或查询异常时安全关闭对应通道,不用其他含义不明的字段放大额度。
- 卖出按真实账户可用持仓和融资负债拆分;是否使用担保品卖出或卖券还款必须依据账户类型、可用持仓、负债合约和文档枚举共同决定。
文档路由
先读 docs/索引.md,再按问题读取最少的相关文档。只使用大QMT内置接口;本地文档未覆盖时不得用外部Python API补齐,也不得仅把外部调用前缀改为 ContextInfo。导航页只负责路由,签名以正文和目标客户端为准:
- 生命周期和定时器:
docs/系统函数.md、docs/快速开始.md - 行情、补线和交易日:
docs/行情函数.md、docs/QMT函数.md - 报单、撤单和账户查询:
docs/交易函数.md、docs/枚举常量.md - 回调和字段:
docs/成交回报实时主推函数.md、docs/数据结构.md - 资产专属接口:
docs/股票数据.md、docs/债券数据.md、docs/场内基金.md等
本地文档没有覆盖时,只补查官方文档:
- https://dict.thinktrader.net/innerApi/
- https://dict.thinktrader.net/innerApi/start_now.html
验证与输出
- 先做源文件静态审计和 Python 3.6 兼容性检查。
- 可使用
python scripts/validate_bigqmt_source.py <源文件> --mode <模式>检查架构混用、禁用导入和明显的新语法;它不替代大QMT运行验证。- 模式可选
auto(默认)、data-only、relay-producer、direct-trader、monitor-executor、isolated-test。已明确合同的代码优先显式指定模式。 - 回调不区分直接策略和执行器;自动模式仅在发现中转表读取线索和直接报单时推断为执行器。发现中转写入与直接报单并存时,自动模式报错,需核对唯一消费者合同后显式指定模式。
- 中转识别只覆盖常见
place_*_orderSQL字面量;动态表名、封装调用、跨文件代码、导入别名重绑定及不可达分支不能被完整分析。RESULT=PASS只表示未命中当前静态规则,不能证明架构或实盘安全。 - 维护检查器后运行
python -B -m unittest discover -s scripts -p "test_*.py" -v,测试只使用临时源码和假数据。
- 模式可选
- 若有大QMT Python 3.6 解释器,优先用文件方式编译实际部署文本;不要把
pythonw.exe -c失败直接判定为源码失败。 - 实盘相关验证默认使用假账户、假
ContextInfo、隔离数据库和拦截后的报单函数;绝不为验证而启动实盘入口。 - 输出时先说明选择的工作模式和交易边界,再给完整 Python 3.6 代码。对行情时点、资金口径、状态机、数据库写入和风控添加详细中文注释。
- 明确区分“静态通过、隔离模拟通过、大QMT已加载、柜台已接受、已成交”,不得越级宣称。
文档:https://docs.sanrenjz.com